]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
CCAR: merge de la version 1.14 dans la branche principale
authorChristian Caremoli <>
Thu, 13 Nov 2008 10:19:24 +0000 (10:19 +0000)
committerChristian Caremoli <>
Thu, 13 Nov 2008 10:19:24 +0000 (10:19 +0000)
753 files changed:
AIDE/__init__.py
AIDE/fichiers/INSTALL [deleted file]
AIDE/fichiers/INSTALL.txt [new file with mode: 0644]
AIDE/fichiers/NEWS [deleted file]
AIDE/fichiers/NEWS.txt [new file with mode: 0644]
AIDE/fichiers/index.html
AIDE/viewer.py
Accas/A_ASSD.py
Accas/__init__.py
Aster/Cata/Utilitai/Graph.py
Aster/Cata/Utilitai/Table.py
Aster/Cata/Utilitai/Utmess.py
Aster/Cata/Utilitai/as_timer.py
Aster/Cata/Utilitai/macro_rota_globale.py [new file with mode: 0644]
Aster/Cata/Utilitai/t_fonction.py
Aster/Cata/Utilitai/veri_matr_tang.py [new file with mode: 0644]
Aster/Cata/__init__.py
Aster/Cata/cataSTA8/Macro/calc_fonction_ops.py
Aster/Cata/cataSTA8/Macro/calc_table_ops.py
Aster/Cata/cataSTA8/Macro/impr_oar_ops.py
Aster/Cata/cataSTA8/Macro/impr_table_ops.py
Aster/Cata/cataSTA8/Macro/macr_ascouf_calc_ops.py
Aster/Cata/cataSTA8/Macro/macr_ascouf_mail_ops.py
Aster/Cata/cataSTA8/Macro/macr_aspic_calc_ops.py
Aster/Cata/cataSTA8/Macro/macr_aspic_mail_ops.py
Aster/Cata/cataSTA8/Macro/macr_lign_coupe_ops.py
Aster/Cata/cataSTA8/Macro/macr_spectre_ops.py
Aster/Cata/cataSTA8/Macro/macro_elas_mult_ops.py
Aster/Cata/cataSTA8/Macro/macro_matr_asse_ops.py
Aster/Cata/cataSTA8/Macro/macro_miss_3d_ops.py
Aster/Cata/cataSTA8/cata.py
Aster/Cata/cataSTA8/ops.py
Aster/Cata/cataSTA8c_clefs_docu
Aster/Cata/cataSTA9/Macro/Sensibilite.py
Aster/Cata/cataSTA9/Macro/calc_fonction_ops.py
Aster/Cata/cataSTA9/Macro/calc_precont_ops.py
Aster/Cata/cataSTA9/Macro/calc_table_ops.py
Aster/Cata/cataSTA9/Macro/creation_donnees_homard.py
Aster/Cata/cataSTA9/Macro/defi_cable_bp_ops.py
Aster/Cata/cataSTA9/Macro/defi_inte_spec_ops.py
Aster/Cata/cataSTA9/Macro/defi_part_feti_ops.py
Aster/Cata/cataSTA9/Macro/dyna_iss_vari_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Macro/exec_logiciel_ops.py
Aster/Cata/cataSTA9/Macro/externe_mess.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Macro/fiabilite_mefisto.py
Aster/Cata/cataSTA9/Macro/gene_vari_alea_ops.py
Aster/Cata/cataSTA9/Macro/impr_fonction_ops.py
Aster/Cata/cataSTA9/Macro/impr_oar_ops.py
Aster/Cata/cataSTA9/Macro/impr_table_ops.py
Aster/Cata/cataSTA9/Macro/info_fonction_ops.py
Aster/Cata/cataSTA9/Macro/lire_fonction_ops.py
Aster/Cata/cataSTA9/Macro/lire_inte_spec_ops.py
Aster/Cata/cataSTA9/Macro/lire_table_ops.py
Aster/Cata/cataSTA9/Macro/macr_adap_mail_ops.py
Aster/Cata/cataSTA9/Macro/macr_ascouf_calc_ops.py
Aster/Cata/cataSTA9/Macro/macr_ascouf_mail_ops.py
Aster/Cata/cataSTA9/Macro/macr_aspic_calc_ops.py
Aster/Cata/cataSTA9/Macro/macr_aspic_mail_ops.py
Aster/Cata/cataSTA9/Macro/macr_cabri_calc_ops.py [deleted file]
Aster/Cata/cataSTA9/Macro/macr_cabri_mail_dat.py [deleted file]
Aster/Cata/cataSTA9/Macro/macr_cabri_mail_ops.py [deleted file]
Aster/Cata/cataSTA9/Macro/macr_cara_poutre_ops.py
Aster/Cata/cataSTA9/Macro/macr_lign_coupe_ops.py
Aster/Cata/cataSTA9/Macro/macr_recal_ops.py
Aster/Cata/cataSTA9/Macro/macr_spectre_ops.py
Aster/Cata/cataSTA9/Macro/macro_elas_mult_ops.py
Aster/Cata/cataSTA9/Macro/macro_expans_ops.py
Aster/Cata/cataSTA9/Macro/macro_matr_ajou_ops.py
Aster/Cata/cataSTA9/Macro/macro_matr_asse_ops.py
Aster/Cata/cataSTA9/Macro/macro_miss_3d_ops.py
Aster/Cata/cataSTA9/Macro/macro_mode_meca_ops.py
Aster/Cata/cataSTA9/Macro/macro_proj_base_ops.py
Aster/Cata/cataSTA9/Macro/macro_visu_meidee_ops.py
Aster/Cata/cataSTA9/Macro/observation_ops.py
Aster/Cata/cataSTA9/Macro/post_dyna_alea_ops.py
Aster/Cata/cataSTA9/Macro/post_gp_ops.py
Aster/Cata/cataSTA9/Macro/post_k1_k2_k3_ops.py
Aster/Cata/cataSTA9/Macro/post_k_trans_ops.py
Aster/Cata/cataSTA9/Macro/reca_algo.py
Aster/Cata/cataSTA9/Macro/reca_calcul_aster.py
Aster/Cata/cataSTA9/Macro/reca_controles.py
Aster/Cata/cataSTA9/Macro/reca_interp.py
Aster/Cata/cataSTA9/Macro/reca_message.py
Aster/Cata/cataSTA9/Macro/reca_utilitaires.py
Aster/Cata/cataSTA9/Macro/stanley_ops.py
Aster/Cata/cataSTA9/Macro/test_fichier_ops.py
Aster/Cata/cataSTA9/Messages/algeline.py
Aster/Cata/cataSTA9/Messages/algeline2.py
Aster/Cata/cataSTA9/Messages/algeline3.py
Aster/Cata/cataSTA9/Messages/algeline4.py
Aster/Cata/cataSTA9/Messages/algeline5.py
Aster/Cata/cataSTA9/Messages/algorith.py
Aster/Cata/cataSTA9/Messages/algorith10.py
Aster/Cata/cataSTA9/Messages/algorith11.py
Aster/Cata/cataSTA9/Messages/algorith12.py
Aster/Cata/cataSTA9/Messages/algorith13.py
Aster/Cata/cataSTA9/Messages/algorith14.py
Aster/Cata/cataSTA9/Messages/algorith15.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/algorith16.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/algorith17.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/algorith2.py
Aster/Cata/cataSTA9/Messages/algorith3.py
Aster/Cata/cataSTA9/Messages/algorith4.py
Aster/Cata/cataSTA9/Messages/algorith5.py
Aster/Cata/cataSTA9/Messages/algorith6.py
Aster/Cata/cataSTA9/Messages/algorith7.py
Aster/Cata/cataSTA9/Messages/algorith8.py
Aster/Cata/cataSTA9/Messages/algorith9.py
Aster/Cata/cataSTA9/Messages/appelmpi.py
Aster/Cata/cataSTA9/Messages/archivage.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/arlequin.py
Aster/Cata/cataSTA9/Messages/ascouf0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/aspic0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/assembla.py
Aster/Cata/cataSTA9/Messages/cable0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/calculel.py
Aster/Cata/cataSTA9/Messages/calculel2.py
Aster/Cata/cataSTA9/Messages/calculel3.py
Aster/Cata/cataSTA9/Messages/calculel4.py
Aster/Cata/cataSTA9/Messages/calculel5.py
Aster/Cata/cataSTA9/Messages/calculel6.py
Aster/Cata/cataSTA9/Messages/cataelem.py
Aster/Cata/cataSTA9/Messages/compor1.py
Aster/Cata/cataSTA9/Messages/contact.py
Aster/Cata/cataSTA9/Messages/contact2.py
Aster/Cata/cataSTA9/Messages/contact3.py
Aster/Cata/cataSTA9/Messages/contactdebg.py
Aster/Cata/cataSTA9/Messages/discretisation.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/discrets.py
Aster/Cata/cataSTA9/Messages/dvp.py
Aster/Cata/cataSTA9/Messages/dynamique.py
Aster/Cata/cataSTA9/Messages/elasmult0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/elements.py
Aster/Cata/cataSTA9/Messages/elements2.py
Aster/Cata/cataSTA9/Messages/elements3.py
Aster/Cata/cataSTA9/Messages/elements4.py
Aster/Cata/cataSTA9/Messages/elements5.py
Aster/Cata/cataSTA9/Messages/execlogiciel0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/factor.py
Aster/Cata/cataSTA9/Messages/fatigue1.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/fermetur.py
Aster/Cata/cataSTA9/Messages/feti0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/fiabilite0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/fonct0.py
Aster/Cata/cataSTA9/Messages/grappefluide.py
Aster/Cata/cataSTA9/Messages/homard0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/indicateur.py
Aster/Cata/cataSTA9/Messages/irrad3m.py
Aster/Cata/cataSTA9/Messages/jeveux.py
Aster/Cata/cataSTA9/Messages/maillage.py
Aster/Cata/cataSTA9/Messages/matrice0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/mecanonline.py
Aster/Cata/cataSTA9/Messages/mecanonline2.py
Aster/Cata/cataSTA9/Messages/mecanonline3.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/mecanonline4.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/mecanonline5.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/med.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/meidee0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/miss0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/modal0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/modelisa.py
Aster/Cata/cataSTA9/Messages/modelisa2.py
Aster/Cata/cataSTA9/Messages/modelisa3.py
Aster/Cata/cataSTA9/Messages/modelisa4.py
Aster/Cata/cataSTA9/Messages/modelisa5.py
Aster/Cata/cataSTA9/Messages/modelisa6.py
Aster/Cata/cataSTA9/Messages/modelisa7.py
Aster/Cata/cataSTA9/Messages/modelisa8.py
Aster/Cata/cataSTA9/Messages/modelisa9.py
Aster/Cata/cataSTA9/Messages/oar0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/observation.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/post0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/postrccm.py
Aster/Cata/cataSTA9/Messages/postrele.py
Aster/Cata/cataSTA9/Messages/poutre0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/precalcul.py
Aster/Cata/cataSTA9/Messages/prepost.py
Aster/Cata/cataSTA9/Messages/prepost2.py
Aster/Cata/cataSTA9/Messages/prepost3.py
Aster/Cata/cataSTA9/Messages/prepost4.py
Aster/Cata/cataSTA9/Messages/prepost5.py
Aster/Cata/cataSTA9/Messages/prepost6.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/proba0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/rupture0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/rupture1.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/sdveri.py
Aster/Cata/cataSTA9/Messages/seisme.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/sensibilite.py
Aster/Cata/cataSTA9/Messages/soustruc.py
Aster/Cata/cataSTA9/Messages/soustruc2.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/spectral0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/stanley.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/stbtrias.py
Aster/Cata/cataSTA9/Messages/subdivise.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/supervis.py
Aster/Cata/cataSTA9/Messages/table0.py
Aster/Cata/cataSTA9/Messages/test0.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/unilater.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/utilifor.py
Aster/Cata/cataSTA9/Messages/utilitai.py
Aster/Cata/cataSTA9/Messages/utilitai2.py
Aster/Cata/cataSTA9/Messages/utilitai3.py
Aster/Cata/cataSTA9/Messages/utilitai4.py
Aster/Cata/cataSTA9/Messages/utilitai5.py
Aster/Cata/cataSTA9/Messages/utilitai6.py
Aster/Cata/cataSTA9/Messages/utilitai7.py
Aster/Cata/cataSTA9/Messages/utilitai8.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/vide.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/volufini.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Messages/xfem.py
Aster/Cata/cataSTA9/Messages/xfem2.py
Aster/Cata/cataSTA9/SD/__init__.py
Aster/Cata/cataSTA9/SD/co_cham_no.py
Aster/Cata/cataSTA9/SD/co_fiss_xfem.py
Aster/Cata/cataSTA9/SD/co_fonction.py
Aster/Cata/cataSTA9/SD/co_listr8.py
Aster/Cata/cataSTA9/SD/co_macr_elem_dyna.py
Aster/Cata/cataSTA9/SD/co_mater.py
Aster/Cata/cataSTA9/SD/co_matr_asse_gene.py
Aster/Cata/cataSTA9/SD/co_table.py
Aster/Cata/cataSTA9/SD/co_table_container.py [new file with mode: 0644]
Aster/Cata/cataSTA9/SD/co_vect_asse_gene.py
Aster/Cata/cataSTA9/SD/sd_carte.py
Aster/Cata/cataSTA9/SD/sd_cham_elem.py
Aster/Cata/cataSTA9/SD/sd_cham_gene.py
Aster/Cata/cataSTA9/SD/sd_cham_mater.py
Aster/Cata/cataSTA9/SD/sd_cham_no.py
Aster/Cata/cataSTA9/SD/sd_champ.py
Aster/Cata/cataSTA9/SD/sd_char_cine.py
Aster/Cata/cataSTA9/SD/sd_char_contact.py
Aster/Cata/cataSTA9/SD/sd_char_meca.py
Aster/Cata/cataSTA9/SD/sd_char_ther.py
Aster/Cata/cataSTA9/SD/sd_char_unilate.py
Aster/Cata/cataSTA9/SD/sd_compor.py
Aster/Cata/cataSTA9/SD/sd_feti.py
Aster/Cata/cataSTA9/SD/sd_fonction.py
Aster/Cata/cataSTA9/SD/sd_fond_fiss.py
Aster/Cata/cataSTA9/SD/sd_gfibre.py
Aster/Cata/cataSTA9/SD/sd_interf_dyna_clas.py
Aster/Cata/cataSTA9/SD/sd_l_charges.py
Aster/Cata/cataSTA9/SD/sd_ligrel.py
Aster/Cata/cataSTA9/SD/sd_listis.py
Aster/Cata/cataSTA9/SD/sd_listr8.py
Aster/Cata/cataSTA9/SD/sd_macr_elem_dyna.py
Aster/Cata/cataSTA9/SD/sd_macr_elem_stat.py
Aster/Cata/cataSTA9/SD/sd_maillage.py
Aster/Cata/cataSTA9/SD/sd_mater.py
Aster/Cata/cataSTA9/SD/sd_matr_asse_com.py
Aster/Cata/cataSTA9/SD/sd_matr_cine.py
Aster/Cata/cataSTA9/SD/sd_matr_elem.py
Aster/Cata/cataSTA9/SD/sd_melasflu.py
Aster/Cata/cataSTA9/SD/sd_mode_cycl.py
Aster/Cata/cataSTA9/SD/sd_modele.py
Aster/Cata/cataSTA9/SD/sd_modele_gene.py
Aster/Cata/cataSTA9/SD/sd_nume_ddl.py
Aster/Cata/cataSTA9/SD/sd_nume_eqge.py
Aster/Cata/cataSTA9/SD/sd_nume_equa.py
Aster/Cata/cataSTA9/SD/sd_prof_vgen.py
Aster/Cata/cataSTA9/SD/sd_proj_mesu.py [new file with mode: 0644]
Aster/Cata/cataSTA9/SD/sd_resuelem.py
Aster/Cata/cataSTA9/SD/sd_resultat.py
Aster/Cata/cataSTA9/SD/sd_resultat_dyn.py
Aster/Cata/cataSTA9/SD/sd_spectre.py
Aster/Cata/cataSTA9/SD/sd_squelette.py
Aster/Cata/cataSTA9/SD/sd_surface_1d.py
Aster/Cata/cataSTA9/SD/sd_table_container.py [new file with mode: 0644]
Aster/Cata/cataSTA9/SD/sd_tran_gene.py
Aster/Cata/cataSTA9/SD/sd_util.py
Aster/Cata/cataSTA9/SD/sd_vect_elem.py
Aster/Cata/cataSTA9/SD/sd_xfem.py [new file with mode: 0644]
Aster/Cata/cataSTA9/SD/utilsd.py
Aster/Cata/cataSTA9/cata.py
Aster/Cata/cataSTA9/ops.py
Aster/Cata/petitcata/ops.py [new file with mode: 0644]
Aster/Tests/err2.comm
Aster/Tests/j0.comm
Aster/Tests/p0.comm
Aster/editeur.ini
Aster/editeur.ini.pn
Aster/editeur_salome.ini [new file with mode: 0644]
Aster/eficas_aster.py
Aster/lance_test.sh
Aster/prefs.py
Aster/properties.py
Aster/qtEficas_aster.py [new file with mode: 0755]
Aster/sdist.py
Aster/test_eficas.py
Editeur/Interp.py [deleted file]
Editeur/Objecttreeitem.py
Editeur/Patrons/ASTER/AnalyseModale.salome.comm [new file with mode: 0644]
Editeur/Patrons/ASTER/elasticite.salome.comm [new file with mode: 0644]
Editeur/Patrons/ASTER/limaillage.comm [new file with mode: 0644]
Editeur/Patrons/ASTER/modes_3D.comm [new file with mode: 0644]
Editeur/Patrons/ASTER/modes_pou.comm [new file with mode: 0644]
Editeur/Patrons/ASTER/statlin_3D.comm [new file with mode: 0644]
Editeur/Patrons/ASTER/statlin_pou.comm [new file with mode: 0644]
Editeur/Patrons/ASTER/thermique.salome.comm [new file with mode: 0644]
Editeur/Patrons/ASTER/tradir_3D.comm [new file with mode: 0644]
Editeur/Patrons/ASTER/tramod_3D.comm [new file with mode: 0644]
Editeur/Patrons/AnalyseModale.salome.comm [deleted file]
Editeur/Patrons/elasticite.salome.comm [deleted file]
Editeur/Patrons/limaillage.comm [deleted file]
Editeur/Patrons/modes_3D.comm [deleted file]
Editeur/Patrons/modes_pou.comm [deleted file]
Editeur/Patrons/statlin_3D.comm [deleted file]
Editeur/Patrons/statlin_pou.comm [deleted file]
Editeur/Patrons/thermique.salome.comm [deleted file]
Editeur/Patrons/tradir_3D.comm [deleted file]
Editeur/Patrons/tramod_3D.comm [deleted file]
Editeur/TroisDPal.py
Editeur/__init__.py
Editeur/analyse_catalogue.py
Editeur/appli.py [deleted file]
Editeur/basestyle.py [deleted file]
Editeur/browser.py [deleted file]
Editeur/bureau.py [deleted file]
Editeur/catabrowser.py [deleted file]
Editeur/cataediteur.py [deleted file]
Editeur/centerwindow.py [deleted file]
Editeur/change_comm.py [deleted file]
Editeur/comploader.py
Editeur/compobase.py [deleted file]
Editeur/compobloc.py [deleted file]
Editeur/compocomm.py [deleted file]
Editeur/compocommandecomm.py [deleted file]
Editeur/compoerror.py [deleted file]
Editeur/compofact.py [deleted file]
Editeur/compoformule.py [deleted file]
Editeur/compojdc.py [deleted file]
Editeur/compomacro.py [deleted file]
Editeur/compomclist.py [deleted file]
Editeur/componiveau.py [deleted file]
Editeur/componuplet.py [deleted file]
Editeur/compooper.py [deleted file]
Editeur/compoparam.py [deleted file]
Editeur/compoparameval.py [deleted file]
Editeur/compoproc.py [deleted file]
Editeur/composimp.py [deleted file]
Editeur/configuration.py
Editeur/definition_cata.py [deleted file]
Editeur/eficas.py [deleted file]
Editeur/eficas_go.py [deleted file]
Editeur/eficas_test.py [deleted file]
Editeur/faq.py [deleted file]
Editeur/fenetre_mc_inconnus.py [deleted file]
Editeur/fonctionpanel.py [deleted file]
Editeur/fontes.py [deleted file]
Editeur/icons/ast-yellow-square.gif [new file with mode: 0755]
Editeur/icons/empty.png [new file with mode: 0644]
Editeur/images.py [deleted file]
Editeur/import_code.py
Editeur/jdcdisplay.py [deleted file]
Editeur/listeFichiers.py [deleted file]
Editeur/listePatrons.py
Editeur/macrodisplay.py [deleted file]
Editeur/menubar.py [deleted file]
Editeur/newsimppanel.py [deleted file]
Editeur/options.py [deleted file]
Editeur/panels.py [deleted file]
Editeur/panelsSalome.py [deleted file]
Editeur/patches.py [deleted file]
Editeur/plusieursassdpanel.py [deleted file]
Editeur/plusieursbasepanel.py [deleted file]
Editeur/plusieursintopanel.py [deleted file]
Editeur/plusieurspanel.py [deleted file]
Editeur/readercata.py [deleted file]
Editeur/session.py
Editeur/shellpanel.py [deleted file]
Editeur/splash.py [deleted file]
Editeur/statusbar.py [deleted file]
Editeur/styles.py [deleted file]
Editeur/toolbar.py [deleted file]
Editeur/tooltip.py [deleted file]
Editeur/treeitemincanvas.py [deleted file]
Editeur/treewidget.py [deleted file]
Editeur/uniqueassdpanel.py [deleted file]
Editeur/uniquebasepanel.py [deleted file]
Editeur/uniquecomppanel.py [deleted file]
Editeur/uniqueintopanel.py [deleted file]
Editeur/uniquepanel.py [deleted file]
Editeur/uniquesdcopanel.py [deleted file]
Editeur/widgets.py [deleted file]
Exemples/ex21/check.py
Extensions/param2.py
Extensions/parametre.py
Ihm/I_FORM_ETAPE.py
Ihm/I_JDC.py
Ihm/I_MACRO_ETAPE.py
InterfaceQT/__init__.py [new file with mode: 0644]
InterfaceQT/browser.py [new file with mode: 0644]
InterfaceQT/compobase.py [new file with mode: 0644]
InterfaceQT/compobloc.py [new file with mode: 0644]
InterfaceQT/compocomm.py [new file with mode: 0644]
InterfaceQT/compocommandecomm.py [new file with mode: 0644]
InterfaceQT/compoerror.py [new file with mode: 0644]
InterfaceQT/compofact.py [new file with mode: 0644]
InterfaceQT/compoformule.py [new file with mode: 0644]
InterfaceQT/compojdc.py [new file with mode: 0644]
InterfaceQT/compomacro.py [new file with mode: 0644]
InterfaceQT/compomclist.py [new file with mode: 0644]
InterfaceQT/componiveau.py [new file with mode: 0644]
InterfaceQT/componuplet.py [new file with mode: 0644]
InterfaceQT/compooper.py [new file with mode: 0644]
InterfaceQT/compoparam.py [new file with mode: 0644]
InterfaceQT/compoparameval.py [new file with mode: 0644]
InterfaceQT/compoproc.py [new file with mode: 0644]
InterfaceQT/composimp.py [new file with mode: 0644]
InterfaceQT/editor.py [new file with mode: 0644]
InterfaceQT/eficas_go.py [new file with mode: 0644]
InterfaceQT/gereTraduction.py [new file with mode: 0644]
InterfaceQT/monChoixCata.py [new file with mode: 0644]
InterfaceQT/monCommandePanel.py [new file with mode: 0644]
InterfaceQT/monCommentairePanel.py [new file with mode: 0644]
InterfaceQT/monFonctionPanel.py [new file with mode: 0644]
InterfaceQT/monFormulePanel.py [new file with mode: 0644]
InterfaceQT/monIncludePanel.py [new file with mode: 0644]
InterfaceQT/monListeParamPanel.py [new file with mode: 0644]
InterfaceQT/monMCFactPanel.py [new file with mode: 0644]
InterfaceQT/monMCListAjoutPanel.py [new file with mode: 0644]
InterfaceQT/monMacroPanel.py [new file with mode: 0644]
InterfaceQT/monOptionsEditeur.py [new file with mode: 0644]
InterfaceQT/monOptionsPdf.py [new file with mode: 0644]
InterfaceQT/monParamPanel.py [new file with mode: 0644]
InterfaceQT/monPlusieursASSDPanel.py [new file with mode: 0644]
InterfaceQT/monPlusieursBasePanel.py [new file with mode: 0644]
InterfaceQT/monPlusieursIntoPanel.py [new file with mode: 0644]
InterfaceQT/monPoursuitePanel.py [new file with mode: 0644]
InterfaceQT/monRacinePanel.py [new file with mode: 0644]
InterfaceQT/monSelectVal.py [new file with mode: 0644]
InterfaceQT/monUniqueASSDPanel.py [new file with mode: 0644]
InterfaceQT/monUniqueBasePanel.py [new file with mode: 0644]
InterfaceQT/monUniqueCompPanel.py [new file with mode: 0644]
InterfaceQT/monUniqueIntoPanel.py [new file with mode: 0644]
InterfaceQT/monUniqueSDCOIntoPanel.py [new file with mode: 0644]
InterfaceQT/monUniqueSDCOPanel.py [new file with mode: 0644]
InterfaceQT/panelsQT.py [new file with mode: 0644]
InterfaceQT/politiquesValidation.py [new file with mode: 0644]
InterfaceQT/prefsQT.py [new file with mode: 0644]
InterfaceQT/qtCommun.py [new file with mode: 0644]
InterfaceQT/qtEficas.py [new file with mode: 0644]
InterfaceQT/qtSaisie.py [new file with mode: 0644]
InterfaceQT/readercata.py [new file with mode: 0644]
InterfaceQT/typeNode.py [new file with mode: 0644]
InterfaceQT/utilIcons.py [new file with mode: 0644]
InterfaceQT/viewManager.py [new file with mode: 0644]
InterfaceQT4/__init__.py [new file with mode: 0644]
InterfaceQT4/browser.py [new file with mode: 0644]
InterfaceQT4/compobase.py [new file with mode: 0644]
InterfaceQT4/compobloc.py [new file with mode: 0644]
InterfaceQT4/compocomm.py [new file with mode: 0644]
InterfaceQT4/compocommandecomm.py [new file with mode: 0644]
InterfaceQT4/compoerror.py [new file with mode: 0644]
InterfaceQT4/compofact.py [new file with mode: 0644]
InterfaceQT4/compoformule.py [new file with mode: 0644]
InterfaceQT4/compojdc.py [new file with mode: 0644]
InterfaceQT4/compomacro.py [new file with mode: 0644]
InterfaceQT4/compomclist.py [new file with mode: 0644]
InterfaceQT4/componiveau.py [new file with mode: 0644]
InterfaceQT4/componuplet.py [new file with mode: 0644]
InterfaceQT4/compooper.py [new file with mode: 0644]
InterfaceQT4/compoparam.py [new file with mode: 0644]
InterfaceQT4/compoproc.py [new file with mode: 0644]
InterfaceQT4/composimp.py [new file with mode: 0644]
InterfaceQT4/editor.py [new file with mode: 0644]
InterfaceQT4/eficas_go.py [new file with mode: 0644]
InterfaceQT4/gereTraduction.py [new file with mode: 0644]
InterfaceQT4/monChoixCata.py [new file with mode: 0644]
InterfaceQT4/monCommandePanel.py [new file with mode: 0644]
InterfaceQT4/monCommentairePanel.py [new file with mode: 0644]
InterfaceQT4/monFonctionPanel.py [new file with mode: 0644]
InterfaceQT4/monFormulePanel.py [new file with mode: 0644]
InterfaceQT4/monInactifPanel.py [new file with mode: 0644]
InterfaceQT4/monIncludePanel.py [new file with mode: 0644]
InterfaceQT4/monListeParamPanel.py [new file with mode: 0644]
InterfaceQT4/monMCFactPanel.py [new file with mode: 0644]
InterfaceQT4/monMCListAjoutPanel.py [new file with mode: 0644]
InterfaceQT4/monMacroPanel.py [new file with mode: 0644]
InterfaceQT4/monOptionsEditeur.py [new file with mode: 0644]
InterfaceQT4/monOptionsPdf.py [new file with mode: 0644]
InterfaceQT4/monParamPanel.py [new file with mode: 0644]
InterfaceQT4/monPlusieursASSDPanel.py [new file with mode: 0644]
InterfaceQT4/monPlusieursBasePanel.py [new file with mode: 0644]
InterfaceQT4/monPlusieursIntoPanel.py [new file with mode: 0644]
InterfaceQT4/monPoursuitePanel.py [new file with mode: 0644]
InterfaceQT4/monRacinePanel.py [new file with mode: 0644]
InterfaceQT4/monSelectVal.py [new file with mode: 0644]
InterfaceQT4/monUniqueASSDPanel.py [new file with mode: 0644]
InterfaceQT4/monUniqueBasePanel.py [new file with mode: 0644]
InterfaceQT4/monUniqueCompPanel.py [new file with mode: 0644]
InterfaceQT4/monUniqueIntoPanel.py [new file with mode: 0644]
InterfaceQT4/monUniqueSDCOIntoPanel.py [new file with mode: 0644]
InterfaceQT4/monUniqueSDCOPanel.py [new file with mode: 0644]
InterfaceQT4/politiquesValidation.py [new file with mode: 0644]
InterfaceQT4/prefsQT.py [new file with mode: 0644]
InterfaceQT4/qtCommun.py [new file with mode: 0644]
InterfaceQT4/qtEficas.py [new file with mode: 0644]
InterfaceQT4/qtSaisie.py [new file with mode: 0644]
InterfaceQT4/readercata.py [new file with mode: 0644]
InterfaceQT4/typeNode.py [new file with mode: 0644]
InterfaceQT4/utilIcons.py [new file with mode: 0644]
InterfaceQT4/viewManager.py [new file with mode: 0644]
InterfaceTK/Interp.py [new file with mode: 0644]
InterfaceTK/TroisDPal.py [new file with mode: 0644]
InterfaceTK/__init__.py [new file with mode: 0644]
InterfaceTK/appli.py [new file with mode: 0644]
InterfaceTK/basestyle.py [new file with mode: 0644]
InterfaceTK/browser.py [new file with mode: 0644]
InterfaceTK/bureau.py [new file with mode: 0644]
InterfaceTK/catabrowser.py [new file with mode: 0644]
InterfaceTK/cataediteur.py [new file with mode: 0644]
InterfaceTK/centerwindow.py [new file with mode: 0644]
InterfaceTK/change_comm.py [new file with mode: 0755]
InterfaceTK/compobase.py [new file with mode: 0644]
InterfaceTK/compobloc.py [new file with mode: 0644]
InterfaceTK/compocomm.py [new file with mode: 0644]
InterfaceTK/compocommandecomm.py [new file with mode: 0644]
InterfaceTK/compoerror.py [new file with mode: 0644]
InterfaceTK/compofact.py [new file with mode: 0644]
InterfaceTK/compoformule.py [new file with mode: 0644]
InterfaceTK/compojdc.py [new file with mode: 0644]
InterfaceTK/compomacro.py [new file with mode: 0644]
InterfaceTK/compomclist.py [new file with mode: 0644]
InterfaceTK/componiveau.py [new file with mode: 0644]
InterfaceTK/componuplet.py [new file with mode: 0644]
InterfaceTK/compooper.py [new file with mode: 0644]
InterfaceTK/compoparam.py [new file with mode: 0644]
InterfaceTK/compoparameval.py [new file with mode: 0644]
InterfaceTK/compoproc.py [new file with mode: 0644]
InterfaceTK/composimp.py [new file with mode: 0644]
InterfaceTK/definition_cata.py [new file with mode: 0644]
InterfaceTK/eficas.py [new file with mode: 0644]
InterfaceTK/eficas_go.py [new file with mode: 0644]
InterfaceTK/eficas_test.py [new file with mode: 0644]
InterfaceTK/faq.py [new file with mode: 0644]
InterfaceTK/fenetre_mc_inconnus.py [new file with mode: 0644]
InterfaceTK/fonctionpanel.py [new file with mode: 0644]
InterfaceTK/fontes.py [new file with mode: 0644]
InterfaceTK/images.py [new file with mode: 0644]
InterfaceTK/jdcdisplay.py [new file with mode: 0644]
InterfaceTK/listeFichiers.py [new file with mode: 0644]
InterfaceTK/listePatronsTK.py [new file with mode: 0644]
InterfaceTK/macrodisplay.py [new file with mode: 0644]
InterfaceTK/menubar.py [new file with mode: 0644]
InterfaceTK/newsimppanel.py [new file with mode: 0644]
InterfaceTK/options.py [new file with mode: 0644]
InterfaceTK/panels.py [new file with mode: 0644]
InterfaceTK/panelsSalome.py [new file with mode: 0644]
InterfaceTK/patches.py [new file with mode: 0644]
InterfaceTK/plusieursassdpanel.py [new file with mode: 0644]
InterfaceTK/plusieursbasepanel.py [new file with mode: 0644]
InterfaceTK/plusieursintopanel.py [new file with mode: 0644]
InterfaceTK/plusieurspanel.py [new file with mode: 0644]
InterfaceTK/readercata.py [new file with mode: 0644]
InterfaceTK/shellpanel.py [new file with mode: 0644]
InterfaceTK/splash.py [new file with mode: 0644]
InterfaceTK/statusbar.py [new file with mode: 0644]
InterfaceTK/styles.py [new file with mode: 0644]
InterfaceTK/toolbar.py [new file with mode: 0644]
InterfaceTK/tooltip.py [new file with mode: 0644]
InterfaceTK/treeitemincanvas.py [new file with mode: 0644]
InterfaceTK/treewidget.py [new file with mode: 0644]
InterfaceTK/uniqueassdpanel.py [new file with mode: 0644]
InterfaceTK/uniquebasepanel.py [new file with mode: 0644]
InterfaceTK/uniquecomppanel.py [new file with mode: 0644]
InterfaceTK/uniqueintopanel.py [new file with mode: 0644]
InterfaceTK/uniquepanel.py [new file with mode: 0644]
InterfaceTK/uniquesdcopanel.py [new file with mode: 0644]
InterfaceTK/widgets.py [new file with mode: 0644]
Misc/traced.py [new file with mode: 0644]
Noyau/N_ASSD.py
Noyau/N_CONVERT.py [new file with mode: 0644]
Noyau/N_FONCTION.py
Noyau/N_GEOM.py
Noyau/N_JDC.py
Noyau/N_MACRO_ETAPE.py
Noyau/N_MCCOMPO.py
Noyau/N_MCLIST.py
Noyau/N_MCSIMP.py
Noyau/N_VALIDATOR.py
Noyau/ascheckers.py
Noyau/asojb.py
Noyau/properties.py [deleted file]
Tests/Makefile [new file with mode: 0644]
Tests/README
Tests/editeur.ini
Tests/eficas_aster.py
Tests/testastest/basetest.py
Tests/testastest9/basetest.py
Tests/testcomm/testcomm.py
Tests/testcomm7/testcomm.py
Tests/testcomm9/efica01a.com0
Tests/testcomm9/forma12c.comm
Tests/testcomm9/hsnv100h.comm
Tests/testcomm9/testcomm.py
Tests/testelem/testaz76.py
Tests/testelem/testfact1.py
Tests/testelem/testitem1.py
Tests/testelem/testjdc1.py
Tests/testelem/testjdc2.py
Tests/testelem/testjdc3.py
Tests/testelem/testjdc4.py
Tests/testelem/testsimp1.py
Tests/testelem/testsimp2.py
Tests/testelem/testsimp3.py
Tests/testelem/testsimp4.py
Tests/testelem/testvalidator1.py
Tests/testelem/testvalidator2.py
Tests/testelem/testzzz6az.py [deleted file]
Tests/testelem7/testaz76.py
Tests/testihm/testihm1.py
Tests/testihm/testihm2.py
Tests/testihm/testihm3.py
Tests/testihm/testihm4.py
Tests/testihm7/testihm1.py
Tests/testihm7/testihm2.py
Tests/testihm7/testihm4.py
Tests/testihm9/common.py
Tests/testihm9/testihm1.py
Tests/testihm9/testihm2.py
Tests/testihm9/testihm3.py
Tests/testihm9/testihm4.py
Traducteur/dictErreurs.py
Traducteur/load.py
Traducteur/traduitV8V9.py
Ui/OptionsEditeur.py [new file with mode: 0644]
Ui/OptionsEditeur.ui [new file with mode: 0644]
Ui/OptionsPdf.py [new file with mode: 0644]
Ui/OptionsPdf.ui [new file with mode: 0644]
Ui/aideQT.py [new file with mode: 0644]
Ui/aideQT.ui [new file with mode: 0644]
Ui/desChoixCata.py [new file with mode: 0644]
Ui/desChoixCata.ui [new file with mode: 0644]
Ui/desCommande.py [new file with mode: 0644]
Ui/desCommande.ui [new file with mode: 0644]
Ui/desCommentaire.py [new file with mode: 0644]
Ui/desCommentaire.ui [new file with mode: 0644]
Ui/desError.py [new file with mode: 0644]
Ui/desError.ui [new file with mode: 0644]
Ui/desFormule.py [new file with mode: 0644]
Ui/desFormule.ui [new file with mode: 0644]
Ui/desInactif.py [new file with mode: 0644]
Ui/desInactif.ui [new file with mode: 0644]
Ui/desInclude.py [new file with mode: 0644]
Ui/desInclude.ui [new file with mode: 0644]
Ui/desListeParam.py [new file with mode: 0644]
Ui/desListeParam.ui [new file with mode: 0644]
Ui/desMCFact.py [new file with mode: 0644]
Ui/desMCFact.ui [new file with mode: 0644]
Ui/desMCListAjout.py [new file with mode: 0644]
Ui/desMCListAjout.ui [new file with mode: 0644]
Ui/desMacro.py [new file with mode: 0644]
Ui/desMacro.ui [new file with mode: 0644]
Ui/desParam.py [new file with mode: 0644]
Ui/desParam.ui [new file with mode: 0644]
Ui/desPlusieursBase.py [new file with mode: 0644]
Ui/desPlusieursBase.ui [new file with mode: 0644]
Ui/desPlusieursInto.py [new file with mode: 0644]
Ui/desPlusieursInto.ui [new file with mode: 0644]
Ui/desPoursuite.py [new file with mode: 0644]
Ui/desPoursuite.ui [new file with mode: 0644]
Ui/desRacine.py [new file with mode: 0644]
Ui/desRacine.ui [new file with mode: 0644]
Ui/desSelectVal.py [new file with mode: 0644]
Ui/desSelectVal.ui [new file with mode: 0644]
Ui/desUniqueASSD.py [new file with mode: 0644]
Ui/desUniqueASSD.ui [new file with mode: 0644]
Ui/desUniqueBase.py [new file with mode: 0644]
Ui/desUniqueBase.ui [new file with mode: 0644]
Ui/desUniqueComp.py [new file with mode: 0644]
Ui/desUniqueComp.ui [new file with mode: 0644]
Ui/desUniqueInto.py [new file with mode: 0644]
Ui/desUniqueInto.ui [new file with mode: 0644]
Ui/desUniqueSDCO.py [new file with mode: 0644]
Ui/desUniqueSDCO.ui [new file with mode: 0644]
Ui/desUniqueSDCOInto.py [new file with mode: 0644]
Ui/desUniqueSDCOInto.ui [new file with mode: 0644]
Ui/desVisu.py [new file with mode: 0644]
Ui/desVisu.ui [new file with mode: 0644]
Ui/image120.gif [new file with mode: 0644]
Ui/image120.png [new file with mode: 0644]
Ui/image240.gif [new file with mode: 0644]
Ui/makefile [new file with mode: 0644]
Ui/myMain.py [new file with mode: 0644]
Ui/myMain.ui [new file with mode: 0644]
UiQT4/OptionsEditeur.py [new file with mode: 0644]
UiQT4/OptionsEditeur.ui [new file with mode: 0644]
UiQT4/OptionsPdf.py [new file with mode: 0644]
UiQT4/OptionsPdf.ui [new file with mode: 0644]
UiQT4/__init__.py [new file with mode: 0644]
UiQT4/aideQT.py [new file with mode: 0644]
UiQT4/aideQT.ui [new file with mode: 0644]
UiQT4/desChoixCata.py [new file with mode: 0644]
UiQT4/desChoixCata.ui [new file with mode: 0644]
UiQT4/desCommande.py [new file with mode: 0644]
UiQT4/desCommande.ui [new file with mode: 0644]
UiQT4/desCommentaire.py [new file with mode: 0644]
UiQT4/desCommentaire.ui [new file with mode: 0644]
UiQT4/desError.py [new file with mode: 0644]
UiQT4/desError.ui [new file with mode: 0644]
UiQT4/desFormule.py [new file with mode: 0644]
UiQT4/desFormule.ui [new file with mode: 0644]
UiQT4/desInactif.py [new file with mode: 0644]
UiQT4/desInactif.ui [new file with mode: 0644]
UiQT4/desInclude.py [new file with mode: 0644]
UiQT4/desInclude.ui [new file with mode: 0644]
UiQT4/desListeParam.py [new file with mode: 0644]
UiQT4/desListeParam.ui [new file with mode: 0644]
UiQT4/desMCFact.py [new file with mode: 0644]
UiQT4/desMCFact.ui [new file with mode: 0644]
UiQT4/desMCListAjout.py [new file with mode: 0644]
UiQT4/desMCListAjout.ui [new file with mode: 0644]
UiQT4/desParam.py [new file with mode: 0644]
UiQT4/desParam.ui [new file with mode: 0644]
UiQT4/desPlusieursBase.py [new file with mode: 0644]
UiQT4/desPlusieursBase.ui [new file with mode: 0644]
UiQT4/desPlusieursInto.py [new file with mode: 0644]
UiQT4/desPlusieursInto.ui [new file with mode: 0644]
UiQT4/desPoursuite.py [new file with mode: 0644]
UiQT4/desPoursuite.ui [new file with mode: 0644]
UiQT4/desRacine.py [new file with mode: 0644]
UiQT4/desRacine.ui [new file with mode: 0644]
UiQT4/desSelectVal.py [new file with mode: 0644]
UiQT4/desSelectVal.ui [new file with mode: 0644]
UiQT4/desUniqueASSD.py [new file with mode: 0644]
UiQT4/desUniqueASSD.ui [new file with mode: 0644]
UiQT4/desUniqueBase.py [new file with mode: 0644]
UiQT4/desUniqueBase.ui [new file with mode: 0644]
UiQT4/desUniqueComp.py [new file with mode: 0644]
UiQT4/desUniqueComp.ui [new file with mode: 0644]
UiQT4/desUniqueInto.py [new file with mode: 0644]
UiQT4/desUniqueInto.ui [new file with mode: 0644]
UiQT4/desUniqueSDCO.py [new file with mode: 0644]
UiQT4/desUniqueSDCO.ui [new file with mode: 0644]
UiQT4/desUniqueSDCOInto.py [new file with mode: 0644]
UiQT4/desUniqueSDCOInto.ui [new file with mode: 0644]
UiQT4/desViewTexte.py [new file with mode: 0644]
UiQT4/desViewTexte.ui [new file with mode: 0644]
UiQT4/desVisu.py [new file with mode: 0644]
UiQT4/desVisu.ui [new file with mode: 0644]
UiQT4/image120.gif [new file with mode: 0644]
UiQT4/image120.png [new file with mode: 0644]
UiQT4/image240.gif [new file with mode: 0644]
UiQT4/makefile [new file with mode: 0644]
UiQT4/myMain.py [new file with mode: 0644]
UiQT4/myMain.ui [new file with mode: 0644]
convert/convert_openturns.py [new file with mode: 0644]
generator/DefautASTER.py [new file with mode: 0644]
generator/OpenturnsBase.py [new file with mode: 0644]
generator/OpenturnsSTD.py [new file with mode: 0644]
generator/OpenturnsXML.py [new file with mode: 0644]
generator/generator_openturns.py [new file with mode: 0644]
generator/generator_vers3DSalome.py
insercopyright.py [deleted file]

index 99db3d632c4f8dd70c86450bc72e0f6289fe7130..edcb6b4d34ea0f7bd7982457c5b31d6b842beefc 100644 (file)
@@ -19,3 +19,9 @@ def go2(fichier=None,master=None):
     o = aide_gui.AIDE_GUI(index,master=master)
     o.build()
     return o
+
+def go3(fichier=None,parent=None):
+    if not fichier :
+       pathDoc=os.path.join(os.path.dirname(__file__),"fichiers")
+    viewer.HTMLQTViewer(parent,pathDoc)
+
diff --git a/AIDE/fichiers/INSTALL b/AIDE/fichiers/INSTALL
deleted file mode 100644 (file)
index 493c467..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-1- Installation standard
-
-Pour installer EFICAS a partir de la distribution : <nom_distrib>.tgz
-faire :
-        tar xzvf <nom_distrib>.tgz
-
-ce qui a pour effet de créer un répertoire de nom <nom_distrib>.
-
-Pour modifier l'emplacement de la doc, le chemin d'accès à Acrobat Reader,
-les catalogues, il faut modifier le fichier editeur.ini dans le répertoire Aster.
-
-
-ATTENTION : 
-Si Eficas est installé dans un répertoire particulier d'administration 
-dans lequel les utilisateurs n'ont pas le droit d'écriture, il faut que
-l'administrateur lance Eficas pour générer
-les fichiers et catalogues compilés .pyc 
-
-
-
-2- Utilisation d'Eficas
-
-Pour utiliser Eficas, aller dans le répertoire Aster et faire :
-        python eficas_aster.py
-
-
-
-3- Installation avec un noyau pré-installé
-
-Aller dans le répertoire Aster du répertoire Eficas
-et modifier le fichier prefs.py comme suit :
-Mettre dans la variable CODE_PATH le chemin absolu vers
-le répertoire contenant les deux répertoires Noyau et Validation que vous voulez
-utiliser à la place de ceux fournis dans la livraison d'Eficas
-
-Pour changer les catalogues, modifier le fichier editeur.ini dans le répertoire Aster
-
-
diff --git a/AIDE/fichiers/INSTALL.txt b/AIDE/fichiers/INSTALL.txt
new file mode 100644 (file)
index 0000000..493c467
--- /dev/null
@@ -0,0 +1,40 @@
+
+
+1- Installation standard
+
+Pour installer EFICAS a partir de la distribution : <nom_distrib>.tgz
+faire :
+        tar xzvf <nom_distrib>.tgz
+
+ce qui a pour effet de créer un répertoire de nom <nom_distrib>.
+
+Pour modifier l'emplacement de la doc, le chemin d'accès à Acrobat Reader,
+les catalogues, il faut modifier le fichier editeur.ini dans le répertoire Aster.
+
+
+ATTENTION : 
+Si Eficas est installé dans un répertoire particulier d'administration 
+dans lequel les utilisateurs n'ont pas le droit d'écriture, il faut que
+l'administrateur lance Eficas pour générer
+les fichiers et catalogues compilés .pyc 
+
+
+
+2- Utilisation d'Eficas
+
+Pour utiliser Eficas, aller dans le répertoire Aster et faire :
+        python eficas_aster.py
+
+
+
+3- Installation avec un noyau pré-installé
+
+Aller dans le répertoire Aster du répertoire Eficas
+et modifier le fichier prefs.py comme suit :
+Mettre dans la variable CODE_PATH le chemin absolu vers
+le répertoire contenant les deux répertoires Noyau et Validation que vous voulez
+utiliser à la place de ceux fournis dans la livraison d'Eficas
+
+Pour changer les catalogues, modifier le fichier editeur.ini dans le répertoire Aster
+
+
diff --git a/AIDE/fichiers/NEWS b/AIDE/fichiers/NEWS
deleted file mode 100644 (file)
index d228a9b..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-Version 1.12 (6/2007):
-   Mise en synchronisation avec la version 9.1 de Code_Aster de mai 2007.
-
-Version 1.11 (12/2006):
-   Mise en synchronisation avec la version 8.4 de Code_Aster de decembre 2006.
-   Première version du Traducteur de V7 en V8
-
-Version 1.10 (6/2006):
-   Mise en synchronisation avec la version 8.3 de Code_Aster de juin 2006.
-
-Version 1.9 (12/2005):
-   Mise en synchronisation avec la version 8.2 de Code_Aster de decembre 2005.
-
-Version 1.8 (6/2005):
-   Mise en synchronisation avec la version 8.1 de Code_Aster de mai 2005.
-   Les includes et poursuites peuvent etre édités. Introduction de la notation
-   scientifique pour les flottants.
-
-Version 1.7 : (12/2004)
-   Mise en synchronisation avec la version STA7 de Code_Aster (7.4).
-   Les formules changent et deviennent des formules au sens python.
-   Disparition des PARAMETRE-EVAL
-   Les touches raccourcis (CtrlC par exple) sont activées et paramétrables dans prefs.py.
-
-Version 1.6 : (05/2004)
-   Mise en synchronisation avec la version STA7 de Code_Aster (7.2.26)
-   Evolution de la saisie des valeurs pour definir une fonction (EO2003-241) :
-    - Saisie des valeurs sous forme de tuple.
-    - Si une valeur est selectionnée, l'insertion se fera après cette valeur
-      et non en fin de liste
-
-Version 1.5 (10/2003):
-   Mise en synchronisation avec la version STA7 de Code_Aster d'octobre 2003 (7.2)
-   Introduction des validateurs de mots cles simples
-
-Version 1.4 (5/2003):
-   Mise en synchronisation avec la version STA7 de Code_Aster de mai 2003 (7.1)
-   Possibilité de donner un nom de fichier en argument lors de l'ouverture d'EFICAS (EO2003-060)
-   Correction d'une anomalie dans la fonctionnalité de commentarisation des commandes (AO2003-041)
-   Ajout du bouton de documentation dans le panneau FORMULE (AO2002-447)
-   Selection automatique du concept quand il n'en existe qu'un (EO2002-162)
-
-Version 1.3 (11/2002):
-   Mise en synchronisation avec la version STA6 de Code_Aster de septembre 2002
-   Ajout de la possibilité de visualiser les INCLUDE, INCLUDE_MATERIAU et POURSUITE (popup
-   sur click droit de la souris sur l'icone de la commande)
-   Possibilité d'afficher la liste des commandes par groupe (menu option->affichage commandes)
-   Reprise profonde du mécanisme de gestion des fichiers inclus (voir menus d'AIDE pour plus de détails)
-   Corrections diverses 
-
-Version 1.2 (5/2002):
-    Reconception de la version 1.1 : décomposition en packages Python
-    Mise en synchronisation avec la version STA6 de Code_Aster de fevrier 2002
diff --git a/AIDE/fichiers/NEWS.txt b/AIDE/fichiers/NEWS.txt
new file mode 100644 (file)
index 0000000..d228a9b
--- /dev/null
@@ -0,0 +1,53 @@
+Version 1.12 (6/2007):
+   Mise en synchronisation avec la version 9.1 de Code_Aster de mai 2007.
+
+Version 1.11 (12/2006):
+   Mise en synchronisation avec la version 8.4 de Code_Aster de decembre 2006.
+   Première version du Traducteur de V7 en V8
+
+Version 1.10 (6/2006):
+   Mise en synchronisation avec la version 8.3 de Code_Aster de juin 2006.
+
+Version 1.9 (12/2005):
+   Mise en synchronisation avec la version 8.2 de Code_Aster de decembre 2005.
+
+Version 1.8 (6/2005):
+   Mise en synchronisation avec la version 8.1 de Code_Aster de mai 2005.
+   Les includes et poursuites peuvent etre édités. Introduction de la notation
+   scientifique pour les flottants.
+
+Version 1.7 : (12/2004)
+   Mise en synchronisation avec la version STA7 de Code_Aster (7.4).
+   Les formules changent et deviennent des formules au sens python.
+   Disparition des PARAMETRE-EVAL
+   Les touches raccourcis (CtrlC par exple) sont activées et paramétrables dans prefs.py.
+
+Version 1.6 : (05/2004)
+   Mise en synchronisation avec la version STA7 de Code_Aster (7.2.26)
+   Evolution de la saisie des valeurs pour definir une fonction (EO2003-241) :
+    - Saisie des valeurs sous forme de tuple.
+    - Si une valeur est selectionnée, l'insertion se fera après cette valeur
+      et non en fin de liste
+
+Version 1.5 (10/2003):
+   Mise en synchronisation avec la version STA7 de Code_Aster d'octobre 2003 (7.2)
+   Introduction des validateurs de mots cles simples
+
+Version 1.4 (5/2003):
+   Mise en synchronisation avec la version STA7 de Code_Aster de mai 2003 (7.1)
+   Possibilité de donner un nom de fichier en argument lors de l'ouverture d'EFICAS (EO2003-060)
+   Correction d'une anomalie dans la fonctionnalité de commentarisation des commandes (AO2003-041)
+   Ajout du bouton de documentation dans le panneau FORMULE (AO2002-447)
+   Selection automatique du concept quand il n'en existe qu'un (EO2002-162)
+
+Version 1.3 (11/2002):
+   Mise en synchronisation avec la version STA6 de Code_Aster de septembre 2002
+   Ajout de la possibilité de visualiser les INCLUDE, INCLUDE_MATERIAU et POURSUITE (popup
+   sur click droit de la souris sur l'icone de la commande)
+   Possibilité d'afficher la liste des commandes par groupe (menu option->affichage commandes)
+   Reprise profonde du mécanisme de gestion des fichiers inclus (voir menus d'AIDE pour plus de détails)
+   Corrections diverses 
+
+Version 1.2 (5/2002):
+    Reconception de la version 1.1 : décomposition en packages Python
+    Mise en synchronisation avec la version STA6 de Code_Aster de fevrier 2002
index b61b73ec51bf2c57390d89b5a4b2f1ed1844a4d1..a9076e832e712d38d067702c3d21914052f75592 100644 (file)
@@ -10,8 +10,8 @@
 <H1>EFICAS</H1>
 <HR>
 
-<P> <A HREF="INSTALL">Installation</A>
-<P> <A HREF="NEWS">Evolution des versions</A>
+<P> <A HREF="INSTALL.txt">Installation</A>
+<P> <A HREF="NEWS.txt">Evolution des versions</A>
 <P> <A HREF="faqs.txt">FAQ</A>
 <P> <A HREF="includes.txt">Macros INCLUDE, INCLUDE_MATERIAU et POURSUITE</A>
 
index b383e3d7374a880582179705706857dc1e660809..a9ef3aadaa1e23c5beeff8d3651715152d828046 100644 (file)
@@ -4,6 +4,12 @@ import Tkinter
 import ScrolledText
 import formatter
 import htmllib
+try :
+    from aideQT import Aide
+    from qt import *
+except :
+    class Aide:
+       pass
 
 class TkWriter(formatter.DumbWriter):
    def __init__(self, text,viewer):
@@ -208,6 +214,25 @@ class HTMLViewer:
        except:
           pass
 
+
+class HTMLQTViewer(Aide):
+   def __init__(self,parent,pathDoc):
+      Aide.__init__(self,parent=parent,fl=Qt.WType_Dialog)
+      self.pathDoc=pathDoc
+      self.parent=parent
+      self.url=None
+      self.home=None
+      self.historique=Historique()
+      self.TB1init()
+      self.TB1.setSource("index.html")
+      self.show()
+   def TB1init(self):
+      self.TB1.mimeSourceFactory().addFilePath(QString(self.pathDoc));
+
+   def PBIndexPushed(self):
+      self.TB1.setSource("index.html")
+
 if __name__ == "__main__":
     v=HTMLViewer(None)
     v.display("fichiers/index.html")
index 2791dd9493803337f71144efdd956964c59851ce..9182b06949e344ab505047594bb06e13389f5889 100644 (file)
@@ -49,6 +49,8 @@ class formule(I_FONCTION.formule,N_FONCTION.formule,ASSD):
       N_FONCTION.formule.__init__(self,etape=etape,sd=sd,reg=reg)
       I_FONCTION.formule.__init__(self,etape=etape,sd=sd,reg=reg)
 
+class formule_c(formule):pass
+
 # On conserve fonction (ceinture et bretelles)
 # fonction n'existe plus dans N_FONCTION on le remplace par formule
 class fonction(N_FONCTION.formule,I_FONCTION.fonction,ASSD):
index 8ba10bf6c3ef9f3aac6207d9109ad3bfa0f83560..2241fee151ba5db5b4c9e6216ef09112ceae19dd 100644 (file)
@@ -71,6 +71,7 @@ from A_ASSD import GEOM,geom
 # Pour le moment on laisse fonction (ceinture et bretelles)
 from A_ASSD import FONCTION, fonction
 from A_ASSD import formule
+from A_ASSD import formule_c
 from A_ASSD import CO
 
 from Noyau.N__F import _F
index 6cc8ab3db2f6bf47a5f2c41e9912061fc10def88..4fd4c66a4acfd32344a32fc5519bf7b91d425d6e 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF Graph Utilitai  DATE 02/05/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF Graph Utilitai  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -38,12 +38,7 @@ except ImportError:
       def repout(self): return '/opt/aster/outils'
    aster=fake_aster()
 
-try:
-   from Utilitai.Utmess import UTMESS
-except ImportError:
-   def UTMESS(code,sprg,texte):
-      fmt='\n <%s> <%s> %s\n\n'
-      print fmt % (code,sprg,texte)
+from Macro.externe_mess import UTMESS
 
 if not sys.modules.has_key('Table'):
    try:
index 9ad24144d8dc35f47ffae7540985a034500d82e7..a623a9223edac1d947bb3f81c56d73f848d4eee2 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF Table Utilitai  DATE 06/11/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF Table Utilitai  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -31,17 +31,7 @@ EnumTypes = (ListType, TupleType)
 NumberTypes = (IntType, LongType, FloatType, ComplexType)
 
 import transpose
-
-# try/except pour utiliser hors aster
-try:
-   from Utilitai.Utmess import UTMESS
-except ImportError:
-   def UTMESS(code,sprg,texte):
-      fmt = '\n <%s> <%s> %s\n\n'
-      if code == 'F':
-         raise StandardError, fmt % (code,sprg,texte)
-      else:
-         print fmt % (code,sprg,texte)
+from Macro.externe_mess import UTMESS
 
 if not sys.modules.has_key('Graph'):
    try:
@@ -685,38 +675,51 @@ class Colonne(TableBase):
 
 # ------------------------------------------------------------------------------
    def __le__(self, VALE):
-      return self._extract(lambda v: v<>None and v<=VALE)
+      if type(VALE) in EnumTypes :
+        crit = max(VALE)
+      else:
+        crit = VALE
+      return self._extract(lambda v: v<>None and v<=crit)
 
 # ------------------------------------------------------------------------------
    def __lt__(self, VALE):
-      return self._extract(lambda v: v<>None and v<VALE)
+      if type(VALE) in EnumTypes :
+        crit = max(VALE)
+      else:
+        crit = VALE
+      return self._extract(lambda v: v<>None and v<crit)
 
 # ------------------------------------------------------------------------------
    def __ge__(self, VALE):
-      return self._extract(lambda v: v<>None and v>=VALE)
+      if type(VALE) in EnumTypes :
+        crit = min(VALE)
+      else:
+        crit = VALE
+      return self._extract(lambda v: v<>None and v>=crit)
 
 # ------------------------------------------------------------------------------
    def __gt__(self, VALE):
-      return self._extract(lambda v: v<>None and v>VALE)
+      if type(VALE) in EnumTypes :
+        crit = min(VALE)
+      else:
+        crit = VALE
+      return self._extract(lambda v: v<>None and v>crit)
 
 # ------------------------------------------------------------------------------
    def __eq__(self, VALE, CRITERE='RELATIF', PRECISION=0.):
-      if type(VALE) in EnumTypes :
-         return self._extract(lambda v: v in VALE)
-      if PRECISION==0. or not type(VALE) in NumberTypes:
-         if type(VALE) in StringTypes:
-            return self._extract(lambda v: v<>None and str(v).strip()==VALE.strip())
+      if not type(VALE) in EnumTypes :
+         VALE = [VALE]
+      if type(VALE[0]) in StringTypes:
+         stripVALE = [value.strip() for value in VALE]
+         return self._extract(lambda v: str(v).strip() in stripVALE)
+      else:           
+         if PRECISION==0. :
+            return self._extract(lambda v : v in VALE)
+         elif CRITERE=='ABSOLU':
+            return self._extract(lambda v : _func_test_abs(v, VALE, PRECISION))
          else:
-            return self._extract(lambda v: v==VALE)
-      else:
-         if CRITERE=='ABSOLU':
-            vmin=VALE-PRECISION
-            vmax=VALE+PRECISION
-         else:
-            vmin=(1.-PRECISION)*VALE
-            vmax=(1.+PRECISION)*VALE
-         return self._extract(lambda v: v<>None and vmin<v<vmax)
-
+            return self._extract(lambda v : _func_test_rela(v, VALE, PRECISION))
+      
 # ------------------------------------------------------------------------------
    def REGEXP(self, regexp):
       """Retient les lignes dont le paramètre satisfait l'expression
@@ -728,21 +731,18 @@ class Colonne(TableBase):
 
 # ------------------------------------------------------------------------------
    def __ne__(self, VALE, CRITERE='RELATIF', PRECISION=0.):
-      if type(VALE) in EnumTypes :
-         return self._extract(lambda v: v not in VALE)
-      if PRECISION==0. or not type(VALE) in NumberTypes:
-         if type(VALE) in StringTypes:
-            return self._extract(lambda v: v<>None and str(v).strip()<>VALE.strip())
+      if not type(VALE) in EnumTypes :
+         VALE = [VALE]
+      if type(VALE[0]) in StringTypes:
+         stripVALE = [value.strip() for value in VALE]
+         return self._extract(lambda v: str(v).strip() not in stripVALE)
+      else:           
+         if PRECISION==0. :
+            return self._extract(lambda v : v not in VALE)
+         elif CRITERE=='ABSOLU':
+            return self._extract(lambda v : not (_func_test_abs(v, VALE, PRECISION)))
          else:
-            return self._extract(lambda v: v<>VALE)
-      else:
-         if CRITERE=='ABSOLU':
-            vmin=VALE-PRECISION
-            vmax=VALE+PRECISION
-         else:
-            vmin=(1.-PRECISION)*VALE
-            vmax=(1.+PRECISION)*VALE
-         return self._extract(lambda v: v<>None and (v<vmin or vmax<v))
+            return self._extract(lambda v : not (_func_test_rela(v, VALE, PRECISION)))
 
 # ------------------------------------------------------------------------------
    def MAXI(self):
@@ -964,3 +964,21 @@ def _typaster(obj, prev=None, strict=False):
    else:
       raise TypeError, 'Une table ne peut contenir que des entiers, réels ' \
                        'ou chaines de caractères.'
+                  
+# ------------------------------------------------------------------------------
+# fonctions utilitaires
+def _func_test_abs(v, VALE, PRECISION):
+   """Retourne True si v est parmi VALE à PRECISION près en absolu
+   """
+   for x in VALE:
+      if v != None and (x-PRECISION <= v <= x+PRECISION):
+         return True
+   return False
+
+def _func_test_rela(v, VALE, PRECISION):
+   """Retourne True si v est parmi VALE à PRECISION près en relatif
+   """
+   for x in VALE: 
+      if v != None and (x*(1.-PRECISION) <= v <= x*(1.+PRECISION)):
+         return True
+   return False
index 8acd89d36c447bd39b0629f918e8377a53993f12..658c2fefd19103df34edff3d3660ae9505510620 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF Utmess Utilitai  DATE 04/06/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF Utmess Utilitai  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -25,10 +25,10 @@ import traceback
 import imp
 import re
 
-from Messages.context_info import message_context_concept
-
+# protection pour eficas
 try:
    import aster
+   from Messages.context_info import message_context_concept
 except:
    pass
 
@@ -509,7 +509,7 @@ MessageLog = MESSAGE_LOGGER()
 
 
 # -----------------------------------------------------------------------------
-def U2MESS(code, idmess, valk=(), vali=(), valr=()):
+def UTMESS(code, idmess, valk=(), vali=(), valr=()):
    """Utilitaire analogue à la routine fortran U2MESS/U2MESG avec les arguments
    optionnels.
       code   : 'A', 'E', 'S', 'F', 'I'
@@ -517,7 +517,7 @@ def U2MESS(code, idmess, valk=(), vali=(), valr=()):
       valk, vali, valr : liste des chaines, entiers ou réels.
    
    Appel sans valeurs :                avec valeurs :
-      U2MESS('A', 'SUPERVIS_55')          U2MESS('A', 'SUPERVIS_55', vali=[1, 2])
+      UTMESS('A', 'SUPERVIS_55')          UTMESS('A', 'SUPERVIS_55', vali=[1, 2])
    
    Remarques :
       - Nommer les arguments permet de ne pas tous les passer.
@@ -528,35 +528,3 @@ def U2MESS(code, idmess, valk=(), vali=(), valr=()):
    MessageLog(code, idmess, valk, vali, valr, exception=True)
 
 
-# -----------------------------------------------------------------------------
-# -----------------------------------------------------------------------------
-#
-#       !!! UTMESS sera remplacé par U2MESS !!!
-#       !!!     Ne plus utilisé UTMESS      !!!
-#
-def UTMESS(code, sprg, texte):
-   """Conserver le temps de réalisé le basculement
-   """
-   fmt='\n <%s> <%s> %s\n\n'
-   sanscode='\n <%s> %s\n\n'
-   UL=[
-      'MESSAGE',
-      'RESULTAT',
-      #'ERREUR',
-   ]
-#
-   # Comme l'UTMESS fortran, on supprime le code si on ne fait pas l'abort
-   if aster.onFatalError()=='EXCEPTION':
-      reason=sanscode % (sprg, texte)
-   else:
-      reason=fmt % (code, sprg, texte)
-   
-   for nom in UL:
-      # écriture du message
-      aster.affiche(nom,reason)
-
-   if code=='S':
-      raise aster.error, reason
-   elif code=='F':
-      raise aster.FatalError, reason
-
index b72000a6aff3928cde4a7445bcc8072a97df382b..38c4f4d798ea621279d9cf2cf0db6ecd2a61d208 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF as_timer Utilitai  DATE 02/04/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF as_timer Utilitai  DATE 24/09/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -22,7 +22,7 @@
    Definition of ASTER_TIMER class.
 """
 
-__revision__ = "$Id: as_timer.py,v 1.1.2.2 2007-06-08 12:28:30 pnoyret Exp $"
+__revision__ = "$Id: as_timer.py,v 1.2.6.1 2007-10-22 12:23:38 pnoyret Exp $"
 
 # ----- differ messages translation
 def _(mesg):
@@ -182,6 +182,7 @@ class ASTER_TIMER:
          self.timers[timer]['tot_dt'] = self.timers[timer]['tot_dt'] + \
                dico['tot'] - self.timers[timer]['tot_t0']
          self.timers[timer]['tot_t0'] = dico['tot']
+         self.timers[timer]['hide'] = hide
 
 #-------------------------------------------------------------------------------
    def StopAndGet(self, timer, *args, **kwargs):
diff --git a/Aster/Cata/Utilitai/macro_rota_globale.py b/Aster/Cata/Utilitai/macro_rota_globale.py
new file mode 100644 (file)
index 0000000..3440f8e
--- /dev/null
@@ -0,0 +1,143 @@
+#@ MODIF macro_rota_globale Utilitai  DATE 18/09/2007   AUTEUR DURAND C.DURAND 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+from Cata.cata import *
+
+# ===========================================================================
+#           CORPS DE LA MACRO "MACR_ROTA_GLOBALE"
+#           -------------------------------------
+# USAGE :
+#  RESULTAT : resultat
+#  GROUP_NO_ORIG : un groupe d un noeud definissant l entree du coude (A)
+#  GROUP_NO_EXTR : un groupe d un noeud definissant la sortie du coude (B)
+# 
+#              /
+#           A /
+#            (______
+#            B
+#  
+# ===========================================================================
+# script PYTHON : rotation globale sur une tuyauterie
+
+
+def macr_rota_globale_ops(self,RESULTAT,GROUP_NO_ORIG,GROUP_NO_EXTR,**args):
+
+
+  """
+     Ecriture de la macro MACR_ROTA_GLOBALE
+  """
+  import os
+  from Accas import _F
+  from Noyau.N_utils import AsType
+  ier=0
+
+  # On importe les definitions des commandes a utiliser dans la macro
+  POST_RELEVE_T  = self.get_cmd('POST_RELEVE_T')
+  DEFI_LIST_REEL = self.get_cmd('DEFI_LIST_REEL')
+  DEFI_FONCTION  = self.get_cmd('DEFI_FONCTION')
+
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  # Le concept sortant (de type fonction) est nomme ROTGD dans 
+  # le contexte de la macro
+
+  self.DeclareOut('ROTGD',self.sd)
+
+  # Commandes de la macro
+  
+  __ROTAB=POST_RELEVE_T(ACTION=_F(INTITULE='__ROTAB',
+                                GROUP_NO=GROUP_NO_ORIG,
+                                RESULTAT=RESULTAT,
+                                NOM_CHAM='DEPL',
+                                NOM_CMP=('DRX','DRY','DRZ',),
+                                OPERATION='EXTRACTION',),
+                                )
+
+  __ROTAC=POST_RELEVE_T(ACTION=_F(INTITULE='__ROTAC',
+                                GROUP_NO=GROUP_NO_EXTR,
+                                RESULTAT=RESULTAT,
+                                NOM_CHAM='DEPL',
+                                NOM_CMP=('DRX','DRY','DRZ',),
+                                OPERATION='EXTRACTION',),);
+  
+  __ROTABt=__ROTAB.EXTR_TABLE()
+  __ROTACt=__ROTAC.EXTR_TABLE()
+  __DRXC  = __ROTACt.Array('INST','DRX')
+  __DRYC  = __ROTACt.Array('INST','DRY')
+  __DRZC  = __ROTACt.Array('INST','DRZ')
+  __DRXB  = __ROTABt.Array('INST','DRX')
+  __DRYB  = __ROTABt.Array('INST','DRY')
+  __DRZB  = __ROTABt.Array('INST','DRZ')
+  __DRXBC = __DRXC-__DRXB
+  __DRYBC = __DRYC-__DRYB
+  __DRZBC = __DRZC-__DRZB
+  __ROTG  = __DRXBC*__DRXBC
+  __ROTG  = __ROTG+__DRYBC*__DRYBC
+  __ROTG  = __ROTG+__DRZBC*__DRZBC
+  __ROTG  = __ROTG**(0.5)
+  
+  __livalr = []
+  __livali = []
+  for i in range(len(__ROTG)):
+    __livalr.append(__ROTG[i,1])
+    __livali.append(__DRXC[i,0])
+
+  print __livalr
+  print __livali
+
+  __LROTG = DEFI_LIST_REEL(VALE=__livalr)
+  __LINST = DEFI_LIST_REEL(VALE=__livali)
+
+  ROTGD = DEFI_FONCTION(NOM_PARA='INST',
+                        VALE_PARA=__LINST,
+                        VALE_FONC=__LROTG,
+                       )
+
+  return ier
+
+
+
+# ===========================================================================
+#           CATALOGUE DE LA MACRO "MACR_ROTA_GLOBALE"
+#           -----------------------------------------
+# USAGE :
+#  RESULTAT : resultat
+#  GROUP_NO_ORIG : un groupe d un noeud definissant l entree du coude (A)
+#  GROUP_NO_EXTR : un groupe d un noeud definissant la sortie du coude (B)
+# 
+#              /
+#           A /
+#            (______
+#            B
+#  
+# ===========================================================================
+
+
+
+MACR_ROTA_GLOBALE=MACRO(nom="MACR_ROTA_GLOBALE",op=macr_rota_globale_ops,sd_prod=fonction_sdaster,
+                       docu="",reentrant='n',
+                       fr="calcul de la rotation globale dans un coude.",
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,evol_noli,evol_ther) ),
+         GROUP_NO_ORIG   =SIMP(statut='o',typ=grno,max=1),
+         GROUP_NO_EXTR   =SIMP(statut='o',typ=grno,max=1),
+)  ;
+
+
+
index 36dab10dbea744c5ecbda19173077f47117240f0..b7540201e8a4cfb733e805d6171ca5c9c6f62373 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF t_fonction Utilitai  DATE 30/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF t_fonction Utilitai  DATE 04/09/2007   AUTEUR DURAND C.DURAND 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -350,35 +350,6 @@ class t_fonction :
     """
     return self.__class__(liste_val,map(self,liste_val),self.para)
 
-  def func_union(self, func, other) :
-    """Retourne la fonction x : func(y1=self(x), y2=other(x))
-    sur la liste d'abscisses union de celles de self et de other.
-    """
-    para = copy.copy(self.para)
-    # Pour les prolongements et l'interpolation, c'est self qui prime sur other
-    vale_x = self.vale_x.tolist() + other.vale_x.tolist()
-    # on ote les abscisses doublons
-    vale_x = list(Set(vale_x))
-    vale_x.sort()
-    vale_x = array(vale_x)
-    # interpolation des deux fonctions sur l'union des abscisses
-    vale_y1 = map(self,  vale_x)
-    vale_y2 = map(other, vale_x)
-    # applique la fonction sur chaque couple (y1=f1(x), y2=f2(x))
-    vale_y = map(func, vale_y1, vale_y2)
-    return t_fonction(vale_x, vale_y, para)
-
-  def enveloppe(self, other, crit):
-     """renvoie l'enveloppe supérieure ou inférieure de self et other.
-     """
-     if crit.upper() == 'SUP':
-        env = self.func_union(max, other)
-     elif crit.upper() == 'INF':
-        env = self.func_union(min, other)
-     else:
-        raise FonctionError, 'enveloppe : le critère doit etre SUP ou INF !'
-     return env
-
   def suppr_tend(self) :
     """pour les corrections d'accélérogrammes
     suppression de la tendance moyenne d'une fonction
@@ -629,8 +600,6 @@ class t_nappe :
     """
     if self==other:
        return self
-    if self.para!=other.para:
-       raise FonctionError, 'combinaison de nappes à caractéristiques interpolation et prolongement différentes'
     vale_para=self.vale_para.tolist()+other.vale_para.tolist()
     vale_para=list(Set(vale_para))
     vale_para.sort()
@@ -643,7 +612,7 @@ class t_nappe :
          other_fonc=other.l_fonc[searchsorted(other.vale_para, val)]
          new_vale_x=other_fonc.vale_x
          new_para  =other_fonc.para
-         new_vale_y=[self(x) for x in new_vale_x]
+         new_vale_y=[self(val,x) for x in new_vale_x]
          if isinstance(other_fonc, t_fonction):
             l_fonc.append(t_fonction(new_vale_x, new_vale_y, new_para))
          if isinstance(other_fonc, t_fonction_c):
@@ -686,3 +655,64 @@ def homo_support_nappe(l_f):
       l_fres.append(__ff)
    return l_fres
 
+# -----------------------------------------------------------------------------
+def func_union(func,l_f) :
+    """Retourne la fonction x : func(y0=l_f[0](x), y1=l_f[1](x), ...)
+    sur la liste d'abscisses union de celles de self et de other.
+    """
+    para = copy.copy(l_f[0].para)
+    # Pour les prolongements et l'interpolation, c'est la première fonction qui prime
+    vale_x=[]
+    for f in l_f :
+        vale_x = vale_x + f.vale_x.tolist()
+    # on ote les abscisses doublons
+    vale_x = list(Set(vale_x))
+    vale_x.sort()
+    vale_x = array(vale_x)
+    # interpolation des fonctions sur l'union des abscisses
+    vale_y = [map(f,vale_x) for f in l_f]
+    # applique la fonction
+    vale_y = map(func, *vale_y)
+    return t_fonction(vale_x, vale_y, para)
+
+def enveloppe(l_f, crit):
+    """renvoie l'enveloppe supérieure ou inférieure de self et other.
+    """
+    if crit.upper() == 'SUP':
+       env = func_union(max, l_f)
+    elif crit.upper() == 'INF':
+       env = func_union(min, l_f)
+    else:
+       raise FonctionError, 'enveloppe : le critère doit etre SUP ou INF !'
+    return env
+
+def fractile(l_f, fract):
+    """renvoie l'enveloppe supérieure ou inférieure de self et other.
+    """
+    para = copy.copy(l_f[0].para)
+    # Pour les prolongements et l'interpolation, c'est la première fonction qui prime
+    vale_x=[]
+    for f in l_f :
+        vale_x = vale_x + f.vale_x.tolist()
+    # on ote les abscisses doublons
+    vale_x = list(Set(vale_x))
+    vale_x.sort()
+    vale_x = array(vale_x)
+    #
+    l_vale_y=[]
+    for f in l_f :
+        vale_y = map(f,vale_x)
+        l_vale_y.append(vale_y)
+    tab_val=transpose(array(l_vale_y))
+    tab_val=tab_val.tolist()
+    for l in tab_val : l.sort()
+    vale_y=[]
+    if fract>=1. :
+       for l_val in tab_val :
+           vale_y.append(l_val[-1])
+    else :
+       indice=int((len(tab_val[0])-1)*fract)
+       reste =(len(tab_val[0])-1)*fract-indice
+       for l_val in tab_val :
+           vale_y.append(l_val[indice]*(1-reste)+l_val[indice+1]*reste)
+    return t_fonction(vale_x, vale_y, para)
diff --git a/Aster/Cata/Utilitai/veri_matr_tang.py b/Aster/Cata/Utilitai/veri_matr_tang.py
new file mode 100644 (file)
index 0000000..f2e6379
--- /dev/null
@@ -0,0 +1,269 @@
+#@ MODIF veri_matr_tang Utilitai  DATE 18/09/2007   AUTEUR DURAND C.DURAND 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+from Cata.cata import *
+
+# ===========================================================================
+#              MACRO "VERI_MATR_TANG"
+#           -------------------------------------
+import Numeric
+from Numeric import *
+import cPickle,string
+import LinearAlgebra as LA
+import aster
+class TANGENT :
+
+     """
+       VERIFICATION SUR LES MATRICES TANGENTES
+       Attributs publics :
+         mat       : matrice tangente
+         ddl       : nom des degres de liberte
+         nddl      : nombre de ddl
+         norme     : norme de la matrice tangente
+         prec_zero : en-dessous de prec_zero, on ne compare pas les matrices
+       Methodes publiques
+         Save       : sauvegarde la matrice dans un fichier
+         Load       : lit la matrice depuis un fichier
+         Aster      : lit la matrice depuis l'espace Aster
+         Matrice    : range la matrice
+         Difference : comparaison entre la matrice tangente et une autre matrice
+         Symetrie   : verification du caractere symetrique de la matrice tangente
+     """
+     def __init__(self,ddl='',prec_zero=1.E-12) :
+       """
+         ddl       : chaine de caracteres designant les ddl (ex: 'UUP')
+         prec_zero : en-dessous de prec_zero, on ne compare pas les matrices
+       """
+       self.ddl = ddl
+       self.prec_zero = prec_zero
+
+     def Load(self,nom_fichier) :
+       fichier = file(nom_fichier,'r')
+       self.__dict__ = cPickle.load(fichier)
+     def Save(self,nom_fichier) :
+       fichier = file(nom_fichier,'w')
+       cPickle.dump(self.__dict__,fichier)
+
+     def Aster(self,suffixe = 'MATA') :
+       """
+         nom : suffixe de l'objet jeveux
+       """
+
+       nom_obj_jeveux = string.ljust('PYTHON.TANGENT.'+suffixe,24)
+       obj_jeveux = aster.getvectjev(nom_obj_jeveux)
+       if not obj_jeveux :
+         raise 'TANGENT : OBJET JEVEUX DE SUFFIXE '+suffixe+' INEXISTANT'
+       self.Matrice(obj_jeveux)
+     def Eigen(self) :
+       self.vp = sort(LA.eigenvalues(self.mat))
+     def Matrice(self,matrice) :
+       """
+         matrice   : la matrice tangente (rangement carre)
+       """
+       if type(matrice) == type((1,)) :
+         matrice = array(list(matrice))
+       elif type(matrice) == type([]) :
+         matrice = array(matrice)
+       matrice = matrice.astype(Float)
+       nddl = int(len(matrice)**0.5+0.5)
+       matrice.shape = (nddl,nddl)
+
+       self.mat = matrice
+       self.nddl = nddl
+       if not self.ddl :
+         self.ddl = 'D'*nddl
+       elif len(self.ddl) <> nddl :
+         raise 'Nommage des DDL incoherents avec la taille de la matrice'
+
+       self.norme = trace(dot(transpose(self.mat),self.mat))
+
+     def Difference(self,matp,affi_ok=0,prec_diff = 1.E-4) :
+       """
+         COMPARAISON RELATIVE DE LA MATRICE TANGENTE AVEC UNE AUTRE MATRICE
+         matp      : matrice avec laquelle self.mat est comparee
+         affi_ok   : si oui, on affiche egalement les valeurs qui collent bien
+         prec_diff : ecart au-dessus duquel on considere que ce n'est pas OK
+       """
+       if type(matp) == type((1,)) :
+         matp = array(list(matp))
+       elif type(matp) == type([]) :
+         matp = array(matp)
+       elif type(matp) == type(self) :
+         matp = matp.mat
+       elif type(matp) == type(array([1])) :
+         pass
+       else :
+         raise '1er argument doit etre une matrice (tuple,liste,TANGENT ou Numeric Array)'
+       matp = ravel(matp)
+       matp = matp.astype(Float)
+       if len(matp) <> self.nddl*self.nddl :
+         raise 'Matrices de tailles differentes'
+       matp.shape = (self.nddl,self.nddl)
+       refe = abs(self.mat) + abs(matp)
+       diff = where(refe > self.prec_zero,abs(self.mat-matp)/(refe+self.prec_zero),0)
+       nook = nonzero(ravel(diff)  > prec_diff)
+       ok   = nonzero(ravel(diff) <= prec_diff)
+
+       if affi_ok :
+         affi = [ok,nook]
+       else :
+         affi = [nook]
+         
+       liste_i=[]
+       liste_j=[]
+       liste_matt=[]
+       liste_matp=[]
+       liste_diff=[]
+       for ind in affi :         
+#         print '-'*80
+         for pos in ind :
+           i = pos / self.nddl
+           j = pos % self.nddl
+#           print self.ddl[i],self.ddl[j],'  ',(i+1,j+1),'  ',self.mat[i,j],' ',matp[i,j]
+           liste_i.append(i+1)
+           liste_j.append(j+1)
+           liste_matt.append(self.mat[i,j])
+           liste_matp.append(matp[i,j])
+           liste_diff.append( abs(self.mat[i,j]-matp[i,j])/ ( abs(self.mat[i,j]) + abs(matp[i,j]) + self.prec_zero))
+#       print '-'*80
+       if self.norme > self.prec_zero :
+         ecart = (self.mat - matp)/2.
+         nor_ecart = trace(dot(transpose(ecart),ecart))
+         nor_diff= nor_ecart / self.norme
+       else :
+         nor_diff= 0.
+       return liste_i,liste_j,liste_matt,liste_matp, liste_diff,nor_diff
+
+     def Symetrie(self,prec_diff = 1.E-4) :
+       """
+         VERIFICATION QUE LA MATRICE TANGENTE EST SYMETRIQUE
+         On retourne la norme relative de l'ecart a la symetrie : || (A-At)/2|| / ||A||
+         On affiche les termes qui s'ecartent de la symetrie
+
+         prec_diff : ecart au-dessus duquel on considere que ce n'est pas OK
+       """
+
+       tran = transpose(self.mat)
+       liste_i,liste_j,liste_matt,liste_matp,liste_diff,nor_diff=self.Difference(tran,affi_ok=0,prec_diff=prec_diff)
+       
+#       if self.norme > self.prec_zero :
+#         ecart = (self.mat - tran)/2.
+#         nor_ecart = trace(dot(transpose(ecart),ecart))
+#         return nor_ecart / self.norme
+#       else :
+#         return 0.
+       return liste_i,liste_j,liste_matt,liste_matp, liste_diff,nor_diff
+     def Sauve(self,nom_fichier) : 
+       cPickler.dump(self.__dict__)
+       
+def veri_matr_tang_ops(self,SYMETRIE,DIFFERENCE,PRECISION,**args):
+
+   """
+      Ecriture de la macro verif_matrice_tangente_ops
+   """
+   import os
+   from Accas import _F
+   from Noyau.N_utils import AsType
+   from Utilitai.Utmess     import UTMESS
+   from Utilitai.UniteAster import UniteAster
+
+   # On importe les definitions des commandes a utiliser dans la macro
+   CREA_TABLE  = self.get_cmd('CREA_TABLE')
+
+  # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+  # Le concept sortant (de type fonction) est nomme ROTGD dans 
+  # le contexte de la macro
+
+   self.DeclareOut('TAB_MAT',self.sd)
+   ier=0                                                                            
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+   tgt=TANGENT()                                                                    
+   tgt.Aster(suffixe='MATA')                                                        
+   matp=TANGENT()                                                                   
+   matp.Aster(suffixe='MATC')                                                       
+   prec_diff = PRECISION                                                                                 
+   if (SYMETRIE=='OUI') :
+      list1_i,list1_j,list1_matt,list1_matp,list1_diff,symetgt=tgt.Symetrie(prec_diff)                                                        
+      list2_i,list2_j,list2_matt,list2_matp,list2_diff,symeper=matp.Symetrie(prec_diff)                                                       
+      print 'Symetrie de la matrice tangente',symetgt                            
+      print 'Symetrie de la matrice pr pertubation',symeper                      
+      aster.affiche('MESSAGE',str(tgt.Difference(matp,prec_diff) ))
+   if (DIFFERENCE=='OUI'):                                                            
+       liste_i,liste_j,liste_matt,liste_matp,liste_diff,nor_diff=tgt.Difference(matp,prec_diff)
+       print 'différence entre matrice tangente et matrice par pertubation',nor_diff       
+       TAB_MAT=CREA_TABLE(LISTE=(
+                     _F(PARA     ='I',LISTE_I = liste_i),
+                     _F(PARA     ='J',LISTE_I = liste_j),
+                     _F(PARA     ='MAT_TGTE',LISTE_R = liste_matt),
+                     _F(PARA     ='MAT_PERT',LISTE_R = liste_matp),
+                     _F(PARA     ='MAT_DIFF',LISTE_R = liste_diff),
+                     ))
+   return
+                                                     
+VERI_MATR_TANG=MACRO(nom="VERI_MATR_TANG",op=veri_matr_tang_ops,sd_prod=table_sdaster,
+                       docu="",reentrant='n',
+fr="verification de la matrice tangente : symétrie et différence par rapport a la matrice calculée par perturbation",
+         regles=(AU_MOINS_UN('SYMETRIE','DIFFERENCE')),
+         SYMETRIE        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         DIFFERENCE      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.E-4 ),
+)  ;
+
+
+
index 16f0545468dc3e66eb1fcda7ebe8a9ce89b4d803..fda018198564765f5343516e6ecdce30187e30d4 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF __init__ Cata  DATE 20/09/2004   AUTEUR DURAND C.DURAND
+#@ MODIF __init__ Cata  DATE 20/09/2004   AUTEUR DURAND C.DURAND 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
index a541180fca87b1633af2430e053f2e9b7f3d0e05..ec19873669b223bf3cfffa04291829a4fa525726 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF calc_fonction_ops Macro  DATE 02/05/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF calc_fonction_ops Macro  DATE 03/10/2007   AUTEUR SALMONA L.SALMONA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
 
+import copy
+import traceback
+from math import pi
 
+
+# -----------------------------------------------------------------------------
 def tocomplex(arg):
     if arg[0]=='RI' : return complex(arg[1],arg[2])
     if arg[0]=='MP' : return complex(arg[1]*cos(arg[2]),arg[1]*sin(arg[2]))
 
+
+# -----------------------------------------------------------------------------
 def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP,
                       SPEC_OSCI,ABS,COMB,COMB_C,COMPOSE,EXTRACTION,
                       ENVELOPPE,ASSE,CORR_ACCE,PUISSANCE,INVERSE,
                       NOM_PARA,NOM_RESU,INTERPOL,PROL_DROITE,
                       PROL_GAUCHE,NOM_PARA_FONC,INTERPOL_FONC,PROL_DROITE_FONC,
                       PROL_GAUCHE_FONC,INFO,**args):
-  """
-     Ecriture de la macro CALC_FONCTION
-  """
-  ier=0
-  import types
-  import string
-  import copy
-  from math import pi
-  from Utilitai.t_fonction import t_fonction,t_fonction_c,t_nappe
-  from Utilitai import liss_enveloppe
-  from Accas import _F
-  from Cata.cata import nappe_sdaster,fonction_sdaster,fonction_c
-  from Utilitai.Utmess import UTMESS
-  from Numeric import alltrue,less,array,reshape,cos,sin,exp,sqrt
-  from Numeric import choose,zeros,Float
-  import aster_fonctions
-  EnumType = (types.ListType,types.TupleType)
-  
-  ### On importe les definitions des commandes a utiliser dans la macro
-  DEFI_FONCTION  = self.get_cmd('DEFI_FONCTION')
-  IMPR_FONCTION  = self.get_cmd('IMPR_FONCTION')
-  DEFI_NAPPE     = self.get_cmd('DEFI_NAPPE')
-  
-  ### Comptage commandes + déclaration concept sortant
-  self.set_icmd(1)
-  self.DeclareOut('C_out',self.sd)
-
-  ### type de traitement
-  ###
-  if (INTEGRE     != None):
-     __ff=INTEGRE['FONCTION'].convert()
-     if INTEGRE['METHODE']=='TRAPEZE' : __ex=__ff.trapeze(INTEGRE['COEF'])
-     if INTEGRE['METHODE']=='SIMPSON' : __ex=__ff.simpson(INTEGRE['COEF'])
-  ###
-  if (DERIVE      != None):
-     __ff=DERIVE['FONCTION'].convert()
-     __ex=__ff.derive()
-  ###
-  if (INVERSE     != None):
-     __ff=INVERSE['FONCTION'].convert()
-     __ex=__ff.inverse()
-  ###
-  if (ABS         != None): 
-     __ff=ABS['FONCTION'].convert()
-     __ex=__ff.abs()
-  ###
-  if (COMPOSE     != None): 
-     __ff=COMPOSE['FONC_RESU'].convert()
-     __fg=COMPOSE['FONC_PARA'].convert()
-     __ex=__ff[__fg]
-  ###
-  if (ASSE        != None):
-     __f0=ASSE['FONCTION'][0].convert()
-     __f1=ASSE['FONCTION'][1].convert()
-     __ex=__f0.cat(__f1,ASSE['SURCHARGE'])
-  ###
-  if (COMB        != None):
-     list_fonc=[]  
-     if   isinstance(self.sd,nappe_sdaster):
-        for mcfact in COMB :
-           list_fonc.append(mcfact['FONCTION'].convert())
-        list_fonch=[]  
-        for f in list_fonc :
-            __ex=f
-            for g in list_fonc :
-               __ex=__ex.homo_support(g)
-            list_fonch.append(__ex)
-        list_fonc=list_fonch
-     elif isinstance(self.sd,fonction_sdaster):
-        for mcfact in COMB :
-           __ex=mcfact['FONCTION'].convert()
-           list_fonc.append(__ex)
-
-     __ex=list_fonc[0]
-     __ex=__ex*COMB[0]['COEF']
-     i=1
-     for item in list_fonc[1:] :
-        item=item*COMB[i]['COEF']
-        __ex=__ex+item
-        i=i+1
-  ###
-  if (COMB_C    != None):
-     list_fonc=[]  
-     if   isinstance(self.sd,nappe_sdaster):
-        for mcfact in COMB_C :
-           list_fonc.append(mcfact['FONCTION'].convert())
-        list_fonch=[]  
-        for f in list_fonc :
-            __ex=f
-            for g in list_fonc :
-               __ex=__ex.homo_support(g)
-            list_fonch.appen(__ex)
-        list_fonc=list_fonch
-     elif isinstance(self.sd,fonction_sdaster) or isinstance(self.sd,fonction_c):
-        for mcfact in COMB_C :
-           __ex=mcfact['FONCTION'].convert(arg='complex')
-           list_fonc.append(__ex)
-
-     __ex=list_fonc[0]
-     if COMB_C[0]['COEF_R']!=None: __ex=__ex*complex(COMB_C[0]['COEF_R'])
-     if COMB_C[0]['COEF_C']!=None:
-         if type(COMB_C[0]['COEF_C']) in EnumType        : __ex=__ex*tocomplex(COMB_C[0]['COEF_C'])
-         else                                            : __ex=__ex*COMB_C[0]['COEF_C']
-     i=1
-     for item in list_fonc[1:] :
-        if COMB_C[i]['COEF_R']!=None: coef=complex(COMB_C[i]['COEF_R'])
-        if COMB_C[i]['COEF_C']!=None:
-            if type(COMB_C[i]['COEF_C']) in EnumType        : coef=tocomplex(COMB_C[i]['COEF_C'])
-            else                                            : coef=COMB_C[i]['COEF_C']
-        item=item*coef
-        __ex=__ex+item
-        i=i+1
-  ### mot clé LIST_PARA uniquement présent si COMB ou COMB_C
-  if (COMB != None) or (COMB_C != None) :
-    if (args['LIST_PARA'] != None) :
-        __ex=__ex.evalfonc(args['LIST_PARA'].Valeurs())
-  ###
-  if (PUISSANCE   != None): 
-     __ff=PUISSANCE['FONCTION'].convert()
-     __ex=__ff
-     for i in range(PUISSANCE['EXPOSANT']-1) : __ex=__ex*__ff
-  ###
-  if (EXTRACTION  != None):
-     if EXTRACTION['PARTIE']=='REEL'   : __ex=EXTRACTION['FONCTION'].convert(arg='real')
-     if EXTRACTION['PARTIE']=='IMAG'   : __ex=EXTRACTION['FONCTION'].convert(arg='imag')
-     if EXTRACTION['PARTIE']=='MODULE' : __ex=EXTRACTION['FONCTION'].convert(arg='modul')
-     if EXTRACTION['PARTIE']=='PHASE'  : __ex=EXTRACTION['FONCTION'].convert(arg='phase')
-  ###
-  if (ENVELOPPE   != None):
-     list_fonc=[]
-     l_env=ENVELOPPE['FONCTION']
-     if type(l_env) not in EnumType : l_env=(l_env,)
-     if isinstance(self.sd,nappe_sdaster):
-        for f in l_env : list_fonc.append(f.convert())
-        list_fonch=[]  
-        for f in list_fonc :
-            __ff=f
-            for g in list_fonc :
-               __ff=__ff.homo_support(g)
-            list_fonch.append(__ff)
-        list_fonc=list_fonch
-        vale_para=list_fonc[0].vale_para
-        para     =list_fonc[0].para
-        l_fonc_f =[]
-        for i in range(len(vale_para)):
-            __ff=list_fonc[0].l_fonc[i]
-            if ENVELOPPE['CRITERE']=='SUP' :
-              for f in list_fonc[1:] : __ff=__ff.sup(f.l_fonc[i])
-            if ENVELOPPE['CRITERE']=='INF' :
-              for f in list_fonc[1:] : __ff=__ff.inf(f.l_fonc[i])
-            l_fonc_f.append(__ff)
-        __ex=t_nappe(vale_para,l_fonc_f,para)
-     elif isinstance(self.sd,fonction_sdaster):
-        for f in l_env : list_fonc.append(f.convert())
-        __ex=list_fonc[0]
-        if ENVELOPPE['CRITERE']=='SUP' :
-           for f in list_fonc[1:] : __ex=__ex.sup(f)
-        if ENVELOPPE['CRITERE']=='INF' :
-           for f in list_fonc[1:] : __ex=__ex.inf(f)
-  ###
-  if (CORR_ACCE   != None):
-     __ex=CORR_ACCE['FONCTION'].convert()
-     para=copy.copy(__ex.para)
-     # suppression de la tendance de l accelero
-     __ex=__ex.suppr_tend()
-     # calcul de la vitesse
-     __ex=__ex.trapeze(0.)
-     # calcul de la tendance de la vitesse : y = a1*x +a0
-     __ex=__ex.suppr_tend()
-     if CORR_ACCE['CORR_DEPL']=='OUI':
-        # suppression de la tendance deplacement
-        # calcul du deplacement : integration
-        __ex=__ex.trapeze(0.)
-        # calcul de la tendance du déplacement : y = a1*x +a0
-        __ex=__ex.suppr_tend()
-        # regeneration de la vitesse : derivation
-        __ex=__ex.derive()
-     # regeneration de l accelero : derivation
-     __ex=__ex.derive()
-     __ex.para=para
-  ###
-  if (FFT         != None):
-     if isinstance(self.sd,fonction_c):
-        __ff=FFT['FONCTION'].convert()
-        __ex=__ff.fft(FFT['METHODE'])
-     if isinstance(self.sd,fonction_sdaster):
-        __ff=FFT['FONCTION'].convert(arg='complex')
-        __ex=__ff.fft(FFT['METHODE'],FFT['SYME'])
-  ###
-  if (SPEC_OSCI   != None):
-     if SPEC_OSCI['AMOR_REDUIT']==None :
-        l_amor=[0.02,0.05,0.1]
-        UTMESS('I','CALC_FONCTION',' : génération par défaut de 3 amortissements :'+str(l_amor))
-     else :
-        if type(SPEC_OSCI['AMOR_REDUIT']) not in EnumType :
+   """
+      Ecriture de la macro CALC_FONCTION
+   """
+   ier=0
+   from Utilitai.t_fonction import t_fonction, t_fonction_c, t_nappe, homo_support_nappe, \
+            FonctionError, ParametreError, InterpolationError, ProlongementError
+   from Utilitai import liss_enveloppe
+   from Accas import _F
+   from Cata.cata import nappe_sdaster,fonction_sdaster,fonction_c
+   from Utilitai.Utmess import UTMESS
+   from Numeric import alltrue,less,array,reshape,cos,sin,exp,sqrt
+   from Numeric import choose,zeros,Float
+   import aster_fonctions
+   EnumTypes = (list, tuple)
+   
+   ### On importe les definitions des commandes a utiliser dans la macro
+   DEFI_FONCTION  = self.get_cmd('DEFI_FONCTION')
+   IMPR_FONCTION  = self.get_cmd('IMPR_FONCTION')
+   DEFI_NAPPE     = self.get_cmd('DEFI_NAPPE')
+   
+   ### Comptage commandes + déclaration concept sortant
+   self.set_icmd(1)
+   self.DeclareOut('C_out',self.sd)
+   
+   # éléments de contexte
+   ctxt = Context()
+   ### l'ensemble est dans un try/except pour recuperer les erreurs du module t_fonction
+   try:
+      ###
+      if (INTEGRE     != None):
+         __ff=INTEGRE['FONCTION'].convert()
+         ctxt.f = __ff.nom
+         if INTEGRE['METHODE']=='TRAPEZE' :
+            __ex=__ff.trapeze(INTEGRE['COEF'])
+         elif INTEGRE['METHODE']=='SIMPSON' :
+            __ex=__ff.simpson(INTEGRE['COEF'])
+      ###
+      if (DERIVE      != None):
+         __ff=DERIVE['FONCTION'].convert()
+         ctxt.f = __ff.nom
+         __ex=__ff.derive()
+      ###
+      if (INVERSE     != None):
+         __ff=INVERSE['FONCTION'].convert()
+         ctxt.f = __ff.nom
+         __ex=__ff.inverse()
+      ###
+      if (ABS         != None): 
+         __ff=ABS['FONCTION'].convert()
+         ctxt.f = __ff.nom
+         __ex=__ff.abs()
+      ###
+      if (COMPOSE     != None): 
+         __ff=COMPOSE['FONC_RESU'].convert()
+         __fg=COMPOSE['FONC_PARA'].convert()
+         ctxt.f = [__ff.nom, __fg.nom]
+         __ex=__ff[__fg]
+      ###
+      if (ASSE        != None):
+         __f0=ASSE['FONCTION'][0].convert()
+         __f1=ASSE['FONCTION'][1].convert()
+         ctxt.f = [__f0.nom, __f1.nom]
+         __ex=__f0.cat(__f1,ASSE['SURCHARGE'])
+      ###
+      if (COMB != None):
+         list_fonc=[]
+         if isinstance(self.sd,nappe_sdaster):
+            for mcfact in COMB :
+               list_fonc.append(mcfact['FONCTION'].convert())
+            ctxt.f = [f.nom for f in list_fonc]
+            list_fonc = homo_support_nappe(list_fonc)
+         elif isinstance(self.sd,fonction_sdaster):
+            for mcfact in COMB :
+               __ex=mcfact['FONCTION'].convert()
+               list_fonc.append(__ex)
+         
+         __ex = 0.
+         for item, comb in zip(list_fonc, COMB):
+            ctxt.f = item.nom
+            __ex = item * comb['COEF'] + __ex
+         # on prend les paramètres de la 1ère fonction
+         __ex.para = copy.copy(list_fonc[0].para)
+      ###
+      if (COMB_C != None):
+         list_fonc=[]
+         if isinstance(self.sd,nappe_sdaster):
+            for mcfact in COMB_C:
+               list_fonc.append(mcfact['FONCTION'].convert())
+            ctxt.f = [f.nom for f in list_fonc]
+            list_fonc = homo_support_nappe(list_fonc)
+         elif isinstance(self.sd,fonction_sdaster) or isinstance(self.sd,fonction_c):
+            for mcfact in COMB_C :
+               __ex=mcfact['FONCTION'].convert(arg='complex')
+               list_fonc.append(__ex)
+      
+         __ex = 0.
+         for item, comb in zip(list_fonc, COMB_C):
+            if comb['COEF_R'] != None:
+               coef = complex(comb['COEF_R'])
+            elif comb['COEF_C'] != None:
+               if type(comb['COEF_C']) in EnumTypes:
+                  coef = tocomplex(comb['COEF_C'])
+               else:
+                  coef = comb['COEF_C']
+            ctxt.f = item.nom
+            __ex = item * coef + __ex
+         # on prend les paramètres de la 1ère fonction
+         __ex.para = copy.copy(list_fonc[0].para)
+      
+      ### mot clé LIST_PARA uniquement présent si COMB ou COMB_C
+      if (COMB != None) or (COMB_C != None) :
+         if (args['LIST_PARA'] != None) :
+            __ex=__ex.evalfonc(args['LIST_PARA'].Valeurs())
+      ###
+      if (PUISSANCE   != None): 
+         __ff=PUISSANCE['FONCTION'].convert()
+         ctxt.f = __ff.nom
+         __ex=__ff
+         for i in range(PUISSANCE['EXPOSANT']-1):
+            __ex=__ex*__ff
+      ###
+      if (EXTRACTION  != None):
+         if EXTRACTION['PARTIE']=='REEL':
+            __ex=EXTRACTION['FONCTION'].convert(arg='real')
+         if EXTRACTION['PARTIE']=='IMAG':
+            __ex=EXTRACTION['FONCTION'].convert(arg='imag')
+         if EXTRACTION['PARTIE']=='MODULE':
+            __ex=EXTRACTION['FONCTION'].convert(arg='modul')
+         if EXTRACTION['PARTIE']=='PHASE':
+            __ex=EXTRACTION['FONCTION'].convert(arg='phase')
+      ###
+      if (ENVELOPPE   != None):
+         list_fonc=[]
+         l_env=ENVELOPPE['FONCTION']
+         if type(l_env) not in EnumTypes:
+            l_env=(l_env,)
+         if isinstance(self.sd,nappe_sdaster):
+            for f in l_env:
+               list_fonc.append(f.convert())
+            ctxt.f = [f.nom for f in list_fonc]
+            list_fonc = homo_support_nappe(list_fonc)
+            vale_para=list_fonc[0].vale_para
+            para     =list_fonc[0].para
+            l_fonc_f =[]
+            for i in range(len(vale_para)):
+               __ff=list_fonc[0].l_fonc[i]
+               for nap in list_fonc[1:] :
+                  ctxt.f = nap.l_fonc[i].nom
+                  __ff=__ff.enveloppe(nap.l_fonc[i], ENVELOPPE['CRITERE'])
+               l_fonc_f.append(__ff)
+            __ex=t_nappe(vale_para,l_fonc_f,para)
+         elif isinstance(self.sd,fonction_sdaster):
+            for f in l_env:
+               list_fonc.append(f.convert())
+            __ex=list_fonc[0]
+            for f in list_fonc[1:]:
+               ctxt.f = [__ex.nom, f.nom]
+               __ex = __ex.enveloppe(f, ENVELOPPE['CRITERE'])
+      ###
+      if (CORR_ACCE   != None):
+         __ex=CORR_ACCE['FONCTION'].convert()
+         ctxt.f = __ex.nom
+         para=copy.copy(__ex.para)
+         # suppression de la tendance de l accelero
+         __ex=__ex.suppr_tend()
+         # calcul de la vitesse
+         __ex=__ex.trapeze(0.)
+         # calcul de la tendance de la vitesse : y = a1*x +a0
+         __ex=__ex.suppr_tend()
+         if CORR_ACCE['CORR_DEPL']=='OUI':
+            # suppression de la tendance deplacement
+            # calcul du deplacement : integration
+            __ex=__ex.trapeze(0.)
+            # calcul de la tendance du déplacement : y = a1*x +a0
+            __ex=__ex.suppr_tend()
+            # regeneration de la vitesse : derivation
+            __ex=__ex.derive()
+         # regeneration de l accelero : derivation
+         __ex=__ex.derive()
+         __ex.para=para
+      ###
+      if (FFT         != None):
+         if isinstance(self.sd,fonction_c):
+            __ff=FFT['FONCTION'].convert()
+            ctxt.f = __ff.nom
+            __ex=__ff.fft(FFT['METHODE'])
+         if isinstance(self.sd,fonction_sdaster):
+            __ff=FFT['FONCTION'].convert(arg='complex')
+            ctxt.f = __ff.nom
+            __ex=__ff.fft(FFT['METHODE'],FFT['SYME'])
+      ###
+      if (SPEC_OSCI   != None):
+         if SPEC_OSCI['AMOR_REDUIT']==None:
+            l_amor=[0.02, 0.05, 0.1]
+            UTMESS('I','CALC_FONCTION',' : génération par défaut de 3 amortissements :'+str(l_amor))
+         else:
+            if type(SPEC_OSCI['AMOR_REDUIT']) not in EnumTypes :
                l_amor=[SPEC_OSCI['AMOR_REDUIT'],]
-        else : l_amor= SPEC_OSCI['AMOR_REDUIT']
-     if SPEC_OSCI['FREQ']==None and SPEC_OSCI['LIST_FREQ']==None:
-        l_freq=[]
-        for i in range(56) : l_freq.append( 0.2+0.050*i)
-        for i in range( 8) : l_freq.append( 3.0+0.075*i)
-        for i in range(14) : l_freq.append( 3.6+0.100*i)
-        for i in range(24) : l_freq.append( 5.0+0.125*i)
-        for i in range(28) : l_freq.append( 8.0+0.250*i)
-        for i in range( 6) : l_freq.append(15.0+0.500*i)
-        for i in range( 4) : l_freq.append(18.0+1.000*i)
-        for i in range(10) : l_freq.append(22.0+1.500*i)
-        texte=[]
-        for i in range(len(l_freq)/5) :
-            texte.append(' %f %f %f %f %f' %tuple(l_freq[i*5:i*5+5]))
-        UTMESS('I','CALC_FONCTION',' : génération par défaut de 150 fréquences :\n'+'\n'.join(texte))
-     elif SPEC_OSCI['LIST_FREQ']!=None:
-        l_freq=SPEC_OSCI['LIST_FREQ'].Valeurs()
-     elif SPEC_OSCI['FREQ']!=None:
-        if type(SPEC_OSCI['FREQ']) not in EnumType:
+            else:
+               l_amor= SPEC_OSCI['AMOR_REDUIT']
+         if SPEC_OSCI['FREQ']==None and SPEC_OSCI['LIST_FREQ']==None:
+            l_freq=[]
+            for i in range(56):
+               l_freq.append( 0.2+0.050*i)
+            for i in range( 8):
+               l_freq.append( 3.0+0.075*i)
+            for i in range(14):
+               l_freq.append( 3.6+0.100*i)
+            for i in range(24):
+               l_freq.append( 5.0+0.125*i)
+            for i in range(28):
+               l_freq.append( 8.0+0.250*i)
+            for i in range( 6):
+               l_freq.append(15.0+0.500*i)
+            for i in range( 4):
+               l_freq.append(18.0+1.000*i)
+            for i in range(10):
+               l_freq.append(22.0+1.500*i)
+            texte=[]
+            for i in range(len(l_freq)/5) :
+               texte.append(' %f %f %f %f %f' %tuple(l_freq[i*5:i*5+5]))
+            UTMESS('I','CALC_FONCTION',' : génération par défaut de 150 fréquences :\n'+'\n'.join(texte))
+         elif SPEC_OSCI['LIST_FREQ']!=None:
+            l_freq=SPEC_OSCI['LIST_FREQ'].Valeurs()
+         elif SPEC_OSCI['FREQ']!=None:
+            if type(SPEC_OSCI['FREQ']) not in EnumTypes:
                l_freq=[SPEC_OSCI['FREQ'],]
-        else : l_freq= SPEC_OSCI['FREQ']
-     if abs(SPEC_OSCI['NORME'])<1.E-10 :
-        UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, la norme ne peut etre nulle')
-     if SPEC_OSCI['NATURE_FONC']!='ACCE' :
-        UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, le type de la fonction doit etre ACCE')
-     if SPEC_OSCI['METHODE']!='NIGAM' :
-        UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, seule la méthode NIGAM est codée')
-     eps=1.e-6
-     for amor in l_amor :
-         if amor>(1-eps) :
-            UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, la méthode choisie '\
-                   'suppose des amortissements sous-critiques, amor<1.')
-
-     __ff=SPEC_OSCI['FONCTION'].convert()
-     
-     # appel à SPEC_OSCI
-     spectr = aster_fonctions.SPEC_OSCI(__ff.vale_x, __ff.vale_y, l_freq, l_amor)
+            else:
+               l_freq= SPEC_OSCI['FREQ']
+         if min(l_freq)<1.E-10 :
+            UTMESS('S','CALC_FONCTION','Les fréquences doivent etre strictement positives.')
+         if abs(SPEC_OSCI['NORME'])<1.E-10 :
+            UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, la norme ne peut etre nulle')
+         if SPEC_OSCI['NATURE_FONC']!='ACCE' :
+            UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, le type de la fonction doit etre ACCE')
+         if SPEC_OSCI['METHODE']!='NIGAM' :
+            UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, seule la méthode NIGAM est codée')
+         eps=1.e-6
+         for amor in l_amor :
+            if amor>(1-eps) :
+               UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, la méthode choisie '\
+                        'suppose des amortissements sous-critiques, amor<1.')
+      
+         __ff=SPEC_OSCI['FONCTION'].convert()
+         ctxt.f = __ff.nom
+         
+         # appel à SPEC_OSCI
+         spectr = aster_fonctions.SPEC_OSCI(__ff.vale_x, __ff.vale_y, l_freq, l_amor)
+      
+         # construction de la nappe
+         vale_para = l_amor
+         para      = { 'INTERPOL'      : ['LIN','LOG'],
+                       'NOM_PARA_FONC' : 'FREQ',
+                       'NOM_PARA'      : 'AMOR',
+                       'PROL_DROITE'   : 'EXCLU',
+                       'PROL_GAUCHE'   : 'EXCLU',
+                       'NOM_RESU'      : SPEC_OSCI['NATURE'] }
+         para_fonc = { 'INTERPOL'      : ['LOG','LOG'],
+                       'NOM_PARA'      : 'FREQ',
+                       'PROL_DROITE'   : 'CONSTANT',
+                       'PROL_GAUCHE'   : 'EXCLU',
+                       'NOM_RESU'      : SPEC_OSCI['NATURE'] }
+         if   SPEC_OSCI['NATURE']=='DEPL':
+            ideb = 0
+         elif SPEC_OSCI['NATURE']=='VITE':
+            ideb = 1
+         else:
+            ideb = 2
+         l_fonc = []
+         for iamor in range(len(l_amor)) :
+            l_fonc.append(t_fonction(l_freq,spectr[iamor,ideb,:]/SPEC_OSCI['NORME'],para_fonc))
+         __ex=t_nappe(vale_para,l_fonc,para)
+      ###
+      if (LISS_ENVELOP!= None):
+         __ff=LISS_ENVELOP['NAPPE'].convert()
+         sp_nappe=liss_enveloppe.nappe(listFreq=__ff.l_fonc[0].vale_x, listeTable=[f.vale_y for f in __ff.l_fonc], listAmor=__ff.vale_para, entete="")
+         sp_lisse=liss_enveloppe.lissage(nappe=sp_nappe,fmin=LISS_ENVELOP['FREQ_MIN'],fmax=LISS_ENVELOP['FREQ_MAX'],elarg=LISS_ENVELOP['ELARG'],tole_liss=LISS_ENVELOP['TOLE_LISS'])
+         para_fonc=__ff.l_fonc[0].para
+         l_fonc=[]
+         for val in sp_lisse.listTable: 
+            l_fonc.append(t_fonction(sp_lisse.listFreq,val,para_fonc))
+         __ex=t_nappe(vale_para=sp_lisse.listAmor,l_fonc=l_fonc,para=__ff.para)
 
-     # construction de la nappe
-     vale_para = l_amor
-     para      = { 'INTERPOL'      : ['LIN','LOG'],
-                   'NOM_PARA_FONC' : 'FREQ',
-                   'NOM_PARA'      : 'AMOR',
-                   'PROL_DROITE'   : 'EXCLU',
-                   'PROL_GAUCHE'   : 'EXCLU',
-                   'NOM_RESU'      : SPEC_OSCI['NATURE'] }
-     para_fonc = { 'INTERPOL'      : ['LOG','LOG'],
-                   'NOM_PARA'      : 'FREQ',
-                   'PROL_DROITE'   : 'CONSTANT',
-                   'PROL_GAUCHE'   : 'EXCLU',
-                   'NOM_RESU'      : SPEC_OSCI['NATURE'] }
-     if   SPEC_OSCI['NATURE']=='DEPL' : ideb = 0
-     elif SPEC_OSCI['NATURE']=='VITE' : ideb = 1
-     else                             : ideb = 2
-     l_fonc = []
-     for iamor in range(len(l_amor)) :
-       l_fonc.append(t_fonction(l_freq,spectr[iamor,ideb,:]/SPEC_OSCI['NORME'],para_fonc))
-     __ex=t_nappe(vale_para,l_fonc,para)
-  ###
-  if (LISS_ENVELOP!= None):
-     __ff=LISS_ENVELOP['NAPPE'].convert()
-     sp_nappe=liss_enveloppe.nappe(listFreq=__ff.l_fonc[0].vale_x, listeTable=[f.vale_y for f in __ff.l_fonc], listAmor=__ff.vale_para, entete="")
-     sp_lisse=liss_enveloppe.lissage(nappe=sp_nappe,fmin=LISS_ENVELOP['FREQ_MIN'],fmax=LISS_ENVELOP['FREQ_MAX'],elarg=LISS_ENVELOP['ELARG'],tole_liss=LISS_ENVELOP['TOLE_LISS'])
-     para_fonc=__ff.l_fonc[0].para
-     l_fonc=[]
-     for val in sp_lisse.listTable : 
-       l_fonc.append(t_fonction(sp_lisse.listFreq,val,para_fonc))
-     __ex=t_nappe(vale_para=sp_lisse.listAmor,l_fonc=l_fonc,para=__ff.para)
+   except InterpolationError, msg:
+      UTMESS('F', 'CALC_FONCTION', 'Un problème d interpolation a été rencontré'+ctxt.f+'Vérifier les valeurs fournies derrière'+
+      'le mot-clé INTERPOL lors de la création de cette(ces) fonction(s). Debug '+str(msg))
+   except ParametreError, msg:
+      UTMESS('F', 'CALC_FONCTION', 'Un problème concernant le nom des abscisses ou ordonnées a été rencontré'+ctxt.f+
+      'Vérifier la valeur fournie derrière les mots-clés NOM_PARA/NOM_RESU lors de la création de cette(ces) fonction(s).'+
+      'Debug : '+str(msg))
+   except ProlongementError, msg:
+      UTMESS('F', 'CALC_FONCTION','Un problème concernant le prolongement de la (des) fonction(s) a été rencontré.'+ctxt.f+
+      'Vérifier la valeur fournie derrière les mots-clés PROL_GAUCHE/PROL_DROITE lors de la création de cette(ces) fonction(s)'+
+      'Debug'+str(msg))
+   except FonctionError, msg:
+      UTMESS('F', 'CALC_FONCTION', 'Une erreur s est produite lors de l opération'+ctxt.f+'Debug :'+str(msg)+
+      'Remontée d erreur (pour aider a l analyse) :'+traceback.format_exc())
 
-  ### creation de la fonction produite par appel à DEFI_FONCTION
-  ### on récupère les paramètres issus du calcul de __ex
-  ### et on les surcharge par ceux imposés par l'utilisateur
+   ### creation de la fonction produite par appel à DEFI_FONCTION
+   ### on récupère les paramètres issus du calcul de __ex
+   ### et on les surcharge par ceux imposés par l'utilisateur
+   
+   if isinstance(__ex,t_fonction) or isinstance(__ex,t_fonction_c):
+      para=__ex.para
+      if NOM_PARA   !=None : para['NOM_PARA']   =NOM_PARA
+      if NOM_RESU   !=None : para['NOM_RESU']   =NOM_RESU
+      if PROL_DROITE!=None : para['PROL_DROITE']=PROL_DROITE
+      if PROL_GAUCHE!=None : para['PROL_GAUCHE']=PROL_GAUCHE
+      if INTERPOL   !=None : para['INTERPOL']   =INTERPOL
+      if   isinstance(__ex,t_fonction_c): para['VALE_C'] = __ex.tabul()
+      elif isinstance(__ex,t_fonction)  : para['VALE']   = __ex.tabul()
+      C_out=DEFI_FONCTION(**para)
+   elif isinstance(__ex,t_nappe):
+      def_fonc=[]
+      for f in __ex.l_fonc :
+         para=f.para
+         def_fonc.append(_F(VALE       =f.tabul(),
+                            INTERPOL   =f.para['INTERPOL'],
+                            PROL_DROITE=f.para['PROL_DROITE'],
+                            PROL_GAUCHE=f.para['PROL_GAUCHE'],))
+      para=__ex.para
+      if NOM_PARA      !=None : para['NOM_PARA']   =NOM_PARA
+      if NOM_RESU      !=None : para['NOM_RESU']   =NOM_RESU
+      if PROL_DROITE   !=None : para['PROL_DROITE']=PROL_DROITE
+      if PROL_GAUCHE   !=None : para['PROL_GAUCHE']=PROL_GAUCHE
+      if NOM_PARA_FONC !=None : para['NOM_PARA_FONC']   =INTERPOL
+      if INTERPOL_FONC !=None : para['INTERPOL']   =INTERPOL
+      C_out=DEFI_NAPPE(PARA=__ex.vale_para.tolist(),DEFI_FONCTION=def_fonc,**para)
+   if INFO > 1:
+      IMPR_FONCTION(FORMAT='TABLEAU',
+                    UNITE=6,
+                    COURBE=_F(FONCTION=C_out),)
+   return ier
 
-  if isinstance(__ex,t_fonction) or isinstance(__ex,t_fonction_c):
-     para=__ex.para
-     if NOM_PARA   !=None : para['NOM_PARA']   =NOM_PARA
-     if NOM_RESU   !=None : para['NOM_RESU']   =NOM_RESU
-     if PROL_DROITE!=None : para['PROL_DROITE']=PROL_DROITE
-     if PROL_GAUCHE!=None : para['PROL_GAUCHE']=PROL_GAUCHE
-     if INTERPOL   !=None : para['INTERPOL']   =INTERPOL
-     if   isinstance(__ex,t_fonction_c): para['VALE_C'] = __ex.tabul()
-     elif isinstance(__ex,t_fonction)  : para['VALE']   = __ex.tabul()
-     C_out=DEFI_FONCTION(**para)
-  elif isinstance(__ex,t_nappe):
-     def_fonc=[]
-     for f in __ex.l_fonc :
-       para=f.para
-       def_fonc.append(_F(VALE       =f.tabul(),
-                          INTERPOL   =f.para['INTERPOL'],
-                          PROL_DROITE=f.para['PROL_DROITE'],
-                          PROL_GAUCHE=f.para['PROL_GAUCHE'],)
-                       )
-     para=__ex.para
-     if NOM_PARA      !=None : para['NOM_PARA']   =NOM_PARA
-     if NOM_RESU      !=None : para['NOM_RESU']   =NOM_RESU
-     if PROL_DROITE   !=None : para['PROL_DROITE']=PROL_DROITE
-     if PROL_GAUCHE   !=None : para['PROL_GAUCHE']=PROL_GAUCHE
-     if NOM_PARA_FONC !=None : para['NOM_PARA_FONC']   =INTERPOL
-     if INTERPOL_FONC !=None : para['INTERPOL']   =INTERPOL
-     C_out=DEFI_NAPPE(PARA=__ex.vale_para.tolist(),DEFI_FONCTION=def_fonc,**para)
-  if INFO > 1:
-     IMPR_FONCTION(FORMAT='TABLEAU',
-                   UNITE=6,
-                   COURBE=_F(FONCTION=C_out),)
-  return ier
 
+# -----------------------------------------------------------------------------
+class Context(object):
+   """Permet de stocker des éléments de contexte pour aider au
+   diagnostic lors de l'émission de message.
+   usage :
+      context = Context()
+      context.f = 'nomfon'
+      print context.f
+   """
+   def __init__(self):
+      self.__nomf = None
+   
+   def get_val(self):
+      """Retourne le texte formatté.
+      """
+      nomf = self.__nomf
+      if type(nomf) not in (list, tuple):
+         nomf = [nomf,]
+      pluriel = ''
+      if len(nomf) > 1:
+         pluriel = 's'
+      try:
+         res = """Fonction%(s)s concernée%(s)s : %(nomf)s""" % {
+            's'    : pluriel,
+            'nomf' : ', '.join(nomf),
+         }
+      except:
+         res = 'erreur de programmation !'
+      return res
+   
+   def set_val(self, value):
+      self.__nomf = value
+   
+   def del_val(self):
+      del self.__nomf
+   
+   f = property(get_val, set_val, del_val, "")
index 74201a010fca8b31e79a78a262e2d7dfc67bfc24..62fa22943b85267cc3c898f7e404799493185019 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF calc_table_ops Macro  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF calc_table_ops Macro  DATE 04/03/2008   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -74,14 +74,14 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args):
       # format pour l'impression des filtres
       form_filtre = '\nFILTRE -> NOM_PARA: %-16s CRIT_COMP: %-4s VALE: %s'
       if occ['OPERATION'] == 'FILTRE':
-         col = getattr(tab, occ['NOM_PARA'])
          # peu importe le type, c'est la meme méthode d'appel
          opts = [occ[k] for k in ('VALE','VALE_I','VALE_C','VALE_K') if occ.has_key(k)]
          kargs = {}
          for k in ('CRITERE','PRECISION'):
             if occ.has_key(k):
                kargs[k] = occ[k]
-         tab = tab & ( getattr(col, occ['CRIT_COMP'])(*opts,**kargs) )
+         col = getattr(tab, occ['NOM_PARA'])
+         tab = getattr(col, occ['CRIT_COMP'])(*opts,**kargs) 
          # trace l'operation dans le titre
          #if FORMAT in ('TABLEAU','ASTER'):
          tab.titr += form_filtre % (occ['NOM_PARA'], occ['CRIT_COMP'], \
index 44cebeccc4c089cf0a10a1d8b5711ea5ccc3dd76..f942f6c11d2bdf72ce5fc1e6953a83e7a5458b13 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF impr_oar_ops Macro  DATE 07/11/2006   AUTEUR DURAND C.DURAND 
+#@ MODIF impr_oar_ops Macro  DATE 21/11/2007   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
 
-import aster
-try :
+# protection pour eficas
+try:
+   import aster
    from Utilitai.Utmess import UTMESS
    from Utilitai.Table import Table
    from Utilitai.partition import MAIL_PY
-except :
+except:
    pass
-
+   
 def buildTabString(tabLevel):
    """
       Construit une chaine de tabulation
index fec1bdbbfa163cce1665d3f245abcf121503bfee..86ed2de657a0d317ff8dc1e425b8841cc8db0ae9 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF impr_table_ops Macro  DATE 06/11/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF impr_table_ops Macro  DATE 07/05/2008   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -22,9 +22,7 @@
 
 import os.path
 import re
-
-from types import ListType, TupleType, StringTypes
-EnumTypes=(ListType, TupleType)
+from sets import Set
 
 
 # ------------------------------------------------------------------------------
@@ -80,7 +78,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args):
    ltab=[]
    if args['SENSIBILITE']:
       lps=args['SENSIBILITE']
-      if not type(lps) in EnumTypes:
+      if not type(lps) in (list, tuple):
          lps=[lps,]
       for ps in lps:
          ncomp = NomCompose(TABLE, ps)
@@ -99,7 +97,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args):
    nom_para=ltab[0][0].para
    if args['NOM_PARA']:
       nom_para=args['NOM_PARA']
-   if not type(nom_para) in EnumTypes:
+   if not type(nom_para) in (list, tuple):
       nom_para=[nom_para,]
 
    # 0.4.2. Traiter le cas des UL réservées
@@ -180,7 +178,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args):
       # 4.4. regroupement par paramètre : PAGINATION
       if args['PAGINATION']:
          l_ppag=args['PAGINATION']
-         if not type(l_ppag) in EnumTypes:
+         if not type(l_ppag) in (list, tuple):
             l_ppag=[l_ppag,]
          kargs['PAGINATION'] = [p for p in l_ppag if p in nom_para]
          l_para_err          = [p for p in l_ppag if not p in nom_para]
@@ -191,16 +189,16 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args):
       timp.Impr(**kargs)
 
       # ----- 5. IMPR_FONCTION='OUI'
-      if args['IMPR_FONCTION'] and args['IMPR_FONCTION']=='OUI':
+      if args['IMPR_FONCTION'] == 'OUI':
          # cherche parmi les cellules celles qui contiennent un nom de fonction
-         dfon={}
+         dfon=[]
          for row in timp['FONCTION', 'FONCTION_C']:
             for par,cell in row.items():
-               if type(cell) in StringTypes:
+               if type(cell) in (str, unicode):
                 if aster.getvectjev(cell.strip().ljust(19)+'.PROL')<>None:
-                  dfon[cell.strip().ljust(19)]=par
+                        dfon.append(['%-19s' % cell, par])
          # impression des fonctions trouvées
-         for f,par in dfon.items():
+         for f,par in dfon:
             __fonc=RECU_FONCTION(
                TABLE=sdtab,
                FILTRE=_F(
@@ -208,6 +206,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args):
                   VALE_K=f,
                ),
                NOM_PARA_TABL=par,
+               TITRE = 'Fonction %s' % f,
             )
             __fonc.Trace(**kfonc)
             DETRUIRE(CONCEPT=_F(NOM=('__fonc',),), ALARME='NON', INFO=1,)
index ac8e6edf23e938abef2c22081ff5dcf1ce97afba..91874f1f4a1e3728b5149494cbd2ce594da3f425 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_ascouf_calc_ops Macro  DATE 31/10/2006   AUTEUR REZETTE C.REZETTE 
+#@ MODIF macr_ascouf_calc_ops Macro  DATE 05/09/2007   AUTEUR SALMONA L.SALMONA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -235,7 +235,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
     else :
       motscles['PRES_REP']=_F( GROUP_MA  = 'PEAUINT',
                                PRES      = PRES_REP['PRES'] ,)
-    if PRES_REP['EFFE_FOND_P1']!=None :
+    if PRES_REP['EFFE_FOND_P1']!='NON' :
       motscles['EFFE_FOND']=_F( GROUP_MA_INT  = 'BORDTU'  ,
                                 GROUP_MA      = 'EXTUBE'  ,
                                 PRES          = PRES_REP['PRES'] ,)
index ec37741744087b4e56aae379b82cbf25eb7d0d84..4a5993f9952d64fe55c735ae6b9cab8132992be9 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_ascouf_mail_ops Macro  DATE 29/08/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF macr_ascouf_mail_ops Macro  DATE 21/11/2007   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 
 import os.path
 from math import sqrt,cos,sin,pi,tan,log,fabs,ceil,fmod,floor
-import aster
 import string
-try :
-    from Utilitai.Utmess     import UTMESS
-except :
-    pass
+
+# protection pour eficas
+try:
+   import aster
+   from Utilitai.Utmess     import UTMESS
+except:
+   pass
 
 # ------------------------------------------------------------------------------
 def ASCFON(RC,RM,EP,ORIEN,AZIM,AXEC,POS,Y):
index ac1b2f6605474e5bf8a76b38cccf27f112f2b5ee..9229d58aca7c05c4fbfe9174442cad1360aa81d8 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_aspic_calc_ops Macro  DATE 31/10/2006   AUTEUR REZETTE C.REZETTE 
+#@ MODIF macr_aspic_calc_ops Macro  DATE 03/10/2007   AUTEUR SALMONA L.SALMONA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -226,7 +226,7 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
       motscles['PRES_REP'  ]= _F(GROUP_MA=APPRES,   PRES=PRES_REP['PRES'])
   else :
       motscles['PRES_REP'  ]= _F(GROUP_MA=APPRES[0],PRES=PRES_REP['PRES'])
-  if  PRES_REP['EFFE_FOND' ]!=None :
+  if  PRES_REP['EFFE_FOND' ]=='OUI' :
       motscles['EFFE_FOND' ]=(_F(GROUP_MA    ='EXTUBU  ',
                                  GROUP_MA_INT='L_INT_TU',
                                  PRES        =PRES_REP['PRES']),
index d1b14cb6f571fc7d93c6b93075e702d5b6d7335d..cd7ea66de5a15926e0ecc81072e6a8b2ea9ff459 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_aspic_mail_ops Macro  DATE 25/09/2006   AUTEUR GALENNE E.GALENNE 
+#@ MODIF macr_aspic_mail_ops Macro  DATE 07/05/2008   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -485,9 +485,10 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE,
   VAL4  = 3.0 * sqrt( RMT    * EPT2 )
   LZMAX = max ( VAL1 , VAL2, VAL3, VAL4 )
   ZMAXC = LZMAX + ( DEC/2.0 ) + D1 + D2
-  LOK = ( abs(ZMAX-ZMAXC) <= EPSI * abs(ZMAXC) )
+  LOK = ( (ZMAX-ZMAXC) >= -1.* EPSI * abs(ZMAXC) )
   if not LOK :
-    message=         ' erreur donnees \n'
+    message= "La valeur de Z_MAX (cote maximale de la tubulure) est inférieure à la longueur\n" 
+    message=message+ " d'amortissement calculée :          \n"
     message=message+ ' Z_MAX FOURNIE   :  %.2f \n'%ZMAX
     message=message+ ' Z_MAX CALCULEE  :  %.2f \n'%ZMAXC
     UTMESS('F', "MACR_ASPIC_MAIL", message)
@@ -496,7 +497,7 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE,
   VAL2  = 3.0 * sqrt( RMC    * EPC )
   LXMAX = max( VAL1 , VAL2 )
   XMAXC = LXMAX + ( DET1 / 2.0 )
-  LOK = ( abs(XMAX-XMAXC) <= EPSI * abs(XMAXC) )
+  LOK = ( (XMAX-XMAXC) >= -1.* EPSI * abs(XMAXC) )
   if not LOK :
     message=         ' erreur donnees \n'
     message=message+ ' Z_MAX FOURNIE   :  %.2f \n'%ZMAX
index c9b31703a84b2d05d1538c54d1bc4d7d649cf0f6..41179af697f533111be3244c018c8455abf8b56d 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_lign_coupe_ops Macro  DATE 09/05/2007   AUTEUR SALMONA L.SALMONA 
+#@ MODIF macr_lign_coupe_ops Macro  DATE 01/04/2008   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -363,7 +363,6 @@ def macr_lign_coupe_ops(self,RESULTAT,UNITE_MAILLAGE,LIGN_COUPE,NOM_CHAM,
 
 
   # Production d'une table pour toutes les lignes de coupe
-        for m in LIGN_COUPE :
              if m['NB_POINTS'] !=None :
               ioc2=ioc2+1
               groupe='LICOU'+str(ioc2)
index e97053c118d252910878e3a30be6a9736591046c..19d0a455cdba47d9063de39d210ca6b54eb07654 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_spectre_ops Macro  DATE 14/11/2006   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF macr_spectre_ops Macro  DATE 21/11/2007   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # ======================================================================
 
 from Accas import _F
-import aster
 import string
-try :
-   from Utilitai.Utmess import UTMESS
-except :
+
+# protection pour eficas
+try:
+   import aster
+   from Utilitai.Utmess import UTMESS  
+except:
    pass
+
 def macr_spectre_ops(self,MAILLAGE,PLANCHER,NOM_CHAM,CALCUL,RESU,IMPRESSION=None,
                      FREQ=None,LIST_FREQ=None,LIST_INST=None,AMOR_SPEC=None,**args):
   """
index b9dac9fe1ad745e0c192ab7cbf1e126fa16dc0e9..d253cd0056d21f705690c0c7deb1435cb5ee69e3 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macro_elas_mult_ops Macro  DATE 07/11/2006   AUTEUR CIBHHLV L.VIVAN 
+#@ MODIF macro_elas_mult_ops Macro  DATE 08/11/2007   AUTEUR SALMONA L.SALMONA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -234,11 +234,13 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
               motscles['NUME_MODE']=m['MODE_FOURIER']
            motscles['EXCIT']=[]
            if   m['CHAR_MECA'] :
-              for chargt in m['CHAR_MECA'] : motscles['EXCIT'].append(_F(CHARGE=chargt))
+              for chargt in m['CHAR_MECA']   : motscles['EXCIT'].append(_F(CHARGE=chargt))
            elif m['CHAR_CINE'] :
-              for chargt in m['CHAR_CINE'] : motscles['EXCIT'].append(_F(CHARGE=chargt))
-           if   CHAR_MECA_GLOBAL:            motscles['EXCIT'].append(_F(CHARGE=CHAR_MECA_GLOBAL))
-           elif CHAR_CINE_GLOBAL:            motscles['EXCIT'].append(_F(CHARGE=CHAR_CINE_GLOBAL))
+              for chargt in m['CHAR_CINE']   : motscles['EXCIT'].append(_F(CHARGE=chargt))
+           if   CHAR_MECA_GLOBAL:
+              for chargt in CHAR_MECA_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
+           elif CHAR_CINE_GLOBAL:
+              for chargt in CHAR_CINE_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
            CALC_ELEM(reuse=nomres,
                      RESULTAT=nomres,
                      MODELE=MODELE,
@@ -256,11 +258,13 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
               motscles['NUME_MODE']=m['MODE_FOURIER']
            motscles['EXCIT']=[]
            if   m['CHAR_MECA'] :
-              for chargt in m['CHAR_MECA'] : motscles['EXCIT'].append(_F(CHARGE=chargt))
+              for chargt in m['CHAR_MECA']   : motscles['EXCIT'].append(_F(CHARGE=chargt))
            elif m['CHAR_CINE'] :
-              for chargt in m['CHAR_CINE'] : motscles['EXCIT'].append(_F(CHARGE=chargt))
-           if   CHAR_MECA_GLOBAL:            motscles['EXCIT'].append(_F(CHARGE=CHAR_MECA_GLOBAL))
-           elif CHAR_CINE_GLOBAL:            motscles['EXCIT'].append(_F(CHARGE=CHAR_CINE_GLOBAL))
+              for chargt in m['CHAR_CINE']   : motscles['EXCIT'].append(_F(CHARGE=chargt))
+           if   CHAR_MECA_GLOBAL:
+              for chargt in CHAR_MECA_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
+           elif CHAR_CINE_GLOBAL:
+              for chargt in CHAR_CINE_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
            CALC_NO(reuse=nomres,
                    RESULTAT=nomres,
                    MODELE=MODELE,
index ddf508f1d2312e8aac9b9b7cdd0966e2897871e0..c070044ecac21e7d1b1be6442b8b06edcfe90467 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macro_matr_asse_ops Macro  DATE 12/06/2006   AUTEUR CIBHHLV L.VIVAN 
+#@ MODIF macro_matr_asse_ops Macro  DATE 06/02/2008   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -21,7 +21,7 @@
 
 
 def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
-                        SOLVEUR,NUME_DDL,CHARGE,CHAR_CINE,INST,**args):
+                        SOLVEUR,NUME_DDL,CHARGE,CHAR_CINE,INST,INFO,**args):
   """
      Ecriture de la macro MACRO_MATR_ASSE
   """
@@ -30,6 +30,7 @@ def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
 
   # On met le mot cle NUME_DDL dans une variable locale pour le proteger
   numeddl=NUME_DDL
+  info=INFO
   # On importe les definitions des commandes a utiliser dans la macro
   # Le nom de la variable doit etre obligatoirement le nom de la commande
   CALC_MATR_ELEM=self.get_cmd('CALC_MATR_ELEM')
@@ -38,39 +39,9 @@ def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
   # La macro compte pour 1 dans la numerotation des commandes
   self.set_icmd(1)
 
-  if SOLVEUR:
-    methode=SOLVEUR['METHODE']
-    if methode=='LDLT':
-      if SOLVEUR['RENUM']:
-         renum=SOLVEUR['RENUM']
-      else:
-         renum='RCMK'
-      if renum not in ('SANS','RCMK'):
-        UTMESS('F', "MACRO_MATR_ASSE", "Avec methode LDLT, RENUM doit etre SANS ou RCMK")
-    elif methode=='MULT_FRONT':
-      if SOLVEUR['RENUM']:
-         renum=SOLVEUR['RENUM']
-      else:
-         renum='MDA'
-      if renum not in ('MDA','MD','METIS'):
-        UTMESS('F', "MACRO_MATR_ASSE", "Avec methode MULT_FRONT, RENUM doit etre MDA, MD ou RCMK")
-    elif methode=='MUMPS':
-      if SOLVEUR['RENUM']:
-         renum=SOLVEUR['RENUM']
-      else:
-         renum='SANS'
-      if renum not in ('SANS',):
-        UTMESS('F', "MACRO_MATR_ASSE", "Avec methode MUMPS, RENUM doit etre SANS")
-    elif methode=='GCPC':
-      if SOLVEUR['RENUM']:
-         renum=SOLVEUR['RENUM']
-      else:
-         renum='SANS'
-      if renum not in ('SANS','RCMK'):
-        UTMESS('F', "MACRO_MATR_ASSE", "Avec methode GCPC, RENUM doit etre SANS ou RCMK")
-  else:
-    methode='MULT_FRONT'
-    renum  ='MDA'
+  # Les mots cles simples sous SOLVEUR sont par defaut MULT_FRONT/METIS
+  methode=SOLVEUR['METHODE']
+  renum=SOLVEUR['RENUM']
 
   if numeddl in self.sdprods:
     # Si le concept numeddl est dans self.sdprods
@@ -144,7 +115,7 @@ def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
     if lnume and option in ('RIGI_MECA','RIGI_THER','RIGI_ACOU','RIGI_MECA_LAGR'):
       self.DeclareOut('num',numeddl)
       # On peut passer des mots cles egaux a None. Ils sont ignores
-      num=NUME_DDL(MATR_RIGI=_a,METHODE=methode,RENUM=renum)
+      num=NUME_DDL(MATR_RIGI=_a,METHODE=methode,RENUM=renum,INFO=info)
     else:
       num=numeddl
 
index 97b6bd15042381cdeaee05db37216b01a24e51f6..315f430770eff8d2b30010e287accf8aa4d759f6 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macro_miss_3d_ops Macro  DATE 31/10/2006   AUTEUR ACBHHCD G.DEVES
+#@ MODIF macro_miss_3d_ops Macro  DATE 06/06/2007   AUTEUR SALMONA L.SALMON
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -58,9 +58,9 @@ def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS,
      
   miss3d=loc_fic+'miss3d'
   
-  if VERSION=='V1_2':
-     if PARAMETRE != None and PARAMETRE['TYPE']=='BINAIRE':
-        raise AsException("MACRO_MISS_3D/PARAMETRE : type incompatible avec version")
+  if VERSION=='V1_2':
+  #   if PARAMETRE != None and PARAMETRE['TYPE']=='BINAIRE':
+  #      raise AsException("MACRO_MISS_3D/PARAMETRE : type incompatible avec version")
         
   if OPTION['TOUT']!=None:
       MODUL2='COMPLET'
index 7faa61de4741d51eac633f32e79eb799cc47606b..a506925a5094b2814c02acdb7bb258f1cfd9829e 100755 (executable)
@@ -1,4 +1,4 @@
-#& MODIF ENTETE  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF ENTETE  DATE 07/05/2008   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -18,6 +18,7 @@
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 
+import os
 import Accas
 from Accas import *
 from Accas import _F
@@ -34,7 +35,7 @@ except:
   pass
 
 __version__="$Name:  $"
-__Id__="$Id: cata.py,v 1.3.8.6 2007-06-14 16:18:24 pnoyret Exp $"
+__Id__="$Id: cata.py,v 1.4.6.1.4.1 2008-10-10 13:28:49 pnoyret Exp $"
 
 EnumTypes = (ListType, TupleType)
 
@@ -533,7 +534,8 @@ class fonction_class(ASSD):
       from Utilitai.Graph import Graph
       gr=Graph()
       gr.AjoutCourbe(Val=self.Valeurs(),
-            Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU']])
+            Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU']],
+            Leg=os.linesep.join(self.TITR.get()) )
       gr.Trace(FORMAT=FORMAT,**kargs)
 
 class fonction_sdaster(fonction_class):
@@ -667,9 +669,11 @@ class fonction_c(fonction_class):
       if self.par_lot() :
          raise Accas.AsException("Erreur dans fonction_c.Trace en PAR_LOT='OUI'")
       from Utilitai.Graph import Graph
+      para = self.Parametres()
       gr=Graph()
       gr.AjoutCourbe(Val=self.Valeurs(),
-       Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU'],'IMAG'])
+       Lab=[para['NOM_PARA'], '%s_R' % para['NOM_RESU'], '%s_I' % para['NOM_RESU']],
+       Leg=os.linesep.join(self.TITR.get()) )
       gr.Trace(FORMAT=FORMAT,**kargs)
    def __call__(self,val):
       ### Pour EFICAS : substitution de l'instance de classe
@@ -765,7 +769,8 @@ class nappe_sdaster(fonction_class):
       lv=self.Valeurs()[1]
       dp=self.Parametres()[0]
       for lx,ly in lv:
-         gr.AjoutCourbe(Val=[lx,ly], Lab=[dp['NOM_PARA_FONC'],dp['NOM_RESU']])
+         gr.AjoutCourbe(Val=[lx,ly], Lab=[dp['NOM_PARA_FONC'],dp['NOM_RESU']],
+         Leg=os.linesep.join(self.TITR.get()) )
       gr.Trace(FORMAT=FORMAT,**kargs)
 
 # -----------------------------------------------------------------------------
@@ -2655,7 +2660,7 @@ AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,sd_prod=affe_char_cine_f_pr
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 14/11/2006   AUTEUR TARDIEU N.TARDIEU 
+#& MODIF COMMANDE  DATE 02/06/2008   AUTEUR DESOZA T.DESOZA 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3042,7 +3047,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
            fr="Définit les zones soumises à des conditions de contact unilatéral avec ou sans frottement",
            regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),),
            APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
-                                 into=("RIGIDE","NODAL","MAIT_ESCL","MAIT_ESCL_SYME")),
+                                 into=("NODAL","MAIT_ESCL","MAIT_ESCL_SYME")),
            RECHERCHE       =SIMP(statut='f',typ='TXM',defaut="NOEUD_BOUCLE",
                                  into=("NOEUD_BOUCLE","NOEUD_VOISIN")),
            LISSAGE         =SIMP(statut='f',typ='TXM',defaut="NON",
@@ -3243,27 +3248,14 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
                 REAC_ITER       =SIMP(statut='f',typ='I',defaut=3, fr="Fréquence de réinitialisation de la conjugaison"),
                 TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
                 TOLE_PROJ_INT   =SIMP(statut='f',typ='R'  ,defaut=0.001),
-                TOLE_REAC_GEOM  =SIMP(statut='f',typ='R'  ,defaut=0.05),
                 STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
                                       into=("OUI","NON")),
                 REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
-                        into=("AUTOMATIQUE","CONTROLE","SANS")),
-                b_reac_sans     =BLOC(condition = "REAC_GEOM == 'SANS' ",
-                                 fr="Paramètre de la réactualisation géométrique",
-                      
-                      STOP_REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="NON",
-                                           into=("OUI","NON")),
-                                 ),
-                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
-                                 fr="Paramètre de la réactualisation géométrique",
+                                      into=("AUTOMATIQUE","CONTROLE","SANS")),
+
+                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique",
                       NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
                       
-                      STOP_REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="ALARME",
-                                           into=("OUI","NON")),
-                                 ),
-                b_reac_auto     =BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ",
-                      fr="Paramètre de la réactualisation géométrique auto",
-                      NB_REAC_MAXI   =SIMP(statut='o',typ='I',defaut = 10),
                                  ), 
                 SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
                 SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
@@ -3755,7 +3747,7 @@ AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op=   7,sd_prod=char_meca,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 14/11/2006   AUTEUR TARDIEU N.TARDIEU 
+#& MODIF COMMANDE  DATE 02/06/2008   AUTEUR DESOZA T.DESOZA 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4109,17 +4101,33 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
                                  ),
                 FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
                 COMPLIANCE      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                FOND_FISSURE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                RACCORD_LINE_QUAD=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                
                 INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2",
                                                                                                 "NCOTES","NCOTES1","NCOTES2")),
                 COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
                 FORMULATION     =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE")),
                 MODL_AXIS       =SIMP(statut='o',typ='TXM',into=("OUI","NON")),
-                DIRE_APPA       =SIMP(statut='f',typ='R',max=3),
+                DIRE_APPA       =SIMP(statut='f',typ='R',max=3,defaut=(0.,0.,0.,)),
                 ITER_GEOM_MAXI  =SIMP(statut='f',typ='I',defaut=2),
                 ITER_CONT_MAXI  =SIMP(statut='f',typ='I',defaut=30),
-                DIST_MAIT       =SIMP(statut='f',typ='R'),
-                DIST_ESCL       =SIMP(statut='f',typ='R'),
+                DIST_MAIT       =SIMP(statut='f',typ='R',defaut=0.),
+                DIST_ESCL       =SIMP(statut='f',typ='R',defaut=0.),
+                VECT_ORIE_POU   =SIMP(statut='f',typ='R',min=3,max=3),
+                TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
                 CONTACT_INIT    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                b_FOND_FISSURE  =BLOC(condition = "FOND_FISSURE == 'OUI' ",fr="TRAITEMENT EN FOND DE FISSURE",
+                     regles=(UN_PARMI('NOEUD_FOND','GROUP_NO_FOND','MAILLE_FOND','GROUP_MA_FOND'),),
+                     NOEUD_FOND      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                     GROUP_NO_FOND   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                     MAILLE_FOND     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                     GROUP_MA_FOND   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),),
+                b_RACCORD_SURF  =BLOC(condition = "RACCORD_LINE_QUAD == 'OUI' ",fr="TRAITEMENT DU RACCORD SURFACIQUE",
+                     regles=(UN_PARMI('NOEUD_RACC','GROUP_NO_RACC'),),
+                     NOEUD_RACC      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                     GROUP_NO_RACC   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),),
+                
                 b_compliance    =BLOC(condition = "COMPLIANCE == 'OUI' ",fr="Parametres de la compliance",
                      ASPERITE        =SIMP(statut='o',typ='R',),
                      E_N             =SIMP(statut='o',typ='R',),
@@ -4132,7 +4140,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
                      VECT_Z          =SIMP(statut='f',typ='R',min=3,max=3),
                      ITER_FROT_MAXI  =SIMP(statut='f',typ='I',defaut=2),
                      COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-                     SEUIL_INIT      =SIMP(statut='f',typ='I',defaut=0),),),
+                     SEUIL_INIT      =SIMP(statut='f',typ='R',defaut=0.),),),
 
            b_gcp        =BLOC(condition = "METHODE == 'GCP' ",
                                  fr="Paramètres de la méthode du gradient conjugué projeté (contact uniquement)",
@@ -4141,28 +4149,15 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
                 REAC_ITER       =SIMP(statut='f',typ='I',defaut=3, fr="Fréquence de réinitialisation de la conjugaison"),
                 TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
                 TOLE_PROJ_INT   =SIMP(statut='f',typ='R'  ,defaut=0.001),
-                TOLE_REAC_GEOM  =SIMP(statut='f',typ='R'  ,defaut=0.05),
                 STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
                                       into=("OUI","NON")),
                 REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
-                        into=("AUTOMATIQUE","CONTROLE","SANS")),
-                b_reac_sans     =BLOC(condition = "REAC_GEOM == 'SANS' ",
-                                 fr="Paramètre de la réactualisation géométrique",
-                      
-                      STOP_REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="NON",
-                                           into=("OUI","NON")),
-                                 ),
-                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
-                                 fr="Paramètre de la réactualisation géométrique",
+                                      into=("AUTOMATIQUE","CONTROLE","SANS")),                      
+
+                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique",
                       NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
-                      
-                      STOP_REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="ALARME",
-                                           into=("OUI","NON")),
+
                                  ),
-                b_reac_auto     =BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ",
-                      fr="Paramètre de la réactualisation géométrique auto",
-                      NB_REAC_MAXI   =SIMP(statut='o',typ='I',defaut = 10),
-                                 ), 
                 SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
                 SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
                 SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
@@ -6136,7 +6131,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
      INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
      TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 ) ;
-#& MODIF COMMANDE  DATE 16/10/2006   AUTEUR JMBHH01 J.M.PROIX 
+#& MODIF COMMANDE  DATE 31/07/2007   AUTEUR SALMONA L.SALMONA 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6191,9 +6186,11 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant
 
          b_fatigue_multi   =BLOC(condition = "TYPE_CALCUL == 'FATIGUE_MULTI'",
                                  fr="Plan critique dans le cas de la fatigue multiaxiale à grand nombre de cycles.",
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
            TYPE_CHARGE   =SIMP(statut='o',typ='TXM',into=("PERIODIQUE","NON_PERIODIQUE") ),
            OPTION        =SIMP(statut='o',typ='TXM',into=("DOMA_ELGA","DOMA_NOEUD") ),
            RESULTAT      =SIMP(statut='o',typ=(evol_elas, evol_noli) ),
+           MAILLAGE      =SIMP(statut='o',typ=maillage_sdaster ),
            CHAM_MATER    =SIMP(statut='o',typ=(cham_mater) ),
            GROUP_MA      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**' ),
            MAILLE        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**' ),
@@ -6215,9 +6212,6 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant
                    DELTA_OSCI    =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
                ),
            ),
-           b_fati_grmano  =BLOC(condition = "(GROUP_MA != None or MAILLE != None or GROUP_NO != None or NOEUD != None)",
-               MAILLAGE      =SIMP(statut='o',typ=maillage_sdaster ),
-           ),
          ),
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
@@ -7967,7 +7961,7 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
 )  ;
-#& MODIF COMMANDE  DATE 03/01/2006   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 21/05/2008   AUTEUR MACOCCO K.MACOCCO 
 # RESPONSABLE MCOURTOI M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -7989,33 +7983,14 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
 CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster,
             reentrant='n',fr="Crée un maillage à partir d'un maillage existant",
             UIinfo={"groupes":("Maillage",)},
-         regles=(EXCLUS('ECLA_PG','CREA_MAILLE'),
-                 EXCLUS('ECLA_PG','CREA_GROUP_MA'),
-                 EXCLUS('ECLA_PG','DETR_GROUP_MA'),
-                 EXCLUS('ECLA_PG','MODI_MAILLE'),
-                 EXCLUS('ECLA_PG','LINE_QUAD'),
-                 EXCLUS('ECLA_PG','CREA_FISS'),
-                 EXCLUS('ECLA_PG','COQU_VOLU'),
-                 EXCLUS('LINE_QUAD','MODI_MAILLE'),
-                 EXCLUS('LINE_QUAD','CREA_MAILLE'),
-                 EXCLUS('LINE_QUAD','CREA_GROUP_MA'),
-                 EXCLUS('LINE_QUAD','DETR_GROUP_MA'),
-                 EXCLUS('LINE_QUAD','CREA_FISS'),
-                 EXCLUS('LINE_QUAD','COQU_VOLU'),
-                 EXCLUS('CREA_FISS','MODI_MAILLE'),
-                 EXCLUS('CREA_FISS','CREA_MAILLE'),
-                 EXCLUS('CREA_FISS','CREA_GROUP_MA'),
-                 EXCLUS('CREA_FISS','DETR_GROUP_MA'),
-                 EXCLUS('CREA_FISS','COQU_VOLU'),
-                 EXCLUS('COQU_VOLU','MODI_MAILLE'),
-                 EXCLUS('COQU_VOLU','CREA_MAILLE'),
-                 EXCLUS('COQU_VOLU','CREA_GROUP_MA'),
-                 EXCLUS('COQU_VOLU','DETR_GROUP_MA'),
-                 ),
-                 
+
+         regles=(EXCLUS('COQU_VOLU', 'CREA_FISS', 'CREA_GROUP_MA', 'CREA_MAILLE', 'CREA_POI1',
+                        'DETR_GROUP_MA', 'ECLA_PG', 'LINE_QUAD', 'MODI_MAILLE',
+                        'QUAD_LINE', 'REPERE'),),
+
          # le MAILLAGE est inutile si ECLA_PG
          MAILLAGE        =SIMP(statut='f',typ=maillage_sdaster ),
-         
+
          CREA_POI1       =FACT(statut='f',max='**',fr="Création de mailles de type POI1 à partir de noeuds",
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD' ),),
            NOM_GROUP_MA    =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
@@ -19092,7 +19067,7 @@ MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=macro_matr_ajou_ops,sd_prod=macro
          NOEUD_DOUBLE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
          AVEC_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
 )
-#& MODIF COMMANDE  DATE 12/06/2006   AUTEUR CIBHHLV L.VIVAN 
+#& MODIF COMMANDE  DATE 06/02/2008   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19150,9 +19125,19 @@ MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,
          CHAR_CINE       =SIMP(statut='f',typ=(char_cine_meca,char_cine_ther,char_cine_acou) ),
          NUME_DDL        =SIMP(statut='o',typ=(nume_ddl_sdaster,CO)),
          SOLVEUR         =FACT(statut='d',
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",
-                                 into=("LDLT","MULT_FRONT","GCPC","MUMPS")),
-           RENUM           =SIMP(statut='f',typ='TXM',into=("SANS","RCMK","MD","MDA","METIS")),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",),
+         b_mult_front    =BLOC(condition="METHODE=='MULT_FRONT'",fr="Paramètres associés à la méthode multifrontale",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("MD","MDA","METIS"),defaut="METIS" ),
+         ),
+         b_ldlt          =BLOC(condition="METHODE=='LDLT'",fr="Paramètres associés à la méthode LDLT",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
+         ),
+         b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+           RENUM         =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+         ),
+         b_gcpc          =BLOC(condition="METHODE=='GCPC'",fr="Paramètres associés à la méthode gradient conjugué",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
+         ),
          ),
 
          MATR_ASSE       =FACT(statut='o',max='**',
@@ -19190,7 +19175,7 @@ MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 06/06/2007   AUTEUR SALMONA L.SALMONA 
+#& MODIF COMMANDE  DATE 28/05/2008   AUTEUR GREFFET N.GREFFET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19221,7 +19206,7 @@ MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",op=macro_miss_3d_ops,
          ),
          PROJET          =SIMP(statut='o',typ='TXM'),  
          REPERTOIRE      =SIMP(statut='f',typ='TXM'),
-         VERSION         =SIMP(statut='f',typ='TXM',into=("V1_3","V1_4",),defaut="V1_3"),
+         VERSION         =SIMP(statut='f',typ='TXM',into=("V1_3","V1_4",),defaut="V1_4"),
          UNITE_IMPR_ASTER=SIMP(statut='f',typ='I',defaut=25),  
          UNITE_OPTI_MISS =SIMP(statut='f',typ='I',defaut=26),  
          UNITE_MODELE_SOL=SIMP(statut='f',typ='I',defaut=27),  
@@ -21466,7 +21451,7 @@ POST_MAIL_XFEM=OPER(nom="POST_MAIL_XFEM",op= 187,sd_prod=maillage_sdaster,
     MODELE  = SIMP(statut='o',typ=modele_sdaster),
     TITRE   = SIMP(statut='f',typ='TXM',max='**'),
 );                     
-#& MODIF COMMANDE  DATE 03/10/2006   AUTEUR CIBHHLV L.VIVAN 
+#& MODIF COMMANDE  DATE 21/02/2008   AUTEUR VIVAN L.VIVAN 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21618,8 +21603,8 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster,
               NUME_SITU        =SIMP(statut='o',typ='I',fr="numéro de la situation" ),
               NOM_SITU         =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
               COMBINABLE       =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ),
-              NUME_GROUPE      =SIMP(statut='o',typ='I',fr="numéro du groupe de la situation" ),
-              NUME_PASSAGE     =SIMP(statut='f',typ='I',max=2,fr="numéro des deux groupes en relation" ),
+              NUME_GROUPE      =SIMP(statut='f',typ='I',max=2,
+                 fr="numéro du groupe de la situation,si 2 numéros cette situation est une situation de passage" ),
               NUME_RESU_THER   =SIMP(statut='f',typ='I',max='**',fr="numeros de transitoires thermiques" ),
               CHAR_ETAT_A      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
               CHAR_ETAT_B      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat B" ),
@@ -21706,8 +21691,8 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster,
               NUME_SITU        =SIMP(statut='o',typ='I',fr="numéro de la situation" ),
               NOM_SITU         =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
               COMBINABLE       =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ),
-              NUME_GROUPE      =SIMP(statut='o',typ='I',fr="numéro du groupe de la situation" ),
-              NUME_PASSAGE     =SIMP(statut='f',typ='I',max=2,fr="numéro des deux groupes en relation" ),
+              NUME_GROUPE      =SIMP(statut='f',typ='I',max=2,
+                 fr="numéro du groupe de la situation,si 2 numéros cette situation est une situation de passage" ),
               NUME_RESU_THER   =SIMP(statut='f',typ='I',max='**',fr="numeros de transitoires thermiques" ),
               CHAR_ETAT_A      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
               CHAR_ETAT_B      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat B" ),
index 6a3e9c198e6434e6cf8ef287ce9a0725fd8d2f42..ce03f0422f292c0198dce778b58fd134a7a3af8a 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF ops Cata  DATE 24/10/2006   AUTEUR DURAND C.DURAND 
+#@ MODIF ops Cata  DATE 04/06/2008   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -28,6 +28,7 @@ import pickle
 import Accas
 from Accas import ASSD
 
+
 try:
    import aster
    # Si le module aster est présent, on le connecte
@@ -149,6 +150,9 @@ def POURSUITE(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args):
             if isinstance(pickle_context[elem],ASSD) : 
                pickle_context[elem].jdc=self.jdc
                pickle_context[elem].parent=self.jdc
+               # pour que sds_dict soit cohérent avec g_context
+               self.jdc.sds_dict[elem] = pickle_context[elem]
+               assert elem == pickle_context[elem].nom
             if elem in self.g_context.keys():
                poursu_class=self.g_context[elem].__class__
                if poursu_class!=pickle_class :
@@ -209,7 +213,8 @@ def POURSUITE_context(self,d):
    # On ajoute directement les concepts dans le contexte du jdc
    # XXX est ce que les concepts ne sont pas ajoutés plusieurs fois ??
    for v in self.g_context.values():
-      if isinstance(v,ASSD) : self.jdc.sds.append(v)
+      if isinstance(v,ASSD) : 
+         self.jdc.sds.append(v)
 
 def build_poursuite(self,**args):
    """
@@ -261,6 +266,8 @@ def detruire(self,d):
    """
        Cette fonction est la fonction op_init de la PROC DETRUIRE
    """
+   if hasattr(self,"executed") and self.executed == 1:
+      return
    if self["CONCEPT"]!=None:
      sd=[]
      for mc in self["CONCEPT"]:
index 355eb0dd5e5d02ae4a3e8f231b433d5a80a1af62..f5051ce06d2fb6b3d563aa771a46e76491fb0978 100644 (file)
@@ -9,17 +9,17 @@ AFFE_CHAR_THER_F:U4.44.02-h
 AFFE_CHAR_THER:U4.44.02-h
 AFFE_CHAR_THER_F:U4.44.02-i
 AFFE_CHAR_THER:U4.44.02-i
-AFFE_MATERIAU:U4.43.03-i2
-AFFE_MODELE:U4.41.01-i2
+AFFE_MATERIAU:U4.43.03-i
+AFFE_MODELE:U4.41.01-i
 AIDE:U4.02.01-i
 ASSE_MAILLAGE:U4.23.03-h
 ASSE_MATRICE:U4.61.22-i
 ASSE_MATR_GENE:U4.65.04-g
-ASSE_VECTEUR:U4.61.23-h
+ASSE_VECTEUR:U4.61.23-i
 ASSE_VECT_GENE:U4.65.05-g
 CALC_AMOR_MODAL:U4.52.13-g
 CALC_CHAM_ELEM:U4.81.03-i
-CALC_CHAR_CINE:U4.61.03-h1
+CALC_CHAR_CINE:U4.61.03-h
 CALC_CHAR_SEISME:U4.63.01-h
 CALC_ELEM:U4.81.01-i
 CALC_FATIGUE:U4.83.02-f
@@ -28,28 +28,27 @@ CALC_FONCTION:U4.32.04-i
 CALC_FONC_INTERP:U4.32.01-g
 CALC_FORC_AJOU:U4.66.03-c
 CALC_G:U4.82.03-h
-CALC_G_LOCAL_T:U4.82.04-h1
 CALC_G_THETA_T:U4.82.03-g
 CALC_INTE_SPEC:U4.36.03-h
 CALC_MATR_AJOU:U4.66.01-f
-CALC_MATR_ELEM:U4.61.01-h
+CALC_MATR_ELEM:U4.61.01-i
 CALC_META:U4.85.01-d
 CALC_NO:U4.81.02-h
-CALC_PRECONT:U4.42.05-a
+CALC_PRECONT:U4.42.05-b
 CALC_TABLE:U4.33.03-a
 CALC_THETA:U4.82.02-g
-CALC_VECT_ELEM:U4.61.02-h
+CALC_VECT_ELEM:U4.61.02-i
 COMB_CHAM_ELEM:U4.72.03-g
 COMB_CHAM_NO:U4.72.02-h
 COMB_FOURIER:U4.83.31-f
 COMB_MATR_ASSE:U4.72.01-i
 COMB_SISM_MODAL:U4.84.01-g
 COMP_INCR:U4.51.11-b
-CREA_CHAMP:U4.72.04-d1
-CREA_MAILLAGE:U4.23.02-f1
+CREA_CHAMP:U4.72.04-d
+CREA_MAILLAGE:U4.23.02-f
 CREA_RESU:U4.44.12-g
 CREA_TABLE:U4.33.02-b
-DEBUT:U4.11.01-h
+DEBUT:U4.11.01-i
 DEFI_ CONSTANTE:U4.31.01-i
 DEFI_BASE_MODALE:U4.64.02-h1
 DEFI_CABLE_BP:U4.42.04-d
@@ -59,15 +58,15 @@ DEFI_COQU_MULT:U4.42.03-h
 DEFI_FICHIER:U4.12.03-b
 DEFI_FISS_XFEM:U4.82.08-b
 DEFI_FLUI_STRU:U4.25.01-g
-DEFI_FONCTION:U4.31.02-i1
+DEFI_FONCTION:U4.31.02-i
 DEFI_FONC_ELEC:U4.mk.10-h
 DEFI_FONC_FLUI:U4.35.01-f
 DEFI_FOND_FISS:U4.82.01-h
 DEFI_GROUP:U4.22.01-h
 DEFI_INTERF_DYNA:U4.64.01-h
 DEFI_INTE_SPEC:U4.36.02-h
-DEFI_LIST_ENTI:U4.34.02-h
-DEFI_LIST_REEL:U4.34.01-h
+DEFI_LIST_ENTI:U4.34.02-i
+DEFI_LIST_REEL:U4.34.01-i
 DEFI_MAILLAGE:U4.23.01-h
 DEFI_MATERIAU:U4.43.01-i
 DEFI_MODELE_GENE:U4.65.02-g
@@ -76,8 +75,7 @@ DEFI_OBSTACLE:U4.44.21-h
 DEFI_PARA_SENSI:U4.31.06-c
 DEFI_PART_FETI:U4.23.05-a1
 DEFI_SPEC_TURB:U4.44.31-f
-DEFI_SQUELETTE:U4.24.01-h
-DEFI_TEXTURE:U4.43.05-c
+DEFI_SQUELETTE:U4.24.01-i
 DEFI_THER_JOULE:U4.mk.20-f
 DEFI_TRC:U4.43.04-h
 DEPL_INTERNE:U4.62.02-h
@@ -90,22 +88,20 @@ DYNA_NON_LINE:U4.53.01-h
 DYNA_SPEC_MODAL:U4.53.23-f
 DYNA_TRAN_EXPLI:U4.53.03-b
 DYNA_TRAN_MODAL:U4.53.21-h
-ENGENDRE_TEST:U4.92.11-d
+ENGENDRE_TEST:U4.92.11-e
 EXEC_LOGICIEL:U7.00.01-d
 EXTR_MODE:U4.52.12-f
 EXTR_RESU:U4.71.04-e
-EXTR_TABLE:U4.71.05-a
+EXTR_TABLE:U4.71.05-b
 FACT_GRAD:U4.55.03-h
-FACT_LDLT:U4.55.01-i1
+FACT_LDLT:U4.55.01-i
 FIN:U4.11.02-i
 FONC_FLUI_STRU:U4.35.02-f
 FORMULE:U4.31.05-g
 GENE_FONC_ALEA:U4.36.05-h
 GENE_MATR_ALEA:U4.36.06-c
-GENE_VARI_ALEA:U4.36.07-b
-IMPR_CLASSI:U7.04.21-d
+GENE_VARI_ALEA:U4.36.07-c
 IMPR_CO:U4.91.11-i
-IMPR_FICO_HOMA:U7.04.01-c
 IMPR_FONCTION:U4.33.01-g
 IMPR_GENE:U4.91.02-f
 IMPR_JEVEUX:U4.91.21-i
@@ -114,16 +110,16 @@ IMPR_MATRICE:U7.04.32-f
 IMPR_MISS3D:U7.04.11-f
 IMPR_MISS_3D:U7.04.11-e
 IMPR_OAR:U7.04.51-b
-IMPR_RESU:U4.91.01-h
+IMPR_RESU:U4.91.01-i
 IMPR_STURM:U4.52.01-i
-IMPR_TABLE:U4.91.03-e
+IMPR_TABLE:U4.91.03-f
 INCLUDE:U4.13.01-h
 INCLUDE_MATERIAU:U4.43.02-d
 INFO_EXEC_ASTER:U4.13.04-b
 INFO_FONCTION:U4.32.05-a
 INTE_MAIL_2D:U4.81.11-h
 INTE_MAIL_3D:U4.81.12-h
-LIRE_CHAMP:U7.02.02-d1
+LIRE_CHAMP:U7.02.02-d
 LIRE_FONCTION:U4.32.02-h
 LIRE_FORC_MISS:U7.02.33-a
 LIRE_IMPE_MISS:U7.02.32-a
@@ -145,32 +141,31 @@ MACR_ASCOUF_CALC:U4.cf.20-d
 MACR_ASCOUF_MAIL:U4.cf.10-d
 MACR_ASPIC_CALC:U4.pc.20-d
 MACR_ASPIC_MAIL:U4.pc.10-d
-MACR_CABRI_CALC:U4.cb.20-a
-MACR_CABRI_MAIL:U4.cb.10-a
+MACR_CABRI_CALC:U4.cb.20-b
+MACR_CABRI_MAIL:U4.cb.10-b
 MACR_CARA_POUTRE:U4.42.02-f
 MACR_ECLA_PG:U4.44.14-b
 MACR_ELEM_DYNA:U4.65.01-g
 MACR_ELEM_STAT:U4.62.01-h
-MACR_FIABILITE:U7.03.31-a
+MACR_FIABILITE:U7.03.31-b
 MACR_FIAB_IMPR:U7.04.41-b
 MACR_INFO_MAIL:U7.03.02-d
 MACR_LIGN_COUPE:U4.81.13-c
 MACR_RECAL:U4.73.02-c
+MACR_SPECTRE:U4.32.11-a
 MAC_MODES:U4.52.15-a
 MAJ_CATA:U4.15.01-g
-MECA_STATIQUE:U4.51.01-i1
+MECA_STATIQUE:U4.51.01-i
 MEMO_NOM_SENSI:U4.31.07-c
-MODE_INTER_CYCL:U4.52.05-h
-MODE_ITER_CYCL:U4.52.05-g
+MODE_ITER_CYCL:U4.52.05-h
 MODE_ITER_INV:U4.52.04-i
 MODE_ITER_SIMULT:U4.52.03-h
 MODE_STATIQUE:U4.52.14-h
 MODI_BASE_MODALE:U4.66.21-f
 MODI_MAILLAGE:U4.23.04-f
 MODI_MODELE_XFEM:U4.41.11-b
-MODI_OBSTACLE:U4.44.22-c
+MODI_OBSTACLE:U4.44.22-d
 MODI_REPERE:U4.74.01-c
-MODY_OBSTACLE:U4.44.22-d
 NORM_MODE:U4.52.11-h
 NUME_DDL:U4.61.11-i
 NUME_DDL_GENE:U4.65.03-g
@@ -187,10 +182,10 @@ POST_K_TRANS:U4.82.30-a
 POST_MAIL_XFEM:U4.82.21-a
 POST_RCCM:U4.83.11-f
 POST_RELEVE_T:U4.81.21-g1
-POST_USURE:U4.84.05-f
+POST_USURE:U4.84.05-g
 POST_ZAC:U4.83.21-e
 POURSUITE:U4.11.03-i
-PRE_GIBI:U7.01.11-h
+PRE_GIBI:U7.01.11-i
 PRE_GMSH:U7.01.31-c
 PRE_IDEAS:U7.01.01-i
 PROD_MATR_CHAM:U4.72.06-e
@@ -203,19 +198,20 @@ PROPA_XFEM:U4.82.11-a
 RECA_WEIBULL:U4.82.06-d
 RECU_FONCTION:U4.32.03-h
 RECU_GENE:U4.71.03-h
-RECU_TABLE:U4.71.02-c
+RECU_TABLE:U4.71.02-d
 RESO_GRAD:U4.55.04-h
-RESO_LDLT:U4.55.02-i1
+RESO_LDLT:U4.55.02-i
 REST_BASE_PHYS:U4.63.21-h
 REST_SPEC_PHYS:U4.63.22-f
 SENSIBILITE:U4.50.02-c
-SOLVEUR:U4.50.01-f2
+SIMU_POINT_MAT:U4.51.12-a
+SOLVEUR:U4.50.01-f
 STANLEY:U4.81.31-c
 STAT_NON_LINE:U4.51.03-h
 TEST_FICHIER:U4.92.04-b
 TEST_FONCTION:U4.92.02-h
 TEST_RESU:U4.92.01-i
-TEST_TABLE:U4.92.03-e1
+TEST_TABLE:U4.92.03-e
 THER_LINEAIRE:U4.54.01-i
 THER_NON_LINE:U4.54.02-g
 THER_NON_LINE_MO:U4.54.03-e
\ No newline at end of file
index f9dd3530ebc7ac4d22de3b47833d2164ade0dc3e..abd3f873a9038610ae70a98cae100add756cabf9 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF Sensibilite Macro  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF Sensibilite Macro  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
@@ -24,15 +24,23 @@ Module traite de la gestion des concepts sensibles :
    - corps de la macro MEMO_NOM_SENSI
 """
 
-# proctection eficas
+# protection pour eficas
 try:
    import aster
-   from Utilitai.Utmess import U2MESS as UTMESS
+   from Utilitai.Utmess import  UTMESS
 except:
    pass
 
 _VIDE_ = '????????'
 
+#-------------------------------------------------------------------------------
+def _force_list(obj):
+   """Impose le type list."""
+   if obj is not None and not type(obj) in (list, tuple):
+      obj = (obj,)
+   return obj
+
+
 #-------------------------------------------------------------------------------
 class MEMORISATION_SENSIBILITE:
    """Classe pour la mémorisation des concepts sensibles et leurs dérivées.
@@ -43,6 +51,8 @@ class MEMORISATION_SENSIBILITE:
       self._debug = debug
       # dictionnaire de correspondance : ('nom concept', 'nom parasensi') : 'nom compose'
       self._corr = {}
+      # idem que _corr mais, pour les commandes principales, on stocke sd elle-meme
+      self._cosd = {}
       self._nsnp = {}   # l'inverse
       # dictionnaire donnant les 3 tuples de mots-clés, valeurs, mots-clés facteurs
       self._mcle = {}
@@ -64,15 +74,22 @@ class MEMORISATION_SENSIBILITE:
       key = self.key(nosimp, nopase)
       if self._corr.has_key(key):
          UTMESS('F', 'SENSIBILITE_90', valk=(nosimp, nopase))
-      limocl = limocl or ()
-      livale = livale or ()
-      limofa = limofa or ()
+      limocl = _force_list(limocl) or ()
+      livale = _force_list(livale) or ()
+      limofa = _force_list(limofa) or ()
       if not (len(limocl) == len(livale) == len(limofa)):
          UTMESS('F', 'SENSIBILITE_97')
       
       if nocomp is None:
          nocomp = aster.get_nom_concept_unique('S')
+      # on ne conserve que le nom (au moins pour le moment)
+      if type(nocomp) != str:
+         sd = nocomp
+         nocomp = nocomp.nom
+      else:
+         sd = None
       self._corr[key] = nocomp
+      self._cosd[nocomp] = sd
       self._nsnp[nocomp] = key
       self._mcle[key] = (limocl, livale, limofa)
       
@@ -153,6 +170,12 @@ class MEMORISATION_SENSIBILITE:
       return tuple(res)
 
 
+   def get_nom_sd_princ(self):
+      """Retourne la liste des noms des sd dérivées produites par les commandes principales.
+      """
+      return tuple(self._cosd.keys())
+
+
    def delete(self, nosimp, nopase):
       """On récupère les mots-clés associés à un couple ('nom concept', 'nom parasensi')
       """
@@ -160,6 +183,7 @@ class MEMORISATION_SENSIBILITE:
       nocomp = self.get_nocomp(nosimp, nopase)
       if nocomp != _VIDE_:
          del self._corr[key]
+         del self._cosd[nocomp]
          del self._mcle[key]
          del self._nsnp[nocomp]
 
@@ -174,20 +198,29 @@ def memo_nom_sensi_ops(self, NOM, **args):
    Faut-il traiter les mots-clés NOM_ZERO et NOM_UN ?
    Il me semble que NOM_COMPOSE est toujours présent : obligatoire
    """
+   import aster
+   
    ier=0
    # La macro compte pour 1 dans la numerotation des commandes
    self.set_icmd(1)
-
-   # boucle sur les occurrences du mot-clé facteur NOM
-   for occ in NOM:
-      dNOM = occ.cree_dict_valeurs(occ.mc_liste)
-      
-      nosimp = dNOM['NOM_SD']
-      nopase = dNOM['PARA_SENSI'].nom
-      nocomp = dNOM['NOM_COMPOSE']
-      
-      self.jdc.memo_sensi.set(nosimp, nopase, nocomp,
-                              dNOM['MOT_CLE'], dNOM['VALEUR'], dNOM['MOT_FACT'],
-                              verbose=True)
-
+   
+   dNOM = NOM[0].cree_dict_valeurs(NOM[0].mc_liste)
+   
+   nosimp = dNOM['NOM_SD']
+   nopase = dNOM['PARA_SENSI'].nom
+   nocomp = dNOM['NOM_COMPOSE']
+   
+   self.jdc.memo_sensi.set(nosimp, nopase, nocomp,
+                           dNOM['MOT_CLE'], dNOM['VALEUR'], dNOM['MOT_FACT'],
+                           verbose=True)
+
+   # s'il faut déclarer le concept dérivé dans le jdc
+   if dNOM['TYPE_SD_DERIV']:
+      self.DeclareOut('nocomp', dNOM['NOM_COMPOSE'])
+      # enregistrement dans le tableau des concepts jeveux
+      icmdt = aster.co_register_jev(dNOM['NOM_COMPOSE'].nom, dNOM['TYPE_SD_DERIV'].upper(), 'MEMO_NOM_SENSI')
+   
    return ier
index 2d768fa6ca2b030a9b23807c91c65a0642f04437..9041ca5696d6526a7d6d145c7c0c9b24c2f8c7d4 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF calc_fonction_ops Macro  DATE 30/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF calc_fonction_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -20,6 +20,7 @@
 
 import copy
 import traceback
+import os
 from math import pi
 
 
@@ -32,7 +33,7 @@ def tocomplex(arg):
 # -----------------------------------------------------------------------------
 def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP,
                       SPEC_OSCI,ABS,COMB,COMB_C,COMPOSE,EXTRACTION,
-                      ENVELOPPE,ASSE,CORR_ACCE,PUISSANCE,INVERSE,
+                      ENVELOPPE,FRACTILE,ASSE,CORR_ACCE,PUISSANCE,INVERSE,
                       NOM_PARA,NOM_RESU,INTERPOL,PROL_DROITE,
                       PROL_GAUCHE,NOM_PARA_FONC,INTERPOL_FONC,PROL_DROITE_FONC,
                       PROL_GAUCHE_FONC,INFO,**args):
@@ -41,11 +42,11 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP,
    """
    ier=0
    from Utilitai.t_fonction import t_fonction, t_fonction_c, t_nappe, homo_support_nappe, \
-            FonctionError, ParametreError, InterpolationError, ProlongementError
+            FonctionError, ParametreError, InterpolationError, ProlongementError, enveloppe, fractile
    from Utilitai import liss_enveloppe
    from Accas import _F
    from Cata.cata import nappe_sdaster,fonction_sdaster,fonction_c
-   from Utilitai.Utmess import UTMESS, U2MESS
+   from Utilitai.Utmess import  UTMESS
    from Numeric import alltrue,less,array,reshape,cos,sin,exp,sqrt
    from Numeric import choose,zeros,Float
    import aster_fonctions
@@ -184,16 +185,40 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP,
                __ff=list_fonc[0].l_fonc[i]
                for nap in list_fonc[1:] :
                   ctxt.f = nap.l_fonc[i].nom
-                  __ff=__ff.enveloppe(nap.l_fonc[i], ENVELOPPE['CRITERE'])
+                  __ff=enveloppe([__ff,nap.l_fonc[i]], ENVELOPPE['CRITERE'])
                l_fonc_f.append(__ff)
             __ex=t_nappe(vale_para,l_fonc_f,para)
          elif isinstance(self.sd,fonction_sdaster):
             for f in l_env:
                list_fonc.append(f.convert())
+            ctxt.f = [f.nom for f in list_fonc]
+            __ex = enveloppe(list_fonc, ENVELOPPE['CRITERE'])
+      ###
+      if (FRACTILE   != None):
+         list_fonc=[]
+         l_frac=FRACTILE['FONCTION']
+         if type(l_frac) not in EnumTypes:
+            l_frac=(l_frac,)
+         if isinstance(self.sd,nappe_sdaster):
+            for f in l_frac:
+               list_fonc.append(f.convert())
+            ctxt.f = [f.nom for f in list_fonc]
+            list_fonc = homo_support_nappe(list_fonc)
+            vale_para=list_fonc[0].vale_para
+            para     =list_fonc[0].para
+            l_fonc_f =[]
+            for i in range(len(vale_para)):
+               ctxt.f = [nap.l_fonc[i].nom for nap in list_fonc]
+               __ff=fractile([nap.l_fonc[i] for nap in list_fonc], FRACTILE['FRACT'])
+               l_fonc_f.append(__ff)
+            __ex=t_nappe(vale_para,l_fonc_f,para)
+         elif isinstance(self.sd,fonction_sdaster):
+            for f in l_frac:
+               list_fonc.append(f.convert())
             __ex=list_fonc[0]
             for f in list_fonc[1:]:
                ctxt.f = [__ex.nom, f.nom]
-               __ex = __ex.enveloppe(f, ENVELOPPE['CRITERE'])
+               __ex = fractile(list_fonc, FRACTILE['FRACT'])
       ###
       if (CORR_ACCE   != None):
          __ex=CORR_ACCE['FONCTION'].convert()
@@ -230,7 +255,7 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP,
       if (SPEC_OSCI   != None):
          if SPEC_OSCI['AMOR_REDUIT']==None:
             l_amor=[0.02, 0.05, 0.1]
-            UTMESS('I','CALC_FONCTION',' : génération par défaut de 3 amortissements :'+str(l_amor))
+            UTMESS('I','FONCT0_31',valr=l_amor)
          else:
             if type(SPEC_OSCI['AMOR_REDUIT']) not in EnumTypes :
                l_amor=[SPEC_OSCI['AMOR_REDUIT'],]
@@ -257,7 +282,7 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP,
             texte=[]
             for i in range(len(l_freq)/5) :
                texte.append(' %f %f %f %f %f' %tuple(l_freq[i*5:i*5+5]))
-            UTMESS('I','CALC_FONCTION',' : génération par défaut de 150 fréquences :\n'+'\n'.join(texte))
+            UTMESS('I','FONCT0_32',valk=os.linesep.join(texte))
          elif SPEC_OSCI['LIST_FREQ']!=None:
             l_freq=SPEC_OSCI['LIST_FREQ'].Valeurs()
          elif SPEC_OSCI['FREQ']!=None:
@@ -265,18 +290,18 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP,
                l_freq=[SPEC_OSCI['FREQ'],]
             else:
                l_freq= SPEC_OSCI['FREQ']
+         if min(l_freq)<1.E-10 :
+            UTMESS('S','FONCT0_43')
          if abs(SPEC_OSCI['NORME'])<1.E-10 :
-            UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, la norme ne peut etre nulle')
+            UTMESS('S','FONCT0_33')
          if SPEC_OSCI['NATURE_FONC']!='ACCE' :
-            UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, le type de la fonction doit etre ACCE')
+            UTMESS('S','FONCT0_34')
          if SPEC_OSCI['METHODE']!='NIGAM' :
-            UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, seule la méthode NIGAM est codée')
+            UTMESS('S','FONCT0_35')
          eps=1.e-6
          for amor in l_amor :
             if amor>(1-eps) :
-               UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, la méthode choisie '\
-                        'suppose des amortissements sous-critiques, amor<1.')
-      
+              UTMESS('S','FONCT0_36')
          __ff=SPEC_OSCI['FONCTION'].convert()
          ctxt.f = __ff.nom
          
@@ -318,13 +343,13 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP,
          __ex=t_nappe(vale_para=sp_lisse.listAmor,l_fonc=l_fonc,para=__ff.para)
 
    except InterpolationError, msg:
-      U2MESS('F', 'FONCT0_27', valk=(ctxt.f, str(msg)))
+      UTMESS('F', 'FONCT0_27', valk=(ctxt.f, str(msg)))
    except ParametreError, msg:
-      U2MESS('F', 'FONCT0_28', valk=(ctxt.f, str(msg)))
+      UTMESS('F', 'FONCT0_28', valk=(ctxt.f, str(msg)))
    except ProlongementError, msg:
-      U2MESS('F', 'FONCT0_29', valk=(ctxt.f, str(msg)))
+      UTMESS('F', 'FONCT0_29', valk=(ctxt.f, str(msg)))
    except FonctionError, msg:
-      U2MESS('F', 'FONCT0_30', valk=(ctxt.f, str(msg), traceback.format_exc()))
+      UTMESS('F', 'FONCT0_30', valk=(ctxt.f, str(msg), traceback.format_exc()))
   
    ### creation de la fonction produite par appel à DEFI_FONCTION
    ### on récupère les paramètres issus du calcul de __ex
index afe030a7ff0392621d38aa4069264f03b05be769..1b1786336710ea709a13059954fd7b4699c7ca19 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF calc_precont_ops Macro  DATE 10/10/2006   AUTEUR REZETTE C.REZETT
+#@ MODIF calc_precont_ops Macro  DATE 31/03/2008   AUTEUR ASSIRE A.ASSIR
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  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.        
+# 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.
 # ======================================================================
 
 
@@ -24,8 +24,8 @@
 def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
                                 CABLE_BP,CABLE_BP_INACTIF,
                                 COMP_INCR,ETAT_INIT,NEWTON,RECH_LINEAIRE,
-                                CONVERGENCE,INCREMENT,SOLVEUR,SOLV_NON_LOCAL,
-                                LAGR_NON_LOCAL,INFO,TITRE,**args):
+                                CONVERGENCE,INCREMENT,SOLVEUR,
+                                INFO,TITRE,**args):
 
 
   """
@@ -37,7 +37,7 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
   import types
   from Accas import _F
   from Noyau.N_utils import AsType
-  from Utilitai.Utmess     import UTMESS
+  from Utilitai.Utmess     import  UTMESS
   ier=0
 
   # On importe les definitions des commandes a utiliser dans la macro
@@ -56,26 +56,26 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
   # La macro compte pour 1 dans la numerotation des commandes
   self.set_icmd(1)
 
-  # Le concept sortant (de type evol_noli) est nomme RES dans 
+  # Le concept sortant (de type evol_noli) est nomme RES dans
   # le contexte de la macro
 
   self.DeclareOut('RES',self.sd)
 
   # -------------------------------------------------------------
-  # 1. CREATION DES MOTS-CLES ET CONCEPTS POUR LES STAT_NON_LINE 
+  # 1. CREATION DES MOTS-CLES ET CONCEPTS POUR LES STAT_NON_LINE
   # ------------------------------------------------------------
 
 
   # 1.1 Recuperation de la liste d'instants, de l'instant initial et final
   #     Creation de la nouvelle liste d'instants
-  # ----------------------------------------------------------   
+  # ----------------------------------------------------------
 
   dIncrement=INCREMENT[0].cree_dict_valeurs(INCREMENT[0].mc_liste)
-  
+
   __prec = dIncrement['PRECISION']
   __L0   = dIncrement['LIST_INST']
   __L1   = __L0.Valeurs()
-     
+
   # Traitement de l'etat initial
   if ETAT_INIT:
       dEtatInit=ETAT_INIT[0].cree_dict_valeurs(ETAT_INIT[0].mc_liste)
@@ -85,7 +85,7 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
       __EVINIT = dEtatInit['EVOL_NOLI']
   else :
       dEtatInit=None
-      
+
   # Test de la presence de reuse=
   if self.reuse == None:
       dReuse=None
@@ -110,19 +110,19 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
 
   # Teste si INST_INIT est bien plus petit que INST_FIN
   if __TMAX <= __TMIN:
-    UTMESS('F','CALC_PRECONT','INST_FIN PLUS PETIT QUE INST_INIT')
+    UTMESS('F','CABLE0_1')
 
-  # Cree la liste d'instant __L2 allant de __TMIN a __TMAX et contenant 
+  # Cree la liste d'instant __L2 allant de __TMIN a __TMAX et contenant
   # un instant supplementaire __TINT
   __L2=[]
   for m in __L1:
     if m>=__TMIN and m<=__TMAX:
       __L2.append(m)
-  
+
   __TINT = (9.*__L2[-1] + __L2[-2])/10.
   __L2[-1:-1] = [__TINT]
 
-  # __LST0 est la liste d'instants utilisée pour l'etape 1 
+  # __LST0 est la liste d'instants utilisée pour l'etape 1
   __LST0=DEFI_LIST_REEL( DEBUT = __TMIN,
                         INTERVALLE = _F(JUSQU_A = __TMAX, NOMBRE = 1),)
 
@@ -133,7 +133,7 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
                          VALE=(__TMIN,0.0,__TINT,1.0,__TMAX,1.0),);
 
   for i in dIncrement.keys():
-      if dIncrement[i]==None : del dIncrement[i] 
+      if dIncrement[i]==None : del dIncrement[i]
   dIncrement['LIST_INST']= __LST
   dIncrement['INST_FIN'] = __TINT
 
@@ -160,21 +160,6 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
         if dRech_lin[i]==None : del dRech_lin[i]
   else :
     dRech_lin=None
-    
-  if SOLV_NON_LOCAL:
-    dSolv_nonloc=SOLV_NON_LOCAL[0].cree_dict_valeurs(SOLV_NON_LOCAL[0].mc_liste)
-    for i in dSolv_nonloc.keys():
-        if dSolv_nonloc[i]==None : del dSolv_nonloc[i]
-  else :
-    dSolv_nonloc=None
-        
-  if LAGR_NON_LOCAL:
-    dLagr_nonloc=LAGR_NON_LOCAL[0].cree_dict_valeurs(LAGR_NON_LOCAL[0].mc_liste)
-    for i in dLagr_nonloc.keys():
-        if dLagr_nonloc[i]==None : del dLagr_nonloc[i]
-  else :
-    dLagr_nonloc=None   
-    
 
 
   # 1.3 Creation des mots-cles pour les 3 AFFE_CHAR_MECA
@@ -213,11 +198,11 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
                                        SIGM_BPEL = 'OUI',
                                        RELA_CINE = 'OUI',) )
 
-    # Creation de __GROUP_MA_A : liste des noms des cables contenus 
-    # dans chaque concept CABLE_BP = cables  a activer 
+    # Creation de __GROUP_MA_A : liste des noms des cables contenus
+    # dans chaque concept CABLE_BP = cables  a activer
     __TCAB = RECU_TABLE(CO=mcabl,NOM_TABLE='CABLE_BP');
     __nb = 0
-    while 1: 
+    while 1:
       try:
           Result[__nb][0] = __TCAB['NOM_CABLE',__nb+1]
           __CAB = __TCAB['NOM_CABLE',__nb+1]
@@ -232,14 +217,14 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
                 break
               if i == len(__GROUP_MA_A):
                 __GROUP_MA_A.append(__CAB)
-    
-          __nb = __nb + 1  
+
+          __nb = __nb + 1
           Result.append([None]*1)
     #   Si on a lu toutes les valeurs alors on sort de la boucle
       except KeyError:
         break
 
-  # Creation de __GROUP_MA_I : liste des noms des cables contenus 
+  # Creation de __GROUP_MA_I : liste des noms des cables contenus
   # dans chaque CABLE_BP_INACTIF
   # __GROUP_MA_CABLE = liste des cables actifs et inactifs
   Result = [[None]*1]
@@ -249,7 +234,7 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
     for mcabl in CABLE_BP_INACTIF:
       __TCA0 = RECU_TABLE(CO=mcabl,NOM_TABLE='CABLE_BP');
       __nb = 0
-      while 1: 
+      while 1:
         try:
             Result[__nb][0] = __TCA0['NOM_CABLE',__nb+1]
             __CA0 = __TCA0['NOM_CABLE',__nb+1]
@@ -264,8 +249,8 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
                   break
                 if i == len(__GROUP_MA_I):
                   __GROUP_MA_I.append(__CA0)
-      
-            __nb = __nb + 1  
+
+            __nb = __nb + 1
             Result.append([None]*1)
       #   Si on a lu toutes les valeurs alors on sort de la boucle
         except KeyError:
@@ -276,12 +261,12 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
       # Creation de mots-cles pour les AFFE_CHAR_MECA
       motscle6['RELA_CINE_BP'].append(_F(CABLE_BP=mcabl,
                                          SIGM_BPEL = 'NON',
-                                         RELA_CINE = 'OUI',) )  
-                                               
+                                         RELA_CINE = 'OUI',) )
+
   __GROUP_MA_CABLES = __GROUP_MA_A + __GROUP_MA_I
 
 
-  # 1.4 Creation des mots-clés facteurs COMP_INCR 
+  # 1.4 Creation des mots-clés facteurs COMP_INCR
   # pour étape 2 (dComp_incr0) et étape 3 (dComp_incr1)
   # ------------------------------------------------------
 
@@ -301,7 +286,7 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
 
   dComp_incr0=copy.copy(dComp_incr)
   dComp_incr1=copy.copy(dComp_incr)
-   
+
   dComp_incr0.append(_F(RELATION='SANS',GROUP_MA=__GROUP_MA_CABLES,) )
   if __GROUP_MA_I:
     dComp_incr1.append(_F(RELATION='SANS',GROUP_MA=__GROUP_MA_I,) )
@@ -311,7 +296,7 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
   # ---------------------------------------------------------
 
   __MOD = string.ljust(MODELE.nom,8)
-  __MOD =__MOD+'.MODELE    .NOMA        '
+  __MOD =__MOD+'.MODELE    .LGRF        '
   __LMAIL = aster.getvectjev(__MOD)
   __MAIL  = string.strip(__LMAIL[0])
 
@@ -321,16 +306,16 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
                        AFFE    =_F( GROUP_MA     = __GROUP_MA_A,
                                     PHENOMENE    = 'MECANIQUE',
                                     MODELISATION = 'BARRE') )
-  
+
 
   # 1.6 Blocage de tous les noeuds des cables actifs
   # --------------------------------------------------
-  
+
   _B_CA=AFFE_CHAR_MECA(MODELE=__M_CA,
                         DDL_IMPO= _F( GROUP_MA = __GROUP_MA_A,
                                       DX = 0.,
                                       DY = 0.,
-                                      DZ = 0.),)                                                 
+                                      DZ = 0.),)
 
 
   # 1.7 Chargements concernant les cables
@@ -344,13 +329,13 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
 
 
   # -------------------------------------------------------------
-  # 2. CALCULS 
+  # 2. CALCULS
   # ------------------------------------------------------------
 
 
-  #------------------------------------------------------------------- 
-  # 2.1 Premiere etape : calcul sur le(s) cable(s) et 
-  #     recuperation des _F_CAs aux noeuds 
+  #-------------------------------------------------------------------
+  # 2.1 Premiere etape : calcul sur le(s) cable(s) et
+  #     recuperation des _F_CAs aux noeuds
   #     on travaile entre tmin et tmax
   #-------------------------------------------------------------------
 
@@ -368,13 +353,13 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
                                         PRECISION = __prec),
                          SOLVEUR = dSolveur,
                          INFO     =INFO,
-                         TITRE = TITRE,  )                      
-                   
+                         TITRE = TITRE,  )
+
   __EV1 = CALC_NO( reuse    = __EV1,
                    RESULTAT = __EV1,
                    GROUP_MA = __GROUP_MA_A,
                    OPTION = 'FORC_NODA' )
-                           
+
   __REA = CREA_CHAMP (
                      TYPE_CHAM = 'NOEU_DEPL_R',
                      OPERATION = 'EXTR',
@@ -388,15 +373,15 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
                      ASSE= _F(GROUP_MA=__GROUP_MA_A,
                               CHAM_GD=__REA,
                               COEF_R = -1.), )
-                  
+
   _F_CA=AFFE_CHAR_MECA(MODELE=__M_CA,
-                          VECT_ASSE = __REAC )      
-  
-  
-  
+                          VECT_ASSE = __REAC )
+
+
+
   #-----------------------------------------------------------------------
   # 2.2 Deuxieme etape : application de la precontrainte sur le beton
-  #     en desactivant les cables                         
+  #     en desactivant les cables
   #-----------------------------------------------------------------------
 
   # Regeneration des mots-cles EXCIT passés en argument de la macro
@@ -415,7 +400,12 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
   dExcit1.append(_F(CHARGE = _F_CA,
                     FONC_MULT=__FCT ),)
 
-  RES=STAT_NON_LINE( 
+  motscle4={}
+  if dReuse: motscle4['reuse']=[]
+  else:      motscle4['reuse']=dReuse
+
+
+  RES=STAT_NON_LINE(
                      MODELE      =MODELE,
                      CARA_ELEM   =CARA_ELEM,
                      CHAM_MATER  = CHAM_MATER,
@@ -426,13 +416,11 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
                      CONVERGENCE=dConvergence,
                      RECH_LINEAIRE = dRech_lin,
                      SOLVEUR = dSolveur,
-                     SOLV_NON_LOCAL = dSolv_nonloc,
-                     LAGR_NON_LOCAL = dLagr_nonloc,
                      ARCHIVAGE = _F(INST = __TINT),
                      INFO     =INFO,
                      TITRE = TITRE,
                      EXCIT = dExcit1,
-                     )
+                     **motscle4)
 
   # Recuperation du dernier numero d'ordre pour pouvoir  l'écraser dans RES
   __dico2 = RES.LIST_VARI_ACCES()
@@ -446,28 +434,26 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
   # Creation du mots-cles EXCIT pour le STAT_NON_LINE
   dExcit2=copy.copy(dExcit)
   dExcit2.append(_F(CHARGE=_C_CT,) )
-   
+
   # Calcul sur un seul pas (de __TINT a __TMAX)
   RES=STAT_NON_LINE( reuse      = RES,
                      ETAT_INIT  = _F(EVOL_NOLI =RES),
                      MODELE     = MODELE,
                      CHAM_MATER = CHAM_MATER,
                      CARA_ELEM  = CARA_ELEM,
-                     COMP_INCR=dComp_incr1, 
-                     INCREMENT=_F(LIST_INST = __LST, 
+                     COMP_INCR=dComp_incr1,
+                     INCREMENT=_F(LIST_INST = __LST,
                                   PRECISION = __prec),
                      NEWTON =dNewton,
                      RECH_LINEAIRE = dRech_lin,
                      CONVERGENCE=dConvergence,
                      SOLVEUR = dSolveur,
-                     SOLV_NON_LOCAL = dSolv_nonloc,
-                     LAGR_NON_LOCAL = dLagr_nonloc,
                      ARCHIVAGE = _F(NUME_INIT = __no,
                                     DETR_NUME_SUIV = 'OUI' ),
                      INFO  =INFO,
-                     TITRE = TITRE,    
-                     EXCIT =dExcit2,                 
-                     )  
+                     TITRE = TITRE,
+                     EXCIT =dExcit2,
+                     )
 
   return ier
 
index 01ecfcb01cae619e78f8a41142b347218c5c4d4c..2f1353bb917456ab85e20333b3db562bbcbc037e 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF calc_table_ops Macro  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF calc_table_ops Macro  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -31,7 +31,7 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args):
    macro = 'CALC_TABLE'
    from Accas                 import _F
    from Cata.cata             import table_sdaster, table_fonction, table_jeveux
-   from Utilitai.Utmess       import UTMESS
+   from Utilitai.Utmess       import  UTMESS
    from Utilitai              import transpose
    from Utilitai.Table        import Table, merge
 
@@ -73,14 +73,16 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args):
       # format pour l'impression des filtres
       form_filtre = '\nFILTRE -> NOM_PARA: %-16s CRIT_COMP: %-4s VALE: %s'
       if occ['OPERATION'] == 'FILTRE':
-         col = getattr(tab, occ['NOM_PARA'])
          # peu importe le type, c'est la meme méthode d'appel
          opts = [occ[k] for k in ('VALE','VALE_I','VALE_C','VALE_K') if occ.has_key(k)]
          kargs = {}
          for k in ('CRITERE','PRECISION'):
             if occ.has_key(k):
                kargs[k] = occ[k]
-         tab = tab & ( getattr(col, occ['CRIT_COMP'])(*opts,**kargs) )
+
+         col = getattr(tab, occ['NOM_PARA'])
+         tab = getattr(col, occ['CRIT_COMP'])(*opts,**kargs)
+
          # trace l'operation dans le titre
          #if FORMAT in ('TABLEAU','ASTER'):
          tab.titr += form_filtre % (occ['NOM_PARA'], occ['CRIT_COMP'], \
@@ -94,7 +96,7 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args):
             lpar = [lpar]
          for p in lpar:
             if not p in tab.para:
-               UTMESS('F', macro, 'Paramètre %s inexistant dans la table %s' % (p, TABLE.nom))
+              UTMESS('F','TABLE0_2',valk=[p,TABLE.nom])
          tab = tab[occ['NOM_PARA']]
 
       #----------------------------------------------
@@ -103,7 +105,7 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args):
          try:
             tab.Renomme(*occ['NOM_PARA'])
          except KeyError, msg:
-            UTMESS('F', macro, msg)
+            UTMESS('F','TABLE0_3',valk=msg)
 
       #----------------------------------------------
       # 4. Traitement du TRI
@@ -121,9 +123,9 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args):
                lpar = [lpar]
             for p in lpar:
                if not p in tab.para:
-                  UTMESS('F', macro, 'Paramètre %s inexistant dans la table %s' % (p, TABLE.nom))
+                  UTMESS('F','TABLE0_4',valk=[p, TABLE.nom])
                if not p in tab2.para:
-                  UTMESS('F', macro, 'Paramètre %s inexistant dans la table %s' % (p, occ['TABLE'].nom))
+                  UTMESS('F','TABLE0_5',valk=[p,occ['TABLE'].nom] )
             opts.append(lpar)
          tab = merge(*opts)
    
@@ -136,6 +138,15 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args):
             vectval = getattr(tab, occ['NOM_PARA']).values()
             aster.affiche('MESSAGE', 'Ajout de la colonne %s : %s' % (occ['NOM_PARA']+repr(vectval))+'\n')
 
+      #----------------------------------------------
+      # 6. Traitement de AJOUT
+      if occ['OPERATION'] == 'AJOUT':
+         if len(occ['NOM_PARA']) != len(occ['VALE']):
+            UTMESS('F', 'TABLE0_14')
+         dnew = dict(zip(occ['NOM_PARA'], occ['VALE']))
+         # ajout de la ligne avec vérification des types
+         tab.append(dnew)
+   
    #----------------------------------------------
    # 99. Création de la table_sdaster résultat
    # cas réentrant : il faut détruire l'ancienne table_sdaster
@@ -164,3 +175,4 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args):
                        **dprod)
    
    return ier
+
index e218557854504bede56fcce0219bbde7c624cb63..115448c87342a2fb0fa052269cd2250df4b10aa0 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF creation_donnees_homard Macro  DATE 04/04/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF creation_donnees_homard Macro  DATE 11/12/2007   AUTEUR GNICOLAS G.NICOLAS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# RESPONSABLE ABBAS M.ABBAS
+# RESPONSABLE GNICOLAS G.NICOLAS
 """
 Cette classe crée le fichier de configuration permettant de lancer HOMARD depuis Code_Aster.
 """
-__revision__ = "V1.2"
+__revision__ = "V1.3"
 __all__ = [ ]
  
 import os
@@ -30,13 +30,13 @@ from types import ListType, TupleType
 EnumTypes = (ListType, TupleType)
 
 try:
-  from Utilitai.Utmess import UTMESS
+  from Utilitai.Utmess import   UTMESS
 except ImportError:
-  def UTMESS(code, sprg, texte) :
+  def UTMESS(code, idmess, valk=(), vali=(), valr=()):
     """Clone de utmess si on ne reussit pas à le charger
     """
-    fmt = '\n <%s> <%s> %s\n\n'
-    print fmt % (code, sprg, texte)
+    fmt = '\n <%s> <%s> %s %s %s\n\n'
+    print fmt % (code, idmess, valk, vali, valr)
 
 # ------------------------------------------------------------------------------
 class creation_donnees_homard:
@@ -75,7 +75,7 @@ class creation_donnees_homard:
       self.ModeHOMA = d_aux[nom_macro][1]
       self.mode_homard_texte = d_aux[nom_macro][2]
     else :
-      UTMESS("F", nom_macro, "Cette macro commande est inconnue.")
+      UTMESS("F",'HOMARD0_1')
 #
 # 2. Données générales de cette initialisation
 #
@@ -285,7 +285,7 @@ class creation_donnees_homard:
       break
 #
     if message_erreur is not None :
-      UTMESS("F", self.nom_macro, message_erreur)
+      UTMESS("F",'HOMARD0_2',valk=message_erreur)
 #
     return self.fic_homard_niter, self.fic_homard_niterp1
 # ------------------------------------------------------------------------------
@@ -302,13 +302,12 @@ class creation_donnees_homard:
         os.remove (nomfic)
       except os.error, codret_partiel :
         print "Probleme au remove, erreur numéro ", codret_partiel[0], ":", codret_partiel[1]
-        UTMESS("F", self.nom_macro, "Impossible de tuer le fichier "+nomfic)
+        UTMESS("F",'HOMARD0_3',valk=nomfic)
 #
     fichier = open (nomfic,"w")
     self.fichier = fichier
 #
     return fichier, nomfic
-# ------------------------------------------------------------------------------
   def ecrire_ligne_configuration_0 (self, commentaire) :
     """Ecrit une ligne de commentaires du fichier de configuration
    Arguments :
@@ -444,6 +443,23 @@ class creation_donnees_homard:
         for aux in self.niveau :
           self.ecrire_ligne_configuration_2(aux[0], aux[1])
 #
+#     5.5. L'usage de l'indicateur
+#
+        if self.mots_cles.has_key("TYPE_OPER_INDICA") :
+          if self.mots_cles["TYPE_OPER_INDICA"] is not None :
+            self.ecrire_ligne_configuration_2("CCModeFI", self.mots_cles["TYPE_OPER_INDICA"])
+#
+#     5.6. Les éventuels groupes de filtrage du raffinement/deraffinement
+#
+        for cle in ( "GROUP_MA", "GROUP_NO" ) :
+          if self.mots_cles.has_key(cle) :
+            if self.mots_cles[cle] is not None :
+              if not type(self.mots_cles[cle]) in EnumTypes :
+                self.ecrire_ligne_configuration_2("CCGroAda", self.mots_cles[cle])
+              else :
+                for group in self.mots_cles[cle] :
+                  self.ecrire_ligne_configuration_2("CCGroAda", group)
+#
 #     6. Les éventuels champs à mettre à jour
 #
       if self.dico_configuration.has_key("Champs") :
@@ -468,12 +484,12 @@ class creation_donnees_homard:
         self.ecrire_ligne_configuration_2("SuivFron", "oui")
         self.ecrire_ligne_configuration_2("CCFronti", self.dico_configuration["Fichier_ASTER_vers_HOMARD"])
         self.ecrire_ligne_configuration_2("CCNoMFro", self.dico_configuration["NOM_MED_MAILLAGE_FRONTIERE"])
-        if self.mots_cles.has_key("GROUP_MA") :
-          if self.mots_cles["GROUP_MA"] is not None :
-            if not type(self.mots_cles["GROUP_MA"]) in EnumTypes :
-              self.ecrire_ligne_configuration_2("CCGroFro", self.mots_cles["GROUP_MA"])
+        if self.mots_cles.has_key("GROUP_MA_FRONT") :
+          if self.mots_cles["GROUP_MA_FRONT"] is not None :
+            if not type(self.mots_cles["GROUP_MA_FRONT"]) in EnumTypes :
+              self.ecrire_ligne_configuration_2("CCGroFro", self.mots_cles["GROUP_MA_FRONT"])
             else :
-              for group_ma in self.mots_cles["GROUP_MA"] :
+              for group_ma in self.mots_cles["GROUP_MA_FRONT"] :
                 self.ecrire_ligne_configuration_2("CCGroFro", group_ma)
 #
 #     8. L'éventuel maillage annexe
@@ -508,7 +524,7 @@ class creation_donnees_homard:
 #
     if message_erreur is not None :
       message_erreur = "Ecriture de "+nomfic_global+". "+message_erreur
-      UTMESS("F", self.nom_macro, message_erreur)
+      UTMESS("F",'HOMARD0_2',valk=message_erreur)
 #
     return
 # ------------------------------------------------------------------------------
@@ -536,6 +552,6 @@ class creation_donnees_homard:
       break
 #
     if message_erreur is not None :
-      UTMESS("F", self.nom_macro, message_erreur)
+      UTMESS("F",'HOMARD0_2',valk=message_erreur)
 #
     return nomfic_global
index 3a30ca3dacfcf4378391566507666865fb902cb0..4ff185e4eea35859e4bae7eb9ada5910d8d07caa 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF defi_cable_bp_ops Macro  DATE 26/03/2007   AUTEUR ASSIRE A.ASSIR
+#@ MODIF defi_cable_bp_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETT
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  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.        
+# 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.
 # ======================================================================
 # RESPONSABLE ASSIRE A.ASSIRE
 
@@ -68,7 +68,7 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON,
   # La macro compte pour 1 dans la numerotation des commandes
   self.set_icmd(1)
 
-  # Le concept sortant (de type char_meca) est nomme CHCABLE dans 
+  # Le concept sortant (de type char_meca) est nomme CHCABLE dans
   # le contexte de la macro
 
   self.DeclareOut('__DC',self.sd)
@@ -87,12 +87,12 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON,
 
     RAYON    = dCONE['RAYON']
     LONGUEUR = dCONE['LONGUEUR']
-    
+
     motscles['CONE']=[]
     motscles['CONE'].append( dCONE )
 
     # RECUPERATION DU MAILLAGE A PARTIR DU MODELE
-    __MAIL = aster.getvectjev( string.ljust(MODELE.nom,8) + '.MODELE    .NOMA        ' )
+    __MAIL = aster.getvectjev( string.ljust(MODELE.nom,8) + '.MODELE    .LGRF        ' )
     __MAIL= __MAIL[0].strip()
     MAILLAGE = self.get_sd_avant_etape(__MAIL,self)
 
@@ -100,9 +100,9 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON,
     __NOM = 'AN__'
     __LGNO = MAILLAGE.LIST_GROUP_NO()
     __LGN1 = []
-    for i in __LGNO : 
+    for i in __LGNO :
       __LGN1.append( i[0][:len(__NOM)] )
-  
+
     __NB  = __LGN1.count(__NOM)
 
 # FIN RECUPERATION DES INFOS DONNEES PAR LE MOT-CLE "CONE"
@@ -122,12 +122,12 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON,
   motscles['DEFI_CABLE']=[]
 
   for i in dDEFI_CABLE:
-    
+
     # CAS OU L'ON A DEFINI LE MOT-CLE "CONE"
     if CONE:
 
       # CREATION DU PREMIER TUNNEL
-    
+
       if dCONE['PRESENT'][0] == 'OUI':
         __NB = __NB + 1
         __NOM1 = __NOM + str( int(__NB) )
@@ -135,7 +135,7 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON,
         motscle2={}
         motscle2['CREA_GROUP_NO']=[]
 
-        if i.has_key('GROUP_MA') == 1: 
+        if i.has_key('GROUP_MA') == 1:
           __CAB = i['GROUP_MA']
 
           if type(GROUP_MA_BETON) in [types.TupleType, types.ListType]: gma = list(GROUP_MA_BETON)
@@ -143,18 +143,12 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON,
           gma.insert(0, __CAB)
 
           motscle2= {'CREA_GROUP_NO': [{'LONGUEUR': LONGUEUR, 'RAYON': RAYON, 'OPTION': 'TUNNEL', 'GROUP_MA': gma, 'GROUP_MA_AXE': __CAB, 'NOM': __NOM1}]}
-        if i.has_key('MAILLE') == 1: 
-          echo_mess=[]
-          echo_mess.append( ' \n' )
-          echo_mess.append( ' # ---------------------------------------------------------------------------\n' )
-          echo_mess.append( ' # DEFI_CABLE_BP - Erreur : MAILLE INTERDIT - UTILISER GROUP_MA               \n' )
-          echo_mess.append( ' # ---------------------------------------------------------------------------\n' )
-          message=string.join(echo_mess)
-          UTMESS('F',message)
-        if i.has_key('GROUP_NO_ANCRAGE') == 1: 
+        if i.has_key('MAILLE') == 1:
+          UTMESS('F','CABLE0_2')
+        if i.has_key('GROUP_NO_ANCRAGE') == 1:
           __PC1 = i['GROUP_NO_ANCRAGE'][0]
           motscle2['CREA_GROUP_NO'][0]['GROUP_NO_ORIG'] = __PC1
-        if i.has_key('NOEUD_ANCRAGE') == 1: 
+        if i.has_key('NOEUD_ANCRAGE') == 1:
           __PC1 = i['NOEUD_ANCRAGE'][0]
           motscle2['CREA_GROUP_NO'][0]['NOEUD_ORIG'] = __PC1
 
@@ -174,7 +168,7 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON,
         motscle2={}
         motscle2['CREA_GROUP_NO']=[]
 
-        if i.has_key('GROUP_MA') == 1: 
+        if i.has_key('GROUP_MA') == 1:
           __CAB = i['GROUP_MA']
 
           if type(GROUP_MA_BETON) in [types.TupleType, types.ListType]: gma = list(GROUP_MA_BETON)
@@ -182,18 +176,12 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON,
           gma.insert(0, __CAB)
 
           motscle2= {'CREA_GROUP_NO': [{'LONGUEUR': LONGUEUR, 'RAYON': RAYON, 'OPTION': 'TUNNEL', 'GROUP_MA': gma, 'GROUP_MA_AXE': __CAB, 'NOM': __NOM2}]}
-        if i.has_key('MAILLE') == 1: 
-          echo_mess=[]
-          echo_mess.append( ' \n' )
-          echo_mess.append( ' # ---------------------------------------------------------------------------\n' )
-          echo_mess.append( ' # DEFI_CABLE_BP - Erreur : MAILLE INTERDIT - UTILISER GROUP_MA               \n' )
-          echo_mess.append( ' # ---------------------------------------------------------------------------\n' )
-          message=string.join(echo_mess)
-          UTMESS('F',message)
-        if i.has_key('GROUP_NO_ANCRAGE') == 1: 
+        if i.has_key('MAILLE') == 1:
+          UTMESS('F','CABLE0_2')
+        if i.has_key('GROUP_NO_ANCRAGE') == 1:
           __PC1 = i['GROUP_NO_ANCRAGE'][1]
           motscle2['CREA_GROUP_NO'][0]['GROUP_NO_ORIG'] = __PC1
-        if i.has_key('NOEUD_ANCRAGE') == 1: 
+        if i.has_key('NOEUD_ANCRAGE') == 1:
           __PC1 = i['NOEUD_ANCRAGE'][1]
           motscle2['CREA_GROUP_NO'][0]['NOEUD_ORIG'] = __PC1
 
@@ -204,63 +192,63 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON,
                     **motscle2
                    ) ;
 
-  
+
       # CREATION DES NOUVEAUX FACTEURS DU MOT-CLE "DEFI_CABLE" POUR DEFI_CABLE_BP
-  
+
       if dCONE['PRESENT'][0] == 'OUI' and dCONE['PRESENT'][1] == 'OUI':
-        if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: 
+        if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
           motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
                                             GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'],
                                             GROUP_NO_FUT=( __NOM1,__NOM2, ), ), )
-        if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: 
+        if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
           motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
                                             NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'],
                                             GROUP_NO_FUT=( __NOM1,__NOM2, ), ), )
-  
+
       if dCONE['PRESENT'][0] == 'OUI' and dCONE['PRESENT'][1] == 'NON':
-        if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: 
+        if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
           motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
                                             GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'],
                                             GROUP_NO_FUT=( __NOM1, ), ), )
-        if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: 
+        if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
           motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
                                             NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'],
                                             GROUP_NO_FUT=( __NOM1, ), ), )
-  
+
       if dCONE['PRESENT'][0] == 'NON' and dCONE['PRESENT'][1] == 'OUI':
-        if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: 
+        if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
           motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
                                             GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'],
                                             GROUP_NO_FUT=( __NOM2, ), ), )
-        if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: 
+        if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
           motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
                                             NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'],
                                             GROUP_NO_FUT=( __NOM2, ), ), )
+
       if dCONE['PRESENT'][0] == 'NON' and dCONE['PRESENT'][1] == 'NON':
-        if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: 
+        if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
           motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
                                             GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'], ), )
-        if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: 
+        if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
           motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
                                             NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'], ), )
 
 
     # CAS OU L'ON A PAS DEFINI LE MOT-CLE "CONE"
     else:
-      if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: 
+      if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
         motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
                                           GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'], ), )
 
-      if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: 
+      if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
         motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
                                           NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'], ), )
 
-      if i.has_key('MAILLE') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: 
+      if i.has_key('MAILLE') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
         motscles['DEFI_CABLE'].append( _F(MAILLE=i['MAILLE'],
                                           GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'], ), )
 
-      if i.has_key('MAILLE') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: 
+      if i.has_key('MAILLE') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
         motscles['DEFI_CABLE'].append( _F(MAILLE=i['MAILLE'],
                                           NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'], ), )
 
@@ -302,5 +290,5 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON,
 
 #   __TCAB = RECU_TABLE(CO=__DC,NOM_TABLE='CABLE_BP');
 #   IMPR_TABLE(TABLE=__TCAB);
+
   return ier
index 63a04aece30acaa47b42f0c2a21332a845cc6597..3d27d590ec7119a00dc1d4bad114e4e00f0c5bb0 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF defi_inte_spec_ops Macro  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF defi_inte_spec_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -32,7 +32,7 @@ def defi_inte_spec_ops(self,DIMENSION,PAR_FONCTION,KANAI_TAJIMI,
    from types import ListType, TupleType
    EnumTypes = (ListType, TupleType)
    from Accas               import _F
-   from Utilitai.Utmess     import UTMESS
+   from Utilitai.Utmess     import  UTMESS
    import Numeric
    
    commande='DEFI_INTE_SPEC'
@@ -59,8 +59,7 @@ def defi_inte_spec_ops(self,DIMENSION,PAR_FONCTION,KANAI_TAJIMI,
    nfntot = len(PAR_FONCTION)+len(KANAI_TAJIMI)+len(CONSTANT)
    dimh   = (DIMENSION*(DIMENSION+1))/2
    if dimh!=nfntot :
-      txt  = "nombre de fonctions erroné pour une matrice hermitienne"
-      UTMESS('F',commande, txt)
+      UTMESS('F','SPECTRAL0_1')
 
    l_f=[]
    for occ in PAR_FONCTION : l_f.append(('PAR_FONCTION',occ))
@@ -68,8 +67,7 @@ def defi_inte_spec_ops(self,DIMENSION,PAR_FONCTION,KANAI_TAJIMI,
    for occ in CONSTANT     : l_f.append(('CONSTANT'    ,occ))
    for occ in l_f :
       if occ[0]!='PAR_FONCTION' and occ[1]['FREQ_MAX']<occ[1]['FREQ_MIN'] :
-         txt  = occ[0]+" : FREQ_MAX < FREQ_MIN"
-         UTMESS('F',commande, txt)
+          UTMESS('F','SPECTRAL0_2',valk=occ[0])
    l_is=[occ[1]['NUME_ORDRE_I'] for occ in l_f]
    l_js=[occ[1]['NUME_ORDRE_J'] for occ in l_f]
    iis=sum(l_is)
@@ -81,8 +79,7 @@ def defi_inte_spec_ops(self,DIMENSION,PAR_FONCTION,KANAI_TAJIMI,
    ih=sum(l_ih)
    jh=sum(l_jh)
    if ((iis!=ih) or (ijs!=jh)) :
-      txt  = "erreur sur les indices"
-      UTMESS('F',commande, txt)
+      UTMESS('F','SPECTRAL0_3')
 
 #--- Construction de la liste de fonctions complexes
    l_fc=[]
index 2176ab899e169dd0f507a0392bd181351923db91..d0c1a8c12b1f1b32ae9d8e17cd4f7afc6c428196 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF defi_part_feti_ops Macro  DATE 26/03/2007   AUTEUR ASSIRE A.ASSIR
+#@ MODIF defi_part_feti_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETT
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  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.        
+# 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.
 # ======================================================================
 # RESPONSABLE ASSIRE A.ASSIRE
 
@@ -32,7 +32,7 @@
 #  LOGICIEL        si AUTRE alors on attend un chemin complet vers executable
 #  NOM_GROUP_MA    Un nom de base pour les group_ma contenant les SD
 #  INFO            1,2
-#  
+#
 # ===========================================================================
 # script PYTHON : lancement de DEFI_PART_PA_OPS et de DEFI_PART_OPS
 
@@ -43,42 +43,42 @@ def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTIO
 
   from Accas import _F
   from Noyau.N_utils import AsType
+  from Utilitai.Utmess import  UTMESS
+
   from Utilitai import partition
 
   # DEBUT DE LA MACRO
   # La macro compte pour 1 dans la numerotation des commandes
   self.set_icmd(1)
   ier=0
-  
+
   # On importe les definitions des commandes a utiliser dans la macro
   DEFI_PART_OPS   = self.get_cmd('DEFI_PART_OPS')
   INFO_EXEC_ASTER = self.get_cmd('INFO_EXEC_ASTER')
   DEFI_FICHIER    = self.get_cmd('DEFI_FICHIER')
   DETRUIRE        = self.get_cmd('DETRUIRE')
   DEFI_PART_PA_OPS   = self.get_cmd('DEFI_PART_PA_OPS')
-  
+
   nompro='DEFI_PART_FETI'
-  
+
   # Maillage
   if args.has_key('MODELE'):
     if args['MODELE'] != None:
       __MOD = string.ljust(args['MODELE'].nom,8)
-      __MOD =__MOD+'.MODELE    .NOMA        '
+      __MOD =__MOD+'.MODELE    .LGRF        '
       __LMAIL = aster.getvectjev(__MOD)
       __MAIL  = string.strip(__LMAIL[0])
       MAILLAGE=self.get_sd_avant_etape(__MAIL,self)
     else:
       MAILLAGE=args['MAILLAGE']
-  
+
   # Nom des GROUP_MA générés
   NOM_GROUP_MA = string.strip(NOM_GROUP_MA)
 
   # Test sur le nombre de caractères de NOM_GROUP_MA
   if ( len(NOM_GROUP_MA)+len(str(NB_PART)) > 7 ):
     ln=7-len(str(NB_PART))
-    UTMESS('F', nompro, 'Afin de pouvoir générer les GROUP_MA, réduisez le nombre '\
-                        'de caractères de NOM_GROUP_MA à un maximum de : %i' %ln)
+    UTMESS('F','FETI0_1',vali=ln)
 
   # Verification que des GROUP_MA ne portent pas deja les memes noms
   _lst = []
@@ -87,12 +87,12 @@ def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTIO
   for i in range(NB_PART):
     if ( NOM_GROUP_MA+str(i) in _lst ):
       ngrma=NOM_GROUP_MA+str(i)
-      UTMESS('F', nompro, "Il existe déjà un GROUP_MA nommé : %s" %ngrma)
+      UTMESS('F','FETI0_2',valk=ngrma)
     if args.has_key('NOM_GROUP_MA_BORD') :
       if args['NOM_GROUP_MA_BORD'] != None :
         if ( args['NOM_GROUP_MA_BORD']+str(i) in _lst ):
           ngrma=args['NOM_GROUP_MA_BORD']+str(i)
-          UTMESS('F', nompro, "Il existe déjà un GROUP_MA nommé : %s" %ngrma)
+          UTMESS('F','FETI0_2',valk=ngrma)
 
   # Le concept sortant dans le contexte de la macro
   self.DeclareOut('_SDFETI',self.sd)
@@ -109,7 +109,7 @@ def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTIO
         for i in dGroup[-1].keys():
           if dGroup[-1][i]==None : del dGroup[-1][i]
         motscle1['GROUPAGE']=dGroup
-  
+
   # Regeneration des mots-cles POIDS_MAILLES passés en argument de la macro
   if args.has_key('POIDS_MAILLES'):
     if args['POIDS_MAILLES'] != None :
@@ -119,8 +119,8 @@ def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTIO
         for i in dEval[-1].keys():
           if dEval[-1][i]==None : del dEval[-1][i]
         motscle1['POIDS_MAILLES']=dEval
-  # Y a t'il présence du mot clé : NOM_GROUP_MA_BORD 
+
+  # Y a t'il présence du mot clé : NOM_GROUP_MA_BORD
   if args.has_key('GROUP_MA_BORD'):
     if args['GROUP_MA_BORD'] != None :
       motscle1['GROUP_MA_BORD']=args['GROUP_MA_BORD']
@@ -140,13 +140,13 @@ def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTIO
                    MAILLAGE=MAILLAGE,
                    INFO=INFO,
                    METHODE=METHODE,
-                   NB_PART=NB_PART, 
+                   NB_PART=NB_PART,
                    CORRECTION_CONNEX=CORRECTION_CONNEX,
                    TRAITER_BORDS=TRAITER_BORDS,
-                   NOM_GROUP_MA=NOM_GROUP_MA, 
+                   NOM_GROUP_MA=NOM_GROUP_MA,
                    **motscle1
-                     ); 
-  
+                     );
+
   # Liste des groupes de mailles du maillage
   _LST_GMA = MAILLAGE.LIST_GROUP_MA()
   _LST_GMA = map(lambda x: x[0], _LST_GMA)
@@ -158,15 +158,15 @@ def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTIO
       for i in range(NB_PART):
         txt = { 'GROUP_MA': NOM_GROUP_MA + str(i) }
         _tmp.append( txt )
-   
+
         if args.has_key('NOM_GROUP_MA_BORD') :
           if args['NOM_GROUP_MA_BORD'] != None :
             if ( args['NOM_GROUP_MA_BORD']+str(i) in _LST_GMA ):
               txt['GROUP_MA_BORD'] = string.strip(args['NOM_GROUP_MA_BORD']) + str(i)
-            _tmp.append( txt )  
-    
+            _tmp.append( txt )
+
       motscle2= {'DEFI': _tmp }
-  
+
       # Regeneration des mots-cles EXCIT passés en argument de la macro
       if args.has_key('EXCIT'):
         if args['EXCIT'] != None :
@@ -176,7 +176,7 @@ def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTIO
             for i in dExcit[-1].keys():
               if dExcit[-1][i]==None : del dExcit[-1][i]
           motscle2['EXCIT']=dExcit
-  
+
       _SDFETI=DEFI_PART_OPS(NOM='SDD',
                             MODELE=args['MODELE'],
                             INFO=1,
@@ -184,7 +184,7 @@ def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTIO
                             );
     else:
       _SDFETI=None
-  
+
   else:
     _SDFETI=None
 
diff --git a/Aster/Cata/cataSTA9/Macro/dyna_iss_vari_ops.py b/Aster/Cata/cataSTA9/Macro/dyna_iss_vari_ops.py
new file mode 100644 (file)
index 0000000..9ab71c5
--- /dev/null
@@ -0,0 +1,349 @@
+#@ MODIF dyna_iss_vari_ops Macro  DATE 21/04/2008   AUTEUR ZENTNER I.ZENTNER 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  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.        
+# ======================================================================
+from Accas import _F
+import string
+
+def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNITE_RESU_FORC,
+                       NB_FREQ, PAS, UNITE_RESU_IMPE, TYPE, MATR_GENE ,INFO,
+                         **args):
+   """
+      Macro DYNA_ISS_VARI
+   """
+   ier=0
+   import Numeric as Num
+   import LinearAlgebra as LinAl
+   import MLab
+   import os
+   import aster
+   diag = MLab.diag
+   max = MLab.max
+   min = MLab.min
+   sum = Num.sum
+   abs = Num.absolute
+   conj = Num.conjugate
+   from Utilitai.Table import Table
+   from Utilitai.Utmess import  UTMESS
+
+   def get_group_coord(group):
+      """Retourne les coordonnees des noeuds du groupe 'group'
+      """
+      l_ind = Num.array(coll_grno.get('%-8s' % group, [])) - 1
+      return Num.take(t_coordo, l_ind)
+
+
+   # On importe les definitions des commandes a utiliser dans la macro
+
+   COMB_MATR_ASSE = self.get_cmd('COMB_MATR_ASSE')
+   LIRE_IMPE_MISS = self.get_cmd('LIRE_IMPE_MISS')
+   LIRE_FORC_MISS = self.get_cmd('LIRE_FORC_MISS')
+   COMB_MATR_ASSE = self.get_cmd('COMB_MATR_ASSE')   
+
+   CREA_CHAMP = self.get_cmd('CREA_CHAMP')   
+   DYNA_LINE_HARM = self.get_cmd('DYNA_LINE_HARM')   
+   DETRUIRE= self.get_cmd('DETRUIRE')   
+
+   DEFI_FONCTION  = self.get_cmd('DEFI_FONCTION')
+   CREA_TABLE     = self.get_cmd('CREA_TABLE')
+
+   # Comptage commandes + declaration concept sortant
+   self.set_icmd(1)
+   self.DeclareOut('tab_out', self.sd)
+   macro='DYNA_ISS_VARI'
+#--------------------------------------------------------
+   dgene = MATR_GENE[0].cree_dict_valeurs(MATR_GENE[0].mc_liste)
+   if dgene['MATR_AMOR'] != None:
+     aster.affiche('MESSAGE',' MATR_AMOR existe')
+     __ma_amort = MATR_GENE['MATR_AMOR']
+   else:         
+     __ma_amort=COMB_MATR_ASSE(CALC_AMOR_GENE=_F(MASS_GENE = MATR_GENE['MATR_MASS'] ,
+                                        RIGI_GENE = MATR_GENE['MATR_RIGI'] ,                                       
+                                        AMOR_REDUIT= (  0.0,),
+                                         ),                               
+                                  );
+     aster.affiche('MESSAGE',' MATR_AMOR pas donnee, on prend AMOR_REDUIT=0.0,')
+#   dint = INTERF[0].cree_dict_valeurs(INTERF[0].mc_liste)
+#   dcoh = MATR_COHE[0].cree_dict_valeurs(MATR_COHE[0].mc_liste)
+   
+   from SD.sd_maillage import sd_maillage
+   from SD.sd_base_modale import sd_base_modale   
+   from SD.sd_resultat import sd_resultat
+   from SD.sd_cham_gene import sd_cham_gene       
+   # MAILLAGE
+   nom_bamo = MATR_GENE['MATR_RIGI'].REFA.get()[0]
+   nume_ddl = aster.getvectjev(nom_bamo[0:8] + '           .REFD        ' )[3]
+   nom_mail = aster.getvectjev( nume_ddl[0:19] + '.REFN        ' )[0] 
+   num_mail = sd_maillage(nom_mail)
+   # MODELE, DDLGENE
+   nom_ddlgene = MATR_GENE['MATR_RIGI'].REFA.get()[1]  
+   nom_modele = aster.getvectjev( nume_ddl[0:19] + '.LILI        ' )[1]   
+   nume_resu = self.jdc.sds_dict[string.strip(nom_bamo)]
+   nume_ddlgene = self.jdc.sds_dict[string.strip(nom_ddlgene)]
+   nume_modele = self.jdc.sds_dict[string.strip(nom_modele[0:8])]   
+
+   #TEST base modale
+   nom_bamo1 = MATR_GENE['MATR_MASS'].REFA.get()[0]
+   nom_bamo2 = MATR_GENE['MATR_RIGI'].REFA.get()[0] 
+   if string.strip(nom_bamo) != string.strip(nom_bamo1) or string.strip(nom_bamo) != string.strip(nom_bamo2) or string.strip(nom_bamo1) != string.strip(nom_bamo2):
+      UTMESS('F','ALGORITH5_42')
+   
+
+   nbnot, nbl, nbma, nbsm, nbsmx, dime = num_mail.DIME.get()
+
+   # coordonnees des noeuds
+   l_coordo = num_mail.COORDO.VALE.get()
+   t_coordo = Num.array(l_coordo)
+   t_coordo.shape = nbnot, 3
+   # groupes de noeuds
+   coll_grno = num_mail.GROUPENO.get()
+   GROUP_NO_INTER=INTERF['GROUP_NO_INTERF']
+   noe_interf = get_group_coord(GROUP_NO_INTER)
+   #  print noe_interf  
+   nbno, nbval = noe_interf.shape
+   if INFO==2:
+      aster.affiche('MESSAGE','NBNO INTERFACE : '+str(nbno))
+  # MODES
+   nbval, nbmodt,nbmodd,nbmods = nume_resu.UTIL.get()
+
+
+   nbmodt2 = MATR_GENE['MATR_RIGI'].DESC.get()[1]
+   if nbmodt2 != nbmodt:
+       UTMESS('F','ALGORITH5_42')
+
+   if INFO==2:
+      texte = 'NOMBRE DE MODES: '+str(nbmodt)+'   MODES DYNAMIQUES: '+str(nbmodd)+'   MODES STATIQUES: '+str(nbmods)
+      aster.affiche('MESSAGE',texte)
+      aster.affiche('MESSAGE','COMPOSANTE '+NOM_CMP)
+   SPEC = Num.zeros((NB_FREQ,nbmodt,nbmodt), Num.Float)+1j
+#
+#---------------------------------------------------------------------
+  # BOUCLE SUR LES FREQUENCES
+   VITE_ONDE = MATR_COHE['VITE_ONDE']
+   alpha = MATR_COHE['PARA_ALPHA']
+   abscisse = [None]*NB_FREQ
+
+   for k in range(0,NB_FREQ):
+      freqk=FREQ_INIT+PAS*k
+      aster.affiche('MESSAGE','FREQUENCE DE CALCUL: '+str(freqk))
+
+      # Matrice de coherence                  
+      XX=noe_interf[:,0]
+      YY=noe_interf[:,1]
+
+      XN=Num.repeat(XX,nbno)
+      YN=Num.repeat(YY,nbno)
+      XR=Num.reshape(XN,(nbno,nbno))
+      YR=Num.reshape(YN,(nbno,nbno))
+      XRT=Num.transpose(XR)
+      YRT=Num.transpose(YR)
+      DX=XR-XRT
+      DY=YR-YRT
+      DIST=DX**2+DY**2
+      COHE=Num.exp(-(DIST*(alpha*freqk/VITE_ONDE)**2.))
+      
+      # On desactive temporairement les FPE qui pourraient etre generees (a tord!) par blas
+      aster.matfpe(-1)
+      eig, vec =LinAl.eigenvectors(COHE)
+      aster.matfpe(1)
+      eig=eig.real
+      vec=vec.real
+      # on rearrange selon un ordre decroissant
+      eig = Num.where(eig < 1.E-10, 0.0, eig)
+      order = (Num.argsort(eig)[::-1])
+      eig = Num.take(eig, order)
+      vec = Num.take(vec, order, 0)
+
+      #-----------------------
+      # Nombre de modes POD a retenir
+      etot=sum(diag(COHE))
+      ener=0.0
+      nbme=0
+      if INFO==2:
+         aster.affiche('MESSAGE','ETOT :'+str(etot))
+      while nbme < nbno:
+         ener= eig[nbme]+ener
+         prec=ener/etot
+         nbme=nbme+1
+         if INFO==2:
+            aster.affiche('MESSAGE','VALEUR PROPRE  '+str(nbme)+' : '+str(eig[nbme-1]))
+         if prec > PRECISION :
+            break
+
+      aster.affiche('MESSAGE','NOMBRE DE MODES POD RETENUS : '+str(nbme))
+      aster.affiche('MESSAGE','PRECISION (ENERGIE RETENUE) : '+str(prec))      
+
+      PVEC=Num.zeros((nbme,nbno), Num.Float)
+      for k1 in range(0,nbme):
+         PVEC[k1, 0:nbno]=Num.sqrt(eig[k1])*vec[k1] 
+      # CALCUL DE FS variable-------------------------------
+      XO=Num.zeros((nbme,nbmods), Num.Float)
+      if NOM_CMP=='DX':
+         COMP = 1
+      elif NOM_CMP=='DY':
+         COMP = 2
+      elif NOM_CMP=='DZ': 
+         COMP = 3  
+
+   #---------MODES interface
+      # ----- boucle sur les modes statiques
+      for mods in range(0,nbmods):
+         nmo = nbmodd+mods+1
+         __CHAM=CREA_CHAMP( TYPE_CHAM='NOEU_DEPL_R',
+                OPERATION='EXTR',                  
+                NUME_ORDRE=nmo,
+                RESULTAT = nume_resu  ,
+                NOM_CHAM = 'DEPL'
+                      );
+         MCMP =__CHAM.EXTR_COMP(NOM_CMP,[GROUP_NO_INTER]).valeurs
+
+         NNO =__CHAM.EXTR_COMP(NOM_CMP,[GROUP_NO_INTER], topo=1).noeud
+
+
+         som=sum(MCMP)
+         max1=max(MCMP)
+         min1=min(MCMP)
+         maxm=max([abs(max1),abs(min1)])
+      #CALCUL DE XO
+#  on recupere la composante COMP (dx,dy,dz) des modes et on projete
+         #  CAS 1: MODES DE CORPS RIGIDE
+         if INTERF['MODE_INTERF'] =='CORP_RIGI':
+            for modp in range(0,nbme):
+               #modes de translation
+               if mods+1 <=3:
+                  if abs(som)<10.E-6:
+                     XO[modp,mods]=0.0
+                  else :
+                     fact=1./som               
+                     XO[modp,mods]=fact*Num.innerproduct(MCMP,PVEC[modp])
+               #modes de rotation
+               else:
+                  if maxm<10.E-6:
+                     if som<10.E-6:
+                        XO[modp,mods]=0.0 
+                     else :
+                        UTMESS('F','ALGORITH6_86')
+                  else :  
+                     fact = 1./(nbno)                   
+                     XO[modp,mods]=1./(maxm**2.)*fact*Num.innerproduct(MCMP,PVEC[modp])
+
+         # CAS 2: MODES EF
+         if INTERF['MODE_INTERF'] =='TOUT':
+            for modp in range(0,nbme):
+               if abs(som)<10.E-6:
+                  if maxm<10.E-6:
+                     XO[modp,mods]=0.0 
+                  else:
+                     UTMESS('F','UTILITAI5_89')                     
+               else:
+                  fact=1./som                  
+                  XO[modp,mods]=fact*Num.innerproduct(MCMP,PVEC[modp])
+
+         DETRUIRE(CONCEPT=_F(NOM=(__CHAM)),INFO=1)
+
+   #----Impedances etc.----------------------------------------------------------------- 
+
+      if k>0:
+         DETRUIRE(CONCEPT=_F(NOM=(__impe,__fosi,__rito)),INFO=1) 
+
+      __impe = LIRE_IMPE_MISS(BASE=nume_resu,  
+                           TYPE=TYPE,
+                           NUME_DDL_GENE=nume_ddlgene,               
+                           UNITE_RESU_IMPE= UNITE_RESU_IMPE, 
+                           FREQ_EXTR=freqk, 
+                           );
+      __rito=COMB_MATR_ASSE(COMB_C=(
+                                _F(MATR_ASSE=__impe,
+                                 COEF_C=1.0+0.j,),
+                                _F(MATR_ASSE=MATR_GENE['MATR_RIGI'],
+                                 COEF_C=1.0+0.j,),
+                                 ),
+                                 SANS_CMP='LAGR',
+                                 );                                                                            
+      __fosi = LIRE_FORC_MISS(BASE=nume_resu,  
+                           NUME_DDL_GENE=nume_ddlgene,
+                           NOM_CMP=NOM_CMP,
+                           NOM_CHAM='DEPL',               
+                           UNITE_RESU_FORC = UNITE_RESU_FORC, 
+                           FREQ_EXTR=freqk,); 
+      # impedance
+      MIMPE=__impe.EXTR_MATR_GENE() 
+      #  extraction de la partie modes interface 
+      KRS = MIMPE[nbmodd:nbmodt,nbmodd:nbmodt]
+
+      # force sismique pour verif
+#      FS0=__fosi.EXTR_VECT_GENE_C()
+#      FSE=FS0[nbmodd:nbmodt][:]
+      SP=Num.zeros((nbmodt,nbmodt),Num.Float)
+      for k1 in range(0,nbme):
+         #  calcul de la force sismique mode POD par mode POD
+         FS = Num.matrixmultiply(KRS,XO[k1]) 
+         Fzero=Num.zeros((1,nbmodd),Num.Float) 
+         FS2=Num.concatenate((Fzero,Num.reshape(FS,(1,nbmods))),1)
+      #  Calcul harmonique
+         __fosi.RECU_VECT_GENE_C(FS2[0]) 
+         __dyge = DYNA_LINE_HARM(MODELE= nume_modele,
+                          MATR_MASS = MATR_GENE['MATR_MASS'],
+                          MATR_RIGI = __rito, 
+                          FREQ = freqk,
+                          MATR_AMOR = __ma_amort,                          
+                          EXCIT =_F ( VECT_ASSE = __fosi,
+                                      COEF_MULT= 1.0,
+                                  ),
+                        );                              
+         #  recuperer le vecteur modal depl calcule par dyge                                                     
+         desc = __dyge.DESC.get()
+         assert desc[0].strip() == 'DEPL', 'Champ DEPL non trouvé'
+         nomcham = __dyge.TACH.get()[1][0].strip()
+         cham = sd_cham_gene(nomcham)
+         RS = Num.array(cham.VALE.get())      
+         SP=SP+RS*conj(RS[:,Num.NewAxis])   
+         DETRUIRE(CONCEPT=_F(NOM=(__dyge)),INFO=1) 
+
+
+      SPEC[k]=SP
+
+      abscisse[k]= freqk
+##---------------------------------------------------------------------
+#  Ecriture des tables
+#--------------------------------------------------------------------- 
+#   ------ CREATION DE L OBJET TABLE 
+   tab = Table()
+   tab.append({'NOM_CHAM' : 'DSP', 'OPTION' : 'TOUT',  'DIMENSION' : nbmodt})
+   foncc=Num.array([None]*NB_FREQ*3)
+   for k2 in range(nbmodt):
+      for k1 in range(k2+1):
+         ks=0
+         for k in range(NB_FREQ) :
+            foncc[ks]=abscisse[k]
+            foncc[ks+1]= SPEC[k][k1,k2].real
+            foncc[ks+2]= SPEC[k][k1,k2].imag 
+            ks=ks+3            
+         _f = DEFI_FONCTION(NOM_PARA='FREQ',
+                         NOM_RESU='SPEC',
+                         VALE_C  = foncc.tolist() )
+      
+      # Ajout d'une ligne dans la Table
+         tab.append({'NUME_ORDRE_I' : k1+1, 'NUME_ORDRE_J' : k2+1, 'FONCTION_C' : _f.nom})
+   
+
+   # Creation du concept en sortie
+   tab_out = CREA_TABLE(TYPE_TABLE='TABLE_FONCTION',
+                        **tab.dict_CREA_TABLE())                       
+   return ier
index cf76807817fd0d34f280e93ea79421f0fa539ba6..ad19d219bbc54c3c72427fd2b4b900d5a29f3345 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF exec_logiciel_ops Macro  DATE 29/08/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF exec_logiciel_ops Macro  DATE 19/05/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -33,7 +33,7 @@ def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO
    """
    macro='EXEC_LOGICIEL'
    import aster
-   from Utilitai.Utmess     import UTMESS
+   from Utilitai.Utmess     import  UTMESS
    from Utilitai.System     import ExecCommand
    from Utilitai.UniteAster import UniteAster
    
@@ -89,13 +89,13 @@ def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO
       elif dMCF['FORMAT'] == 'SALOME':
          mode_lancement = EXECFILE
          if len(l_args) < 1:
-            UTMESS('F', macro, "FORMAT SALOME, L'ARGUMENT 1 DOIT ETRE " \
-                               "LE NOM DU FICHIER MED PRODUIT PAR LE SCRIPT PYTHON.")
+            UTMESS('F','EXECLOGICIEL0_1')
          else:
             d_para['fichMED'] = l_args[0]
       
       else:
-         UTMESS('F', macro, "ON NE SAIT PAS TRAITER LE FORMAT '%s'" % dMCF['FORMAT'])
+         UTMESS('F', 'EXECLOGICIEL0_2', valk=dMCF['FORMAT'])
+
    
    #----------------------------------------------
    # 2. lecture des mots-clés
@@ -119,34 +119,29 @@ def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO
          aster.affiche('MESSAGE', output)
       
       if CODE_RETOUR_MAXI >= 0 and iret > CODE_RETOUR_MAXI:
-         UTMESS('F', macro, 'CODE RETOUR INCORRECT (MAXI %d) : %d' \
-                % (CODE_RETOUR_MAXI, iret))
+         UTMESS('F', 'EXECLOGICIEL0_3', vali=[CODE_RETOUR_MAXI,iret])
    
    #----------------------------------------------
    # 3b. Exécution d'un fichier Python
    elif mode_lancement == EXECFILE:
       if d_para['prog'] != '':
-         UTMESS('A', macro, "LE MOT-CLE LOGICIEL N'EST PAS UTILISE AVEC CE FORMAT")
+         UTMESS('A', 'EXECLOGICIEL0_4')
       context={}
       try:
          execfile(d_para['fichIN'], context)
       except:
          traceback.print_exc()
          txt = open(d_para['fichIN'], 'r').read()
-         UTMESS('F', macro, """ERREURS LORS DE L'EXECUTION DU FICHIER CI-DESSOUS :
-<<<<<<<<<<<<<<< DEBUT DU FICHIER >>>>>>>>>>>>>>>
-%s
-<<<<<<<<<<<<<<<  FIN  DU FICHIER >>>>>>>>>>>>>>>
-""" % txt)
+         UTMESS('F', 'EXECLOGICIEL0_5', valk=txt)
       
       if not os.path.exists(d_para['fichMED']):
-         UTMESS('F', macro, "LE FICHIER %s N'EXISTE PAS" % d_para['fichMED'])
+         UTMESS('F', 'EXECLOGICIEL0_6', valk=d_para['fichMED'])
       else:
          # copie fichMED vers fichOUT pour pouvoir le récupérer
          shutil.copyfile(d_para['fichMED'], d_para['fichOUT'])
    
    else:
-      UTMESS('F', macro, "Mode de lancement inconnu : %s" % mode_lancement)
+      UTMESS('F','EXECLOGICIEL0_7',valk=mode_lancement)
    
    #----------------------------------------------
    # 4. Conversion du maillage
diff --git a/Aster/Cata/cataSTA9/Macro/externe_mess.py b/Aster/Cata/cataSTA9/Macro/externe_mess.py
new file mode 100644 (file)
index 0000000..718900f
--- /dev/null
@@ -0,0 +1,27 @@
+#@ MODIF externe_mess Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+import sys
+"""
+Définition de la méthode UTMESS pour reca_xxxx.py, Graph.py, Table.py
+"""
+def UTMESS(code,sprg,texte):
+   fmt='\n <%s> <%s> %s\n\n'
+   print fmt % (code,sprg,texte)
+   if code=='F': sys.exit()
index b74d7e5486a5f854ed6ec42fddf0f575698f8873..f6e2dd62cc014ccc795cd58491ba2cddf7b98440 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF fiabilite_mefisto Macro  DATE 04/10/2005   AUTEUR REZETTE C.REZETTE 
+#@ MODIF fiabilite_mefisto Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -48,7 +48,7 @@ def fiabilite_mefisto ( self, Rep_Calc_LOGICIEL_global,
   import os
   import string
   import Numeric
-  from Utilitai.Utmess import UTMESS
+  from Utilitai.Utmess import  UTMESS
 #
 #____________________________________________________________________
 #
@@ -237,9 +237,9 @@ def fiabilite_mefisto ( self, Rep_Calc_LOGICIEL_global,
 #    if args.has_key('MATRICE'):
     if args["MATRICE"] != None:
       if len(args["MATRICE"]) != nb_occu_variable**2:
-        UTMESS('F','FIABILITE_MEPHISTO',' LE NOMBRE D ELEMENTS' 
-        +' DU MOT CLE MATRICE DOIT ETRE EGAL A : '
-        +str(nb_occu_variable**2))
+#        +' DU MOT CLE MATRICE DOIT ETRE EGAL A : '
+#        +str(nb_occu_variable**2))
+        UTMESS('F','FIABILITE0_1',vali=nb_occu_variable**2)
       for m in range(nb_occu_variable) :
         aux = [ ]
         for n in range(nb_occu_variable) :
index 829a93e7877e00fd516662a54899b838f0ca7a3d..4c1ade834975daea61e68f7766ff5d7a00d2693b 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF gene_vari_alea_ops Macro  DATE 28/02/2006   AUTEUR VABHHTS J.PELLET 
+#@ MODIF gene_vari_alea_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -25,7 +25,7 @@ def gene_vari_alea_ops(self,**args):
   return 0
 
 def gene_vari_alea_init(self,d):
-  from Utilitai.Utmess import UTMESS
+  from Utilitai.Utmess import  UTMESS
   a     =self.etape['BORNE_INF']
   moyen =self.etape['VALE_MOY' ]
   TYPE  =self.etape['TYPE']
@@ -35,22 +35,12 @@ def gene_vari_alea_init(self,d):
   if   TYPE=='EXP_TRONQUEE' :
      b     =self.etape['BORNE_SUP']
      if (a>=b) :
-         message=' : il faut BORNE_INF < BORNE_SUP \n'
-         message=message+'  BORNE_INF = '+str(a)+'\n'
-         message=message+'  BORNE_SUP = '+str(b)+'\n'
-         UTMESS('F','GENE_VARI_ALEA',message)
+         UTMESS('F','PROBA0_1',valr=[a,b])
      elif (moyen<=a)or(moyen>=b) :
-         message=' : VALE_MOY trop grand ou trop petit\n'
-         message=message+'  BORNE_INF = '+str(a)+'\n'
-         message=message+'  VALE_MOY  = '+str(moyen)+'\n'
-         message=message+'  BORNE_SUP = '+str(b)+'\n'
-         UTMESS('F','GENE_VARI_ALEA',message)
+         UTMESS('F','PROBA0_2',valr=[a,moyen,b])
      k=1./(moyen-a)
      if (exp(-b*k)<1.E-12) :
-         message=' : BORNE SUP très grande \n'
-         message=message+'pb précision possible, vérifiez'+'\n'
-         message=message+'la distribution des valeurs générées \n'
-         UTMESS('F','GENE_VARI_ALEA',message)
+         UTMESS('F','PROBA0_3')
      # résolution par point fixe
      eps   =1.E-4
      nitmax=100000
@@ -63,10 +53,7 @@ def gene_vari_alea_init(self,d):
      self.sd.valeur=-( log(exp(-a*k)-alpha*self.getran()[0] ) ) /k
   elif TYPE=='EXPONENTIELLE' :
      if (moyen<=a) :
-        message=' : on doit avoir : VALE_MOY > BORNE_INF \n'
-        message=message+'  VALE_MOY  = '+str(moyen)+'\n'
-        message=message+'  BORNE_INF = '+str(a)+'\n'
-        UTMESS('F','GENE_VARI_ALEA',message)
+        UTMESS('F','PROBA0_4',valr=[moyen,a])
      v = moyen-a
      u=self.getran()[0]
      x = -log(1-u)
@@ -74,15 +61,11 @@ def gene_vari_alea_init(self,d):
   elif TYPE=='GAMMA'         :
      delta =self.etape['COEF_VAR' ]
      if (moyen<=a) :
-        message=' : on doit avoir : VALE_MOY > BORNE_INF \n'
-        message=message+'  VALE_MOY  = '+str(moyen)+'\n'
-        message=message+'  BORNE_INF = '+str(a)+'\n'
-        UTMESS('F','GENE_VARI_ALEA',message)
+        UTMESS('F','PROBA0_4',valr=[moyen,a])
      v = moyen-a
      alpha = 1./(delta**2)
      if (alpha<=1.) :
-        message=' : erreur : ALPHA < 1\n'
-        UTMESS('F','GENE_VARI_ALEA',message)
+        UTMESS('F','PROBA0_5')
      gamma2 = alpha-1.
      gamm1  = 1./gamma2
      beta   = sqrt(2.*alpha-1.)
@@ -98,12 +81,10 @@ def gene_vari_alea_init(self,d):
         gamdev = beta*tan(pi*(u*c1+c2))+gamma2
         unif=self.getran()[0]
         if unif<0. :
-           message=' : erreur : unif < 0\n'
-           UTMESS('F','GENE_VARI_ALEA',message)
+           UTMESS('F','PROBA0_6')
         vv= -log(unif)
         vref = log(1+beta2*((gamdev-gamma2)**2))+gamma2*log(gamdev*gamm1)-gamdev+gamma2
 #
      if vv<=0. :
-        message=' : erreur : GAMDEV(ALPHA) < 0\n'
-        UTMESS('F','GENE_VARI_ALEA',message)
+        UTMESS('F','PROBA0_7')
      self.sd.valeur = a + v*(delta**2)*gamdev
index bc276a321a8941684aa63ac1d36f37fb21c693a1..7925a50e311cea012e701041ddc709ecb979983b 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF impr_fonction_ops Macro  DATE 02/04/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF impr_fonction_ops Macro  DATE 06/05/2008   AUTEUR CNGUYEN C.NGUYEN 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -33,10 +33,11 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args):
    import pprint
    import aster
    from Accas               import _F
-   from Cata.cata           import nappe_sdaster, fonction_c
+   from Cata.cata           import nappe_sdaster, fonction_c, formule, formule_c
    from Utilitai            import Graph
-   from Utilitai.Utmess     import U2MESS
+   from Utilitai.Utmess     import UTMESS
    from Utilitai.UniteAster import UniteAster
+   
    ier=0
    # La macro compte pour 1 dans la numerotation des commandes
    self.set_icmd(1)
@@ -64,7 +65,7 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args):
          niv='A'
       else:
          niv='I'
-      U2MESS(niv, 'FONCT0_1', valk=nomfich)
+      UTMESS(niv, 'FONCT0_1', valk=nomfich)
 
    # 0.2. Récupération des valeurs sous COURBE
    unparmi=('FONCTION','LIST_RESU','FONC_X','ABSCISSE')
@@ -100,7 +101,7 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args):
                obj=dCi[typi]
                break
          if obj==None:
-            U2MESS('S', 'SUPERVIS_56')
+            UTMESS('S', 'SUPERVIS_56')
          if typi=='FONCTION':
             if isinstance(obj, nappe_sdaster):
                lpar,lval=obj.Valeurs()
@@ -135,12 +136,18 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args):
       if not dCi.has_key('LEGENDE') and hasattr(obj,'get_name'):
             dCi['LEGENDE']=obj.get_name()
       if obj==None:
-         U2MESS('S', 'SUPERVIS_56')
+         UTMESS('S', 'SUPERVIS_56')
 
       # 1.2. Extraction des valeurs
 
       # 1.2.1. Mot-clé FONCTION
       if   typi=='FONCTION':
+         # formule à un paramètre seulement
+         if isinstance(obj, formule):
+            dpar = obj.Parametres()
+            if len(dpar['NOM_PARA']) != 1:
+               UTMESS('S', 'FONCT0_50', valk=obj.nom, vali=len(dpar['NOM_PARA']))
+         
          if isinstance(obj, nappe_sdaster):
             lpar,lval=obj.Valeurs()
             dico,ldicf=obj.Parametres()
@@ -185,6 +192,9 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args):
          else:
             ftmp__=obj
             dpar=ftmp__.Parametres()
+            # pour les formules à un paramètre (test plus haut)
+            if type(dpar['NOM_PARA']) in (list, tuple):
+               dpar['NOM_PARA'] = dpar['NOM_PARA'][0]
             if interp:
                ftmp__=CALC_FONC_INTERP(
                   FONCTION=obj,
@@ -200,10 +210,10 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args):
             lval=list(ftmp__.Valeurs())
             lx=lval[0]
             lr=lval[1]
-            if isinstance(obj, fonction_c) and dCi.get('PARTIE') == 'IMAG':
+            if isinstance(obj, (fonction_c, formule_c)) and dCi.get('PARTIE') == 'IMAG':
                lr=lval[2]
             # on stocke les données dans le Graph
-            if isinstance(obj, fonction_c) and not dCi.has_key('PARTIE'):
+            if isinstance(obj, (fonction_c, formule_c)) and not dCi.has_key('PARTIE'):
                nomresu=dpar['NOM_RESU'].strip()+'_'+str(len(graph.Legendes))
                dicC={
                   'Val' : lval,
@@ -221,11 +231,11 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args):
       # 1.2.2. Mot-clé LIST_RESU
       elif typi=='LIST_RESU':
          if interp and iocc>0:
-            U2MESS('S', 'FONCT0_2')
+            UTMESS('S', 'FONCT0_2')
          lx=dCi['LIST_PARA'].Valeurs()
          lr=obj.Valeurs()
          if len(lx)!=len(lr):
-            U2MESS('S', 'FONCT0_3')
+            UTMESS('S', 'FONCT0_3')
          # on stocke les données dans le Graph
          dicC={
             'Val' : [lx,lr],
@@ -241,9 +251,9 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args):
          ob2=dCi['FONC_Y']
          # peut-on blinder au niveau du catalogue
          if isinstance(obj, nappe_sdaster) or isinstance(ob2, nappe_sdaster):
-            U2MESS('S', 'FONCT0_4')
+            UTMESS('S', 'FONCT0_4')
          if interp and iocc>0:
-            U2MESS('S', 'FONCT0_5')
+            UTMESS('S', 'FONCT0_5')
          ftmp__=obj
          dpar=ftmp__.Parametres()
          ftm2__=ob2
@@ -300,11 +310,11 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args):
       # 1.2.4. Mot-clé ABSCISSE / ORDONNEE
       elif typi=='ABSCISSE':
          if interp and iocc>0:
-            U2MESS('S', 'FONCT0_6')
+            UTMESS('S', 'FONCT0_6')
          lx=obj
          lr=dCi['ORDONNEE']
          if len(lx)!=len(lr):
-            U2MESS('S', 'FONCT0_7')
+            UTMESS('S', 'FONCT0_7')
          # on stocke les données dans le Graph
          dicC={
             'Val' : [lx,lr],
@@ -357,10 +367,11 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args):
    if FORMAT=='TABLEAU':
       # surcharge par les formats de l'utilisateur
       kargs['dform']={
-         'csep'  : args['SEPARATEUR'],
-         'ccom'  : args['COMMENTAIRE'],
-         'cdeb'  : args['DEBUT_LIGNE'],
-         'cfin'  : args['FIN_LIGNE']
+         'csep'   : args['SEPARATEUR'],
+         'ccom'   : args['COMMENTAIRE'],
+         'ccpara' : args['COMM_PARA'],
+         'cdeb'   : args['DEBUT_LIGNE'],
+         'cfin'   : args['FIN_LIGNE'],
       }
 
    # 2.2. au format AGRAF
@@ -378,7 +389,7 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args):
 
    # 2.39. Format inconnu
    else:
-      U2MESS('S', 'FONCT0_8', valk=FORMAT)
+      UTMESS('S', 'FONCT0_8', valk=FORMAT)
 
    # Traiter le cas des UL réservées
    if args['UNITE'] and args['UNITE'] in ul_reserve:
index 44cebeccc4c089cf0a10a1d8b5711ea5ccc3dd76..0a45e2074a03ced160bf8d8e230be440d1568a88 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF impr_oar_ops Macro  DATE 07/11/2006   AUTEUR DURAND C.DURAND 
+#@ MODIF impr_oar_ops Macro  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
 
-import aster
-try :
-   from Utilitai.Utmess import UTMESS
+# protection pour eficas
+try:
+   import aster
+   from Utilitai.Utmess import  UTMESS
    from Utilitai.Table import Table
    from Utilitai.partition import MAIL_PY
-except :
+except:
    pass
 
 def buildTabString(tabLevel):
@@ -284,12 +285,12 @@ class composant(OAR_element) :
             self.mergeDictTher() # merge les tableaux resultats du revetement et de la structure
             
          if  not(self.compareListAbscTher()) :
-            UTMESS('F', 'IMPR_OAR', 'LES COUPES MECANIQUES ET THERMIQUE DOIVENT PARTAGER LES MEMES ABSCISSES')
+            UTMESS('F','OAR0_1')
             
          try :
             self.interpoleInstants() # Interpolation des instants de la table des température sur celle de la table mécanique
          except interpolationError, err:
-            UTMESS('F', 'IMPR_OAR', err.getMess())
+            UTMESS('F','OAR0_2',valk=err.getMess())
 
          # 3. Calcul de l'épaisseur de la coupe.
          self.epaisseur = abs(self.tabAbscisses[len(self.tabAbscisses)-1] - self.tabAbscisses[0])
@@ -352,7 +353,7 @@ class composant(OAR_element) :
       # Merge des listes d'abscisses
       # Le revetement est interieur la derniere abscisse du revetement doit etre egal a la premiere de la structure
       if self.tabAbscisses_S[len(self.tabAbscisses_S)-1] != self.tabAbscisses[0] :
-         UTMESS('F', 'IMPR_OAR', 'LES COUPES DU REVETEMENT ET DE LA STRUCTURE DOIVENT PARTAGER UNE ABSCISSE COMMUNE')
+         UTMESS('F','OAR0_3')
          
       # On construit une table des abscisses tempopraire
       tableAbscTemp = self.tabAbscisses_S
@@ -492,7 +493,7 @@ class composant(OAR_element) :
       # Merge des listes d'abscisses
       # Le revetement est interieur la derniere abscisse du revetement doit etre egal a la premiere de la structure
       if self.tabAbscisses_S[len(self.tabAbscisses_S)-1] != self.tabAbscisses[0] :
-         UTMESS('F', 'IMPR_OAR', 'LES COUPES DU REVETEMENT ET DE LA STRUCTURE DOIVENT PARTAGER UNE ABSCISSE COMMUNE')
+         UTMESS('F','OAR0_3')
          
       # On construit une table des abscisses tempopraire
       tableAbscTemp = self.tabAbscisses_S
@@ -667,7 +668,7 @@ class tuyauterie(OAR_element) :
          self.buildTableTorseur()
       
       except :
-         UTMESS('F', 'IMPR_OAR', "ERREUR D'ACCES AUX DONNEES")
+         UTMESS('F','OAR0_4')
 
       # Construction de l arborescence
       self.buildTree() 
@@ -741,11 +742,11 @@ def impr_oar_ops(self, TYPE_CALC, **args) :
    if TYPE_CALC=='COMPOSANT' :
       obj = composant(**args)
    elif TYPE_CALC=='MEF' : 
-      UTMESS('F', 'IMPR_OAR', 'FONCTION NON IMPLANTEE') 
+      UTMESS('F','OAR0_5')
    elif TYPE_CALC=='TUYAUTERIE' :
       obj = tuyauterie(**args) 
    else :
-      UTMESS('F', 'IMPR_OAR', 'Mot clé facteur inconnu')
+      UTMESS('F','OAR0_6')
 
    # Ecriture dans le fichier
    # Récupération de la LU du fichier de sortie
@@ -766,7 +767,7 @@ def impr_oar_ops(self, TYPE_CALC, **args) :
       else :            # extension du fichier existant
          fileObj = open(name, 'a+t')
    except IOError :
-      UTMESS('F', 'IMPR_OAR', "Erreur à l'ouverture du fichier") 
+      UTMESS('F','OAR0_7')
    else :
       obj.getNode().save(fileObj)
       fileObj.close()
index 06d4c5eb86890fbcb1bda0d48e77254d0d0e50f5..70cecd7b49cfa98fe33b40fdf01a9f91706cf8ae 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF impr_table_ops Macro  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF impr_table_ops Macro  DATE 06/05/2008   AUTEUR CNGUYEN C.NGUYEN 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -22,9 +22,7 @@
 
 import os.path
 import re
-
-from types import ListType, TupleType, StringTypes
-EnumTypes=(ListType, TupleType)
+from sets import Set
 
 
 # ------------------------------------------------------------------------------
@@ -37,7 +35,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args):
    import aster
    from Accas import _F
    from Cata.cata import table_jeveux
-   from Utilitai.Utmess  import UTMESS
+   from Utilitai.Utmess  import  UTMESS
    from Utilitai.UniteAster import UniteAster
    ier=0
    # La macro compte pour 1 dans la numerotation des commandes
@@ -60,8 +58,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args):
       nomfich=UL.Nom(args['UNITE'])
    if nomfich and os.path.exists(nomfich) and os.stat(nomfich).st_size<>0:
       if FORMAT=='XMGRACE':
-         UTMESS('A',macro,'Le fichier '+nomfich+' existe déjà, on écrit ' \
-                'à la suite.')
+         UTMESS('A','TABLE0_6',valk=nomfich)
 
    # 0.2. Création des dictionnaires des FILTRES
    Filtre=[]
@@ -79,7 +76,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args):
    ltab=[]
    if args['SENSIBILITE']:
       lps=args['SENSIBILITE']
-      if not type(lps) in EnumTypes:
+      if not type(lps) in (list, tuple):
          lps=[lps,]
       for ps in lps:
          ncomp = self.jdc.memo_sensi.get_nocomp(TABLE.nom, ps.nom)
@@ -98,7 +95,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args):
    nom_para=ltab[0][0].para
    if args['NOM_PARA']:
       nom_para=args['NOM_PARA']
-   if not type(nom_para) in EnumTypes:
+   if not type(nom_para) in (list, tuple):
       nom_para=[nom_para,]
 
    # 0.4.2. Traiter le cas des UL réservées
@@ -142,7 +139,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args):
       # vérification des paramètres
       for p in nom_para:
          if not p in tab.para:
-            UTMESS('A', 'IMPR_TABLE', 'Paramètre absent de la table : %s' % p)
+           UTMESS('A','TABLE0_7',valk=p)
       
       # sélection des paramètres et suppression des colonnes vides
       timp = tab[nom_para]
@@ -161,55 +158,72 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args):
          'FICHIER'   : nomfich,
       }
 
-      # 4.1. au format AGRAF
-      if FORMAT=='AGRAF':
+      # 4.1. au format TABLEAU
+      if FORMAT=='TABLEAU':
+         # surcharge par les formats de l'utilisateur
+         kargs['dform']={
+            'csep'   : args['SEPARATEUR'],
+            'ccom'   : args['COMMENTAIRE'],
+            'ccpara' : args['COMM_PARA'],
+            'cdeb'   : args['DEBUT_LIGNE'],
+            'cfin'   : args['FIN_LIGNE'],
+         }
+      
+      # 4.2. au format AGRAF
+      elif FORMAT=='AGRAF':
          kargs['dform']={ 'formR' : '%12.5E' }
          kfonc['FORMAT']='TABLEAU'
       
-      # 4.2. au format XMGRACE et dérivés
+      # 4.3. au format XMGRACE et dérivés
       elif FORMAT=='XMGRACE':
          kargs['dform']={ 'formR' : '%.8g' }
          kargs['PILOTE']=args['PILOTE']
          kfonc['PILOTE']=args['PILOTE']
 
-      # 4.3. format spécifié dans les arguments
+      # 4.4. format spécifié dans les arguments
       if args['FORMAT_R']:
          kargs['dform'].update({ 'formR' : fmtF2PY(args['FORMAT_R']) })
 
-      # 4.4. regroupement par paramètre : PAGINATION
+      # 4.5. regroupement par paramètre : PAGINATION
       if args['PAGINATION']:
          l_ppag=args['PAGINATION']
-         if not type(l_ppag) in EnumTypes:
+         if not type(l_ppag) in (list, tuple):
             l_ppag=[l_ppag,]
          kargs['PAGINATION'] = [p for p in l_ppag if p in nom_para]
          l_para_err          = [p for p in l_ppag if not p in nom_para]
          if len(l_para_err)>0:
-            UTMESS('A', 'IMPR_TABLE', 'Paramètres absents de la table (ou de '\
-                   'NOM_PARA) : %s' % ', '.join(l_para_err))
+             UTMESS('A','TABLE0_8',valk=l_para_err)
 
       timp.Impr(**kargs)
 
       # ----- 5. IMPR_FONCTION='OUI'
-      if args['IMPR_FONCTION'] and args['IMPR_FONCTION']=='OUI':
+      if args['IMPR_FONCTION'] == 'OUI':
          # cherche parmi les cellules celles qui contiennent un nom de fonction
-         dfon={}
-         for row in timp['FONCTION', 'FONCTION_C']:
-            for par,cell in row.items():
-               if type(cell) in StringTypes:
-                if aster.getvectjev(cell.strip().ljust(19)+'.PROL')<>None:
-                  dfon[cell.strip().ljust(19)]=par
-         # impression des fonctions trouvées
-         for f,par in dfon.items():
-            __fonc=RECU_FONCTION(
-               TABLE=sdtab,
-               FILTRE=_F(
-                  NOM_PARA=par,
-                  VALE_K=f,
-               ),
-               NOM_PARA_TABL=par,
-            )
-            __fonc.Trace(**kfonc)
-            DETRUIRE(CONCEPT=_F(NOM=('__fonc',),), ALARME='NON', INFO=1,)
+         dfon = []
+         p_extr = Set(['FONCTION', 'FONCTION_C'])
+         p_extr.intersection_update(timp.para)
+         if len(p_extr) > 0:
+            # on réduit timp aux colonnes FONCTION et FONCTION_C
+            textr = timp.__getitem__(list(p_extr))
+            for row in textr:
+               for par,cell in row.items():
+                  if type(cell) in (str, unicode):
+                     cell = cell.strip()
+                     if aster.getvectjev('%-19s.PROL' % cell) != None:
+                        dfon.append(['%-19s' % cell, par])
+            # impression des fonctions trouvées
+            for f,par in dfon:
+               __fonc=RECU_FONCTION(
+                  TABLE=sdtab,
+                  FILTRE=_F(
+                     NOM_PARA=par,
+                     VALE_K=f,
+                  ),
+                  NOM_PARA_TABL=par,
+                  TITRE = 'Fonction %s' % f,
+               )
+               __fonc.Trace(**kfonc)
+               DETRUIRE(CONCEPT=_F(NOM=('__fonc',),), ALARME='NON', INFO=1,)
 
    # 99. Traiter le cas des UL réservées
    UL.EtatInit()
index 0fe9c89e7a1682a6e845f20a938c03085189f86e..67fc3efecab97e13e331cc77c0921b8a48733952 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF info_fonction_ops Macro  DATE 24/10/2006   AUTEUR DURAND C.DURAND 
+#@ MODIF info_fonction_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -26,7 +26,7 @@ def info_fonction_ops(self,RMS,NOCI_SEISME,MAX,NORME,ECART_TYPE,INFO,**args):
   from Utilitai.t_fonction import t_fonction,t_fonction_c,t_nappe
   import math
   from Accas import _F
-  from Utilitai.Utmess import UTMESS
+  from Utilitai.Utmess import  UTMESS
   import types
   from types import ListType, TupleType
   EnumTypes = (ListType, TupleType)
@@ -83,14 +83,14 @@ def info_fonction_ops(self,RMS,NOCI_SEISME,MAX,NORME,ECART_TYPE,INFO,**args):
      lpara=dict([(i,0) for i in lpara]).keys()
      lresu=dict([(i,0) for i in lresu]).keys()
      if len(ltyfo)>1 : 
-        UTMESS('F','INFO_FONCTION',''' calcul du MAX, la liste de fonctions\
n'est pas homogène en type (fonctions et nappes) ''')
+# n'est pas homogène en type (fonctions et nappes) ''')
       UTMESS('F','FONCT0_37')
      if len(lpara)>1 : 
-        UTMESS('F','INFO_FONCTION',''' calcul du MAX, la liste de fonctions\
n'est pas homogène en label NOM_PARA :'''+' '.join(lpara))
+# n'est pas homogène en label NOM_PARA :'''+' '.join(lpara))
       UTMESS('F','FONCT0_38',valk=' '.join(lpara))
      if len(lresu)>1 : 
-        UTMESS('F','INFO_FONCTION',''' calcul du MAX, la liste de fonctions\
n'est pas homogène en label NOM_RESU : '''+' '.join(lresu))
+# n'est pas homogène en label NOM_RESU : '''+' '.join(lresu))
       UTMESS('F','FONCT0_39',valk=' '.join(lresu))
      __tab=CALC_TABLE(TABLE  = __tmfonc[0],
                       ACTION = mfact        )
      __min=CALC_TABLE(TABLE  = __tab,
@@ -183,9 +183,9 @@ def info_fonction_ops(self,RMS,NOCI_SEISME,MAX,NORME,ECART_TYPE,INFO,**args):
      if NOCI_SEISME['SPEC_OSCI'] !=None :
         ### cas intensité spectrale d'une nappe de SRO
         ### la seule option licite est INTE_SPEC
-        UTMESS('I','INFO_FONCTION',''' : intensite spectrale, avant de calculer l'\
-intensite spectrale, il est prudent de verifier la norme de la nappe sur laquelle \
-porte le calcul, ceci peut etre une source d erreurs.''')
+#intensite spectrale, il est prudent de verifier la norme de la nappe sur laquelle \
+#porte le calcul, ceci peut etre une source d erreurs.''')
+        UTMESS('I','FONCT0_40')
         amor=NOCI_SEISME['AMOR_REDUIT']
         fini=NOCI_SEISME['FREQ_INIT'  ]
         ffin=NOCI_SEISME['FREQ_FIN'   ]
index 748774ea128c2bfd4f3876e4ffdb189eb09b3c2a..870ca6b4a29ca70cccb9f83a995ba06aa343bbe0 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF lire_fonction_ops Macro  DATE 24/05/2005   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF lire_fonction_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -20,6 +20,9 @@
 
 import os.path, Numeric
 
+class LectureBlocError(Exception):
+   pass
+
 # ------------------------------------------------------------------------------
 def lire_blocs(nomfich, SEPAR):
    """Retourne la liste des blocs
@@ -29,9 +32,8 @@ def lire_blocs(nomfich, SEPAR):
       print "   . Bloc %2d : %6d lignes, %6d colonnes" % (ib, nlig, ncol)
    print "  Lecture des blocs du fichier '%s'" % nomfich
    fich=open(nomfich, 'r')
-   ier=0
-   message = ''
-   if SEPAR=='None' : SEPAR=None
+   if SEPAR == 'None':
+      SEPAR=None
    blocs  = []
    lignes = []
    llen=0
@@ -45,10 +47,8 @@ def lire_blocs(nomfich, SEPAR):
          lignes.append(map(float, splin))
          if llen==0:
             llen=len(splin)
-         elif len(splin)<>llen:
-            ier+=1
-            message='Ligne %d : %d champs au lieu de %d attendus' % (il,len(splin),llen)
-            return ier, message, []
+         elif len(splin) != llen:
+            raise LectureBlocError,  'Ligne %d : %d champs au lieu de %d attendus' % (il, len(splin), llen)
       except ValueError:
          if lignes==[]:
             pass  # dans ce cas, on a plusieurs lignes délimitant 2 fonctions
@@ -58,10 +58,10 @@ def lire_blocs(nomfich, SEPAR):
             lignes=[]
             llen=0
    fich.close()
-   if lignes!=[] :
+   if len(lignes) > 0 :
       blocs.append(Numeric.array(lignes))
       info(len(blocs), len(lignes), llen)
-   return ier, message, blocs
+   return blocs
 
 # ------------------------------------------------------------------------------
 def liste_double(nomfich,INDIC_PARA,INDIC_RESU,SEPAR):
@@ -75,9 +75,7 @@ def liste_double(nomfich,INDIC_PARA,INDIC_RESU,SEPAR):
   fonction voulue, au sens de ce découpage.
   """
   from Utilitai.transpose import transpose
-  ier, message, blocs = lire_blocs(nomfich, SEPAR)
-  if ier<>0:
-     return ier,message,[]
+  blocs = lire_blocs(nomfich, SEPAR)
 
   # vérifications de cohérences lignes et colonnes
   nb_blocs = len(blocs)
@@ -85,71 +83,56 @@ def liste_double(nomfich,INDIC_PARA,INDIC_RESU,SEPAR):
   col_para  = INDIC_PARA[1]
   bloc_resu = INDIC_RESU[0]
   col_resu  = INDIC_RESU[1]
-  msg=[]
-  if bloc_para>nb_blocs :
-     ier+=1
-     msg.append("Il y a %d blocs or INDIC_PARA=(%d, .)" % (nb_blocs, bloc_para))
-  if bloc_resu>nb_blocs:
-     ier+=1
-     msg.append("Il y a %d blocs or INDIC_RESU=(%d, .)" % (nb_blocs, bloc_resu))
-  if ier<>0:
-     return ier, '\n'.join(msg), []
+  if bloc_para > nb_blocs :
+     raise LectureBlocError, "Il y a %d blocs or INDIC_PARA=(%d, .)" % (nb_blocs, bloc_para)
+  if bloc_resu > nb_blocs:
+     raise LectureBlocError, "Il y a %d blocs or INDIC_RESU=(%d, .)" % (nb_blocs, bloc_resu)
 
-  if col_para>len(blocs[bloc_para-1][0]):
-     ier+=1
-     msg.append("Le bloc %d comporte %d colonnes or INDIC_PARA=(., %d)" % \
-         (bloc_para, len(blocs[bloc_para-1][0]), col_para))
-  if col_resu>len(blocs[bloc_resu-1][0]) :
-     ier+=1
-     msg.append("Le bloc %d comporte %d colonnes or INDIC_RESU=(., %d)" % \
-         (bloc_resu, len(blocs[bloc_resu-1][0]), col_resu))
-  if ier<>0:
-     return ier, '\n'.join(msg), []
+  if col_para > len(blocs[bloc_para-1][0]):
+     raise LectureBlocError, "Le bloc %d comporte %d colonnes or INDIC_PARA=(., %d)" % \
+         (bloc_para, len(blocs[bloc_para-1][0]), col_para)
+  if col_resu > len(blocs[bloc_resu-1][0]):
+     raise LectureBlocError, "Le bloc %d comporte %d colonnes or INDIC_RESU=(., %d)" % \
+         (bloc_resu, len(blocs[bloc_resu-1][0]), col_resu)
 
   # construction du VALE de la fonction par recherche des indices
   # de colonnes et de fonctions dans le tableau blocs
   vale_para = blocs[bloc_para-1][:,col_para-1]
   vale_resu = blocs[bloc_resu-1][:,col_resu-1]
-  if len(vale_para)!=len(vale_resu) :
-     ier+=1
+  if len(vale_para) != len(vale_resu) :
      print 'VALE_PARA =', vale_para
      print 'VALE_RESU =', vale_resu
      message="""Les deux colonnes extraites n'ont pas la meme longueur
          %d lignes pour PARA
          %d lignes pour RESU""" % (len(vale_para), len(vale_resu))
-  if ier<>0:
-     return ier,message,[]
+     raise LectureBlocError, message
 
   laux=transpose([vale_para, vale_resu])
   liste_vale=[]
-  for v in laux: liste_vale.extend(v)
-  return ier,'',liste_vale
+  for v in laux:
+     liste_vale.extend(v)
+  return liste_vale
 
 # ------------------------------------------------------------------------------
 def liste_simple(nomfich,INDIC_PARA,SEPAR):
   """recherche d'une liste simple
   """
-  ier, message, blocs = lire_blocs(nomfich, SEPAR)
+  blocs = lire_blocs(nomfich, SEPAR)
 
   # vérifications de cohérences lignes et colonnes
   nb_blocs = len(blocs)
   bloc_para = INDIC_PARA[0]
   col_para  = INDIC_PARA[1]
-  msg=[]
-  if bloc_para>nb_blocs :
-     ier+=1
-     msg.append("Il y a %d blocs or INDIC_PARA=(%d, .)" % (nb_blocs, bloc_para))
-  if col_para>len(blocs[bloc_para-1][0]):
-     ier+=1
-     msg.append("Le bloc %d comporte %d colonnes or INDIC_PARA=(., %d)" % \
-         (bloc_para, len(blocs[bloc_para-1][0]), col_para))
-  if ier<>0:
-     return ier, '\n'.join(msg), []
+  if bloc_para > nb_blocs :
+     raise LectureBlocError, "Il y a %d blocs or INDIC_PARA=(%d, .)" % (nb_blocs, bloc_para)
+  if col_para > len(blocs[bloc_para-1][0]):
+     raise LectureBlocError, "Le bloc %d comporte %d colonnes or INDIC_PARA=(., %d)" % \
+         (bloc_para, len(blocs[bloc_para-1][0]), col_para)
 
   # construction du VALE de la fonction par recherche des indices
   # de colonnes et de fonctions dans le tableau l_fonc
   vale_1=blocs[bloc_para-1][:,col_para-1]
-  return ier,'',vale_1.tolist()
+  return vale_1.tolist()
 
 # ------------------------------------------------------------------------------
 def lire_fonction_ops(self,FORMAT,TYPE,SEPAR,INDIC_PARA,UNITE,
@@ -158,7 +141,7 @@ def lire_fonction_ops(self,FORMAT,TYPE,SEPAR,INDIC_PARA,UNITE,
   """Méthode corps de la macro
   """
   from Accas import _F
-  from Utilitai.Utmess     import UTMESS
+  from Utilitai.Utmess     import  UTMESS
   from Utilitai.UniteAster import UniteAster
 
   ier=0
@@ -179,15 +162,17 @@ def lire_fonction_ops(self,FORMAT,TYPE,SEPAR,INDIC_PARA,UNITE,
   UL = UniteAster()
   nomfich=UL.Nom(UNITE)
   if not os.path.isfile(nomfich):
-     UTMESS('F', nompro, "le fichier '%s' est introuvable" % nomfich)
+     UTMESS('F','FONCT0_41',valk=nomfich)
 
   # fonction(_c) ou nappe en sortie
   self.DeclareOut('ut_fonc',self.sd)
 
   if   TYPE=='FONCTION':
     # mise en forme de la liste de valeurs suivant le format choisi :
-    ier,message,liste_vale=liste_double(nomfich,INDIC_PARA,args['INDIC_RESU'],SEPAR)
-    if ier!=0:  UTMESS('F', nompro, message)
+    try:
+       liste_vale = liste_double(nomfich,INDIC_PARA,args['INDIC_RESU'],SEPAR)
+    except LectureBlocError, message:
+       UTMESS('F', 'FONCT0_42', valk=message)
 
     # création de la fonction ASTER :
     ut_fonc=DEFI_FONCTION( NOM_PARA   =NOM_PARA,
@@ -208,11 +193,15 @@ def lire_fonction_ops(self,FORMAT,TYPE,SEPAR,INDIC_PARA,UNITE,
     if 'INDIC_MODU' in args :
                               indic1=args['INDIC_MODU']
                               indic2=args['INDIC_PHAS']
-    ier,message,liste_vale_r=liste_double(nomfich,INDIC_PARA,indic1,SEPAR)
-    if ier!=0:  UTMESS('F', nompro, message)
+    try:
+       liste_vale_r = liste_double(nomfich,INDIC_PARA,indic1,SEPAR)
+    except LectureBlocError, message:
+       UTMESS('F', 'FONCT0_42', valk=message)
 
-    ier,message,liste_vale_i=liste_double(nomfich,INDIC_PARA,indic2,SEPAR)
-    if ier!=0:  UTMESS('F', nompro, message)
+    try:
+       liste_vale_i = liste_double(nomfich,INDIC_PARA,indic2,SEPAR)
+    except LectureBlocError, message:
+       UTMESS('F', 'FONCT0_42', valk=message)
 
     liste=[]
     if   'INDIC_REEL' in args :
@@ -241,15 +230,19 @@ def lire_fonction_ops(self,FORMAT,TYPE,SEPAR,INDIC_PARA,UNITE,
     motscles={}
     motscles['DEFI_FONCTION']=[]
     for elem in mc_DEFI_FONCTION:
-       ier,message,liste_vale=liste_double(nomfich,args['INDIC_ABSCISSE'],elem['INDIC_RESU'],SEPAR)
-       if ier!=0:  UTMESS('F', nompro, message)
+       try:
+          liste_vale=liste_double(nomfich,args['INDIC_ABSCISSE'],elem['INDIC_RESU'],SEPAR)
+       except LectureBlocError, message:
+          UTMESS('F', 'FONCT0_42', valk=message)
 
        motscles['DEFI_FONCTION'].append( _F( VALE       =liste_vale,
                                              INTERPOL   =args['INTERPOL_FONC'],
                                              PROL_DROITE=args['PROL_DROITE_FONC'],
                                              PROL_GAUCHE=args['PROL_GAUCHE_FONC'] ) )
-    ier,message,liste_para=liste_simple(nomfich,INDIC_PARA,SEPAR)
-    if ier!=0:  UTMESS('F', nompro, message)
+    try:
+       liste_para = liste_simple(nomfich,INDIC_PARA,SEPAR)
+    except LectureBlocError, message:
+       UTMESS('F', 'FONCT0_42', valk=message)
 
     # création de la nappe
     ut_fonc=DEFI_NAPPE( PARA          =liste_para,
index e4f1188d19ad0575ec449ab3106a701e8e4a43ba..708dfef42492ba6fb74d1311ad073e1cd4283be9 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF lire_inte_spec_ops Macro  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF lire_inte_spec_ops Macro  DATE 26/03/2008   AUTEUR BODEL C.BODEL 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
 
-def lire_inte_spec_ops(self,UNITE,FORMAT,NOM_PARA,NOM_RESU,INTERPOL,
-                            PROL_DROITE,PROL_GAUCHE,TITRE,INFO,**args):
-  ier=0
-
-  from Accas import _F
-  import os
-  from math import cos,sin
-  from Utilitai.Utmess     import UTMESS
-  from Utilitai.UniteAster import UniteAster
-  # On importe les definitions des commandes a utiliser dans la macro
-  DEFI_FONCTION  =self.get_cmd('DEFI_FONCTION')
-  CREA_TABLE     =self.get_cmd('CREA_TABLE')
-
-  # La macro compte pour 1 dans la numerotation des commandes
-  self.set_icmd(1)
-  nompro='LIRE_INTE_SPEC'
-
-  # Lecture de la fonction dans un fichier d unité logique UNITE
-  UL = UniteAster()
-  nomfich=UL.Nom(UNITE)
-  if not os.path.isfile(nomfich):
-     UTMESS('F', nompro, "le fichier '%s' est introuvable" % nomfich)
-  file=open(nomfich,'r')
-  texte=file.read()
-  file.close()
-  
-  list_fonc=texte.split('FONCTION_C')
-  entete=list_fonc.pop(0)
-  try : 
-    entete=entete[entete.index('DIM'):]
-    dim=int(entete[entete.index('=')+1:entete.index('\n')])
-  except ValueError : 
-    UTMESS('F', nompro, "la dimension DIM n est pas précisée dans le fichier lu")
-
-  if len(list_fonc)!=(dim*(dim+1)/2):
-    UTMESS('F', nompro, "nombre de fonctions incorrect")
-
-  nume_i=[]
-  nume_j=[]
-  l_fonc=[]
-  for i in range(dim*(dim+1)/2):
-    numi=list_fonc[i][list_fonc[i].index('I =')+3:]
-    numi=numi[:numi.index('\n')]
-    nume_i.append(int(numi))
-    numj=list_fonc[i][list_fonc[i].index('J =')+3:]
-    numj=numj[:numj.index('\n')]
-    nume_j.append(int(numj))
-    try : 
-      vale_fonc=list_fonc[i][list_fonc[i].index('VALEUR =\n')+9:list_fonc[i].index('FINSF\n')]
-      vale_fonc=vale_fonc.replace('\n',' ')
-      vale_fonc=map(float,vale_fonc.split())
-    except ValueError : 
-      UTMESS('F', nompro, "erreur dans les données de fonctions")
-
-    liste=[]
-    if   FORMAT=='REEL_IMAG':
-      liste=vale_fonc
-    elif FORMAT=='MODULE_PHASE':
-      for i in range(len(vale_fonc)/3) :
-        module=vale_fonc[3*i+1]
-        phase =vale_fonc[3*i+2]
-        liste=liste+[vale_fonc[3*i],module*cos(phase),module*sin(phase)]
-
-    # création de la fonction ASTER :
-    _fonc=DEFI_FONCTION( NOM_PARA   =NOM_PARA,
-                         NOM_RESU   =NOM_RESU,
-                         PROL_DROITE=PROL_DROITE,
-                         PROL_GAUCHE=PROL_GAUCHE,
-                         INTERPOL   =INTERPOL,
-                         INFO       =INFO,
-                         TITRE      =TITRE,
-                         VALE_C     =liste,)
-    l_fonc.append(_fonc.nom)
-
-  nume_ib=[]
-  nume_jb=[]
-  for i in range(dim):
-    for j in range(i,dim):
-      nume_ib.append(i+1)
-      nume_jb.append(j+1)
-  if nume_i!=nume_ib or nume_j!=nume_jb : 
-      UTMESS('F', nompro, "erreur dans les indices")
-  mcfact=[]
-  mcfact.append(_F(PARA='NOM_CHAM'    ,LISTE_K=(NOM_RESU),NUME_LIGN=(1,)))
-  mcfact.append(_F(PARA='OPTION'      ,LISTE_K=('TOUT',) ,NUME_LIGN=(1,)))
-  mcfact.append(_F(PARA='DIMENSION'   ,LISTE_I=(dim,)    ,NUME_LIGN=(1,)))
-  mcfact.append(_F(PARA='NUME_ORDRE_I',LISTE_I=nume_i    ,NUME_LIGN=range(2,len(nume_i)+2)))
-  mcfact.append(_F(PARA='NUME_ORDRE_J',LISTE_I=nume_j    ,NUME_LIGN=range(2,len(nume_j)+2)))
-  mcfact.append(_F(PARA='FONCTION_C'  ,LISTE_K=l_fonc    ,NUME_LIGN=range(2,len(list_fonc)+2)))
-  self.DeclareOut('tab_inte',self.sd)
-  tab_inte=CREA_TABLE(LISTE=mcfact,
-                      TITRE=TITRE,
-                      TYPE_TABLE='TABLE_FONCTION')
-
-  # remet UNITE dans son état initial
-  UL.EtatInit()
-  return ier
+def lire_inte_spec_ops(self,
+                       UNITE = None,
+                       FORMAT = None,
+                       FORMAT_C = None,
+                       NOM_PARA = None,
+                       NOM_RESU = None,
+                       INTERPOL = None,
+                       PROL_DROITE = None,
+                       PROL_GAUCHE = None,
+                       TITRE = None,
+                       INFO = None,
+                       **args):
+    ier=0
+
+    from Accas import _F
+    import os
+    from math import cos,sin,sqrt
+    from Utilitai.Utmess     import UTMESS
+    from Utilitai.UniteAster import UniteAster
+    # On importe les definitions des commandes a utiliser dans la macro
+    DEFI_FONCTION  =self.get_cmd('DEFI_FONCTION')
+    CREA_TABLE     =self.get_cmd('CREA_TABLE')
+
+    # La macro compte pour 1 dans la numerotation des commandes
+    self.set_icmd(1)
+    nompro='LIRE_INTE_SPEC'
+
+    # Lecture de la fonction dans un fichier d unité logique UNITE
+    UL = UniteAster()
+    nomfich=UL.Nom(UNITE)
+    if not os.path.isfile(nomfich):
+       UTMESS('F','SPECTRAL0_4',valk=nomfich)
+    file=open(nomfich,'r')
+    texte=file.read()
+    file.close()
+
+
+    if FORMAT == 'IDEAS':
+        # fabrication d'une liste de data sets 58
+        list_fonc = texte.split('    -1')
+        j = 0
+        for ind_fonc in range(len(list_fonc)):
+            try:
+                tmp = list_fonc[j].split()
+                if tmp[0] == '58':
+                    j = j+1
+                else:
+                    list_fonc.pop(j)
+            except IndexError:
+                list_fonc.pop(j)
+
+        nb_fonc = len(list_fonc)
+        if nb_fonc == 0:
+            UTMESS('F', 'SPECTRAL0_9')
+
+        l_fonc = []
+        l_noi  = []
+        l_noj  = []
+        l_cmpi = []
+        l_cmpj = []
+        for ind_fonc in range(nb_fonc):
+            # Extraction des en-tete : nom des noeuds, composantes (=ddl), de leur sens
+            fonc = list_fonc[ind_fonc]
+            ligne = fonc.split('\n')
+
+            record_6 = ligne[7].split()
+            if  record_6[0] != '2' and record_6[0] != '3' and record_6[0] != '9' :
+                UTMESS('F', 'SPECTRAL0_10')
+            nono   = record_6[4]             # nom du noeud
+            nuno   = int(record_6[5])        # numero
+            ddlno  = float(record_6[6])/10   # DDL
+            noref  = record_6[7]             # nom du noeud de reference
+            nuref  = int(record_6[8])        # numero
+            ddlref = float(record_6[9])/10   # DDL
+            # On traduit les ddl "chiffres" en vrais ddl. Avec le sens des capteurs.
+            sens_no,ddl_no = comp(ddlno)
+            sens_ref,ddl_ref = comp(ddlref)
+            signe = sens_no*sens_ref
+
+            # On ne garde que la triang sup de la matrice inter-spectrale
+            crit1 = nuno + ddlno
+            crit2 = nuref + ddlref
+            if crit1 > crit2:
+                continue
+            record_7 = ligne[8].split()
+            nbpairs = int(record_7[1])
+            if record_7[2] == 0:
+                UTMESS('F', 'SPECTRAL0_11')
+            f0 = float(record_7[3])
+            df = float(record_7[4])
+
+            # Liste des valeurs
+            liste = fonc.split('\n')
+            valeurs = ''
+            for ind in range(13):
+                liste.pop(0)
+            for ind_lign in range(len(liste)):
+                valeurs = valeurs + liste[ind_lign]
+            tmp = valeurs.split()
+            valeurs = [signe*float(tmp[ind]) for ind in range(len(tmp))]
+
+            liste = []
+            freq = f0
+            for ind_freq in range(nbpairs):
+                liste.append(freq)
+                liste.append(valeurs[2*ind_freq])
+                liste.append(valeurs[2*ind_freq+1])
+                freq = freq + df
+
+            # création de la fonction ASTER :
+            _fonc=DEFI_FONCTION( NOM_PARA   = NOM_PARA,
+                                 NOM_RESU   = NOM_RESU,
+                                 PROL_DROITE= PROL_DROITE,
+                                 PROL_GAUCHE= PROL_GAUCHE,
+                                 INTERPOL   = INTERPOL,
+                                 INFO       = INFO,
+                                 TITRE      = TITRE,
+                                 VALE_C     = liste,)
+            l_fonc.append(_fonc.nom)     # Liste des fonctions
+            l_noi.append('N'+str(nuno))  # Liste des noeuds de mesure
+            l_cmpi.append(ddl_no)        # DDL associes
+            l_noj.append('N'+str(nuref)) # Liste des noeuds de ref
+            l_cmpj.append(ddl_ref)       # DDL associes
+
+        # Verification a posteriori de la dimension de l'inter-spectre
+        tmp = 0.5*(-1+sqrt(1+8*len(l_fonc)))
+        dim = int(tmp)
+        nb_fonc = 0.5*dim*(dim+1) 
+
+        if dim != tmp :
+            UTMESS('F', 'SPECTRAL0_6')
+
+            
+        mcfact=[]
+        mcfact.append(_F(PARA='NOM_CHAM'    ,LISTE_K=(NOM_RESU),NUME_LIGN=(1,)))
+        mcfact.append(_F(PARA='OPTION'      ,LISTE_K=('TOUT',) ,NUME_LIGN=(1,)))
+        mcfact.append(_F(PARA='DIMENSION'   ,LISTE_I=(dim)     ,NUME_LIGN=(1,)))
+        mcfact.append(_F(PARA='NOEUD_I'     ,LISTE_K=l_noi     ,NUME_LIGN=range(2,nb_fonc+2)))
+        mcfact.append(_F(PARA='NOM_CMP_I'   ,LISTE_K=l_cmpi    ,NUME_LIGN=range(2,nb_fonc+2)))
+        mcfact.append(_F(PARA='NOEUD_J'     ,LISTE_K=l_noj     ,NUME_LIGN=range(2,nb_fonc+2)))
+        mcfact.append(_F(PARA='NOM_CMP_J'   ,LISTE_K=l_cmpj    ,NUME_LIGN=range(2,nb_fonc+2)))
+        mcfact.append(_F(PARA='FONCTION_C'  ,LISTE_K=l_fonc    ,NUME_LIGN=range(2,nb_fonc+2)))
+        self.DeclareOut('tab_inte',self.sd)
+        tab_inte=CREA_TABLE(LISTE=mcfact,
+                          TITRE=TITRE,
+                          TYPE_TABLE='TABLE_FONCTION')
+
+        
+    elif FORMAT == 'ASTER':
+        list_fonc=texte.split('FONCTION_C')
+        entete=list_fonc.pop(0)
+        try : 
+            entete=entete[entete.index('DIM'):]
+            dim=int(entete[entete.index('=')+1:entete.index('\n')])
+        except ValueError : 
+            UTMESS('F', 'SPECTRAL0_5')
+
+        if len(list_fonc)!=(dim*(dim+1)/2):
+            UTMESS('F', 'SPECTRAL0_6')
+
+        nume_i=[]
+        nume_j=[]
+        l_fonc=[]
+        for i in range(dim*(dim+1)/2):
+            numi=list_fonc[i][list_fonc[i].index('I =')+3:]
+            numi=numi[:numi.index('\n')]
+            nume_i.append(int(numi))
+            numj=list_fonc[i][list_fonc[i].index('J =')+3:]
+            numj=numj[:numj.index('\n')]
+            nume_j.append(int(numj))
+            try : 
+                vale_fonc=list_fonc[i][list_fonc[i].index('VALEUR =\n')+9:list_fonc[i].index('FINSF\n')]
+                vale_fonc=vale_fonc.replace('\n',' ')
+                vale_fonc=map(float,vale_fonc.split())
+            except ValueError : 
+                UTMESS('F', 'SPECTRAL0_7')
+
+            liste=[]
+            if   FORMAT_C=='REEL_IMAG':
+                liste=vale_fonc
+            elif FORMAT_C=='MODULE_PHASE':
+                for i in range(len(vale_fonc)/3) :
+                  module=vale_fonc[3*i+1]
+                  phase =vale_fonc[3*i+2]
+                  liste=liste+[vale_fonc[3*i],module*cos(phase),module*sin(phase)]
+
+
+            # création de la fonction ASTER :
+            _fonc=DEFI_FONCTION( NOM_PARA   =NOM_PARA,
+                                 NOM_RESU   =NOM_RESU,
+                                 PROL_DROITE=PROL_DROITE,
+                                 PROL_GAUCHE=PROL_GAUCHE,
+                                 INTERPOL   =INTERPOL,
+                                 INFO       =INFO,
+                                 TITRE      =TITRE,
+                                 VALE_C     =liste,)
+            l_fonc.append(_fonc.nom)
+
+        nume_ib=[]
+        nume_jb=[]
+        for i in range(dim):
+            for j in range(i,dim):
+                nume_ib.append(i+1)
+                nume_jb.append(j+1)
+        if nume_i!=nume_ib or nume_j!=nume_jb : 
+            UTMESS('F', 'SPECTRAL0_3')
+        mcfact=[]
+        mcfact.append(_F(PARA='NOM_CHAM'    ,LISTE_K=(NOM_RESU),NUME_LIGN=(1,)))
+        mcfact.append(_F(PARA='OPTION'      ,LISTE_K=('TOUT',) ,NUME_LIGN=(1,)))
+        mcfact.append(_F(PARA='DIMENSION'   ,LISTE_I=(dim,)    ,NUME_LIGN=(1,)))
+        mcfact.append(_F(PARA='NUME_ORDRE_I',LISTE_I=nume_i    ,NUME_LIGN=range(2,len(nume_i)+2)))
+        mcfact.append(_F(PARA='NUME_ORDRE_J',LISTE_I=nume_j    ,NUME_LIGN=range(2,len(nume_j)+2)))
+        mcfact.append(_F(PARA='FONCTION_C'  ,LISTE_K=l_fonc    ,NUME_LIGN=range(2,len(list_fonc)+2)))
+        self.DeclareOut('tab_inte',self.sd)
+        tab_inte=CREA_TABLE(LISTE=mcfact,
+                          TITRE=TITRE,
+                          TYPE_TABLE='TABLE_FONCTION')
+
+    else:
+        # mot-clé != 'ASTER', ou 'IDEAS' => ERREUR !
+        UTMESS('F', 'SPECTRAL0_12')
+        
+
+    # remet UNITE dans son état initial
+    UL.EtatInit()
+    return ier
+        
+        
+    
+def comp(ddlno):
+    sens = 1
+    if ddlno < 0:
+        sens = -1
+    if ddlno == .1:return sens,'DX'
+    elif ddlno == .2:return sens,'DY'
+    elif ddlno == .3:return sens,'DZ'
+    elif ddlno == .4:return sens,'DRX'
+    elif ddlno == .5:return sens,'DRY'
+    elif ddlno == .6:return sens,'DRZ'
+    else:
+        print "Probleme pour l'attribution des composantes"
+    
+    
+
index af24a012a2b28815b190953fc968340238f6fb62..80927fff4adc41c7a3732ddaea0a5eb423d20942 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF lire_table_ops Macro  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF lire_table_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -35,6 +35,7 @@ def lecture_table(texte, nume, separ):
    """
    from Utilitai.transpose import transpose
    from Utilitai.Table     import Table
+   from Utilitai.Utmess    import  UTMESS
    
    tab_lue = {}
    nume_lign = []
@@ -49,9 +50,7 @@ def lecture_table(texte, nume, separ):
    l_txt = exp.findall(texte)
    nbbloc = len(l_txt)
    if nume > nbbloc:
-      message = """NUME_TABLE=%d incorrect : il n'y a que %d blocs de tables""" \
-                """ dans le fichier""" % (nume, nbbloc)
-      return 1, message, None
+      UTMESS('F', 'TABLE0_10', vali=(nume, nbbloc))
    txttab = l_txt[nume - 1]
   
    # expression régulière pour extraire le titre
@@ -82,11 +81,10 @@ def lecture_table(texte, nume, separ):
    for i, line in enumerate(txttab):
       mat = re.search(lfmt, line)
       if mat is None or nb_para != len(mat.groups()):
-         message = """Nombre de champs incorrect ligne %d.
-Il y a %d paramètres""" % (i + 1, nb_para)
-         if hasattr(mat, 'groups'):
-            message += """, on a lu %d champs.""" % len(mat.groups())
-         return 1, message, None
+         UTMESS('F+', 'TABLE0_11', vali=i + 1)
+         if mat is not None:
+            UTMESS('F+', 'TABLE0_12', vali=len(mat.groups()))
+         UTMESS('F', 'TABLE0_13', vali=nb_para)
       dico = {}
       for para, typ, ch in zip(list_para, list_type, mat.groups()):
          ch = ch.strip()
@@ -101,14 +99,14 @@ Il y a %d param
       l_rows.append(dico)
    
    tab = Table(l_rows, list_para, list_type, titre_tab)
-   return 0, '', tab
+   return tab
 
 
 # ------------------------------------------------------------------------------
 def lire_table_ops(self, **args):
    """Méthode corps de la macro LIRE_TABLE
    """
-   from Utilitai.Utmess     import UTMESS
+   from Utilitai.Utmess     import  UTMESS
    from Utilitai.UniteAster import UniteAster
    
    ier = 0
@@ -138,9 +136,7 @@ def lire_table_ops(self, **args):
    ### mise en forme de la liste de valeurs suivant le format choisi :
    # pour le moment uniquement ASTER
    if FORMAT=='ASTER':
-      ier, message, tab_lue = lecture_table(texte, NUME_TABLE, SEPARATEUR)
-      if ier != 0 :
-         UTMESS('F', nompro, message)
+      tab_lue = lecture_table(texte, NUME_TABLE, SEPARATEUR)
    else:
       pass
    
index e090e52dd70bd5955b4428f983e5f3475ce990e1..276e72b6b5140f0cbd072f684b189d9b9db8b4e5 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_adap_mail_ops Macro  DATE 04/04/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF macr_adap_mail_ops Macro  DATE 11/12/2007   AUTEUR GNICOLAS G.NICOLAS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -22,7 +22,7 @@
 """
 Traitement des macros MACR_ADAP_MAIL/MACR_INFO_MAIL
 """
-__revision__ = "V1.1"
+__revision__ = "V1.2"
 #
 def macr_adap_mail_ops ( self,
                          INFO, VERSION_HOMARD, MAILLAGE_FRONTIERE,
@@ -262,9 +262,7 @@ def macr_adap_mail_ops ( self,
 #
     if args.has_key("ZONE") :
 #
-      if args["ZONE"] is None :
-        les_zones = []
-      else :
+      if args["ZONE"] is not None :
         les_zones = args["ZONE"]
 #
       for zone in les_zones :
@@ -429,7 +427,7 @@ def macr_adap_mail_ops ( self,
       os.mkdir(Rep_Calc_HOMARD_global)
     except os.error,codret_partiel :
       self.cr.warn("Code d'erreur de mkdir : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
-      UTMESS("F", self.nom, "Impossible de créer le répertoire de travail pour HOMARD : "+Rep_Calc_HOMARD_global)
+      UTMESS("F",'HOMARD0_4',valk=Rep_Calc_HOMARD_global)
 #
 #====================================================================
 # 4. Ecriture des commandes de creation des donnees MED
@@ -646,7 +644,7 @@ def macr_adap_mail_ops ( self,
 #gn  if dico_configuration.has_key("Indicateur") :
 #gn    print "dico_configuration[Indicateur] = ", dico_configuration["Indicateur"]
 #
-# 5.4. ==> Les zones de raffinement
+# 5.4. ==> Les éventuelles zones de raffinement
 #
   prem = 1
   for dico in liste_zones :
@@ -721,7 +719,8 @@ def macr_adap_mail_ops ( self,
 #gn  if ( mode_homard == "ADAP" ) :
 #gn    if args.has_key("MAJ_CHAM") :
 #gn      if args["MAJ_CHAM"] is not None :
-#gn        os.system("sleep 1000")
+#gn        import time
+#gn        time.sleep(3600)
 #
 #====================================================================
 # 6. Ecriture de la commande d'exécution de homard
@@ -740,9 +739,10 @@ def macr_adap_mail_ops ( self,
                              ),
                   LOGICIEL = homard
                 )
-#  os.system("sleep 3600")
+#gn  import time
+#gn  time.sleep(3600)
 #
- #gn if ( mode_homard == "ADAP" ) :
+#gn  if ( mode_homard == "ADAP" ) :
 #gn    fichier_homard_vers_aster_2 = os.path.join("/tmp" , "fort." + str(unite_fichier_homard_vers_aster))
 #gn    shutil.copyfile(fichier_homard_vers_aster, fichier_homard_vers_aster_2)
 #gn    fichier_homard_vers_aster_2_1 = os.path.join("/tmp" , "fort." + str(unite_fichier_homard_vers_aster)+".1")
@@ -782,7 +782,8 @@ def macr_adap_mail_ops ( self,
           maillage_np1_nom_med = dico["NOM_MED"]
 #
 # 7.2. ==> Les champs
-#gn      os.system("sleep 100")
+#gn    import time
+#gn    time.sleep(3600)
 #
     for dico in liste_champs :
       if ( dico["Type_Champ"] == "CHAMP_MAJ" ) :
@@ -830,7 +831,7 @@ def macr_adap_mail_ops ( self,
           os.remove(fic)
         except os.error,codret_partiel :
           self.cr.warn("Code d'erreur de remove : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
-          UTMESS("F", self.nom, "Impossible de détruire le fichier : "+fic)
+          UTMESS("F",'HOMARD0_5',valk=fic)
 #gn  print "Répertoire ",Rep_Calc_HOMARD_global
 #gn  os.system("ls -la "+Rep_Calc_HOMARD_global)
 #gn  print "Répertoire ",Rep_Calc_ASTER
@@ -843,6 +844,7 @@ def macr_adap_mail_ops ( self,
 #====================================================================
 #
 #gn  if ( mode_homard == "ADAP" ) :
-#gn    os.system("sleep 1")
+#gn    import time
+#gn    time.sleep(3600)
 #
   return
index fd92b6081a97f5f3f5cdbdad3a236b20028934c5..e40741a6fed7211fba9ba3a14a491bf8059dedee 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_ascouf_calc_ops Macro  DATE 23/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF macr_ascouf_calc_ops Macro  DATE 14/04/2008   AUTEUR GALENNE E.GALENNE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -32,7 +32,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
   import math
   import aster
   from math import pi,sin,cos,sqrt,atan2
-  from Utilitai.Utmess     import UTMESS
+  from Utilitai.Utmess     import  UTMESS
   ier=0
 # On recopie les mots cles affe_materiau et impr_table pour les proteger
   mc_AFFE_MATERIAU=AFFE_MATERIAU
@@ -65,14 +65,14 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
     if TYPE_MAILLAGE=='SOUS_EPAIS_COUDE' :
        message=        ' la condition aux limites sur bol a section conique \n'
        message=message+' est ignoree pour un coude avec sous-epaisseurs \n'
-       UTMESS('A', "MACR_ASCOUF_CALC", message)
+       UTMESS('A','ASCOUF0_1')
     elif (TYPE_MAILLAGE[:4]!='FISS') and (CL_BOL_P2_GV['AZIMUT']!=None) :
-       UTMESS('E', "MACR_ASCOUF_CALC", "mot-cle AZIMUT non autorise dans le cas d un coude sain")
-#
+       UTMESS('E','ASCOUF0_2')
+ #
   if mc_IMPR_TABLE!=None :
     FLAG = 0
     if (mc_IMPR_TABLE['NOM_PARA']==None) and (mc_IMPR_TABLE['POSI_ANGUL']==None) and (mc_IMPR_TABLE['POSI_CURV_LONGI']==None) :
-       UTMESS('E', "MACR_ASCOUF_CALC", "POSI_ANGUL POSI_CURV_LONGI est obligatoire")
+       UTMESS('E','ASCOUF0_3')
        return ier
     if (mc_IMPR_TABLE['NOM_PARA']!=None) :
        impr_table_nom_para= mc_IMPR_TABLE['NOM_PARA']
@@ -81,9 +81,9 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
            FLAG = 1
            if (((impt['ANGLE']==None) and (impt['POSI_ANGUL']==None) and (impt['R_CINTR'        ]==None)) or
                ((impt['ANGLE']==None) and (impt['R_CINTR'   ]==None) and (impt['POSI_CURV_LONGI']==None))   )  :
-             UTMESS('E', "MACR_ASCOUF_CALC", "il faut renseigner : ANGLE, R_CINTR et POSI_ANGUL ou ANGLE, R_CINTR et POSI_CURV_LONGI")
+             UTMESS('E','ASCOUF0_4')
     if (mc_IMPR_TABLE['NOM_PARA']==None) : FLAG = 1
-    if not FLAG : UTMESS('A', "MACR_ASCOUF_CALC","ANGL_COUDE et ANGL_SOUS_EPAI sont inutiles dans ce cas")
+    if not FLAG : UTMESS('A','ASCOUF0_5')
 #
 #------------------------------------------------------------------
 #
@@ -91,7 +91,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
 #
   self.DeclareOut('modele',MODELE)
   mcfact=[]
-  if (PRES_REP!=None) and (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[:4]=='FISS') :
+  if (TYPE_MAILLAGE[:4]=='FISS') :
      mcfact.append(_F(GROUP_MA=GRMAIL     ,PHENOMENE='MECANIQUE',MODELISATION='3D'    ))
   else:
      mcfact.append(_F(GROUP_MA=GRMAIL[:5] ,PHENOMENE='MECANIQUE',MODELISATION='3D'    ))
@@ -114,7 +114,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
   mcfact=[]
   for mater in mc_AFFE_MATERIAU :
      if mater['TOUT']!=None :
-       mcfact.append(_F(TOUT    =mater['TOUT'    ],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
+       mcfact.append(_F(TOUT    =mater['TOUT'    ],MATER=mater['MATER']))
        rccmat = mater['MATER']
      else                   :
        mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER']))
@@ -164,12 +164,12 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
 #
      if RESU_THER!=None : self.DeclareOut('resuth',RESU_THER)
      mcsimp={}
-     if INCREMENT['NUME_INST_INIT']!=None : mcsimp['NUME_INIT']=INCREMENT['NUME_INST_INIT']
-     if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_FIN' ]=INCREMENT['NUME_INST_FIN' ]
+     if INCREMENT['NUME_INST_INIT']!=None : mcsimp['NUME_INST_INIT']=INCREMENT['NUME_INST_INIT']
+     if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_INST_FIN' ]=INCREMENT['NUME_INST_FIN' ]
      mcfact=_F(LIST_INST=INCREMENT['LIST_INST'],**mcsimp)
      resuth = THER_LINEAIRE( MODELE     = __modthe ,
                              CHAM_MATER = __affmat ,
-                             TEMP_INIT  = _F(STATIONNAIRE='OUI',),
+                             ETAT_INIT  = _F(STATIONNAIRE='OUI',),
                              EXCIT      = _F(CHARGE=__chther,),
                              INCREMENT  = mcfact, )
 #
@@ -283,7 +283,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
     else :
       motscles['PRES_REP']=_F( GROUP_MA  = 'PEAUINT',
                                PRES      = PRES_REP['PRES'] ,)
-    if PRES_REP['EFFE_FOND_P1']!=None :
+    if PRES_REP['EFFE_FOND_P1']!='NON' :
       motscles['EFFE_FOND']=_F( GROUP_MA_INT  = 'BORDTU'  ,
                                 GROUP_MA      = 'EXTUBE'  ,
                                 PRES          = PRES_REP['PRES'] ,)
@@ -309,6 +309,17 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
                                   FORCE_NODALE = mcfact , )
       i=i+1
 #
+#     --- commande AFFE_CHAR_MECA ---
+#         chargement mecanique :  verif contact levres
+#
+  if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
+    _chcont = AFFE_CHAR_MECA( MODELE   = modele ,
+                               CONTACT =_F(GROUP_MA_MAIT = 'FACE1',
+                                           GROUP_MA_ESCL = 'FACE2',
+                                           METHODE='VERIF',
+                                           GROUP_MA_FOND='FONDFISS',
+                                           TOLE_INTERP = -1.E-6,),)
+#
 #     --- commande STAT_NON_LINE ---
 #
   motscles={}
@@ -328,6 +339,8 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
        else :
           mcfex.append(_F(CHARGE=_chtor[i],))
        i=i+1
+  if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
+    mcfex.append(_F(CHARGE=_chcont,))
   motscles['EXCIT'] =mcfex
 #
   mcfci=[]  # mot clé facteur COMP_INCR :obligatoire pour les noeuds discrets
@@ -647,6 +660,27 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
 #
   if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
 #
+#   --- post traitement fissure :  interpénétration des lèvres ----
+#
+    __tcont=POST_RELEVE_T( ACTION=_F(  INTITULE = 'Contact levres',
+                                GROUP_NO = 'FACE2',
+                                RESULTAT = nomres,
+                                TOUT_ORDRE = 'OUI',
+                                NOM_CHAM = 'VALE_CONT',
+                                NOM_CMP = 'CONT',
+                                OPERATION = 'EXTRACTION'))
+    tcont=__tcont.EXTR_TABLE()
+    numo = tcont['NUME_ORDRE'].values()['NUME_ORDRE']
+    numo=dict([(i,0) for i in numo]).keys()
+    nbinst = len(numo)
+    for i in range(1,nbinst+1) :
+      tabi = tcont.NUME_ORDRE==i
+      nbtot = len(tabi)
+      cont_actif=tabi.CONT>0.
+      nb_no_cont = len(cont_actif)
+      if nb_no_cont > 0 :
+         UTMESS('A','ASCOUF0_58',vali=[i,nbtot,nb_no_cont])
+#
 #   --- post traitement fissure :  calcul de g ----
 #
     motscles = {}
index 53aba950abff787f661f560a3ecaa103128c0b0b..9305fd0efb35eca7f86b17eedee09ca9a4478ddc 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_ascouf_mail_ops Macro  DATE 29/08/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF macr_ascouf_mail_ops Macro  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 import os.path
 from math import sqrt,cos,sin,pi,tan,log,fabs,ceil,fmod,floor
 import string
-try :
+
+try:
    import aster
-   from Utilitai.Utmess     import UTMESS
-except :
+   from Utilitai.Utmess     import  UTMESS
+except:
    pass
 
 # ------------------------------------------------------------------------------
@@ -314,11 +315,7 @@ def ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP,GEOM,SYME):
          if ssep.ICIRP>(2.*pi*RM) :
             texte_final=string.join(echo_mess)
             aster.affiche("MESSAGE",texte_final)
-            message=        ' ASCSEP valeur hors domaine \n'
-            message=message+' sous-epaisseur numero : %d \n'%i
-            message=message+' taille axe circonferentiel : %.2f \n'%ssep.ICIRP
-            message=message+' bord plaque : %.2f \n'%2*pi*RM
-            UTMESS('F', "MACR_ASCOUF_MAIL", message)
+            UTMESS('F','ASCOUF0_6',vali=[i],valr=[ssep.ICIRP,2*pi*RM])
          echo_mess.append( 'TAILLE CIRCONFERENTIELLE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ICIRP)
          echo_mess.append( '<=> TAILLE EQUIVALENTE SUR LA CIRCONFERENCE (DEGRES) : %.2f \n'%(ssep.ICIRP*360./(2.*pi*RM)))  
 
@@ -338,9 +335,7 @@ def ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP,GEOM,SYME):
          if (SYME in ('QUART','DEMI')) and (ssep.ISLP!=ALPHA*CG*RC/2.) :
             texte_final=string.join(echo_mess)
             aster.affiche("MESSAGE",texte_final)
-            message=         ' ASCSEP cas de symetrie :\n'
-            message=message+ ' la sous-epaisseur doit etre dans la section mediane du coude !\n'
-            UTMESS('F', "MACR_ASCOUF_MAIL", message)
+            UTMESS('F','ASCOUF0_7')
       else :
          if GEOM=='COUDE':
             echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR COUDE : %.2f \n'%((ssep.BETA)*CG*(RC+(RM+EP/2.)*cos(AZIMC))))
@@ -351,9 +346,7 @@ def ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP,GEOM,SYME):
          if (SYME in ('QUART','DEMI')) and (ssep.BETA!=ALPHA/2.) :
             texte_final=string.join(echo_mess)
             aster.affiche("MESSAGE",texte_final)
-            message=          ' ASCSEP cas de symetrie :\n'
-            message=message+  ' la sous-epaisseur doit etre dans la section mediane du coude !\n'
-            UTMESS('F', "MACR_ASCOUF_MAIL", message)
+            UTMESS('F','ASCOUF0_7')
       echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISLP)
 #
 # -- CALCUL DE LA TAILLE LONGITUDINALE 
@@ -449,11 +442,7 @@ def ASCTCI(MCL_SOUS_EPAIS,RM):
       if (ssep.ISCP>2.*pi*RM) or (ssep.ISCP<0.) : 
          texte_final=string.join(echo_mess)
          aster.affiche("MESSAGE",texte_final)
-         message=         ' valeur hors domaine \n'
-         message=message+ ' SOUS-EPAISSEUR NUMERO :%d'%MCL_SOUS_EPAIS.index(ssep)
-         message=message+ ' ABSC. CURV. CIRCONF.  :%.2f \n'%ssep.ISCP
-         message=message+ ' BORD PLAQUE :%.2f \n'%(2.*pi*RM)
-         UTMESS('F', "MACR_ASCOUF_MAIL", message)
+         UTMESS('F','ASCOUF0_9',vali=[MCL_SOUS_EPAIS.index(ssep)],valr=[ssep.ISCP,2.*pi*RM])
       TAMPON.append((ssep.ISCP,i))
   TAMPON.sort()
   IABSC1=[]
@@ -536,11 +525,7 @@ def ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM):
       if (ssep.ISLP>ALPHAR*RC) or (ssep.ISLP<0.) : 
          texte_final=string.join(echo_mess)
          aster.affiche("MESSAGE",texte_final)
-         message=         ' valeur hors domaine \n'
-         message=message+ ' SOUS-EPAISSEUR NUMERO :%d \n'%MCL_SOUS_EPAIS.index(ssep)
-         message=message+ ' ABSC. CURV. LONGIT.  :%.2f \n'%ssep.ISLP
-         message=message+ ' BORDS PLAQUE :%.2f \n'%(ALPHAR*RC)
-         UTMESS('F', "MACR_ASCOUF_MAIL", message)
+         UTMESS('F','ASCOUF0_10',vali=[MCL_SOUS_EPAIS.index(ssep)],valr=[ssep.ISLP,ALPHAR*RC])
       TAMPON.append((ssep.ISLP,i))
   TAMPON.sort()
   IORDO1=[]
@@ -572,19 +557,11 @@ def ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM):
       if YI<(-LTCHAR):
          texte_final=string.join(echo_mess)
          aster.affiche("MESSAGE",texte_final)
-         message=         ' valeur hors domaine \n'
-         message=message+ ' SOUS-EPAISSEUR NUMERO :%d \n'%bid[1]
-         message=message+ ' BORD INFERIEUR  :%.2f \n'%YI
-         message=message+ ' BORDS PLAQUE :%.2f \n'%(-1*LTCHAR)
-         UTMESS('F', "MACR_ASCOUF_MAIL", message)
+         UTMESS('F','ASCOUF0_11',vali=[bid[1]],valr=[YI,-1*LTCHAR])
       if YS>(ALPHAR*RC+LTCLIM):
          texte_final=string.join(echo_mess)
          aster.affiche("MESSAGE",texte_final)
-         message=         ' valeur hors domaine \n'
-         message=message+ ' SOUS-EPAISSEUR NUMERO :%d \n'%bid[1]
-         message=message+ ' BORD INFERIEUR  :%.2f \n'%YI
-         message=message+ ' BORDS PLAQUE :%.2f \n'%(ALPHAR*RC+LTCLIM)
-         UTMESS('F', "MACR_ASCOUF_MAIL", message)
+         UTMESS('F','ASCOUF0_11',vali=[bid[1]],valr=[YI,ALPHAR*RC+LTCLIM])
       COORYI.append(YI) 
       COORYS.append(YS)
 #
@@ -882,7 +859,6 @@ def ASCSYM(MCL_SOUS_EPAIS,RM,RC,ALPHA,LTCHAR,LTCLIM):
 #
 #     NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
 #     NZONEY = NOMBRE DE ZONES LONGITUDINALES       
-#
 # ------------------------------------------------------------------------------
 def ASCPRE(MCL_SOUS_EPAIS,RM,RC,ALPHA,SYME,LTCHAR,LTCLIM):
   ier=0
@@ -2094,11 +2070,7 @@ def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE,
   else:
      NBTRAN = 1
      if COUDE['SYME']!='ENTIER':
-        message=        ' les quart et demi structure \n'
-        message=message+' ne peuvent etre realisees   \n'
-        message=message+' sur un modele comportant une transition \n'
-        message=message+' d epaisseur \n'
-        UTMESS('F', "MACR_ASCOUF_MAIL", message)
+        UTMESS('F','ASCOUF0_13')
 #
      DEXT  = COUDE['DEXT_T1']
      EP1   = COUDE['EPAIS_T1']
@@ -2123,29 +2095,19 @@ def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE,
   E   = EP1
 #
   if COUDE['SYME']!='ENTIER' and (LTCHAR!=LTCLIM) :
-     message=        ' les deux embouts doivent etre \n'
-     message=message+' de meme longueur pour les cas de symetrie \n'
-     UTMESS('F', "MACR_ASCOUF_MAIL", message)
+     UTMESS('F','ASCOUF0_14')
 #
   LAMOR = 3.0/2.0 * sqrt( RM*RM*RM / EP1)
   if LTCHAR<LAMOR :
-     message=        ' longueur d embout P1 inferieure \n'
-     message=message+' a la longueur d amortissement = %.2f \n'%LAMOR
-     UTMESS('A', "MACR_ASCOUF_MAIL", message)
+     UTMESS('A','ASCOUF0_15',valr=LAMOR)
 #
   LAMOR = 3.0/2.0 * sqrt( RM2*RM2*RM2 / EP2)
   if LTCLIM<LAMOR :
-     message=        ' longueur d embout P2 inferieure \n'
-     message=message+' a la longueur d amortissement = %.2f \n'%LAMOR
-     UTMESS('A', "MACR_ASCOUF_MAIL", message)
+     UTMESS('A','ASCOUF0_16',valr=LAMOR)
 #
   if TYPBOL!=None:
    if TYPBOL[:1]=='GV' :
-     message=        ' la condition aux limites raccord \n'
-     message=message+' 3d-poutre appliquee avec la macro de calcul \n '
-     message=message+' ascouf n est pas licite avec un embout \n'
-     message=message+' de type conique \n'
-     UTMESS('A', "MACR_ASCOUF_MAIL", message)
+     UTMESS('A','ASCOUF0_17')
 #
 ################################################################################
 #     --- caracteristiques de la fissure ---
@@ -2153,21 +2115,13 @@ def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE,
 #
   if FISS_COUDE!=None:
      if NBEP!=3:
-        message=        ' le nombre d elements dans l epaisseur \n'
-        message=message+' du coude n est pas parametrable pour \n'
-        message=message+' un coude avec fissure \n'
-        message=message+' mot-cle NB_ELEM_EPAIS ignore \n'
-        UTMESS('A', "MACR_ASCOUF_MAIL", message)
+        UTMESS('A','ASCOUF0_18')
      FPROF = FISS_COUDE['PROFONDEUR']
      FAXI  = FISS_COUDE['AXIS']
      if FAXI=='NON' and FISS_COUDE['LONGUEUR']==None :
-        message=        ' pour les fissures non axisymetriques \n'
-        message=message+' la longueur doit etre specifiee  \n'
-        UTMESS('F', "MACR_ASCOUF_MAIL", message)
+        UTMESS('F','ASCOUF0_19')
      if FAXI=='OUI' and FISS_COUDE['LONGUEUR']!=None :
-        message=        ' la fissure est axisymetrique : on ne \n'
-        message=message+' tient pas compte de la longueur specifiee \n'
-        UTMESS('A', "MACR_ASCOUF_MAIL", message)
+        UTMESS('A','ASCOUF0_20')
      if FISS_COUDE['LONGUEUR']!=None : FLONG = FISS_COUDE['LONGUEUR']
      if FAXI=='OUI' :
 ####    on prend une marge de securite a cause des modifs dans ascfis
@@ -2199,22 +2153,13 @@ def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE,
      DGAXEC = FLONG/2.0
      DC     = DGAXEC
      if ORIEN!=90.0 and NBTRAN!=0 :
-        message=        ' avec une transition d epaisseur \n'
-        message=message+' la fissure doit obligatoirement etre transverse  \n'
-        UTMESS('F', "MACR_ASCOUF_MAIL", message)
+        UTMESS('F','ASCOUF0_21')
      if ORIEN!=90.0 and NBTRAN!=0 :
-        message=        ' avec une transition d epaisseur \n'
-        message=message+' la fissure doit obligatoirement etre transverse  \n'
-        UTMESS('F', "MACR_ASCOUF_MAIL", message)
+        UTMESS('F','ASCOUF0_21')
      if ORIEN!=90.0 and COUDE['SYME']!='ENTIER' :
-        message=        ' l orientation de la fissure doit \n'
-        message=message+' etre transverse (orien : 90.) pour modeliser  \n'
-        message=message+' un quart ou une demi structure  \n'
-        UTMESS('F', "MACR_ASCOUF_MAIL", message)
+        UTMESS('F','ASCOUF0_23')
      if ORIEN!=90.0 and FAXI=='OUI' :
-        message=        ' la fissure est axisymetrique : son \n'
-        message=message+' orientation doit etre transverse (ORIEN : 90.) \n'
-        UTMESS('F', "MACR_ASCOUF_MAIL", message)
+        UTMESS('F','ASCOUF0_24')
 #
 ################################################################################
 #     --- caracteristiques des sous epaisseurs ---
@@ -2225,72 +2170,40 @@ def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE,
   if SOUS_EPAIS_MULTI!=None : MCL_SOUS_EPAIS = SOUS_EPAIS_MULTI
   if SOUS_EPAIS_COUDE!=None : MCL_SOUS_EPAIS = SOUS_EPAIS_COUDE
   if SOUS_EPAIS_MULTI!=None and NBTRAN!=0 :
-     message=        ' il ne peut pas y avoir plusieurs \n'
-     message=message+' sous-epaisseurs en meme temps qu une \n'
-     message=message+' transition d epaisseur : si une seule \n'
-     message=message+' sous-epaisseur utiliser sous_epais_coude \n'
-     UTMESS('F', "MACR_ASCOUF_MAIL", message)
+     UTMESS('F','ASCOUF0_25')
   if SOUS_EPAIS_COUDE!=None and FISS_COUDE!=None and NBTRAN!=0 :
-     message=        ' avec une transition d epaisseur'
-     message=message+' il doit obligatoirement y avoir un defaut \n'
-     message=message+' soit une fissure  soit une sous-epaisseur \n'
-     UTMESS('F', "MACR_ASCOUF_MAIL", message)
+     UTMESS('F','ASCOUF0_26')
   if MCL_SOUS_EPAIS!=None :
      AZIM = 90.0
      if MCL_SOUS_EPAIS.__class__.__name__  !='MCList' : MCL_SOUS_EPAIS=[MCL_SOUS_EPAIS,]
      if len(MCL_SOUS_EPAIS)!=1 and COUDE['SYME']!='ENTIER' :
-        message=        ' ne modeliser qu une seule \n'
-        message=message+' sous-epaisseur pour un quart ou demi-coude\n '
-        UTMESS('F', "MACR_ASCOUF_MAIL", message)
+        UTMESS('F','ASCOUF0_27')
      for ssep in MCL_SOUS_EPAIS :
         isep=isep+1
         if ssep['AXE_CIRC']!=None and ssep['TYPE']=='AXIS' :
-           message=        ' vous ne pouvez declarer la sous- \n'
-           message=message+' epaisseur comme axisymetrique et donner \n'
-           message=message+' une taille d axe circonferentiel \n'
-           UTMESS('F', "MACR_ASCOUF_MAIL", message)
+           UTMESS('F','ASCOUF0_28')
         if ssep['AXE_CIRC']==None and ssep['TYPE']=='ELLI' :
-           message=        ' vous devez donner une taille d axe \n'
-           message=message+' circonferentiel pour une sous-epaisseur de \n'
-           message=message+' type elliptique \n'
-           UTMESS('F', "MACR_ASCOUF_MAIL", message)
+           UTMESS('F','ASCOUF0_29')
         if ssep['POSI_CURV_LONGI']!=None:
            if ssep['POSI_CURV_LONGI']>(ALPHA*RC*pi/180.0) :
-              message=        ' valeur hors domaine de validite \n'
-              message=message+' sous-epaisseur numero : %d \n'%isep
-              message=message+' abscisse curv. longit. : %.2f \n'%ssep['POSI_CURV_LONGI']
-              message=message+' valeur maximale autorisee : %.2f \n'%(ALPHA*RC*pi/180.0)
-              UTMESS('F', "MACR_ASCOUF_MAIL", message)
+              UTMESS('F','ASCOUF0_30',vali=[isep],valr=[ssep['POSI_CURV_LONGI'],ALPHA*RC*pi/180.0])
            LDEFAU = ssep['POSI_CURV_LONGI'] + ssep['AXE_LONGI']/2.0
            BETA = 0.0
         else:
            BETA=ssep['POSI_ANGUL']
            if (BETA<0.) or (BETA>ALPHA) :
-              message=        ' valeur hors domaine de validite \n'
-              message=message+' sous-epaisseur numero : %d \n'%isep
-              message=message+' position angulaire centre sous-ep : %.2f \n'%BETA
-              message=message+' valeur limite autorisee : %.2f \n'%ALPHA
-              UTMESS('F', "MACR_ASCOUF_MAIL", message)
+              UTMESS('F','ASCOUF0_31',vali=[isep],valr=[BETA,ALPHA])
            LDEFAU = (BETA*RC*pi/180.0) + ssep['AXE_LONGI']/2.0
 #
         if ssep['POSI_CURV_CIRC']!=None:
            if ssep['POSI_CURV_CIRC']>(2*pi*RM) :
-              message=        ' valeur hors domaine de validite \n'
-              message=message+' sous-epaisseur numero : %d \n'%isep
-              message=message+' abscisse curv. circonf. : %.2f \n'%ssep['POSI_CURV_CIRC']
-              message=message+' valeur limite autorisee : %.2f \n'%(2*pi*RM)
-              UTMESS('F', "MACR_ASCOUF_MAIL", message)
+              UTMESS('F','ASCOUF0_32',vali=[isep],valr=[ssep['POSI_CURV_CIRC'],2*pi*RM])
            if ssep['POSI_CURV_CIRC']!=(pi*RM) and ssep['TYPE']=='AXIS':
-              message=        ' le centre d une sous-epaisseur \n'
-              message=message+' axisymetrique est impose en intrados (pi*RM) \n'
-              UTMESS('F', "MACR_ASCOUF_MAIL", message)
+              UTMESS('F','ASCOUF0_33')
         else:
            ssep.IPHIC=ssep['AZIMUT']
            if ssep['AZIMUT']!=180. and ssep['TYPE']=='AXIS':
-              message=        ' le centre d une sous-epaisseur \n'
-              message=message+' axisymetrique est impose en intrados \n'
-              message=message+' l azimut est fixe a 180 degres \n'
-              UTMESS('F', "MACR_ASCOUF_MAIL", message)
+              UTMESS('F','ASCOUF0_34')
 #        l_ITYPE.append(ssep['TYPE'           ])
 #        l_ICIRC.append(ssep['AXE_CIRC'       ])
 #        l_ILONC.append(ssep['AXE_LONGI'      ])
@@ -2306,11 +2219,7 @@ def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE,
 #        l_IEVID.append(ssep['EMPREINTE'      ])
 
      if SOUS_EPAIS_COUDE!=None and COUDE['NB_ELEM_EPAIS']!=3 :
-        message=        ' le nombre d elements dans l \n'
-        message=message+' epaisseur du coude n est pas parametrable pour \n'
-        message=message+' la version 2 de la procedure de plaque avec sous \n'
-        message=message+' -epaisseur : mot-cle NB_ELEM_EPAIS ignore \n'
-        UTMESS('A', "MACR_ASCOUF_MAIL", message)
+        UTMESS('A','ASCOUF0_35')
 #
 ################################################################################
 #     --- verifications de coherences ---
@@ -2319,38 +2228,23 @@ def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE,
 # donnees globales
   if COUDE['TRANSFORMEE']=='COUDE' or COUDE['TRAN_EPAIS']=='NON' :
     if SUREP<0. or SUREP>(RM-EP1/2.0):
-       message=        ' valeur hors domaine de validite \n'
-       message=message+' surepaisseur : \n',SUREP
-       message=message+' valeur limite autorisee (RM-EP1/2) : %.2f \n'%(RM-EP1/2.0)
-       UTMESS('F', "MACR_ASCOUF_MAIL", message)
+
+       UTMESS('F','ASCOUF0_36',vali=SUREP,valr=RM-EP1/2.0)
   if RC<=(RM+EP1/2.0):
-     message=        ' valeur hors domaine de validite \n'
-     message=message+' le rayon de cintrage : %.2f \n',RC
-     message=message+' doit etre superieur a (RM+EP1/2) : %.2f \n'%(RM+EP1/2.0)
-     UTMESS('F', "MACR_ASCOUF_MAIL", message)
+     UTMESS('F','ASCOUF0_37',valr=[RC,RM+EP1/2.0])
 #
 # coude fissure
 #
   if FISS_COUDE!=None:
     if (RM/EP1)<5. or (RM/EP1)>50.:
-       message=        ' valeur hors domaine de validite (5,50) \n'
-       message=message+' rapport RM/EP1 : %.2f \n'%(RM/EP1)
-       UTMESS('F', "MACR_ASCOUF_MAIL", message)
+       UTMESS('F','ASCOUF0_38',valr=RM/EP1)
     if FISS_COUDE['ABSC_CURV']!=None:
      if SF<0. or SF>(ALPHA*RC*pi/180.0) :
-       message=        ' valeur hors domaine de validite \n'
-       message=message+' abscisse curviligne centre fissure : %.2f \n'%SF
-       message=message+' valeur limite autorisee : %.2f \n'%(ALPHA*RC*pi/180.0)
-       UTMESS('F', "MACR_ASCOUF_MAIL", message)
+       UTMESS('F','ASCOUF0_39',valr=[SF,ALPHA*RC*pi/180.0])
     if (NT-2*(NT/2))!=0:
-       message=        ' valeur hors domaine de validite \n'
-       message=message+' nombre de tranches : %d \n'%NT
-       UTMESS('F', "MACR_ASCOUF_MAIL", message)
+       UTMESS('F','ASCOUF0_40',vali=NT)
     if FISS_COUDE['ABSC_CURV'] and ((BETA<0.) or (BETA>ALPHA)):
-       message=        ' valeur hors domaine de validite \n'
-       message=message+' position angulaire  centre fissure : %.2f \n'%BETA
-       message=message+' posi_angul doit etre >= 0 et <=  %.2f \n'%ALPHA
-       UTMESS('F', "MACR_ASCOUF_MAIL", message)
+       UTMESS('F','ASCOUF0_41',valr=[BETA,ALPHA])
 #
 # transition d epaisseur
 #
@@ -2358,101 +2252,46 @@ def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE,
     LCOUDE = ALPHA * RC * pi / 180.0
     DEXT = 2.0*RM + EP1
     if (LTRAN<LDEFAU) and (LTRAN>LCOUDE) :
-       message=        ' valeur hors domaine de validite \n'
-       message=message+' debut transition d epaisseur : %.2f \n'%LTRAN
-       message=message+' valeur minimale autorisee : %.2f \n'%LDEFAU
-       message=message+' valeur maximale autorisee : %.2f \n'%LCOUDE
-       UTMESS('F', "MACR_ASCOUF_MAIL", message)
+       UTMESS('F','ASCOUF0_42',valr=[LTRAN,LDEFAU,LCOUDE])
     if (TETA1<0.) or (TETA1>30.) :
-       message=        ' valeur hors domaine de validite \n'
-       message=message+' angle de transition TETA1 : %.2f \n'%TETA1
-       message=message+' valeur minimale autorisee : %.2f \n'%0.
-       message=message+' valeur maximale autorisee : %.2f \n'%30.
-       UTMESS('F', "MACR_ASCOUF_MAIL", message)
+       UTMESS('F','ASCOUF0_43',valr=[TETA1])  
 #
 # transition d epaisseur a une pente
 #
     if NBTRAN==1:
        if (EP1<12.) or (EP1>80.) :
-          message=        ' valeur hors domaine de validite \n'
-          message=message+' epaisseur avant la transition : %.2f \n'%EP1
-          message=message+' valeur minimale autorisee : %.2f \n'%12.
-          message=message+' valeur maximale autorisee : %.2f \n'%80.
-          UTMESS('F', "MACR_ASCOUF_MAIL", message)
+          UTMESS('F','ASCOUF0_44',valr=[EP1])
        if (EP2<20.) or (EP2>110.) :
-          message=        ' valeur hors domaine de validite \n'
-          message=message+' epaisseur apres la transition : %.2f \n'%EP2
-          message=message+' valeur minimale autorisee : %.2f \n'%20.
-          message=message+' valeur maximale autorisee : %.2f \n'%110.
-          UTMESS('F', "MACR_ASCOUF_MAIL", message)
+          UTMESS('F','ASCOUF0_45',valr=[EP2])
        if (EP1>EP2) :
-          message=        ' l epaisseur avant la transition \n'
-          message=message+' doit etre inferieure  \n'
-          message=message+' a celle apres la transition \n'
-          UTMESS('F', "MACR_ASCOUF_MAIL", message)
+          UTMESS('F','ASCOUF0_46')
        LTRANF = LTRAN + ((EP2-EP1)/(tan(TETA1)))
        if (LTRANF>LCOUDE) :
-          message=        ' valeur hors domaine de validite \n'
-          message=message+' fin transition d epaisseur : %.2f \n'%LTRANF
-          message=message+' valeur limite autorisee : %.2f \n'%LCOUDE
-          UTMESS('F', "MACR_ASCOUF_MAIL", message)
+          UTMESS('F','ASCOUF0_47',valr=[LTRANF,LCOUDE])
        if DEXT<112. or DEXT>880. :
-          message=        ' valeur hors domaine de validite\n'
-          message=message+' diam ext du tube avant transition: %.2f \n'%DEXT
-          message=message+' valeur minimum autorisee : %.2f \n'%112.
-          message=message+' valeur maximum autorisee : %.2f \n'%880.
-          UTMESS('F', "MACR_ASCOUF_MAIL", message)
+          UTMESS('F','ASCOUF0_48',valr=[DEXT])
 #
 # transition d epaisseur a une pente
 #
     else:
        if (TETA2<0.) or (TETA2>45.) :
-          message=        ' valeur hors domaine de validite\n'
-          message=message+' angle de transition TETA2: %.2f \n'%TETA2
-          message=message+' valeur minimum autorisee : %.2f \n'%0.
-          message=message+' valeur maximum autorisee : %.2f \n'%45.
-          UTMESS('F', "MACR_ASCOUF_MAIL", message)
+          UTMESS('F','ASCOUF0_49',valr=[TETA2])
        if (EP1<7.) or (EP1>35.) :
-          message=        ' valeur hors domaine de validite\n'
-          message=message+' epaisseur avant 1ere transition: %.2f \n'%EP1
-          message=message+' valeur minimum autorisee : %.2f \n'%7.
-          message=message+' valeur maximum autorisee : %.2f \n'%35.
-          UTMESS('F', "MACR_ASCOUF_MAIL", message)
+          UTMESS('F','ASCOUF0_50',valr=[EP1])
        if (EP2<15.) or (EP2>40.) :
-          message=        ' valeur hors domaine de validite\n'
-          message=message+' epaisseur avant 2eme transition: %.2f \n'%EP2
-          message=message+' valeur minimum autorisee : %.2f \n'%15.
-          message=message+' valeur maximum autorisee : %.2f \n'%40.
-          UTMESS('F', "MACR_ASCOUF_MAIL", message)
+          UTMESS('F','ASCOUF0_51',valr=[EP2])
        if (EPI<15.) or (EPI>40.) :
-          message=        ' valeur hors domaine de validite\n'
-          message=message+' epaisseur intermediaire: %.2f \n'%EPI
-          message=message+' valeur minimum autorisee : %.2f \n'%15.
-          message=message+' valeur maximum autorisee : %.2f \n'%40.
-          UTMESS('F', "MACR_ASCOUF_MAIL", message)
+          UTMESS('F','ASCOUF0_52',valr=[EPI])
        if (EP1>EPI) :
-          message=        ' valeur hors domaine de validite\n'
-          message=message+' l epaisseur avant la transition \n'
-          message=message+' doit etre inferieure a l epaisseur intermediaire \n'
-          UTMESS('F', "MACR_ASCOUF_MAIL", message)
+          UTMESS('F','ASCOUF0_53')
        if (EP2<EPI) :
-          message=        ' valeur hors domaine de validite\n'
-          message=message+' l epaisseur apres la transition \n'
-          message=message+' doit etre inferieure a l epaisseur intermediaire \n'
-          UTMESS('F', "MACR_ASCOUF_MAIL", message)
+          UTMESS('F','ASCOUF0_54')
        LTRANF = LTRAN  + (EPI-EP1)/(tan(TETA1))
        LTRANF = LTRANF + (EP2-EPI)/(tan(TETA2))
        if (LTRANF>LCOUDE) :
-          message=        ' valeur hors domaine de validite\n'
-          message=message+' fin transition d epaisseur: %.2f \n'%LTRANF
-          message=message+' valeur limite autorisee : %.2f \n'%LCOUDE
-          UTMESS('F', "MACR_ASCOUF_MAIL", message)
+          UTMESS('F','ASCOUF0_55',valr=[LTRANF,LCOUDE])
        if (DEXT<77.) or (DEXT>355.) :
-          message=        ' valeur hors domaine de validite\n'
-          message=message+' diam ext du tube avant transition: %.2f \n'%LTRANF
-          message=message+' valeur minimum autorisee : %.2f \n'%77.
-          message=message+' valeur maximum autorisee : %.2f \n'%355.
-          UTMESS('F', "MACR_ASCOUF_MAIL", message)
+          UTMESS('F','ASCOUF0_56',valr=[LTRANF])
 #
 ################################################################################
 #     --- calcul taille initiale des defauts sur la plaque ---
@@ -2486,7 +2325,7 @@ def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE,
   elif logiel=='GIBI2000': logiel = loc_gibi+'gibi2000'
   
   else                   :
-       UTMESS('F', "MACR_ASCOUF_MAIL", "seuls gibi98 et gibi2000 sont appelables")
+       UTMESS('F','ASCOUF0_57')
 #
 #     --- ecriture sur le fichier .datg  de la procedure ---
 #
index e8a7eb86ecba645bda6429e7bb743589e5eee2a6..0d416a57df12042d4e7497e1d4154f5237e04fa7 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF macr_aspic_calc_ops Macro  DATE 09/05/2007   AUTEUR REZETTE C.REZETT
+#@ MODIF macr_aspic_calc_ops Macro  DATE 14/04/2008   AUTEUR GALENNE E.GALENN
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  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.        
+# 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.
 # ======================================================================
 
 
@@ -23,13 +23,13 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
                              FOND_FISS_1,FOND_FISS_2,CHARGE,RESU_THER,AFFE_MATERIAU,EQUILIBRE,
                              PRES_REP,ECHANGE,TORS_CORP,TORS_TUBU,COMP_INCR,COMP_ELAS,
                              THETA_3D,OPTION,SOLVEUR,CONVERGENCE,NEWTON,RECH_LINEAIRE,
-                             INCREMENT,PAS_AZIMUT,IMPRESSION,INFO,TITRE,BORNES ,**args):          
+                             INCREMENT,PAS_AZIMUT,IMPRESSION,INFO,TITRE,BORNES ,**args):
   """
      Ecriture de la macro MACR_ASPIC_CALC
   """
   from Accas import _F
   import types
-  from Utilitai.Utmess     import UTMESS
+  from Utilitai.Utmess     import  UTMESS
   ier=0
 #------------------------------------------------------------------
   # On recopie le mot cle affe_materiau pour le proteger
@@ -54,7 +54,7 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
 
   # La macro compte pour 1 dans la numerotation des commandes
   self.set_icmd(1)
+
 #------------------------------------------------------------------
 # data
   GRMAIL= ('EQUERRE','PEAUINT','EXCORP1','EXCORP2','EXTUBU','LEVRTUBU','LEVRCORP')
@@ -77,40 +77,40 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
         i=i+1
         MRCCM=mate['MATER']
   if i>1 :
-     UTMESS('E', "MACR_ASPIC_CALC", "vous affectez plus d un materiau contenant l option rccm")
+     UTMESS('E','ASPIC0_1')
 #
   if (TYPE_MAILLAGE[:4]=='SAIN') and (TUBULURE==None) :
-     UTMESS('E', "MACR_ASPIC_CALC", "pour les piquages sains, TUBULURE doit etre renseigne")
+     UTMESS('E','ASPIC0_2')
 #
   if EQUILIBRE['NOEUD'] not in ('P1_CORP','P2_CORP') :
-     UTMESS('E', "MACR_ASPIC_CALC", "EQUILIBRE[NOEUD] : on attend P1_CORP ou P2_CORP")
+     UTMESS('E','ASPIC0_3')
 #
   if PRES_REP['EFFE_FOND']=='OUI' :
      if PRES_REP['NOEUD']==None :
-       UTMESS('E', "MACR_ASPIC_CALC", "il faut preciser un noeud pour EFFE_FOND")
+       UTMESS('E','ASPIC0_4')
      if PRES_REP['NOEUD'] not in ('P1_CORP','P2_CORP') :
-       UTMESS('E', "MACR_ASPIC_CALC", "PRES_REP[NOEUD] : on attend P1_CORP ou P2_CORP")
+       UTMESS('E','ASPIC0_5')
      if PRES_REP['NOEUD']==EQUILIBRE['NOEUD'] :
-       UTMESS('E', "MACR_ASPIC_CALC", "on ne peut appliquer un EFFE_FOND sur PRES_REP[NOEUD] car ce noeud est bloque")
+       UTMESS('E','ASPIC0_6')
 #
   if TORS_CORP!=None :
      for tors in TORS_CORP :
          if tors['NOEUD'] not in ('P1_CORP','P2_CORP') :
-            UTMESS('E', "MACR_ASPIC_CALC", "TORS_CORP[NOEUD] : on attend P1_CORP ou P2_CORP")
+            UTMESS('E','ASPIC0_7')
          if tors['NOEUD']==EQUILIBRE['NOEUD'] :
-            UTMESS('E', "MACR_ASPIC_CALC", "on ne peut appliquer un torseur sur TORS_CORP[NOEUD] car ce noeud est bloque")
+            UTMESS('E','ASPIC0_8')
 #
   if (TYPE_MAILLAGE[:4]=='SAIN') and (THETA_3D!=None) :
-     UTMESS('E', "MACR_ASPIC_CALC", "si TYPE_MAILLAGE SAIN : mecanique de la rupture impossible")
+     UTMESS('E','ASPIC0_9')
 #
   if OPTION in ('CALC_G_MAX','CALC_G_MAX_LOCAL') :
     if BORNES==None :
-       UTMESS('E', "MACR_ASPIC_CALC", "mot-clef <BORNES> obligatoire avec cette option")
+       UTMESS('E','ASPIC0_10')
 #
   if IMPRESSION!=None :
     if IMPRESSION['FORMAT'] in ('IDEAS','CASTEM') :
       if IMPRESSION['NOM_CHAM']==None :
-       UTMESS('E', "MACR_ASPIC_CALC", "impression de resultats demandée sans preciser le nom des champs cf. la documentation utilisateur : U4.PC.20.")
+       UTMESS('E','ASPIC0_11')
 #
 #------------------------------------------------------------------
 #
@@ -137,8 +137,8 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
 #
   mcfact=[]
   for mater in mc_AFFE_MATERIAU :
-     if mater['TOUT']!=None : mcfact.append(_F(TOUT    =mater['TOUT'    ],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
-     else                   : mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
+     if mater['TOUT']!=None : mcfact.append(_F(TOUT    =mater['TOUT'    ],MATER=mater['MATER']))
+     else                   : mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER']))
   __affmat = AFFE_MATERIAU( MAILLAGE = MAILLAGE ,
                           MODELE   = modele ,
                           AFFE     = mcfact    )
@@ -173,12 +173,12 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
 #
      if RESU_THER!=None : self.DeclareOut('resuth',RESU_THER)
      mcsimp={}
-     if INCREMENT['NUME_INST_INIT']!=None : mcsimp['NUME_INIT']=INCREMENT['NUME_INST_INIT']
-     if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_FIN' ]=INCREMENT['NUME_INST_FIN' ]
+     if INCREMENT['NUME_INST_INIT']!=None : mcsimp['NUME_INST_INIT']=INCREMENT['NUME_INST_INIT']
+     if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_INST_FIN' ]=INCREMENT['NUME_INST_FIN' ]
      mcfact=_F(LIST_INST=INCREMENT['LIST_INST'],**mcsimp)
      resuth = THER_LINEAIRE( MODELE     = __modthe ,
                              CHAM_MATER = __affmat ,
-                             TEMP_INIT  = _F(STATIONNAIRE='OUI',),
+                             ETAT_INIT  = _F(STATIONNAIRE='OUI',),
                              EXCIT      = _F(CHARGE=__chther,),
                              INCREMENT  = mcfact, )
 #
@@ -190,12 +190,12 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
   mcfact=[]
   mcfac2=[]
   for mater in mc_AFFE_MATERIAU :
-     if mater['TOUT']!=None : 
+     if mater['TOUT']!=None :
        mcfact.append(_F(TOUT    =mater['TOUT'    ],MATER=mater['MATER'],))
        if indther==1:
          mcfac2.append(_F(NOM_VARC='TEMP',TOUT='OUI',
                         EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF']),)
-     else: 
+     else:
        mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],))
        if indther==1:
          mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA=mater['GROUP_MA'],
@@ -237,14 +237,14 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
                                                    DRZ       = 0.0 , ) )
 #
 #     --- commande AFFE_CHAR_MECA ---
-#         chargement mecanique : pres_rep, effet de fond 
+#         chargement mecanique : pres_rep, effet de fond
 #
   motscles={}
   if (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[-4:]=='_DEB') :
       motscles['PRES_REP'  ]= _F(GROUP_MA=APPRES,   PRES=PRES_REP['PRES'])
   else :
       motscles['PRES_REP'  ]= _F(GROUP_MA=APPRES[0],PRES=PRES_REP['PRES'])
-  if  PRES_REP['EFFE_FOND' ]!=None :
+  if  PRES_REP['EFFE_FOND' ]=='OUI' :
       motscles['EFFE_FOND' ]=(_F(GROUP_MA    ='EXTUBU  ',
                                  GROUP_MA_INT='L_INT_TU',
                                  PRES        =PRES_REP['PRES']),
@@ -290,6 +290,24 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
        _chtrt[i] = AFFE_CHAR_MECA( MODELE       = modele ,
                                     FORCE_NODALE = mcfact , )
        i=i+1
+
+#
+#     --- commande AFFE_CHAR_MECA ---
+#         chargement mecanique :  verif contact levres
+#
+  if TYPE_MAILLAGE[:4]=='FISS' :
+    if TYPE_MAILLAGE in ('FISS_LONG_NONDEB','FISS_AXIS_NONDEB') :
+       mcfond = ('FOND_SUP','FOND_INF')
+    else :
+       mcfond = ('FONDFISS')
+    _chcont = AFFE_CHAR_MECA( MODELE   = modele ,
+                               CONTACT =_F(GROUP_MA_MAIT = 'LEVRCORP',
+                                           GROUP_MA_ESCL = 'LEVRTUBU',
+                                           METHODE='VERIF',
+                                           TOLE_INTERP = -1.e-6,
+                                           GROUP_MA_FOND=mcfond,),)
+
+
 #
 #     --- commande STAT_NON_LINE ---
 #
@@ -317,6 +335,8 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
        else :
           mcfex.append(_F(CHARGE=_chtrt[i],))
        i=i+1
+  if TYPE_MAILLAGE[:4]=='FISS' :
+     mcfex.append(_F(CHARGE=_chcont,))
   motscles['EXCIT'] =mcfex
 #
   mcfci=[]  # mot clé facteur COMP_INCR :obligatoire pour les noeuds discrets
@@ -588,9 +608,11 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
           NOMMA.append('MAIL_ORI')
     elif TYPE_MAILLAGE in ('FISS_LONG_NONDEB','FISS_AXIS_NONDEB') :
        NBFIS = 2
-       NOMGRO.append(('P_FON1' ,'P_FIS1' ),)
-       NOMGRE.append(('P_FON2' ,'P_FIS2' ),)
+#       NOMGRO.append(('P_FON1' ,'P_FIS1' ),)
+#       NOMGRE.append(('P_FON2' ,'P_FIS2' ),)
+       NOMGRO.append(('PS_FON1','PS_FIS1'),)
        NOMGRO.append(('PI_FON1','PI_FIS1'),)
+       NOMGRE.append(('PS_FON2','PS_FIS2'),)
        NOMGRE.append(('PI_FON2','PI_FIS2'),)
        TABMA8.append('FOND_SUP')
        TABMA8.append('FOND_INF')
@@ -639,6 +661,32 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
                                           INTITULE   ='FOND_INF',
                                           OPERATION  ='EXTRACTION',))
         IMPR_TABLE(TABLE = __rthfis2, )
+#
+#   --- post traitement fissure :  interpénétration des lèvres ----
+#
+
+    if TYPE_MAILLAGE[:4]=='FISS' :
+      __tcont=POST_RELEVE_T( ACTION=_F(  INTITULE = 'Contact levres',
+                                GROUP_NO = 'LEVRTUBU',
+                                RESULTAT = nomres,
+                                TOUT_ORDRE = 'OUI',
+                                NOM_CHAM = 'VALE_CONT',
+                                NOM_CMP = 'CONT',
+                                OPERATION = 'EXTRACTION'))
+      tcont=__tcont.EXTR_TABLE()
+#      print tcont
+      numo = tcont['NUME_ORDRE'].values()['NUME_ORDRE']
+      numo=dict([(i,0) for i in numo]).keys()
+      nbinst = len(numo)
+      for i in range(1,nbinst+1) :
+        tabi = tcont.NUME_ORDRE==i
+        nbtot = len(tabi)
+        cont_actif=tabi.CONT>0.
+        nb_no_cont = len(cont_actif)
+        if nb_no_cont > 0 :
+           UTMESS('A','ASPIC0_22',vali=[i,nbtot,nb_no_cont])
+
+
 #
 #        boucle sur le nombre de fond de fissure
 #
@@ -668,7 +716,7 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
                                 LEVRE_SUP = _F(GROUP_MA='LEVRCORP',),
                                 LEVRE_INF = _F(GROUP_MA='LEVRTUBU',),**motscles)
       if THETA_3D!=None:
-        for tht3d in THETA_3D : 
+        for tht3d in THETA_3D :
 #
 #          --- commande CALC_THETA ---
 #
index d1b14cb6f571fc7d93c6b93075e702d5b6d7335d..c04e20921eb0c3e5a2f5c608790033e990405faa 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_aspic_mail_ops Macro  DATE 25/09/2006   AUTEUR GALENNE E.GALENNE 
+#@ MODIF macr_aspic_mail_ops Macro  DATE 14/04/2008   AUTEUR GALENNE E.GALENNE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -421,7 +421,7 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE,
   from Accas import _F
   import types
   import aster 
-  from Utilitai.Utmess import UTMESS
+  from Utilitai.Utmess import  UTMESS
   ier=0
   
 # On importe les definitions des commandes a utiliser dans la macro
@@ -459,7 +459,7 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE,
   TYPSOU= TUBULURE['TYPE'     ]
   DPENE = TUBULURE['L_PENETR' ]
   if TYPSOU=='TYPE_2' and DPENE>0.0 : 
-    UTMESS('F', "MACR_ASPIC_MAIL", "les piquages penetrants sont autorises uniquement avec les soudures de type 1")
+    UTMESS('F','ASPIC0_12')
   if TYPSOU=='TYPE_2' :
      ITYPSO = 2
   else :
@@ -485,25 +485,19 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE,
   VAL4  = 3.0 * sqrt( RMT    * EPT2 )
   LZMAX = max ( VAL1 , VAL2, VAL3, VAL4 )
   ZMAXC = LZMAX + ( DEC/2.0 ) + D1 + D2
-  LOK = ( abs(ZMAX-ZMAXC) <= EPSI * abs(ZMAXC) )
+  LOK = ( (ZMAX-ZMAXC) >= -1.* EPSI * abs(ZMAXC) )
   if not LOK :
-    message=         ' erreur donnees \n'
-    message=message+ ' Z_MAX FOURNIE   :  %.2f \n'%ZMAX
-    message=message+ ' Z_MAX CALCULEE  :  %.2f \n'%ZMAXC
-    UTMESS('F', "MACR_ASPIC_MAIL", message)
+    UTMESS('A','ASPIC0_13',valr=[ZMAX,ZMAXC])
   RMC   = ( DEC - EPC ) / 2.0
   VAL1  = 1.5 * sqrt( RMC**3 / EPC )
   VAL2  = 3.0 * sqrt( RMC    * EPC )
   LXMAX = max( VAL1 , VAL2 )
   XMAXC = LXMAX + ( DET1 / 2.0 )
-  LOK = ( abs(XMAX-XMAXC) <= EPSI * abs(XMAXC) )
+  LOK = ( (XMAX-XMAXC) >= -1.* EPSI * abs(XMAXC) )
   if not LOK :
-    message=         ' erreur donnees \n'
-    message=message+ ' Z_MAX FOURNIE   :  %.2f \n'%ZMAX
-    message=message+ ' Z_MAX CALCULEE  :  %.2f \n'%ZMAXC
-    UTMESS('F', "MACR_ASPIC_MAIL", message)
-  message=         ' MACR_ASPIC_MAIL / X_MAX CALCULEE : %.2f \n'%XMAX
-  message=message+ ' MACR_ASPIC_MAIL / Z_MAX CALCULEE : %.2f \n'%XMAXC
+    UTMESS('A','ASPIC0_23',valr=[XMAX,XMAXC])
+  message=         ' MACR_ASPIC_MAIL : X_MAX CALCULEE : %.2f  X_MAX FOURNI : %.2f\n'%(XMAXC,XMAX)
+  message=message+ ' MACR_ASPIC_MAIL : Z_MAX CALCULEE : %.2f  Z_MAX FOURNI : %.2f\n'%(ZMAXC,ZMAX)
   aster.affiche('MESSAGE',message)
 #
 #     --- caracteristiques de la fissure ---
@@ -529,18 +523,11 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE,
         N1 = 1
      else : N1 = 0
      if (TFISS=='DEB_INT') and (POSI=='INCLINE') and (DPENE>0.0) and (JEU>0.0) : 
-       message=         ' erreur donnees \n'
-       message=message+ ' dans le cas de fissures \n'
-       message=message+ ' inclinees debouchant en peau interne avec \n'
-       message=message+ ' piquage penetrant le jeu doit etre nul \n'
-       UTMESS('F', "MACR_ASPIC_MAIL", message)
+       UTMESS('F','ASPIC0_14')
      ZETA = 0.5
      if TFISS not in ('DEB_INT','DEB_EXT') :
         if FISS_SOUDURE['LIGA_INT']==None : 
-           message=         ' erreur donnees \n'
-           message=message+ ' dans le cas de fissures internes\n'
-           message=message+ ' (NON_DEB) le ligament inferieur est obligatoire \n'
-           UTMESS('F', "MACR_ASPIC_MAIL", message)
+           UTMESS('F','ASPIC0_15')
         LIGA  = FISS_SOUDURE['LIGA_INT']
         if POSI=='DROIT' :
            if ITYPSO==1 : ZETA = (A+LIGA)/(EPC+H)
@@ -549,21 +536,21 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE,
            if ITYPSO==1 : ZETA = (A+LIGA)*cos(ALPHA*pi/180.0)/EPC
            else         : ZETA = (A+LIGA)*cos(ALPHA*pi/180.0)/EPT1
         if ZETA < 0.1   :
-           UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures internes (NON_DEB) le ligament est trop petit ")
+           UTMESS('F','ASPIC0_16')
         if ZETA > 0.9   :
-           UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures internes (NON_DEB) le ligament est trop grand ")
+           UTMESS('F','ASPIC0_17')
         if LIGA < 0.1*EPC :
-           UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures internes (NON_DEB) le ligament est trop petit ")
+           UTMESS('F','ASPIC0_16')
         if (LIGA + 2.0*A) > 0.9*EPC :
-           UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures internes (NON_DEB) le ligament est trop grand ")
+           UTMESS('F','ASPIC0_17')
      if N1==0 :
         if FISCOU      :
-           UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures courte il faut preciser la longueur")
+           UTMESS('F','ASPIC0_18')
         if AXIS=='NON' :
-           UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de la fissure longue il faut preciser la longueur ou axis=oui ")
+           UTMESS('F','ASPIC0_19')
         C = 0.0
      else :
-        if AXIS=='OUI' : UTMESS('A', "MACR_ASPIC_MAIL", "fissure axisymetrique : le mot clef <LONGUEUR> ne doit pas etre renseigne")
+        if AXIS=='OUI' : UTMESS('A','ASPIC0_20')
      C = 0.5 * C
      LEQU=2.*(pi*(DEC-EPC)-DET1+2.*EPT1)
 #
@@ -656,7 +643,7 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE,
   if   logiel=='GIBI98'  : logiel = loc_gibi+'gibi98'
   elif logiel=='GIBI2000': logiel = loc_gibi+'gibi2000'
   else                   :
-       UTMESS('F', "MACR_ASPIC_MAIL", "seuls gibi98 et gibi2000 sont appelables ")
+       UTMESS('F','ASPIC0_21')
 #
 #     --- ecriture sur le fichier .datg  de la procedure ---
 #
@@ -699,6 +686,7 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE,
      l_CREA_GROUP_NO.append('S_LAT2_C')
      l_CREA_GROUP_NO.append('S_LAT1_T')
      l_CREA_GROUP_NO.append('S_LAT2_T')
+     l_CREA_GROUP_NO.append('LEVRTUBU')
      if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
         l_CREA_GROUP_NO.append('PFONDINF')
         l_CREA_GROUP_NO.append('PFONDSUP')
@@ -735,6 +723,8 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE,
         motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = 'FONDFISS',))
      if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
         motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = ('FOND_SUP','FOND_INF',),))
+     if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='COURTE') :
+        motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = 'FONDFISS',))
      __MAPROV=DEFI_GROUP(reuse   =__MAPROV,
                          MAILLAGE=__MAPROV,
                          **motscles )
@@ -759,7 +749,7 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE,
 #
 
   motscles={}
-  if TFISS=='DEB_INT' :
+  if not SAIN :
      motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXCORP1','EXCORP2','EXTUBU','LEVRTUBU','LEVRCORP'),)
   else :
      motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXCORP1','EXCORP2','EXTUBU',),)
diff --git a/Aster/Cata/cataSTA9/Macro/macr_cabri_calc_ops.py b/Aster/Cata/cataSTA9/Macro/macr_cabri_calc_ops.py
deleted file mode 100644 (file)
index e448efd..0000000
+++ /dev/null
@@ -1,561 +0,0 @@
-#@ MODIF macr_cabri_calc_ops Macro  DATE 09/05/2007   AUTEUR REZETTE C.REZETTE 
-# -*- coding: iso-8859-1 -*-
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003  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.        
-# ======================================================================
-
-
-
-
-def macr_cabri_calc_ops(self,MAILLAGE,MODELE_MECA,MODELE_THER,CHAR_THER,
-    CHAR_MECA,RESU_THER,RESO_INTE,
-    AFFE_MATERIAU,DEFI_CHAR_THER,DEFI_CHAR_MECA,RELATION,SOLVEUR,CONVERGENCE,NEWTON, 
-    INCREMENT,CHAM_MATER,**args):
-   """
-     Ecriture de la macro MACR_CABRI_CALC
-   """
-   
-   #################################################################
-   ########## PREPARATION MACRO
-   #################################################################
-
-   from Accas import _F
-
-   ier =0
-   
-   # On met certains mots-clefs dans des variables locales pour les proteger
-   affemateriau = AFFE_MATERIAU
-   mail         = MAILLAGE  
-   resointe     = RESO_INTE
-
-   # On importe les definitions des commandes a utiliser dans la macro
-   # Le nom de la variable doit etre obligatoirement le nom de la commande
-   DEFI_GROUP       = self.get_cmd('DEFI_GROUP')
-   AFFE_MATERIAU    = self.get_cmd('AFFE_MATERIAU')
-   AFFE_MODELE      = self.get_cmd('AFFE_MODELE') 
-   MODI_MAILLAGE    = self.get_cmd('MODI_MAILLAGE')   
-   AFFE_CHAR_THER_F = self.get_cmd('AFFE_CHAR_THER_F')
-   AFFE_CHAR_THER   = self.get_cmd('AFFE_CHAR_THER')  
-   AFFE_CHAR_MECA_F = self.get_cmd('AFFE_CHAR_MECA_F')
-   AFFE_CHAR_MECA   = self.get_cmd('AFFE_CHAR_MECA')  
-   DEFI_FONCTION    = self.get_cmd('DEFI_FONCTION')
-   DEFI_LIST_REEL   = self.get_cmd('DEFI_LIST_REEL')
-   THER_LINEAIRE    = self.get_cmd('THER_LINEAIRE')
-   STAT_NON_LINE    = self.get_cmd('STAT_NON_LINE')
-
-   # La macro compte pour 1 dans la numerotation des commandes
-   self.set_icmd(1)
-
-   # Le concept sortant (de type evol_noli) est nomme 'resumeca' dans 
-   # le contexte de la macro
-   self.DeclareOut('resumeca',self.sd)
-   self.DeclareOut('mail',MAILLAGE)
-           
-   #################################################################
-   ########## PREPARATION DES MODELES
-   #################################################################
-
-   # Definition des groupes
-   mail=DEFI_GROUP(reuse =mail,MAILLAGE=mail,
-                        CREA_GROUP_NO=(
-                                  _F(GROUP_MA='M_GOU',NOM='N_M_GOU',),
-                                  _F(GROUP_MA='M_JOI',NOM='N_M_JOI',),
-                                  _F(GROUP_MA='SCBJ',NOM='N_SCBJ',),
-                                  _F(GROUP_MA='SCJB',NOM='N_SCJB',),
-                                  _F(GROUP_MA='M_L_AA',NOM='N_M_L_AA',),
-                                  _F(GROUP_MA='SCEG',NOM='N_SCEG',),
-                                  _F(GROUP_MA='SCGE',NOM='N_SCGE',),),)
-
-   # Creation du modele thermique
-   if MODELE_THER != None:
-      self.DeclareOut('modther',MODELE_THER)
-         
-   modther=AFFE_MODELE(MAILLAGE=mail,
-                          AFFE=_F(GROUP_MA=('VTOT','M_GOU','M_TUB','M_JOI','SCBJ','SCJB',
-                          'M_L_AA','M_INT','M_L_SA','M_EXT','SCEG','SCGE',),
-                                  PHENOMENE='THERMIQUE',
-                                  MODELISATION='3D_DIAG',),
-                         );
-
-   # Creation du modele mecanique
-   if MODELE_MECA != None:
-      self.DeclareOut('modmeca',MODELE_MECA)
-         
-   modmeca = AFFE_MODELE(MAILLAGE=mail,
-                          AFFE=_F(GROUP_MA=('VTOT','M_GOU','M_TUB','M_JOI','SCBJ','SCJB',
-                          'M_L_AA','M_L_SA','SCEG','SCGE','M_INT','M_EXT',),
-                                  PHENOMENE='MECANIQUE',
-                                  MODELISATION='3D',),
-                         );
-
-   # Orientation des mailles
-   mail=MODI_MAILLAGE(reuse =mail,
-                 MAILLAGE=mail,
-                 ORIE_PEAU_3D=(_F(GROUP_MA=('M_INT','M_TUB',),),
-                               _F(GROUP_MA=('M_L_AA','M_JOI','M_L_SA',),),),
-                              );
-
-
-
-   # Affectation des materiaux (thermique)
-   motscles={}
-   motscles['AFFE']=[]
-   for mat in affemateriau:
-      if mat['TOUT'] == None:
-         # Creation de mots-cles pour les AFFE_CHAR_MECA
-         motscles['AFFE'].append(_F(GROUP_MA=mat['GROUP_MA'],
-                                    MATER = mat['MATER'],
-                                    TEMP_REF = mat['TEMP_REF'],) )
-      else:
-         # Creation de mots-cles pour les AFFE_CHAR_MECA
-         motscles['AFFE'].append(_F(TOUT='OUI',
-                                    MATER = mat['MATER'],
-                                    TEMP_REF = mat['TEMP_REF'],) )
-      
-   __cham = AFFE_MATERIAU(MAILLAGE=mail,
-                    MODELE=modther,
-                    AFFE=motscles['AFFE'],
-                   )
-
-   #################################################################
-   ########## CONDITIONS AUX LIMITES THERMIQUES
-   #################################################################   
-   # Recuperation des parametres thermiques
-
-   if DEFI_CHAR_THER != None:
-      temp_ini = DEFI_CHAR_THER['TEMP_INIT']
-      if DEFI_CHAR_THER['COEF_H_FLUI']!=None:
-         coef_int = DEFI_CHAR_THER['COEF_H_FLUI']
-      else:
-         coef_int = DEFI_FONCTION(NOM_PARA='INST',
-                    VALE=(0.0,0.016,
-                       7200.0,0.016,),
-                    PROL_DROITE='CONSTANT',
-                    PROL_GAUCHE='CONSTANT',);      
-      if DEFI_CHAR_THER['TEMP_EXT_FLUI']!=None:
-         temp_int = DEFI_CHAR_THER['TEMP_EXT_FLUI']
-      else:
-         temp_int = DEFI_FONCTION(NOM_PARA='INST',
-                    VALE=(0.0,temp_ini,1.0,temp_ini,11.0,60.0,
-                          600.0,60.0,610.0,280.0,1800.0,280.0,7200.0,280.0,),
-                    PROL_DROITE='CONSTANT',
-                    PROL_GAUCHE='CONSTANT',);    
-      if DEFI_CHAR_THER['COEF_H_AIR']!=None:
-         coef_ext = DEFI_CHAR_THER['COEF_H_AIR']
-      else:
-         coef_ext = DEFI_FONCTION(NOM_PARA='INST',
-                    VALE=(0.0,1e-05,7200.0,1e-05,),
-                    PROL_DROITE='CONSTANT',
-                    PROL_GAUCHE='CONSTANT',);
-     
-      if DEFI_CHAR_THER['TEMP_EXT_AIR']!=None:
-         temp_ext = DEFI_CHAR_THER['TEMP_EXT_AIR']
-      else:
-         temp_ext = DEFI_FONCTION(NOM_PARA='INST',
-                    VALE=(0.0,20.0,7200.0,20.0,),
-                    PROL_DROITE='CONSTANT',
-                    PROL_GAUCHE='CONSTANT',);    
-      if DEFI_CHAR_THER['LIST_INST']!=None:
-         transi1  = DEFI_CHAR_THER['LIST_INST']
-      else:
-         transi1  = DEFI_LIST_REEL(DEBUT=0.0,
-                     INTERVALLE=(_F(JUSQU_A=1.0,
-                                    NOMBRE=1,),
-                                 _F(JUSQU_A=11.0,
-                                    NOMBRE=10,),
-                                 _F(JUSQU_A=600.0,
-                                    NOMBRE=10,),
-                                 _F(JUSQU_A=610.0,
-                                    NOMBRE=30,),
-                                 _F(JUSQU_A=1800.0,
-                                    NOMBRE=30,),
-                                 _F(JUSQU_A=7200.0,
-                                    NOMBRE=10,),),);                                                        
-   else:
-      temp_ini = DEFI_CHAR_THER['TEMP_INIT']
-      coef_int = DEFI_FONCTION(NOM_PARA='INST',
-                    VALE=(0.0,0.016,
-                       7200.0,0.016,),
-                    PROL_DROITE='CONSTANT',
-                    PROL_GAUCHE='CONSTANT',);      
-      temp_int = DEFI_FONCTION(NOM_PARA='INST',
-                    VALE=(0.0,temp_ini,1.0,temp_ini,11.0,60.0,
-                          600.0,60.0,610.0,280.0,1800.0,280.0,7200.0,280.0,),
-                    PROL_DROITE='CONSTANT',
-                    PROL_GAUCHE='CONSTANT',);    
-      coef_ext = DEFI_FONCTION(NOM_PARA='INST',
-                    VALE=(0.0,1e-05,7200.0,1e-05,),
-                    PROL_DROITE='CONSTANT',
-                    PROL_GAUCHE='CONSTANT',);    
-      temp_ext = DEFI_FONCTION(NOM_PARA='INST',
-                    VALE=(0.0,20.0,7200.0,20.0,),
-                    PROL_DROITE='CONSTANT',
-                    PROL_GAUCHE='CONSTANT',);                                       
-      transi1  = DEFI_LIST_REEL(DEBUT=0.0,
-                     INTERVALLE=(_F(JUSQU_A=1.0,
-                                    NOMBRE=1,),
-                                 _F(JUSQU_A=11.0,
-                                    NOMBRE=10,),
-                                 _F(JUSQU_A=600.0,
-                                    NOMBRE=10,),
-                                 _F(JUSQU_A=610.0,
-                                    NOMBRE=30,),
-                                 _F(JUSQU_A=1800.0,
-                                    NOMBRE=30,),
-                                 _F(JUSQU_A=7200.0,
-                                    NOMBRE=10,),),);     
-   # Que sauver ?
-   if CHAR_THER != None:
-      for m in CHAR_THER:
-         if m['TYPE']=="BRIDE_FLUIDE":
-            self.DeclareOut('cl_th1',m['CHARGE'])
-         if m['TYPE']=="BRIDE_AIR":
-            self.DeclareOut('cl_th2',m['CHARGE'])
-         if m['TYPE']=="ECROU_GOUJON":
-            self.DeclareOut('cl_th3',m['CHARGE'])
-         if m['TYPE']=="BRIDE_JOINT":
-            self.DeclareOut('cl_th4',m['CHARGE'])
-
-   # Echanges thermiques internes entre le fluide et la bride
-   cl_th1=AFFE_CHAR_THER_F(MODELE=modther,
-                           ECHANGE=_F(GROUP_MA = 'M_INT',
-                                      COEF_H   = coef_int,
-                                      TEMP_EXT = temp_int,),);
-
-   # Echanges thermiques externes entre bride et air ambiant
-   cl_th2=AFFE_CHAR_THER_F(MODELE=modther,
-                           ECHANGE=_F(GROUP_MA='M_EXT',
-                                   COEF_H=coef_ext,
-                                   TEMP_EXT=temp_ext,),);
-
-   # Echanges thermiques entre ecrou et goujon
-   cl_th3=AFFE_CHAR_THER(MODELE=modther,
-                         LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG',
-                                        GROUP_NO_2='N_SCGE',
-                                        DDL_1='TEMP',
-                                        COEF_MULT_1=1.0,
-                                        DDL_2='TEMP',
-                                        COEF_MULT_2=-1.0,
-                                        COEF_IMPO=0.0,),);
-
-   # Echanges thermiques entre bride et joint
-   cl_th4=AFFE_CHAR_THER(MODELE=modther,
-                         LIAISON_GROUP=_F(GROUP_NO_1='N_SCBJ',
-                                        GROUP_NO_2='N_SCJB',
-                                        DDL_1='TEMP',
-                                        COEF_MULT_1=1.0,
-                                        DDL_2='TEMP',
-                                        COEF_MULT_2=-1.0,
-                                        COEF_IMPO=0.0,),);
-
-
-
-   #################################################################
-   ########## CALCUL THERMIQUE
-   #################################################################   
-   if RESU_THER != None:
-      self.DeclareOut('resuther',RESU_THER)   
-
-   resuther=THER_LINEAIRE(MODELE=modther,
-                  CHAM_MATER=__cham,
-                  EXCIT=(_F(CHARGE=cl_th1,),
-                         _F(CHARGE=cl_th2,),
-                         _F(CHARGE=cl_th3,),
-                         _F(CHARGE=cl_th4,),),
-                  INCREMENT=_F(LIST_INST=transi1,),
-                  TEMP_INIT=_F(VALE=temp_ini,),
-                  TITRE='CABRI THERMIQUE &DATE &HEURE',);
-      # Affectation des materiaux (mécanique)
-   if CHAM_MATER != None:
-      self.DeclareOut('_chamt',CHAM_MATER)
-   motscles={}
-   motscles['AFFE']=[]
-   motscles['AFFE_VARC']=[]
-   for mat in affemateriau:
-      if mat['TOUT'] == None:
-         # Creation de mots-cles pour les AFFE_CHAR_MECA
-         motscles['AFFE'].append(_F(GROUP_MA=mat['GROUP_MA'],
-                                    MATER = mat['MATER'],) )
-         motscles['AFFE_VARC'].append(_F(NOM_VARC='TEMP',GROUP_MA=mat['GROUP_MA'],
-                                         EVOL=resuther,NOM_CHAM='TEMP',
-                                         VALE_REF = mat['TEMP_REF'],))
-      else:
-         # Creation de mots-cles pour les AFFE_CHAR_MECA
-         motscles['AFFE'].append(_F(TOUT='OUI',
-                                    MATER = mat['MATER'],
-                                    TEMP_REF = mat['TEMP_REF'],) )
-         motscles['AFFE_VARC'].append(_F(NOM_VARC='TEMP',TOUT='OUI',
-                                         EVOL=resuther,NOM_CHAM='TEMP',
-                                         VALE_REF = mat['TEMP_REF'],))
-      
-   _chamt = AFFE_MATERIAU(MAILLAGE=mail,
-                    MODELE=modther,
-                    AFFE=motscles['AFFE'],
-                    AFFE_VARC=motscles['AFFE_VARC'],
-                   )
-
-   #################################################################
-   ########## CONDITIONS AUX LIMITES MECANIQUES
-   #################################################################   
-   # Recuperation des parametres mecaniques
-   if DEFI_CHAR_MECA != None:
-     if DEFI_CHAR_MECA['PRETENS']!=None:
-         f_pret = DEFI_CHAR_MECA['PRETENS']
-     else:
-         f_pret=DEFI_FONCTION(NOM_PARA='INST',
-                     VALE=(0.0,0.0,1.0,-0.02,),
-                     PROL_DROITE='CONSTANT',
-                     PROL_GAUCHE='CONSTANT',);                                 
-     if DEFI_CHAR_MECA['PRES_REP']!=None:
-         pre_int = DEFI_CHAR_MECA['PRES_REP']
-     else:
-         pre_int = DEFI_FONCTION(NOM_PARA='INST',
-                      VALE=(0.0,0.0,1.0,0.0,11.0,16.0,),
-                      PROL_DROITE='CONSTANT',
-                      PROL_GAUCHE='CONSTANT',);  
-     if DEFI_CHAR_MECA['EFFE_FOND']!=None:
-         eff_fond = DEFI_CHAR_MECA['EFFE_FOND']
-     else:
-         eff_fond=DEFI_FONCTION(NOM_PARA='INST',
-                       VALE=(0.0,-0.0,1.0,-0.0,11.0,-20.607059,),
-                       PROL_DROITE='CONSTANT',
-                       PROL_GAUCHE='CONSTANT',);
-   else:
-      f_pret=DEFI_FONCTION(NOM_PARA='INST',
-                     VALE=(0.0,0.0,1.0,-0.02,),
-                     PROL_DROITE='CONSTANT',
-                     PROL_GAUCHE='CONSTANT',);                                 
-
-      pre_int = DEFI_FONCTION(NOM_PARA='INST',
-                      VALE=(0.0,0.0,1.0,0.0,11.0,16.0,),
-                      PROL_DROITE='CONSTANT',
-                      PROL_GAUCHE='CONSTANT',);  
-
-      eff_fond=DEFI_FONCTION(NOM_PARA='INST',
-                       VALE=(0.0,-0.0,1.0,-0.0,11.0,-20.607059,),
-                       PROL_DROITE='CONSTANT',
-                       PROL_GAUCHE='CONSTANT',);     
-   # Que sauver ?
-   if CHAR_MECA != None:
-      for m in CHAR_MECA:
-         if m['TYPE']=="BLOC_BAS_GOUJ":
-            self.DeclareOut('cl_me1',m['CHARGE'])
-         if m['TYPE']=="BLOC_BAS_JOINT":
-            self.DeclareOut('cl_me2',m['CHARGE'])
-         if m['TYPE']=="BLOC_LAT_ALES":
-            self.DeclareOut('cl_me3',m['CHARGE'])
-         if m['TYPE']=="BLOC_LAT_NALES":
-            self.DeclareOut('cl_me4',m['CHARGE'])
-         if m['TYPE']=="PLAN_TUBE":
-            self.DeclareOut('cl_me5',m['CHARGE'])
-         if m['TYPE']=="PRES_FLU":
-            self.DeclareOut('cl_me6',m['CHARGE'])
-         if m['TYPE']=="EFFET_FOND":
-            self.DeclareOut('cl_me7',m['CHARGE'])
-         if m['TYPE']=="CONT_JOINT":
-            self.DeclareOut('cl_me8',m['CHARGE'])
-         if m['TYPE']=="SERR_ECROU_1":
-            self.DeclareOut('cl_me10',m['CHARGE'])
-         if m['TYPE']=="SERR_ECROU_2":
-            self.DeclareOut('cl_me11',m['CHARGE'])            
-                            
-
-   # Blocage bas du goujon
-   cl_me1=AFFE_CHAR_MECA(MODELE=modmeca,
-                      DDL_IMPO=_F(GROUP_NO='N_M_GOU',
-                                  DZ=0.0,),
-                      INFO=2,);
-   # Blocage bas du joint
-   cl_me2=AFFE_CHAR_MECA(MODELE=modmeca,
-                      DDL_IMPO=_F(GROUP_NO='N_M_JOI',
-                                  DZ=0.0,),
-                      INFO=2,);
-
-   # Blocage lateral, face laterale avec alesage
-   cl_me3=AFFE_CHAR_MECA(MODELE=modmeca,
-                      DDL_IMPO=_F(GROUP_NO='N_M_L_AA',
-                                  DY=0.0,),
-                      INFO=2,);
-
-   # Face laterale sans alesage
-   cl_me4=AFFE_CHAR_MECA(MODELE=modmeca,
-                      FACE_IMPO=_F(GROUP_MA='M_L_SA',
-                                   DNOR=0.0,),
-                      INFO=2,);
-
-   # Condition de planeite de la face de coupe du tube
-   cl_me5=AFFE_CHAR_MECA(MODELE=modmeca,
-                      LIAISON_UNIF=_F(GROUP_MA='M_TUB',
-                                      DDL='DZ',),
-                      INFO=2,);
-   # Pression due au fluide
-   cl_me6=AFFE_CHAR_MECA_F(MODELE=modmeca,
-                           PRES_REP=_F(GROUP_MA='M_INT',
-                                     PRES=pre_int,),
-                           INFO=2,);
-
-   # Effet de fond
-   cl_me7=AFFE_CHAR_MECA_F(MODELE=modmeca,
-                           PRES_REP=_F(GROUP_MA='M_TUB',
-                                     PRES=eff_fond,),
-                           INFO=2,);
-
-   # Contact zone de joint
-   cl_me8=AFFE_CHAR_MECA(MODELE=modmeca,
-                        CONTACT=_F(GROUP_MA_MAIT='SCBJ',
-                                   GROUP_MA_ESCL='SCJB',),
-                        INFO=2,);
-
-   # Serrage ecrou/goujon (pre-tensionnement)
-   cl_me10=AFFE_CHAR_MECA_F(MODELE=modmeca,
-                         LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG',
-                                          GROUP_NO_2='N_SCGE',
-                                          DDL_1='DZ',
-                                          COEF_MULT_1=1.0,
-                                          DDL_2='DZ',
-                                          COEF_MULT_2=-1.0,
-                                          COEF_IMPO=f_pret,),
-                      INFO=2,);
-
-   cl_me11=AFFE_CHAR_MECA(MODELE=modmeca,
-                       LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG',
-                                        GROUP_NO_2='N_SCGE',
-                                        DDL_1='DX',
-                                        COEF_MULT_1=1.0,
-                                        DDL_2='DX',
-                                        COEF_MULT_2=-1.0,
-                                        COEF_IMPO=0.0,),
-                      INFO=2,);
-
-
-   #################################################################
-   ########## CALCUL MECANIQUE
-   #################################################################  
-   # Options de convergence        
-   solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
-   
-   # Elimination des valeurs "None"
-   for i in solveur.keys():
-      if solveur[i]==None : del solveur[i]
-
-
-   transi2 = DEFI_LIST_REEL(DEBUT=0.0,
-                     INTERVALLE=(_F(JUSQU_A=1.0,
-                                    NOMBRE=2,),
-                                 _F(JUSQU_A=11.0,
-                                    NOMBRE=20,),
-                                 _F(JUSQU_A=600.0,
-                                    NOMBRE=20,),
-                                 _F(JUSQU_A=610.0,
-                                    NOMBRE=20,),
-                                 _F(JUSQU_A=1800.0,
-                                    NOMBRE=20,),
-                                 _F(JUSQU_A=7200.0,
-                                    NOMBRE=20,),),);   
-
-   # Options d'incrementation  
-   if INCREMENT != None:
-      if INCREMENT['LIST_INST'] != None:
-         listinst = INCREMENT['LIST_INST']
-      else:
-         listinst = transi2   
-   
-      increment=INCREMENT[0].cree_dict_valeurs(INCREMENT[0].mc_liste)
-   
-      # Elimination des valeurs "None"
-      for i in increment.keys():
-         if increment[i]==None : del increment[i]
-      
-      increment['LIST_INST'] = listinst
-            
-   else:
-      listinst  = transi2
-      increment =_F(
-               LIST_INST       = listinst,
-               ),       
-                              
-   # Options de Newton     
-   newton=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
-   # Elimination des valeurs "None"
-   for i in newton.keys():
-      if newton[i]==None : del newton[i]   
-
-   # Options de convergence        
-   convergence=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste) 
-   # Elimination des valeurs "None"
-   for i in convergence.keys():
-      if convergence[i]==None : del convergence[i]
-
-   # Options de comportement
-   # Type incremental (=1) ou elastique (=0)
-   comp_incr = 0
-   if RELATION:
-      relation=RELATION
-      if relation == 'VMIS_ISOT_TRAC':
-         comp_incr = 1
-      else:
-         comp_incr = 0
-   else:
-      relation = 'ELAS'
-      comp_incr = 0
-
-         
-   # Parametres du calcul
-   if comp_incr == 1:
-      resumeca=STAT_NON_LINE(MODELE=modmeca,
-                  CHAM_MATER=_chamt,
-                  EXCIT=(_F(CHARGE=cl_me1,),
-                         _F(CHARGE=cl_me2,),
-                         _F(CHARGE=cl_me3,),
-                         _F(CHARGE=cl_me4,),
-                         _F(CHARGE=cl_me5,),
-                         _F(CHARGE=cl_me6,), 
-                         _F(CHARGE=cl_me7,), 
-                         _F(CHARGE=cl_me8,), 
-                         _F(CHARGE=cl_me10,), 
-                         _F(CHARGE=cl_me11,),                            
-                  ),
-                  SOLVEUR        = solveur, 
-                  COMP_INCR      =_F(RELATION=relation,RESO_INTE=resointe),
-                  NEWTON         = newton,
-                  INCREMENT      = increment,
-                  CONVERGENCE    = convergence,
-                  TITRE='CABRI THERMOM\xe9CANIQUE &DATE &HEURE',);
-   else:
-      resumeca=STAT_NON_LINE(MODELE=modmeca,
-                  CHAM_MATER=_chamt,
-                  EXCIT=(_F(CHARGE=cl_me1,),
-                         _F(CHARGE=cl_me2,),
-                         _F(CHARGE=cl_me3,),
-                         _F(CHARGE=cl_me4,),
-                         _F(CHARGE=cl_me5,),
-                         _F(CHARGE=cl_me6,), 
-                         _F(CHARGE=cl_me7,), 
-                         _F(CHARGE=cl_me8,), 
-                         _F(CHARGE=cl_me10,), 
-                         _F(CHARGE=cl_me11,),                            
-                  ),
-                  SOLVEUR        = solveur, 
-                  COMP_ELAS      =_F(RELATION=relation,RESO_INTE=resointe),
-                  NEWTON         = newton,
-                  INCREMENT      = increment,
-                  CONVERGENCE    = convergence,
-                  TITRE='CABRI THERMOM\xe9CANIQUE &DATE &HEURE',);                  
-
-   return ier
-
diff --git a/Aster/Cata/cataSTA9/Macro/macr_cabri_mail_dat.py b/Aster/Cata/cataSTA9/Macro/macr_cabri_mail_dat.py
deleted file mode 100644 (file)
index 7d67325..0000000
+++ /dev/null
@@ -1,630 +0,0 @@
-#@ MODIF macr_cabri_mail_dat Macro  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
-# -*- coding: iso-8859-1 -*-
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003  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.        
-# ======================================================================
-
-
-
-# Données pour les brides standards
-
-
-
-# Pour ajouter une bride x:
-#  Définir un dico_bride_x comme ci-dessous puis ajoutez-le à dico_bride_std
-
-# dictionnaire pour la description des variables
-dico_var_geo = {'nbgouj':'Nombre de goujons de la jonction boulonnée (GOUJ_N_GOUJON)',
-            'dint':'Diamètre intérieur de la bride (BRID_D_INT)',
-            'dex1':'Diamétre extérieur de la conduite (TUBU_D_EXT)',
-            'dex2':'Position (diamètre) du congé de la bride (BRID_D_CONGE)',
-            'dex3':'Diamètre de l''épaulement de la bride au niveau de l''interface d''étanchéité (BRID_D_EPAUL)',
-            'dtrou':'Position des alésages de la bride permettant l''introduction des goujons (BRID_P_ALESAG)',
-            'dext':'Diamètre extérieur de la bride (BRID_D_EXT)',
-            'dt':'Diamètre des alésages de la bride permettant l''introduction des goujons (BRID_D_ALESAG)',
-            'drd':'Diamètre de la rondelle (GOUJ_D_RONDEL)',
-            'dg':'Diamètre des goujons de la jonction boulonnée (GOUJ_D_GOUJON)',
-            'dec':'Diamètre de l''écrou (GOUJ_D_ECROU)',
-            'rcong':'Rayon du congé de la bride (BRID_R_CONGE)',
-            'he':'Epaisseur de la rondelle (GOUJ_E_RONDEL)',
-            'e':'Epaisseur de l''écrou (GOUJ_E_ECROU)',
-            'hc1':'Hauteur de la bride (BRID_H)',
-            'hcg1':'Hauteur de conduite (TUBU_H)',
-            'hb':'Hauteur de l''épaulement de la bride au niveau de l''interface d''étanchéité (BRID_H_EPAUL)',
-            'htrou':'Hauteur des alésages de la bride permettant l''introduction des goujons (BRID_H_ALESAG)',
-            'pf':'Profondeur (épaisseur) des filets des goujons (GOUJ_E_FILET)',
-            'j':'Epaisseur du joint au niveau de l''interface d''étanchéité (ETAN_E_JOINT)'}
-
-dico_var_msh = {'nrad':'Nombre d''éléments radiaux (NBR_RAD)',
-            'ncir':'Nombre d''éléments circonférentiels (NBR_CIR)',
-            'nver':'Nombre d''éléments verticaux (NBR_VER)',
-            'nsect':'Nombre d''éléments de l''alésage (NBR_ALE)',
-            'temps':'Temps d''analyse'}
-
-# dictionnaires des brides standards
-dico_bride_A = {'nbgouj': 4,
-                'dint':   15.76,
-                'dex1':   21.3,
-                'dex2':   38.,
-                'dex3':   48.,
-                'dtrou':  67.,
-                'dext':   95.,
-                'dt':     14.,
-                'drd':    25.,
-                'dg':     12.,
-                'dec':    18.,
-                'rcong':  3.,
-                'he':     12.,
-                'e':      2.5,
-                'hc1':    46.5,
-                'hcg1':   20,
-                'hb':     1.5,
-                'htrou':  20.,
-                'pf':     1.5,
-                'j':      2}
-
-dico_bride_AA = {'nbgouj': 32,
-                'dint':   336.5,
-                'dex1':   355.6,
-                'dex2':   395.,
-                'dex3':   415.,
-                'dtrou':  460.,
-                'dext':   515.,
-                'dt':     22.,
-                'drd':    36.,
-                'dg':     20.,
-                'dec':    30.,
-                'rcong':  5.,
-                'he':     20.,
-                'e':      3.,
-                'hc1':    115.,
-                'hcg1':   115./2.,
-                'hb':     3.,
-                'htrou':  47.,
-                'pf':     2.2,
-                'j':      2}
-
-dico_bride_B = {'nbgouj': 4,
-                'dint':   26.64,
-                'dex1':   33.4,
-                'dex2':   53.,
-                'dex3':   63.,
-                'dtrou':  88.,
-                'dext':   123.,
-                'dt':     16.,
-                'drd':    27.,
-                'dg':     14.,
-                'dec':    21.,
-                'rcong':  4.,
-                'he':     14.,
-                'e':      2.5,
-                'hc1':    59.,
-                'hcg1':   59./2.,
-                'hb':     1.5,
-                'htrou':  27.5,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_B1 = {'nbgouj': 4,
-                'dint':   24.3,
-                'dex1':   33.4,
-                'dex2':   53.,
-                'dex3':   63.,
-                'dtrou':  88.,
-                'dext':   123.,
-                'dt':     16.,
-                'drd':    27.,
-                'dg':     14.,
-                'dec':    21.,
-                'rcong':  4.,
-                'he':     14.,
-                'e':      2.5,
-                'hc1':    59.,
-                'hcg1':   59./2.,
-                'hb':     1.5,
-                'htrou':  27.5,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_C = {'nbgouj': 8,
-                'dint':   52.48,
-                'dex1':   60.3,
-                'dex2':   84.,
-                'dex3':   100.,
-                'dtrou':  127.,
-                'dext':   165.,
-                'dt':     18.,
-                'drd':    30,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  4.,
-                'he':     16.,
-                'e':      3,
-                'hc1':    70.,
-                'hcg1':   70./2.,
-                'hb':     1.5,
-                'htrou':  21.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_D = {'nbgouj': 8,
-                'dint':   42.9,
-                'dex1':   60.3,
-                'dex2':   84.,
-                'dex3':   100.,
-                'dtrou':  127.,
-                'dext':   165.,
-                'dt':     18.,
-                'drd':    30,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    87.6,
-                'hcg1':   87.6/2.,
-                'hb':     1.5,
-                'htrou':  38.5,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_D1 = {'nbgouj': 8,
-                'dint':   49.22,
-                'dex1':   60.3,
-                'dex2':   84.,
-                'dex3':   100.,
-                'dtrou':  127.,
-                'dext':   165.,
-                'dt':     18.,
-                'drd':    30,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    87.6,
-                'hcg1':   87.6/2.,
-                'hb':     1.5,
-                'htrou':  38.5,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_E = {'nbgouj': 8,
-                'dint':   83.1,
-                'dex1':   88.9,
-                'dex2':   117.5,
-                'dex3':   135.,
-                'dtrou':  165.,
-                'dext':   209.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    80.,
-                'hcg1':   80./2.,
-                'hb':     2.,
-                'htrou':  27.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_F = {'nbgouj': 8,
-                'dint':   73.66,
-                'dex1':   88.9,
-                'dex2':   117.5,
-                'dex3':   135.,
-                'dtrou':  165.,
-                'dext':   209.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    89.,
-                'hcg1':   89./2.,
-                'hb':     2.,
-                'htrou':  36.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_FF = {'nbgouj': 32,
-                'dint':   396.99,
-                'dex1':   406.4,
-                'dex2':   440.,
-                'dex3':   455.,
-                'dtrou':  485.,
-                'dext':   535.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    99.,
-                'hcg1':   99./2.,
-                'hb':     3.,
-                'htrou':  40.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_G = {'nbgouj': 12,
-                'dint':   66.7,
-                'dex1':   88.9,
-                'dex2':   117.5,
-                'dex3':   135.,
-                'dtrou':  165.,
-                'dext':   209.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    98.,
-                'hcg1':   98./2.,
-                'hb':     2.,
-                'htrou':  45.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_GG = {'nbgouj': 36,
-                'dint':   381.,
-                'dex1':   406.4,
-                'dex2':   445.,
-                'dex3':   460.,
-                'dtrou':  495.,
-                'dext':   545.,
-                'dt':     22.,
-                'drd':    36,
-                'dg':     20.,
-                'dec':    30.,
-                'rcong':  5.,
-                'he':     20.,
-                'e':      3.,
-                'hc1':    129.,
-                'hcg1':   129./2.,
-                'hb':     3.,
-                'htrou':  63.,
-                'pf':     2.2,
-                'j':      2}
-dico_bride_H = {'nbgouj': 12,
-                'dint':   108.2,
-                'dex1':   114.3,
-                'dex2':   146.,
-                'dex3':   157.,
-                'dtrou':  190.,
-                'dext':   225.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    89.,
-                'hcg1':   89./2.,
-                'hb':     2.,
-                'htrou':  33.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_H1 = {'nbgouj': 12,
-                'dint':   102.6,
-                'dex1':   114.3,
-                'dex2':   146.,
-                'dex3':   157.,
-                'dtrou':  190.,
-                'dext':   225.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    89.,
-                'hcg1':   89./2.,
-                'hb':     2.,
-                'htrou':  33.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_I = {'nbgouj': 18,
-                'dint':   92.1,
-                'dex1':   114.3,
-                'dex2':   146.,
-                'dex3':   160.,
-                'dtrou':  200.,
-                'dext':   255.,
-                'dt':     20.,
-                'drd':    32.,
-                'dg':     18.,
-                'dec':    27.,
-                'rcong':  5.,
-                'he':     18.,
-                'e':      3.,
-                'hc1':    99.,
-                'hcg1':   99./2.,
-                'hb':     2.,
-                'htrou':  43.,
-                'pf':     2.2,
-                'j':      2}
-dico_bride_J = {'nbgouj': 18,
-                'dint':   87.34,
-                'dex1':   114.3,
-                'dex2':   146.,
-                'dex3':   160.,
-                'dtrou':  200.,
-                'dext':   255.,
-                'dt':     20.,
-                'drd':    32.,
-                'dg':     18.,
-                'dec':    27.,
-                'rcong':  5.,
-                'he':     18.,
-                'e':      3.,
-                'hc1':    111.,
-                'hcg1':   111./2.,
-                'hb':     2.,
-                'htrou':  55.,
-                'pf':     2.2,
-                'j':      2}
-dico_bride_J1 = {'nbgouj': 18,
-                'dint':   87.3,
-                'dex1':   114.3,
-                'dex2':   146.,
-                'dex3':   160.,
-                'dtrou':  200.,
-                'dext':   255.,
-                'dt':     22.,
-                'drd':    36.,
-                'dg':     20.,
-                'dec':    30.,
-                'rcong':  5.,
-                'he':     20.,
-                'e':      3.,
-                'hc1':    111.,
-                'hcg1':   111./2.,
-                'hb':     2.,
-                'htrou':  55.,
-                'pf':     2.2,
-                'j':      2}
-dico_bride_K = {'nbgouj': 8,
-                'dint':   161.5,
-                'dex1':   168.3,
-                'dex2':   192.,
-                'dex3':   210.,
-                'dtrou':  235.,
-                'dext':   280.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    84.,
-                'hcg1':   84./2.,
-                'hb':     2.,
-                'htrou':  28.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_L = {'nbgouj': 16,
-                'dint':   154.8,
-                'dex1':   168.3,
-                'dex2':   206.,
-                'dex3':   220.,
-                'dtrou':  255.,
-                'dext':   317.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    96.,
-                'hcg1':   96./2.,
-                'hb':     2.,
-                'htrou':  40.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_L1 = {'nbgouj': 16,
-                'dint':   154.8,
-                'dex1':   168.3,
-                'dex2':   206.,
-                'dex3':   220.,
-                'dtrou':  255.,
-                'dext':   317.,
-                'dt':     20.,
-                'drd':    32.,
-                'dg':     18.,
-                'dec':    27.,
-                'rcong':  5.,
-                'he':     18.,
-                'e':      3.,
-                'hc1':    96.,
-                'hcg1':   96./2.,
-                'hb':     2.,
-                'htrou':  40.,
-                'pf':     2.2,
-                'j':      2}
-dico_bride_M = {'nbgouj': 16,
-                'dint':   139.7,
-                'dex1':   168.3,
-                'dex2':   206.,
-                'dex3':   220.,
-                'dtrou':  250.,
-                'dext':   290.,
-                'dt':     24.,
-                'drd':    40.,
-                'dg':     22.,
-                'dec':    32.,
-                'rcong':  5.,
-                'he':     22.,
-                'e':      3.,
-                'hc1':    135.,
-                'hcg1':   135./2.,
-                'hb':     3.,
-                'htrou':  62.,
-                'pf':     2.2,
-                'j':      2}
-dico_bride_N = {'nbgouj': 12,
-                'dint':   131.9,
-                'dex1':   168.3,
-                'dex2':   220.,
-                'dex3':   240.,
-                'dtrou':  290.,
-                'dext':   365.,
-                'dt':     30.,
-                'drd':    48.,
-                'dg':     27.,
-                'dec':    41.,
-                'rcong':  5.,
-                'he':     27.,
-                'e':      4.,
-                'hc1':    148.,
-                'hcg1':   148./2.,
-                'hb':     3.,
-                'htrou':  75.,
-                'pf':     2.6,
-                'j':      2}
-dico_bride_O = {'nbgouj': 12,
-                'dint':   211.58,
-                'dex1':   219.1,
-                'dex2':   248.,
-                'dex3':   260.,
-                'dtrou':  292.,
-                'dext':   335.,
-                'dt':     20.,
-                'drd':    32.,
-                'dg':     18.,
-                'dec':    27.,
-                'rcong':  5.,
-                'he':     18.,
-                'e':      3.,
-                'hc1':    87.,
-                'hcg1':   87./2.,
-                'hb':     3.,
-                'htrou':  30.,
-                'pf':     2.2,
-                'j':      2}
-dico_bride_P = {'nbgouj': 16,
-                'dint':   202.74,
-                'dex1':   219.1,
-                'dex2':   248.,
-                'dex3':   260.,
-                'dtrou':  292.,
-                'dext':   335.,
-                'dt':     20.,
-                'drd':    32,
-                'dg':     18.,
-                'dec':    27.,
-                'rcong':  5.,
-                'he':     18.,
-                'e':      3.,
-                'hc1':    99.,
-                'hcg1':   99./2.,
-                'hb':     3.,
-                'htrou':  42.,
-                'pf':     2.2,
-                'j':      2}
-dico_bride_S = {'nbgouj': 16,
-                'dint':   264.62,
-                'dex1':   273.,
-                'dex2':   305.,
-                'dex3':   315.,
-                'dtrou':  350.,
-                'dext':   390.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    89.,
-                'hcg1':   89./2.,
-                'hb':     3.,
-                'htrou':  32.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_T = {'nbgouj': 16,
-                'dint':   254.56,
-                'dex1':   273.,
-                'dex2':   320.,
-                'dex3':   340.,
-                'dtrou':  385.,
-                'dext':   444.,
-                'dt':     27.,
-                'drd':    45.,
-                'dg':     24.,
-                'dec':    36.,
-                'rcong':  5.,
-                'he':     24.,
-                'e':      4.,
-                'hc1':    128.,
-                'hcg1':   128./2.,
-                'hb':     3.,
-                'htrou':  55.,
-                'pf':     2.6,
-                'j':      2}
-dico_bride_W = {'nbgouj': 28,
-                'dint':   314.76,
-                'dex1':   323.9,
-                'dex2':   360.,
-                'dex3':   385.,
-                'dtrou':  415.,
-                'dext':   460.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    96.,
-                'hcg1':   96./2.,
-                'hb':     3.,
-                'htrou':  37.,
-                'pf':     1.7,
-                'j':      2}
-
-
-# dictionnaire pour faire le lien entre l'option de bride et les valeurs normalisées
-dico_bride_std = {'AA':dico_bride_AA,
-                  'A':dico_bride_A,
-                  'B':dico_bride_B,
-                  'B1':dico_bride_B1,
-                  'C':dico_bride_C,
-                  'D':dico_bride_D,
-                  'D1':dico_bride_D1,
-                  'E':dico_bride_E,
-                  'F':dico_bride_F,
-                  'FF':dico_bride_FF,
-                  'G':dico_bride_G,
-                  'GG':dico_bride_GG,
-                  'H':dico_bride_H,
-                  'H1':dico_bride_H1,
-                  'I':dico_bride_I,
-                  'J':dico_bride_J,
-                  'J1':dico_bride_J1,
-                  'K':dico_bride_K,
-                  'L':dico_bride_L,
-                  'L1':dico_bride_L1,
-                  'M':dico_bride_M,
-                  'N':dico_bride_N,
-                  'O':dico_bride_O,
-                  'P':dico_bride_P,
-                  'S':dico_bride_S,
-                  'T':dico_bride_T,
-                  'W':dico_bride_W}
diff --git a/Aster/Cata/cataSTA9/Macro/macr_cabri_mail_ops.py b/Aster/Cata/cataSTA9/Macro/macr_cabri_mail_ops.py
deleted file mode 100644 (file)
index af72499..0000000
+++ /dev/null
@@ -1,459 +0,0 @@
-#@ MODIF macr_cabri_mail_ops Macro  DATE 29/08/2006   AUTEUR MCOURTOI M.COURTOIS 
-# -*- coding: iso-8859-1 -*-
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
-# ======================================================================
-
-import os
-
-def macr_cabri_mail_ops(self,EXEC_MAILLAGE,RAFF_MAILLAGE,VERI_MAIL,GEOM_BRID,
-                        IMPRESSION,**args):
-  """
-     Ecriture de la macro MACR_CABRI_MAIL
-  """
-  import types
-  from Accas import _F
-
-  ier=0
-
-  # On importe les definitions des commandes a utiliser dans la macro
-  # Le nom de la variable doit etre obligatoirement le nom de la commande
-  EXEC_LOGICIEL = self.get_cmd('EXEC_LOGICIEL')
-  LIRE_MAILLAGE = self.get_cmd('LIRE_MAILLAGE')
-  PRE_GIBI      = self.get_cmd('PRE_GIBI')
-  IMPR_RESU     = self.get_cmd('IMPR_RESU')
-
-  # La macro compte pour 1 dans la numerotation des commandes
-  self.set_icmd(1)
-
-  # Le concept sortant (de type mail) est nommé 'nomres' dans 
-  # le contexte de la macro
-  
-  self.DeclareOut('nomres',self.sd)
-  
-  # Chemin de Gibi
-  import aster
-  loc_gibi=aster.repout()
-  gibi2000=loc_gibi+'gibi'
-  
-  # Unité pour le fichier maillage produit (format GIBI)
-  unite_mgib = EXEC_MAILLAGE['UNITE_MGIB']
-  # Unité pour le fichier de commandes GIBI
-  unite_datg = EXEC_MAILLAGE['UNITE_DATG']
-  # Niveau gibi
-  niveau_gibi = EXEC_MAILLAGE['NIVE_GIBI']
-  # Verif mail
-  ver_apla = VERI_MAIL['APLAT']
-  ver_veri = VERI_MAIL['VERIF']
-  
-  # Impression
-  if IMPRESSION['UNITE']!=None:
-   imp_unit = IMPRESSION['UNITE']
-   imp_unitF = 1
-  else:
-   imp_unitF = 0  
-  if IMPRESSION['FORMAT']!=None:
-   imp_form = IMPRESSION['FORMAT']
-   imp_formF = 1
-  else:
-   imp_formF = 0 
-#  if IMPRESSION['FICHIER']!=None:
-#   imp_fich = IMPRESSION['FICHIER']
-#   imp_fichF = 1
-#  else:
-#   imp_fichF = 0 
-  # Maillage  
-  nrad = RAFF_MAILLAGE['NB_RADIAL']
-  ncir = RAFF_MAILLAGE['NB_CIRCONF']
-  nver = RAFF_MAILLAGE['NB_VERTICAL']
-  nsect = RAFF_MAILLAGE['NB_ALESAGE']
-  temps = 5.
-    
-  maillage = {'nrad': nrad,
-              'ncir': ncir,
-              'nver': nver,
-              'nsect': nsect,
-              'temps' : temps,}
-
-  # Création du fichier datg
-  
-  if GEOM_BRID['NORME'] == 'OUI':
-    # Bride standard
-    type_bride = GEOM_BRID['TYPE']
-    ### Ecriture du fichier GIBI principal (dgib) - Bride STANDARD
-    write_file_dgib_STD(unite_mgib,unite_datg,maillage,type_bride) 
-  else:
-    # Bride quelconque
-    geo_bride_qqe = {'nbgouj': GEOM_BRID['GOUJ_N_GOUJON'],
-                'dint':   GEOM_BRID['BRID_D_INT'],
-                'dex1':   GEOM_BRID['TUBU_D_EXT'],
-                'dex2':   GEOM_BRID['BRID_D_CONGE'],
-                'dex3':   GEOM_BRID['BRID_D_EPAUL'],
-                'dtrou':  GEOM_BRID['BRID_P_ALESAG'],
-                'dext':   GEOM_BRID['BRID_D_EXT'],
-                'dt':     GEOM_BRID['BRID_D_ALESAG'],
-                'drd':    GEOM_BRID['GOUJ_D_RONDEL'],
-                'dg':     GEOM_BRID['GOUJ_D_GOUJON'],
-                'dec':    GEOM_BRID['GOUJ_D_ECROU'],
-                'rcong':  GEOM_BRID['BRID_R_CONGE'],
-                'he':     GEOM_BRID['GOUJ_E_ECROU'],
-                'e':      GEOM_BRID['GOUJ_E_RONDEL'],
-                'hc1':    GEOM_BRID['BRID_H'],
-                'hcg1':   GEOM_BRID['TUBU_H'],
-                'hb':     GEOM_BRID['BRID_H_EPAUL'],
-                'htrou':  GEOM_BRID['BRID_H_ALESAG'],
-                'pf':     GEOM_BRID['GOUJ_E_FILET'],
-                'j':      GEOM_BRID['ETAN_E_JOINT']}  
-    ### Ecriture du fichier GIBI principal (dgib) - Bride QUELCONQUE
-    write_file_dgib_QQE(unite_mgib,unite_datg,maillage,geo_bride_qqe)  
-
-  fichier_datg = 'fort.'+str(unite_datg)
-  fichier_mgib = 'fort.'+str(unite_mgib)
-  
-  # Lancement de GIBI
-  EXEC_LOGICIEL(
-               LOGICIEL=gibi2000,
-               ARGUMENT=(fichier_datg, fichier_mgib),
-               )
-  # Lecture du maillage GIBI dans ASTER
-  PRE_GIBI(
-          UNITE_GIBI = unite_mgib,
-          )
-  
-  nomres = LIRE_MAILLAGE(VERI_MAIL=_F(APLAT = ver_apla,
-                                      VERIF = ver_veri ),)
-                                      
-#  if (imp_fichF == 1):  
-#   print imp_fich
-  if (imp_formF == 1):  
-   print imp_form
-  if (imp_unitF == 1):  
-   print imp_unit    
-  # Impression du fichier maillage
-  if (imp_formF == 1):
-    if (imp_form == 'CASTEM'):
-      imp_ngib = IMPRESSION['NIVE_GIBI']
-      IMPR_RESU( RESU = _F(MAILLAGE=nomres, ),
-                 FORMAT = 'CASTEM', NIVE_GIBI = imp_ngib )
-    if (imp_form == 'IDEAS'):
-      imp_nver = IMPRESSION['VERSION']
-      IMPR_RESU(RESU = _F(MAILLAGE=nomres,),
-                FORMAT = 'IDEAS', VERSION = imp_nver )
-                                
-  return ier
-
-
-##############################################################################################
-# Liste des fonctions
-##############################################################################################
-
-#############
-## EXTERNES (appelables depuis l'extérieur)
-#############
-
-### Ecriture du fichier GIBI principal (dgib) - Bride STANDARD
-# null = write_file_dgib_STD(unite_mgib,unite_datg,msh_bride,geo_bride)
-
-### Ecriture du fichier GIBI principal (dgib) - Bride QUELCONQUE
-# null = write_file_dgib_QQE(unite_mgib,unite_datg,msh_bride,geo_bride)
-
-### Imprime tout le catalogue des brides standards disponibles dans un fichier texte
-# null = print_bride_std(nom_fichier)
-### Catalogue complet des brides standards disponibles
-# txt = bride_std()
-
-#############
-## INTERNES (réservées au travail interne)
-#############
-
-### Génération du nom du fichier pour le fichier maillage résultant (format GIBI)
-# NomFichier(txt) = name_file_mgib(unite_mgib):
-
-### Génération du nom du fichier pour le fichier générant le maillage (commandes GIBI)
-# NomFichier(txt) = name_file_datg(unite_datg):
-
-### Récupère un fichier texte DATG
-# Txt = text_datg(fichier_datg):
-
-### Génération du texte pour les variables
-# Txt = para_text(dico_var,var): 
-
-
-
-#=============================================================================================
-# Importation des modules Python
-#=============================================================================================
-
-from Macro.macr_cabri_mail_dat import dico_var_geo,dico_var_msh,dico_bride_std
-
-#=============================================================================================
-# Fonctions principales
-#=============================================================================================
-# Ecriture du fichier GIBI principal (dgib) - Bride STANDARD
-def write_file_dgib_STD(unite_mgib,unite_datg,msh_bride,geo_bride):
-
-    # Nom du fichier maillage produit par GIBI
-    nomFichierMGIB = name_file_mgib(unite_mgib)
-    # Nom du fichier de commandes pour GIBI
-    nomFichierDATG = name_file_datg(unite_datg)
-        
-    # Ouverture du fichier d'entrée de commandes
-    fdgib=open(nomFichierDATG,'w')
-    
-    # En-tete
-    text =        "**************************************************************\n"
-    text = text + "* Fichier GIBI pour le maillage d'une bride \n"
-    text = text + "**************************************************************\n"
-    text = text + "\n"
-    text = text + "* Ce fichier a été généré automatiquement par la macro ASTER MACR_CABRI_MAIL \n"
-    text = text + "* Ne pas modifier\n"
-    text = text + "\n"    
-    text = text + "**************************************************************\n"
-    text = text + "* Type bride: Bride standard \n"
-    text = text + "**************************************************************\n"
-    text = text + "titre '"+"Bride standard"+"';\n"
-    text = text + "** Type bride standard: "+geo_bride+"\n"
-   
-    text = text + "\n"
-    text = text + "nomfich = CHAINE \n"
-    if len(nomFichierMGIB)>72:
-      raise Exception, 'Nom de fichier trop long (limité à 72 caractères ' \
-         'pour GIBI) :\n',nomFichierMGIB
-    elif len(nomFichierMGIB)<=69:
-      text = text + "'"+nomFichierMGIB+"';\n"
-    else:
-      text = text + "'"+nomFichierMGIB[:69]+"'\n" \
-                  + "'"+nomFichierMGIB[69:]+"';\n"
-    text = text + "opti dime 3 elem cub8 SAUV FORM nomfich;\n"
-    text = text + "dens 1;\n"
-    text = text + "\n"
-    fdgib.write(text)
-    
-    # Procédures internes supplémentaires
-    text =        "**************************************************************\n"
-    text = text + "* Procédures supplémentaires \n"
-    text = text + "**************************************************************\n"
-    text = text + text_datg_pro()
-    fdgib.write(text)
-    
-    # Début de procédure de création du maillage
-    text =        "**************************************************************\n"
-    text = text + "**************************************************************\n"
-    text = text + "********* Début de procédure de création du maillage *********\n"
-    text = text + "**************************************************************\n"
-    text = text + "**************************************************************\n"
-    text = text + "\n debproc constru;\n"
-    fdgib.write(text)
-
-    # Paramètres géométriques
-    car_bride = dico_bride_std[geo_bride]
-    text =        "**************************************************************\n"
-    text = text + "* Paramètres géométriques \n"
-    text = text + "**************************************************************\n"
-    text = text + para_text(dico_var_geo,car_bride)
-    fdgib.write(text) 
-
-    # Paramètres du maillage
-    text =        "**************************************************************\n"
-    text = text + "* Paramètres physiques \n"
-    text = text + "**************************************************************\n"
-    text = text + para_text(dico_var_msh,msh_bride)
-    fdgib.write(text) 
-
-    # Algorithme du maillage
-    text =        "**************************************************************\n"
-    text = text + "* Algorithme de maillage \n"
-    text = text + "**************************************************************\n"
-    text = text + text_datg_std()
-    fdgib.write(text)
-    
-    # Fermeture du fichier maillage
-    fdgib.close()
-    
-    
-# Ecriture du fichier GIBI principal (dgib) - Bride QUELCONQUE
-def write_file_dgib_QQE(unite_mgib,unite_datg,msh_bride,geo_bride):
-        
-    # Nom du fichier maillage produit par GIBI
-    nomFichierMGIB = name_file_mgib(unite_mgib)
-    # Nom du fichier de commandes pour GIBI
-    nomFichierDATG = name_file_datg(unite_datg)
-      
-    # Ouverture du fichier d'entree de commandes
-    fdgib=open(nomFichierDATG,'w')
-    
-    # En-tete
-    text =        "**************************************************************\n"
-    text = text + "* Fichier GIBI pour le maillage d'une bride \n"
-    text = text + "**************************************************************\n"
-    text = text + "\n"
-    text = text + "* Ce fichier a été généré automatiquement par la macro ASTER MACR_CABRI_MAIL \n"
-    text = text + "* Ne pas modifier\n"
-    text = text + "\n"    
-    text = text + "**************************************************************\n"
-    text = text + "* Type bride: Bride quelconque\n"
-    text = text + "**************************************************************\n"
-    text = text + "titre '"+"Bride Quelconque"+"';\n"
-    text = text + "\n"
-    text = text + "nomfich = CHAINE \n"
-    if len(nomFichierMGIB)>72:
-      raise Exception, 'Nom de fichier trop long (limité à 72 caractères ' \
-         'pour GIBI) :\n',nomFichierMGIB
-    elif len(nomFichierMGIB)<=69:
-      text = text + "'"+nomFichierMGIB+"';\n"
-    else:
-      text = text + "'"+nomFichierMGIB[:69]+"'\n" \
-                  + "'"+nomFichierMGIB[69:]+"';\n"
-    text = text + "opti dime 3 elem cub8 SAUV FORM nomfich;\n"
-    text = text + "dens 1;\n"
-    text = text + "\n"
-    fdgib.write(text)
-    
-    # Procédures internes supplémentaires
-    text =        "**************************************************************\n"
-    text = text + "* Procédures supplémentaires \n"
-    text = text + "**************************************************************\n"
-    text = text + text_datg_pro()
-    fdgib.write(text)
-    
-    # Début de procédure de création du maillage
-    text =        "**************************************************************\n"
-    text = text + "**************************************************************\n"
-    text = text + "********* Début de procédure de création du maillage *********\n"
-    text = text + "**************************************************************\n"
-    text = text + "**************************************************************\n"
-    text = text + "\n debproc constru;\n"
-    fdgib.write(text)
-
-    # Paramètres géométriques
-    text =        "**************************************************************\n"
-    text = text + "* Paramètres géométriques \n"
-    text = text + "**************************************************************\n"
-    text = text + para_text(dico_var_geo,geo_bride)
-    fdgib.write(text) 
-
-    # Paramètres du maillage
-    text =        "**************************************************************\n"
-    text = text + "* Paramètres physiques \n"
-    text = text + "**************************************************************\n"
-    text = text + para_text(dico_var_msh,msh_bride)
-    fdgib.write(text) 
-
-    # Algorithme du maillage
-    text =        "**************************************************************\n"
-    text = text + "* Algorithme de maillage \n"
-    text = text + "**************************************************************\n"
-    text = text + text_datg_qqe()
-    fdgib.write(text)
-    
-    # Fermeture du fichier maillage
-    fdgib.close()
-
-# Génération du nom du fichier pour le fichier maillage résultant (format GIBI)
-def name_file_mgib(unite_mgib):
-    cur_dir = os.getcwd()
-    nomFichier = cur_dir+'/fort.'+str(unite_mgib)
-    return nomFichier
-
-
-# Génération du nom du fichier pour le fichier générant le maillage (commandes GIBI)
-def name_file_datg(unite_datg):
-    cur_dir = os.getcwd()
-    nomFichier = cur_dir+'/fort.'+str(unite_datg)
-    return nomFichier
-
-# Récupère un fichier texte DATG: texte GIBI pour procédures
-def text_datg_pro():
-   import aster
-   loc_datg = aster.repdex()
-   datg_bridePro  = loc_datg+"macr_cabri_mail_proc.datg"
-   fproc=open(datg_bridePro,'r')
-   procText = fproc.read()
-   fproc.close()
-
-   return procText
-
-# Récupère un fichier texte DATG: texte GIBI pour bride quelconque
-def text_datg_qqe():
-   import aster
-   loc_datg = aster.repdex()
-   datg_brideQqe  = loc_datg+"macr_cabri_mail_qqe.datg"      
-   fproc=open(datg_brideQqe,'r')
-   procText = fproc.read()
-   fproc.close()
-
-   return procText
-
-# Récupère un fichier texte DATG: texte GIBI pour bride standard
-def text_datg_std():
-   import aster
-   loc_datg = aster.repdex()
-   datg_brideStd  = loc_datg+"macr_cabri_mail_std.datg"      
-   fproc=open(datg_brideStd,'r')
-   procText = fproc.read()
-   fproc.close()
-
-   return procText
-
-# Génération du texte pour les variables
-def para_text(dico_var,var):
-    text = '\n'
-    for nom_var in var.keys():
-        text = text+"* "+dico_var[nom_var]+"\n"
-        text = text+nom_var+" = "+`var[nom_var]`+";\n"
-    return text
-
-#=============================================================================================
-# Accès au catalogue des brides standards
-# (les brides standards sont décrites dans le fichier Data_Brides.py)
-#=============================================================================================
-
-
-
-# Imprime tout le catalogue des brides standards disponibles dans un fichier texte
-def print_bride_std(nom_fichier):
-    text = bride_std()
-    # Ouverture du fichier
-    finfo=open(nom_fichier,'w')
-    # Ecriture des infos
-    finfo.write(text)
-    # Fermeture du fichier
-    finfo.close()
-
-# Catalogue complet des brides standards disponibles
-def bride_std():
-    # Ligne d'info
-    text = "Liste des brides standards avec leurs dimensions\n"
-    # Première ligne
-    text = text+"\t"
-    for nom_variable in dico_var_geo.keys():      
-        text = text + nom_variable+"\t\t"
-    text = text + "\n"
-    # Lignes suivantes
-    for nom_bride in dico_bride_std.keys():
-        bride = dico_bride_std[nom_bride]    
-        text = text + nom_bride + '\t'
-        for nom_var in dico_var_geo.keys():
-            chaine = "%f" % (bride[nom_var])
-            text = text+chaine+"\t"               
-        text = text + "\n"
-    return text
index 89195496e4e33a7bfe6cb77ac8cb9c7841bcb7dd..9415a2e9fe5fb04d2f564ed549b286fa52513c5c 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_cara_poutre_ops Macro  DATE 27/02/2006   AUTEUR DURAND C.DURAND 
+#@ MODIF macr_cara_poutre_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -24,9 +24,10 @@ def macr_cara_poutre_ops(self,UNITE_MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD,
   """
      Ecriture de la macro MACR_CARA_POUTRE
   """
-  import types
+  import types,string
   from Accas import _F
-  from Utilitai.Utmess     import UTMESS
+  import aster
+  from Utilitai.Utmess     import  UTMESS
   ier=0
   # On importe les definitions des commandes a utiliser dans la macro
   # Le nom de la variable doit etre obligatoirement le nom de la commande
@@ -61,7 +62,6 @@ def macr_cara_poutre_ops(self,UNITE_MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD,
 
 #  if GROUP_MA_BORD and GROUP_MA:
 #     if not LIAISON:
-#        UTMESS('F', "MACR_CARA_POUTRE", "Avec GROUP_MA, il faut obligatoirement preciser LIAISON, LONGUEUR ET MATERIAU")
 #
   __nomlma=LIRE_MAILLAGE(UNITE=UNITE_MAILLAGE,)
 
@@ -242,8 +242,17 @@ def macr_cara_poutre_ops(self,UNITE_MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD,
 
 
      motscles={}
-     if args.has_key('NOEUD'):
-        motscles['TEMP_IMPO']=(_F(NOEUD=args['NOEUD'],TEMP=__fnsec0))
+     if args['NOEUD']!=None:
+        nthno = args['NOEUD']
+        if type(nthno)!=types.StringType : UTMESS('F','POUTRE0_3')
+        motscles['TEMP_IMPO']=(_F(NOEUD=nthno,TEMP=__fnsec0))
+     if args['GROUP_NO']!=None:
+        collgrno=aster.getcolljev(string.ljust(__nomapi.nom,8)+'.GROUPENO')
+        nomnoe  =aster.getvectjev(string.ljust(__nomapi.nom,8)+'.NOMNOE')
+        l_no=collgrno[string.ljust(args['GROUP_NO'],8)]
+        if len(l_no)!=1 : UTMESS('F','POUTRE0_3')
+        nthno=nomnoe[l_no[0]-1]
+        motscles['TEMP_IMPO']=(_F(NOEUD=nthno,TEMP=__fnsec0))
      __chart2=AFFE_CHAR_THER_F(MODELE=__nomoth,
                                SOURCE=_F(TOUT='OUI',
                                          SOUR=__fnsec1,),
@@ -275,8 +284,16 @@ def macr_cara_poutre_ops(self,UNITE_MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD,
 #     --------------------------------------------------
 
      motscles={}
-     if args.has_key('NOEUD'):
-        motscles['TEMP_IMPO']=_F(NOEUD=args['NOEUD'],TEMP=__fnsec0)
+     if args['NOEUD']!=None:
+        nthno = args['NOEUD']
+        motscles['TEMP_IMPO']=_F(NOEUD=nthno,TEMP=__fnsec0)
+     if args['GROUP_NO']!=None:
+        collgrno=aster.getcolljev(string.ljust(__nomapi.nom,8)+'.GROUPENO')
+        nomnoe  =aster.getvectjev(string.ljust(__nomapi.nom,8)+'.NOMNOE')
+        l_no=collgrno[string.ljust(args['GROUP_NO'],8)]
+        if len(l_no)!=1 : UTMESS('F','POUTRE0_3')
+        nthno=nomnoe[l_no[0]-1]
+        motscles['TEMP_IMPO']=_F(NOEUD=nthno,TEMP=__fnsec0)
      __chart3=AFFE_CHAR_THER_F(MODELE=__nomoth,
                                SOURCE=_F(TOUT='OUI',
                                          SOUR=__fnsec2,),
@@ -573,16 +590,30 @@ def macr_cara_poutre_ops(self,UNITE_MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD,
      else:
         l_group_ma= GROUP_MA
 
-     if args.has_key('NOEUD'):
+     l_noeud=None
+
+     if args['NOEUD']!=None:
        if type(args['NOEUD'])==types.StringType :
           l_noeud=[args['NOEUD'],]
        else:
           l_noeud= args['NOEUD']
 
+     if args['GROUP_NO']!=None:
+       collgrno=aster.getcolljev(string.ljust(__nomlma.nom,8)+'.GROUPENO')
+       nomnoe  =aster.getvectjev(string.ljust(__nomlma.nom,8)+'.NOMNOE')
+       l_nu_no =[]
+       if type(args['GROUP_NO'])==types.StringType :
+          l_gr_no=[args['GROUP_NO'],]
+       else:
+          l_gr_no= args['GROUP_NO']
+       for grno in l_gr_no:
+          l_nu_no =l_nu_no+list(collgrno[string.ljust(grno,8)])
+       l_noeud =[nomnoe[no_i-1] for no_i in l_nu_no]
+
      if len(l_group_ma)!=len(l_group_ma_bord):
-        UTMESS('F', "MACR_CARA_POUTRE", "GROUP_MA et GROUP_MA_BORD incoherents")
-     if args.has_key('NOEUD') and (len(l_group_ma)!=len(l_noeud)):
-        UTMESS('F', "MACR_CARA_POUTRE", "GROUP_MA et NOEUD incoherents")
+        UTMESS('F','POUTRE0_1')
+     if l_noeud!=None and (len(l_group_ma)!=len(l_noeud)):
+        UTMESS('F','POUTRE0_2')
 
      __catp2=__cageo
      for i in range(0,len(l_group_ma_bord)):
index 568a8cea5ba39ec672e652344b2386fb89007d6d..36c901abe1b9781a6f8f1d3d2c4528dcbeed24cb 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_lign_coupe_ops Macro  DATE 22/05/2007   AUTEUR GALENNE E.GALENNE 
+#@ MODIF macr_lign_coupe_ops Macro  DATE 07/04/2008   AUTEUR GALENNE E.GALENNE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 ########################################################################
 # script PYTHON de creation du résultat local
 
-def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma):
+def crea_resu_local(self,dime,NOM_CHAM,m,resin,mail,nomgrma):
 
-  from Utilitai.Utmess     import UTMESS
+  from Utilitai.Utmess     import  UTMESS
   from math import pi,sqrt,atan2,asin
   import os,string,types
   import aster
   from Accas import _F
+  MODI_REPERE = self.get_cmd('MODI_REPERE')
 
   epsi=0.00000001
-  
+
   if NOM_CHAM == 'DEPL':
        if dime == 2:
           LCMP=['DX','DY']
@@ -48,7 +49,7 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma):
 
 
   if m['TYPE']=='SEGMENT' and m['REPERE'] != 'CYLINDRIQUE' :
-  
+
     if m['REPERE'] == 'LOCAL':
       # --- determination des angles nautiques
       cx1=m['COOR_EXTR'][0]-m['COOR_ORIG'][0]
@@ -58,7 +59,7 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma):
         cx3=m['COOR_EXTR'][2]-m['COOR_ORIG'][2]
       nvx=sqrt(cx1**2+cx2**2+cx3**2)
       if abs(nvx) < epsi:
-         UTMESS('F', "MACR_LIGN_COUPE", "definition incorrecte de la ligne de coupe")
+         UTMESS('F','POST0_1')
       cx1=cx1/nvx
       cx2=cx2/nvx
       cx3=cx3/nvx
@@ -69,13 +70,13 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma):
         cy3=m['VECT_Y'][2]
       nvy=sqrt(cy1**2+cy2**2+cy3**2)
       if abs(nvy) < epsi:
-         UTMESS('F', "MACR_LIGN_COUPE", "valeurs incorrectes pour VECT_Y")
+         UTMESS('F','POST0_2')
       cy1=cy1/nvy
       cy2=cy2/nvy
       cy3=cy3/nvy
       if ((abs(cx1-cy1)<epsi and abs(cx2-cy2)<epsi and  abs(cx3-cy3)<epsi) or \
          (abs(cx1+cy1)<epsi and abs(cx2+cy2)<epsi and  abs(cx3+cy3)<epsi)):
-         UTMESS('F', "MACR_LIGN_COUPE", "valeurs incorrectes pour VECT_Y: x colineaire a y")
+         UTMESS('F','POST0_3')
       if abs(cx1*cy1+cx2*cy2+cx3*cy3) > epsi  :
         cz1=cx2*cy3-cx3*cy2
         cz2=cx3*cy1-cx1*cy3
@@ -91,10 +92,8 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma):
         cy1=cy1/nvy
         cy2=cy2/nvy
         cy3=cy3/nvy
-        UTMESS('A','MACR_LIGN_COUPE','LE VECTEUR Y N EST PAS ORTHOGONAL A LA LIGNE DE COUPE'
-              +'LE VECTEUR Y A ETE ORTHONORMALISE POUR VOUS')
-        UTMESS('A','MACR_LIGN_COUPE','VECT_Y=('+str(cy1)+','+str(cy2)+','+str(cy3)+')')
-      else:     
+        UTMESS('A','POST0_4',valr=[cy1,cy2,cy3])
+      else:
         cz1=cx2*cy3-cx3*cy2
         cz2=cx3*cy1-cx1*cy3
         cz3=cx1*cy2-cx2*cy1
@@ -131,8 +130,8 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma):
        ANGL_NAUT.append(gamma)
     motscles['DEFI_REPERE'].append(_F(REPERE='UTILISATEUR',ANGL_NAUT=ANGL_NAUT),)
     __remodr=MODI_REPERE(RESULTAT=resin,**motscles)
-    
-    
+
+
   if m['TYPE']=='ARC':
     if m['REPERE'] == 'CYLINDRIQUE' :
       motscles={}
@@ -153,21 +152,21 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma):
         motscles['DEFI_REPERE'].append(_F(REPERE='CYLINDRIQUE',ORIGINE=ORIGINE,),)
       __remodr=MODI_REPERE(RESULTAT=resin,**motscles)
     else :
-         UTMESS("F","MACR_LIGN_COUPE","LE TYPE "+m['TYPE']+" N'EST PAS COHERENT AVEC LE CHOIX DU REPERE ( REPERE "+m['REPERE']+" ).")
+      UTMESS('F','POST0_5',valk=[m['TYPE'],m['REPERE']])
 
 
 
   if m['TYPE'][:5]=='GROUP' or m['TYPE']=='SEGMENT':
-  
+
     if m['TYPE'][:5]=='GROUP' and m['REPERE'] == 'LOCAL':
-     # determination du repère local (v1,v2,v3)    
+     # determination du repère local (v1,v2,v3)
      # ---------------------------------------
       noma=mail.nom
       collgrma=aster.getcolljev(noma.ljust(8)+'.GROUPEMA')
       collcnx =aster.getcolljev(noma.ljust(8)+'.CONNEX')
       coord   =aster.getvectjev(noma.ljust(8)+'.COORDO    .VALE')
       cnom    =aster.getvectjev(noma.ljust(8)+'.NOMNOE')
-      
+
       numa=collgrma[nomgrma.ljust(8)]
       dictu={}
 #     initialisations
@@ -188,7 +187,7 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma):
         vectu1.append(uy)
         vectu2.append(ux)
         vectu2.append(uy)
-        if dime ==3 : 
+        if dime ==3 :
           uz=coord[3*(n2-1)+2]-coord[3*(n1-1)+2]
           vectu1.append(uz)
           vectu2.append(uz)
@@ -288,7 +287,7 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma):
           __resu[j]=MODI_REPERE(RESULTAT=__resu[j-1],**motscles)
       __remodr=__resu[j]
 
-  
+
     motscles={}
     motscles['MODI_CHAM']=[]
     motscles['DEFI_REPERE']=[]
@@ -318,7 +317,7 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma):
 # script PYTHON de creation des noeuds d'une ligne de coupe 'arc'
 
 def crea_noeu_lig_coup(dimension,pt1,pt2,anglj,dnor):
-  from Utilitai.Utmess     import UTMESS
+  from Utilitai.Utmess     import  UTMESS
   from math import pi,sin,cos,sqrt
 
   a=pt1[0]-pt2[0]
@@ -328,7 +327,7 @@ def crea_noeu_lig_coup(dimension,pt1,pt2,anglj,dnor):
   if dimension==2:
     r=sqrt(a**2+b**2)
     if abs(r)<eps:
-      UTMESS('F', "MACR_LIGN_COUPE", "definition incorrecte de COOR_ORIG et CENTRE") 
+      UTMESS('F','POST0_6')
     x=pt2[0]+a*cos(anglr)-b*sin(anglr)
     y=pt2[1]+b*cos(anglr)+a*sin(anglr)
     return x,y
@@ -336,13 +335,13 @@ def crea_noeu_lig_coup(dimension,pt1,pt2,anglj,dnor):
     c=pt1[2]-pt2[2]
     r=sqrt(a**2+b**2+c**2)
     if abs(r)<eps:
-      UTMESS('F', "MACR_LIGN_COUPE", "definition incorrecte de COOR_ORIG et CENTRE") 
+      UTMESS('F','POST0_6')
     d1=dnor[0]
     d2=dnor[1]
     d3=dnor[2]
     d=sqrt(d1**2+d2**2+d3**2)
     if abs(r)<eps:
-      UTMESS('F', "MACR_LIGN_COUPE", "definition incorrecte de DNOR") 
+      UTMESS('F','POST0_7')
     x=pt2[0]+a*cos(anglr)+sin(anglr)*(c*d2-b*d3)/d
     y=pt2[1]+b*cos(anglr)+sin(anglr)*(a*d3-c*d1)/d
     z=pt2[2]+c*cos(anglr)+sin(anglr)*(b*d1-a*d2)/d
@@ -351,7 +350,7 @@ def crea_noeu_lig_coup(dimension,pt1,pt2,anglj,dnor):
 # determination de la distance min entre 2 points consécutifs de la ligne de coupe
 
 def dist_min_deux_points(mail):
-  from math import sqrt  
+  from math import sqrt
   import aster
   nno=aster.getvectjev(mail.nom.ljust(8)+'.DIME')[0]
   l_coor1=[]
@@ -363,13 +362,91 @@ def dist_min_deux_points(mail):
     if i == 0 : dist=d
     else      : dist=min(d,dist)
   return dist
+
+########################################################################
+# verification que les points de la ligne de coupe sont dans la matiere
+def crea_grp_matiere(self,groupe,newgrp,m,__remodr,NOM_CHAM,__macou):
+
+  import aster
+  from Accas import _F
+  from Utilitai.Utmess import  UTMESS
+  import os
+  from sets import Set
+  POST_RELEVE_T = self.get_cmd('POST_RELEVE_T')
+  DEFI_GROUP    = self.get_cmd('DEFI_GROUP')
+
+  motscles={}
+  if m['NOM_CMP']!=None:
+     motscles['NOM_CMP']=m['NOM_CMP']
+  else:
+     motscles['TOUT_CMP']='OUI'
+  motscles['OPERATION']='EXTRACTION'
+
+  __tab=POST_RELEVE_T(ACTION=_F(  INTITULE=newgrp,
+                           RESULTAT  = __remodr,
+                           NOM_CHAM=NOM_CHAM,
+                           GROUP_NO  = groupe,**motscles ))
+
+  # dictb=table initiale (contenant éventuellement des noeuds hors matière)
+  dictb=__tab.EXTR_TABLE()
+  # listenoe_b=liste ordonnee des noeuds de la ligne de coupe (avec doublons)
+  listenoe_b = dictb.NOEUD.values()
+  # lno_b2=liste des noeuds de la ligne de coupe après élimination des doublons
+  # (attention, on perd l'ordre des noeuds)
+  lno_b2 = Set(listenoe_b)
+
+  # dictc=table (extraite de dictb) contenant uniquement des noeuds dans la matière
+  if m['NOM_CMP']!=None:
+     dictc=getattr(dictb,m['NOM_CMP'][0]).NON_VIDE()
+     lno_c2 = Set(dictc.NOEUD.values())
+  else:# TOUT_CMP='OUI'
+     # on garde uniquement les composantes pour conserver les noeuds où il y a des valeurs
+     a_suppr = Set(['INTITULE', 'RESU', 'NOM_CHAM', 'NUME_ORDRE', 'INST', 'ABSC_CURV', 'COOR_X', 'COOR_Y', 'COOR_Z'])
+     new_para = Set(dictb.para)
+     new_para.difference_update(a_suppr)
+
+     lno_c2 = Set()
+     for comp in new_para.difference(['NOEUD']):
+        dictc = getattr(dictb, comp).NON_VIDE()
+        lno_c2.update(dictc.NOEUD.values())
+
+  # on réordonne la liste des noeuds de lno_c2 (selon leur position dans listenoe_b) => l_matiere
+  # l_horsmat=liste des noeuds hors matière
+  l_matiere = [j for j in listenoe_b if j in lno_c2]
+  nderm=l_matiere.index(l_matiere[len(l_matiere)-1])
+  l_horsmat = [j for j in listenoe_b if j not in lno_c2]
+
+  # si on est en présence de noeuds hors matière,
+  # on emet une alarme pour informer l'utilisateur
+  if len(l_horsmat) > 0:
+
+       nderh=l_horsmat.index(l_horsmat[len(l_horsmat)-1])
+       cnom = list(__macou.NOMNOE.get())
+       l_coor = __macou.COORDO.VALE.get()
+       indent=os.linesep+' '*12
+       l_surlig = []
+       l_horslig = []
+       for j in l_matiere[:nderm+1]:
+          nuno=cnom.index(j.ljust(8))
+          text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
+          l_surlig.append(text_coordo)
+       for j in l_horsmat[:nderh+1]:
+          nuno=cnom.index(j.ljust(8))
+          text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
+          l_horslig.append(text_coordo)
+       UTMESS('A','POST0_8',valk=[indent.join(l_surlig),indent.join(l_horslig)])
+
+  __macou=DEFI_GROUP( reuse =__macou , MAILLAGE=__macou ,
+                   CREA_GROUP_NO=_F(NOM=newgrp,NOEUD=l_matiere[:nderm+1]),)
+
+  return
 ########################################################################
 # script PYTHON de creation d un maillage de ligne de coupe
 
 def crea_mail_lig_coup(dimension,lignes,groups,arcs):
 
   import os,sys,copy
-  from Utilitai.Utmess     import UTMESS
+  from Utilitai.Utmess     import  UTMESS
 
 # construction du maillage au format Aster des segments de lignes de coupe
 
@@ -525,7 +602,7 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
   from Noyau.N_utils import AsType
   import aster,math
   from Utilitai.UniteAster import UniteAster
-  from Utilitai.Utmess import UTMESS
+  from Utilitai.Utmess import  UTMESS
   ier=0
 
   # On importe les definitions des commandes a utiliser dans la macro
@@ -535,7 +612,6 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
   PROJ_CHAMP     =self.get_cmd('PROJ_CHAMP')
   POST_RELEVE_T  =self.get_cmd('POST_RELEVE_T')
   CREA_TABLE     =self.get_cmd('CREA_TABLE')
-  MODI_REPERE    =self.get_cmd('MODI_REPERE')
   CREA_RESU      =self.get_cmd('CREA_RESU')
   CREA_MAILLAGE  =self.get_cmd('CREA_MAILLAGE')
 
@@ -563,13 +639,13 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
     n_modele=string.strip(l_modele[0])
     if n_modele=='' :
       if MODELE==None:
-        UTMESS('F', "MACR_LIGN_COUPE", "nom du modele absent dans le concept resultat "+nomresu)
+        UTMESS('F','POST0_9',valk=nomresu)
       else : n_modele=MODELE.nom
 
   elif CHAM_GD != None:
     mcORDR['TOUT_ORDRE']='OUI'
     if MODELE==None:
-      UTMESS('F', "MACR_LIGN_COUPE", "veuillez renseigner le MODELE si vous utilisez un CHAM_GD ")
+      UTMESS('F','POST0_10')
     else : n_modele=MODELE.nom
     # récupération de la grandeur du champ
     n_cham=CHAM_GD.nom
@@ -591,7 +667,7 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
                        NOM_CHAM=NOM_CHAM, TYPE_RESU=TYPE_RESU,
                        AFFE=_F(CHAM_GD=CHAM_GD,INST=0.),)
     RESULTAT=__resuch
-  l_mailla=aster.getvectjev(n_modele.ljust(8)+'.MODELE    .NOMA')
+  l_mailla=aster.getvectjev(n_modele.ljust(8)+'.MODELE    .LGRF')
   n_mailla=string.strip(l_mailla[0])
   dime=aster.getvectjev(n_mailla.ljust(8)+'.DIME')[5]
   collgrma=aster.getcolljev(n_mailla.ljust(8)+'.GROUPEMA')
@@ -609,22 +685,22 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
          lignes.append((m['COOR_ORIG'],m['COOR_EXTR'],m['NB_POINTS']))
          minidim=min(minidim,len(m['COOR_ORIG']),len(m['COOR_EXTR']))
          if minidim!=dime:
-            UTMESS('F', "MACR_LIGN_COUPE", "dimensions de maillage et de coordonnees incoherentes")
+           UTMESS('F','POST0_11')
       elif m['TYPE'] =='ARC' :
          minidim=min(minidim,len(m['COOR_ORIG']),len(m['CENTRE']))
          if minidim!=dime:
-            UTMESS('F', "MACR_LIGN_COUPE", "dimensions de maillage et de coordonnees incoherentes")
+           UTMESS('F','POST0_11')
          if dime==2:
            arcs.append((m['COOR_ORIG'],m['CENTRE'],m['NB_POINTS'],m['ANGLE'],))
          elif dime==3:
            if str(m['DNOR'])=='None':
-              UTMESS('F', "MACR_LIGN_COUPE", "le mot-clé 'DNOR' est obligatoire en 3D pour le type 'ARC'")
+              UTMESS('F','POST0_12')
            arcs.append((m['COOR_ORIG'],m['CENTRE'],m['NB_POINTS'],m['ANGLE'],m['DNOR']))
       elif m['TYPE']=='GROUP_NO':
         ngrno=m['GROUP_NO'].ljust(8).upper()
-        collgrno=aster.getcolljev(n_mailla.ljust(8)+'.GROUPENO')  
+        collgrno=aster.getcolljev(n_mailla.ljust(8)+'.GROUPENO')
         if ngrno not in collgrno.keys() :
-          UTMESS('F', "MACR_LIGN_COUPE", "le group_no "+ngrno+" n est pas dans le maillage "+n_mailla)
+          UTMESS('F','POST0_13',valk=[ngrno,n_mailla])
         grpn=collgrno[ngrno]
         l_coor_group=[ngrno,]
         for node in grpn:
@@ -633,28 +709,25 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
       elif m['TYPE']=='GROUP_MA':
         ngrma=m['GROUP_MA'].ljust(8).upper()
         if ngrma not in collgrma.keys() :
-          UTMESS('F', "MACR_LIGN_COUPE", "le group_ma "+ngrma+" n est pas dans le maillage "+n_mailla)
+          UTMESS('F','POST0_14',valk=[ngrma,n_mailla])
         grpm=collgrma[ngrma]
         for ma in grpm:
           if ltyma[typma[ma-1]-1][:3] != 'SEG' :
              nomma=aster.getvectjev(n_mailla.ljust(8)+'.NOMMAI')
-             UTMESS('F', "MACR_LIGN_COUPE", "le group_ma "+ngrma+" contient la maille "+
-                    nomma[ma-1]+"qui n'est pas de type SEG.")
+             UTMESS('F','POST0_15',valk=[ngrma,nomma[ma-1]])
         __mailla=CREA_MAILLAGE(MAILLAGE= m['MAILLAGE'],)
         __mailla=DEFI_GROUP( reuse=__mailla,MAILLAGE= __mailla,
                             CREA_GROUP_NO=_F(OPTION='NOEUD_ORDO',NOM=str(m['GROUP_MA']),GROUP_MA=m['GROUP_MA']),)
-        collgrno=aster.getcolljev(__mailla.nom.ljust(8)+'.GROUPENO')  
+        collgrno=aster.getcolljev(__mailla.nom.ljust(8)+'.GROUPENO')
         grpn=collgrno[str(m['GROUP_MA']).ljust(8)]
         l_coor_group=[ngrma,]
         for node in grpn:
           l_coor_group.append(aster.getvectjev(n_mailla.ljust(8)+'.COORDO    .VALE',3*(node-1),3))
         groups.append(l_coor_group)
 
-  
-  if arcs!=[] and (lignes!=[] or groups!=[]) :
-    message = 'On ne peut pas combiner des lignes de coupes de type ARC avec des lignes de coupes SEGMENT ou GROUP_NO. \n'
-    UTMESS('F','MACR_LIGN_COUPE',message)
 
+  if arcs!=[] and (lignes!=[] or groups!=[]) :
+    UTMESS('F','POST0_16')
 
   # Création du maillage des NB_POINTS segments entre COOR_ORIG et COOR_EXTR
   # ainsi que des segments reliant les noeuds issus des group_no demandés
@@ -671,10 +744,10 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
 
   # Lecture du maillage de seg2 contenant toutes les lignes de coupe
   __macou=LIRE_MAILLAGE(UNITE=UNITE_MAILLAGE,);
-  
+
   # distance min entre 2 points de la ligne de coupe (utile pour PROJ_CHAMP)
   dmin=dist_min_deux_points(__macou)
-  
+
   motscles={}
   iocc=1
   motscles['CREA_GROUP_NO']=[]
@@ -704,16 +777,16 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
   if args['VIS_A_VIS']!=None:
     for v in args['VIS_A_VIS']:
       if v['GROUP_MA_1']!=None:
-         motscles['VIS_A_VIS'].append(_F(GROUP_MA_1 = v['GROUP_MA_1'],TOUT_2='OUI'),) 
+         motscles['VIS_A_VIS'].append(_F(GROUP_MA_1 = v['GROUP_MA_1'],TOUT_2='OUI'),)
       elif v['MAILLE_1']!=None:
-         motscles['VIS_A_VIS'].append(_F(MAILLE_1 = v['MAILLE_1'],TOUT_2='OUI'),)  
+         motscles['VIS_A_VIS'].append(_F(MAILLE_1 = v['MAILLE_1'],TOUT_2='OUI'),)
 
   if n_modele in self.get_global_contexte().keys() : MODELE_1=self.get_global_contexte()[n_modele]
   else                                             : MODELE_1=self.jdc.current_context[n_modele]
   __recou=PROJ_CHAMP(METHODE='ELEM',
                      RESULTAT=RESULTAT,
                      MODELE_1=MODELE_1,
-                     DISTANCE_MAX=dmin*0.001,
+                     DISTANCE_MAX=m['DISTANCE_MAX'],
                      MODELE_2=__mocou,
                      TYPE_CHAM='NOEU',
                      NOM_CHAM=NOM_CHAM, **motscles);
@@ -723,11 +796,11 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
   ioc2=0
   mcACTION=[]
   angtab=[]
-  
+
   if AsType(RESULTAT).__name__ in ('evol_elas','evol_noli') :
-  
+
    if  NOM_CHAM in ('DEPL','SIEF_ELNO_ELGA','SIGM_NOEU_DEPL','SIGM_NOEU_SIEF','SIGM_NOEU_ELGA','SIGM_NOEU_COQU','SIGM_ELNO_DEPL'):icham=1
+
    for m in LIGN_COUPE :
 
      motscles={}
@@ -752,10 +825,13 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
      if m['TYPE'] in ('GROUP_NO','GROUP_MA'):
          groupe=m[m['TYPE']].ljust(8).upper()
          nomgrma=groupe
-     else: 
+     else:
          ioc2=ioc2+1
          groupe='LICOU'+str(ioc2)
          nomgrma=' '
+         newgrp='LICOF'+str(ioc2)
+         crea_grp_matiere(self,groupe,newgrp,m,__remodr,NOM_CHAM,__macou)
+         groupe=newgrp
 
      # on definit l'intitulé
      if m['INTITULE'] !=None                    : intitl=m['INTITULE']
@@ -775,16 +851,14 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
                             GROUP_NO  = groupe,
                             NOM_CHAM  = NOM_CHAM,**motscles ),)
           else:
-            __remodr=crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,__recou,__macou,nomgrma)
+            __remodr=crea_resu_local(self,dime,NOM_CHAM,m,__recou,__macou,nomgrma)
             mcACTION.append( _F(INTITULE  = intitl,
                             RESULTAT  = __remodr,
                             GROUP_NO  = groupe,
                             NOM_CHAM  = NOM_CHAM,**motscles ),)
 
         else:
-          UTMESS('A','MACR_LIGN_COUPE','LE CHAMP '+NOM_CHAM+' N EST PAS TRAITE PAR MACR_LIGNE_COUPE EN REPERE '+m['REPERE']+'.'
-                     +'LE CALCUL EST EFFECTUE EN REPERE GLOBAL.') 
-
+          UTMESS('A','POST0_17',valk=[NOM_CHAM,m['REPERE']])
           mcACTION.append( _F(INTITULE  = intitl,
                             RESULTAT  = __recou,
                             GROUP_NO  = groupe,
@@ -792,13 +866,13 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
 
      # Expression des contraintes aux noeuds ou des déplacements dans le repere global
      else:
-  
+
           mcACTION.append( _F(INTITULE  = intitl,
                             RESULTAT  = __recou,
                             GROUP_NO  = groupe,
                             NOM_CHAM  = NOM_CHAM,**motscles ),)
 
-  
+
   elif AsType(RESULTAT).__name__ in ('evol_ther',) :
 
      for m in LIGN_COUPE :
@@ -824,6 +898,9 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
         if m['TYPE'] not in ('GROUP_NO','GROUP_MA') :
           ioc2=ioc2+1
           groupe='LICOU'+str(ioc2)
+          newgrp='LICOF'+str(ioc2)
+          crea_grp_matiere(self,groupe,newgrp,m,__remodr,NOM_CHAM,__macou)
+          groupe=newgrp
           if m['INTITULE'] !=None : intitl=m['INTITULE']
           else                    : intitl='l.coupe'+str(ioc2)
         else:
@@ -834,7 +911,7 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
                             RESULTAT  = __recou,
                             GROUP_NO  = groupe,
                             NOM_CHAM  = NOM_CHAM, **motscles ),)
+
   __tabitm=POST_RELEVE_T(ACTION=mcACTION,);
 
   # on repasse par les tables python pour supprimer les paramètres inutiles
index 0efa2e46f47ac2a719ba5009036fabaf8eb15548..e0fafb602ac447beab0b34646087dcd09d6c6ced 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_recal_ops Macro  DATE 16/05/2007   AUTEUR ASSIRE A.ASSIRE 
+#@ MODIF macr_recal_ops Macro  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -32,16 +32,7 @@ fichier_export = None
 mode_python = False
 type_fonctionnelle = 'float'
 
-
-try:
-   import Utilitai.Utmess
-   from Utilitai.Utmess import UTMESS
-except ImportError:
-   def UTMESS(code,sprg,texte):
-      fmt='\n <%s> <%s> %s\n\n'
-      print fmt % (code,sprg,texte)
-      if code=='F': sys.exit()
-
+from externe_mess import UTMESS
 
 # --------------------------------------------------------------------------------------------------
 def Ecriture_Fonctionnelle(output_file, type_fonctionnelle, fonctionnelle):
@@ -87,7 +78,7 @@ def Sortie(LIST_NOM_PARA, LIST_PARA, val, CALCUL_ASTER, Mess):
    import Cata, aster, Macro
    from Cata.cata import DEFI_LIST_REEL
    from Accas import _F
-   from Utilitai.Utmess import UTMESS
+   from externe_mess import UTMESS
    from Macro import reca_message
    from Macro import reca_algo
    from Macro import reca_interp
@@ -172,7 +163,7 @@ def macr_recal_ops(self,UNITE_ESCL, RESU_EXP, POIDS, LIST_PARA, LIST_DERIV, RESU
    from Macro import reca_utilitaires
    from Macro import reca_calcul_aster
    from Macro.reca_controles import gestion
-   from Utilitai.Utmess import UTMESS
+   from externe_mess import UTMESS
 
    # Gestion des Exceptions
    prev_onFatalError = aster.onFatalError()
@@ -203,7 +194,7 @@ def macr_recal(UNITE_ESCL, RESU_EXP, POIDS, LIST_PARA, LIST_DERIV, RESU_CALC,
                ITER_MAXI, ITER_FONC_MAXI, RESI_GLOB_RELA,UNITE_RESU,PARA_DIFF_FINI,
                GRAPHIQUE, SUIVI_ESCLAVE, METHODE, INFO, **args ):
 
-
+   from externe_mess import UTMESS
    # Import d'as_profil
    if os.environ.has_key('ASTER_ROOT'):
       sys.path.append(os.path.join(os.environ['ASTER_ROOT'], 'ASTK', 'ASTK_SERV', 'lib'))
@@ -696,7 +687,8 @@ if __name__ == '__main__':
     mode_python = True
 
     from optparse import OptionParser, OptionGroup
-
+    from externe_mess import UTMESS
+    
     p = OptionParser(usage='usage: %s fichier_export [options]' % sys.argv[0])
     p.add_option('-i', '--input',        action='store',   dest='input',         type='string',   default='input.txt',   help='fichier contenant les parametres')
     p.add_option('-o', '--output',       action='store',   dest='output',        type='string',   default='output.txt',  help='fichier contenant la fonctionnelle')
index d694fd6a15c09efe7f38066581c029e8847eeb99..44fb67d6094e35d827db551a630889c391c0eda6 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_spectre_ops Macro  DATE 14/11/2006   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF macr_spectre_ops Macro  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # ======================================================================
 
 from Accas import _F
-try :
+import string
+
+try:
    import aster
-   from Utilitai.Utmess import UTMESS
-except :
+   from Utilitai.Utmess import  UTMESS
+except:
    pass
-import string
+
 def macr_spectre_ops(self,MAILLAGE,PLANCHER,NOM_CHAM,CALCUL,RESU,IMPRESSION=None,
                      FREQ=None,LIST_FREQ=None,LIST_INST=None,AMOR_SPEC=None,**args):
   """
@@ -108,7 +110,7 @@ def macr_spectre_ops(self,MAILLAGE,PLANCHER,NOM_CHAM,CALCUL,RESU,IMPRESSION=None
                   motscles={}
                   if resu['RESU_GENE']!=None :
                      if CALCUL=='ABSOLU' :
-                        UTMESS('F', macro, 'Pas de calcul absolu avec tran_gene')
+                        UTMESS('F','SPECTRAL0_8')
                      motscles['RESU_GENE'] = resu['RESU_GENE']
 
                   if resu['RESULTAT' ]!=None :
index b9dac9fe1ad745e0c192ab7cbf1e126fa16dc0e9..0d5a413982e6a99c6a4cf3ee41c88d4b507ffe22 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macro_elas_mult_ops Macro  DATE 07/11/2006   AUTEUR CIBHHLV L.VIVAN 
+#@ MODIF macro_elas_mult_ops Macro  DATE 22/10/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -37,10 +37,10 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
   CALC_MATR_ELEM  =self.get_cmd('CALC_MATR_ELEM')
   NUME_DDL        =self.get_cmd('NUME_DDL')
   ASSE_MATRICE    =self.get_cmd('ASSE_MATRICE')
-  FACT_LDLT       =self.get_cmd('FACT_LDLT')
+  FACTORISER      =self.get_cmd('FACTORISER')
   CALC_VECT_ELEM  =self.get_cmd('CALC_VECT_ELEM')
   ASSE_VECTEUR    =self.get_cmd('ASSE_VECTEUR')
-  RESO_LDLT       =self.get_cmd('RESO_LDLT')
+  RESOUDRE        =self.get_cmd('RESOUDRE')
   CREA_RESU       =self.get_cmd('CREA_RESU')
   CALC_ELEM       =self.get_cmd('CALC_ELEM')
   CALC_NO         =self.get_cmd('CALC_NO')
@@ -62,7 +62,7 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
         ifour=1                 # mot clé MODE_FOURIER présent sous CAS_CHARGE
         tyresu = 'FOURIER_ELAS'
   if ielas==1 and ifour==1:
-     UTMESS('F', "MACRO_ELAS_MULT", "On ne peut avoir a la fois NOM_CAS et MODE_FOURIER")
+     UTMESS('F','ELASMULT0_1')
 
   if (numeddl in self.sdprods) or (numeddl==None):
     # Si le concept numeddl est dans self.sdprods ou n est pas nommé
@@ -100,7 +100,7 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
 
      __nomras=ASSE_MATRICE(MATR_ELEM=__nomrig,NUME_DDL=num)
 
-     __nomraf=FACT_LDLT(MATR_ASSE=__nomras,NPREC=SOLVEUR['NPREC'],STOP_SINGULIER=SOLVEUR['STOP_SINGULIER'])
+     __nomraf=FACTORISER(MATR_ASSE=__nomras,NPREC=SOLVEUR['NPREC'],STOP_SINGULIER=SOLVEUR['STOP_SINGULIER'])
 
 #####################################################################
 # boucle sur les items de CAS_CHARGE
@@ -126,7 +126,7 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
 
         __nomras=ASSE_MATRICE(MATR_ELEM=__nomrig,NUME_DDL=num)
 
-        __nomraf=FACT_LDLT(MATR_ASSE=__nomras,NPREC=SOLVEUR['NPREC'],STOP_SINGULIER=SOLVEUR['STOP_SINGULIER'])
+        __nomraf=FACTORISER(MATR_ASSE=__nomras,NPREC=SOLVEUR['NPREC'],STOP_SINGULIER=SOLVEUR['STOP_SINGULIER'])
 
 
      if m['VECT_ASSE']==None :
@@ -142,7 +142,7 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
         __nomasv=m['VECT_ASSE']
 
 
-     __nomchn=RESO_LDLT(MATR_FACT=__nomraf,CHAM_NO=__nomasv,TITRE=m['SOUS_TITRE'])
+     __nomchn=RESOUDRE(MATR=__nomraf,CHAM_NO=__nomasv,TITRE=m['SOUS_TITRE'])
      nomchn.append(__nomchn)
 
 # fin de la boucle sur les items de CAS_CHARGE
@@ -234,11 +234,13 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
               motscles['NUME_MODE']=m['MODE_FOURIER']
            motscles['EXCIT']=[]
            if   m['CHAR_MECA'] :
-              for chargt in m['CHAR_MECA'] : motscles['EXCIT'].append(_F(CHARGE=chargt))
+              for chargt in m['CHAR_MECA']   : motscles['EXCIT'].append(_F(CHARGE=chargt))
            elif m['CHAR_CINE'] :
-              for chargt in m['CHAR_CINE'] : motscles['EXCIT'].append(_F(CHARGE=chargt))
-           if   CHAR_MECA_GLOBAL:            motscles['EXCIT'].append(_F(CHARGE=CHAR_MECA_GLOBAL))
-           elif CHAR_CINE_GLOBAL:            motscles['EXCIT'].append(_F(CHARGE=CHAR_CINE_GLOBAL))
+              for chargt in m['CHAR_CINE']   : motscles['EXCIT'].append(_F(CHARGE=chargt))
+           if   CHAR_MECA_GLOBAL:
+              for chargt in CHAR_MECA_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
+           elif CHAR_CINE_GLOBAL:
+              for chargt in CHAR_CINE_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
            CALC_ELEM(reuse=nomres,
                      RESULTAT=nomres,
                      MODELE=MODELE,
@@ -256,11 +258,13 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
               motscles['NUME_MODE']=m['MODE_FOURIER']
            motscles['EXCIT']=[]
            if   m['CHAR_MECA'] :
-              for chargt in m['CHAR_MECA'] : motscles['EXCIT'].append(_F(CHARGE=chargt))
+              for chargt in m['CHAR_MECA']   : motscles['EXCIT'].append(_F(CHARGE=chargt))
            elif m['CHAR_CINE'] :
-              for chargt in m['CHAR_CINE'] : motscles['EXCIT'].append(_F(CHARGE=chargt))
-           if   CHAR_MECA_GLOBAL:            motscles['EXCIT'].append(_F(CHARGE=CHAR_MECA_GLOBAL))
-           elif CHAR_CINE_GLOBAL:            motscles['EXCIT'].append(_F(CHARGE=CHAR_CINE_GLOBAL))
+              for chargt in m['CHAR_CINE']   : motscles['EXCIT'].append(_F(CHARGE=chargt))
+           if   CHAR_MECA_GLOBAL:
+              for chargt in CHAR_MECA_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
+           elif CHAR_CINE_GLOBAL:
+              for chargt in CHAR_CINE_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
            CALC_NO(reuse=nomres,
                    RESULTAT=nomres,
                    MODELE=MODELE,
index 884e1556d7f6937031caea310dddde234d174b7b..276f086bcad86b1b5a9d6ec8be345b8a01c0685d 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macro_expans_ops Macro  DATE 22/12/2006   AUTEUR BODEL C.BODEL 
+#@ MODIF macro_expans_ops Macro  DATE 26/03/2008   AUTEUR BODEL C.BODEL 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # ======================================================================
 
 
+# MODIF : 24/07/2007. BODEL : suppression du mc NUME_DDL. Le nume_ddl par
+# defaut pour PROJ_CHAMP est celui du modèle expérimental.
 
 def macro_expans_ops( self,
                       MODELE_CALCUL,
                       MODELE_MESURE,
-                      NUME_DDL,
+                      NUME_DDL=None,
                       RESU_NX=None,
                       RESU_EX=None,
                       RESU_ET=None,
@@ -40,6 +42,7 @@ def macro_expans_ops( self,
     from types import ListType, TupleType
     ier = 0
 
+    import aster
     EXTR_MODE = self.get_cmd('EXTR_MODE')
     PROJ_MESU_MODAL = self.get_cmd('PROJ_MESU_MODAL')
     REST_BASE_PHYS = self.get_cmd('REST_BASE_PHYS')
@@ -108,8 +111,8 @@ def macro_expans_ops( self,
         paras = ('FREQ')
     else:
         paras = None
-        UTMESS('A',  'MACRO_OBSERV',
-             "LE MODELE MEDURE DOIT ETRE UN CONCEPT DE TYPE DYNA_HARMO OU MODE_MECA")
+        #"LE MODELE MEDURE DOIT ETRE UN CONCEPT DE TYPE DYNA_HARMO OU MODE_MECA")
+        UTMESS('A','MEIDEE0_1')
             
     
     try:
@@ -136,18 +139,27 @@ def macro_expans_ops( self,
                               NOM_CHAM    = NOM_CHAM);
 
 
-
     
     # Restriction des modes mesures etendus sur le maillage capteur
     # -------------------------------------------------------------
     self.DeclareOut( "RESU_RD", RESU_RD )
+    refd1 = aster.getvectjev(RESU_EXP.nom.ljust(19)+".REFD")
+    refd2 = aster.getvectjev(RESU_EX.nom.ljust(19)+".REFD")
+
+    if RESU_EX.REFD.get():
+        tmp = RESU_EX.REFD.get()[3]
+        nume = self.jdc.sds_dict[tmp.strip()]
+    elif NUME_DDL:
+        nume = NUME_DDL
+    else:
+        UTMESS('A','MEIDEE0_5')
     RESU_RD = PROJ_CHAMP( METHODE    = 'ELEM',
                           RESULTAT   = RESU_ET,
                           MODELE_1   = MOD_CALCUL,
                           MODELE_2   = MOD_MESURE,
                           NOM_CHAM   = NOM_CHAM,
                           TOUT_ORDRE = 'OUI',
-                          NUME_DDL   = NUME_DDL,
+                          NUME_DDL   = nume,
                           VIS_A_VIS  =_F( TOUT_1='OUI',
                                           TOUT_2='OUI',),
                           NOM_PARA   = paras,
index c3b17003a4483635e244abed900de5568e9604ff..aa8b0d65923aa7bbc1b55499d6ff839227ae056f 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macro_matr_ajou_ops Macro  DATE 05/09/2005   AUTEUR DURAND C.DURAND 
+#@ MODIF macro_matr_ajou_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -30,7 +30,7 @@ def macro_matr_ajou_ops(self,MAILLAGE,GROUP_MA_FLUIDE,GROUP_MA_INTERF,MODELISATI
   from Accas import _F
   import types
   import aster
-  from Utilitai.Utmess     import UTMESS
+  from Utilitai.Utmess     import  UTMESS
   ier=0
   
   # On importe les definitions des commandes a utiliser dans la macro
@@ -56,7 +56,7 @@ def macro_matr_ajou_ops(self,MAILLAGE,GROUP_MA_FLUIDE,GROUP_MA_INTERF,MODELISATI
   else :
      for flu in FLUIDE :
          if flu['GROUP_MA']==None :
-            UTMESS('F', "MACRO_MATR_AJOU", "cas fluides multiples : precisez le GROUP_MA dans lequel vous affectez  la masse volumique RHO")
+            UTMESS('F','MATRICE0_1')
 
   IOCFLU=len(FLUIDE)
 
@@ -111,7 +111,7 @@ def macro_matr_ajou_ops(self,MAILLAGE,GROUP_MA_FLUIDE,GROUP_MA_INTERF,MODELISATI
         if DDL['GROUP_NO']!=None : mfact=_F(GROUP_NO=DDL['GROUP_NO'],TEMP=DDL['PRES_FLUIDE'])
         affimp.append(mfact)
   if nflui==0:
-     UTMESS('F', "MACRO_MATR_AJOU", "PRES_FLUIDE obligatoire une fois")
+     UTMESS('F','MATRICE0_2')
 
   __CHARGE=AFFE_CHAR_THER( MODELE    = __NOMFLU,
                            TEMP_IMPO = affimp )
@@ -190,7 +190,7 @@ def macro_matr_ajou_ops(self,MAILLAGE,GROUP_MA_FLUIDE,GROUP_MA_INTERF,MODELISATI
      if   MODE_MECA    !=None : mostcles['MODE_MECA']     =MODE_MECA
      elif DEPL_IMPO    !=None : mostcles['CHAM_NO']       =DEPL_IMPO
      else :
-       UTMESS('F', "MACRO_MATR_AJOU", "amortissement ajoute sur modele generalise non encore implante")
+       UTMESS('F','MATRICE0_3')
 
      AMORAJ = CALC_MATR_AJOU(MODELE_FLUIDE    = __NOMFLU,
                              MODELE_INTERFACE = __NOMINT,
@@ -212,7 +212,7 @@ def macro_matr_ajou_ops(self,MAILLAGE,GROUP_MA_FLUIDE,GROUP_MA_INTERF,MODELISATI
      if   MODE_MECA    !=None : mostcles['MODE_MECA']     =MODE_MECA
      elif DEPL_IMPO    !=None : mostcles['CHAM_NO']       =DEPL_IMPO
      else :
-       UTMESS('F', "MACRO_MATR_AJOU", "rigidite ajoute sur modele generalise non encore implante")
+       UTMESS('F','MATRICE0_4')
 
      RIGIAJ = CALC_MATR_AJOU(MODELE_FLUIDE    = __NOMFLU,
                              MODELE_INTERFACE = __NOMINT,
index ddf508f1d2312e8aac9b9b7cdd0966e2897871e0..6bca7b13c95b43288f34433ec60b3af30418307d 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macro_matr_asse_ops Macro  DATE 12/06/2006   AUTEUR CIBHHLV L.VIVAN 
+#@ MODIF macro_matr_asse_ops Macro  DATE 18/03/2008   AUTEUR BOYERE E.BOYERE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 
 
 def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
-                        SOLVEUR,NUME_DDL,CHARGE,CHAR_CINE,INST,**args):
+                        SOLVEUR,NUME_DDL,CHARGE,CHAR_CINE,INST,INFO,**args):
   """
      Ecriture de la macro MACRO_MATR_ASSE
   """
   ier=0
-  from Utilitai.Utmess     import UTMESS
+  from Utilitai.Utmess     import  UTMESS
 
   # On met le mot cle NUME_DDL dans une variable locale pour le proteger
   numeddl=NUME_DDL
+  info=INFO
   # On importe les definitions des commandes a utiliser dans la macro
   # Le nom de la variable doit etre obligatoirement le nom de la commande
   CALC_MATR_ELEM=self.get_cmd('CALC_MATR_ELEM')
@@ -38,39 +39,9 @@ def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
   # La macro compte pour 1 dans la numerotation des commandes
   self.set_icmd(1)
 
-  if SOLVEUR:
-    methode=SOLVEUR['METHODE']
-    if methode=='LDLT':
-      if SOLVEUR['RENUM']:
-         renum=SOLVEUR['RENUM']
-      else:
-         renum='RCMK'
-      if renum not in ('SANS','RCMK'):
-        UTMESS('F', "MACRO_MATR_ASSE", "Avec methode LDLT, RENUM doit etre SANS ou RCMK")
-    elif methode=='MULT_FRONT':
-      if SOLVEUR['RENUM']:
-         renum=SOLVEUR['RENUM']
-      else:
-         renum='MDA'
-      if renum not in ('MDA','MD','METIS'):
-        UTMESS('F', "MACRO_MATR_ASSE", "Avec methode MULT_FRONT, RENUM doit etre MDA, MD ou RCMK")
-    elif methode=='MUMPS':
-      if SOLVEUR['RENUM']:
-         renum=SOLVEUR['RENUM']
-      else:
-         renum='SANS'
-      if renum not in ('SANS',):
-        UTMESS('F', "MACRO_MATR_ASSE", "Avec methode MUMPS, RENUM doit etre SANS")
-    elif methode=='GCPC':
-      if SOLVEUR['RENUM']:
-         renum=SOLVEUR['RENUM']
-      else:
-         renum='SANS'
-      if renum not in ('SANS','RCMK'):
-        UTMESS('F', "MACRO_MATR_ASSE", "Avec methode GCPC, RENUM doit etre SANS ou RCMK")
-  else:
-    methode='MULT_FRONT'
-    renum  ='MDA'
+  # Les mots cles simples sous SOLVEUR sont par defaut MULT_FRONT/METIS
+  methode=SOLVEUR['METHODE']
+  renum=SOLVEUR['RENUM']
 
   if numeddl in self.sdprods:
     # Si le concept numeddl est dans self.sdprods
@@ -100,17 +71,17 @@ def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
     option=m['OPTION']
     if iocc == 1 and lnume == 1 and option not in ('RIGI_MECA','RIGI_MECA_LAGR',
                                                    'RIGI_THER','RIGI_ACOU')      :
-      UTMESS('F', "MACRO_MATR_ASSE", "UNE DES OPTIONS DOIT ETRE RIGI_MECA OU RIGI_THER OU RIGI_ACOU OU RIGI_MECA_LAGR")
+      UTMESS('F','MATRICE0_9')
 
 
     motscles={'OPTION':option}
     if option == 'RIGI_MECA_HYST':
        if (not lrigel):
-          UTMESS('F', "MACRO_MATR_ASSE", "POUR CALCULER RIGI_MECA_HYST, IL FAUT AVOIR CALCULE RIGI_MECA AUPARAVANT (DANS LE MEME APPEL)")
+          UTMESS('F','MATRICE0_10')
        motscles['RIGI_MECA']   =rigel
     if option == 'AMOR_MECA':
        if (not lrigel or not lmasel):
-          UTMESS('F', "MACRO_MATR_ASSE", "POUR CALCULER AMOR_MECA, IL FAUT AVOIR CALCULE RIGI_MECA ET MASS_MECA AUPARAVANT (DANS LE MEME APPEL)")
+          UTMESS('F','MATRICE0_11')
        if CHAM_MATER != None:
           motscles['RIGI_MECA']   =rigel
           motscles['MASS_MECA']   =masel
@@ -144,7 +115,7 @@ def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
     if lnume and option in ('RIGI_MECA','RIGI_THER','RIGI_ACOU','RIGI_MECA_LAGR'):
       self.DeclareOut('num',numeddl)
       # On peut passer des mots cles egaux a None. Ils sont ignores
-      num=NUME_DDL(MATR_RIGI=_a,METHODE=methode,RENUM=renum)
+      num=NUME_DDL(MATR_RIGI=_a,METHODE=methode,RENUM=renum,INFO=info)
     else:
       num=numeddl
 
index 580a9298d001c469cf126c49b002163e8afdb7cb..7e015759ebe769eeaa634a8b2c076d53fe137320 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macro_miss_3d_ops Macro  DATE 29/05/2007   AUTEUR VOLDOIRE F.VOLDOIRE 
+#@ MODIF macro_miss_3d_ops Macro  DATE 13/05/2008   AUTEUR DEVESA G.DEVESA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -29,7 +29,7 @@ def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS,
   """
   import types
   from Accas import _F
-  from Utilitai.Utmess import UTMESS
+  from Utilitai.Utmess import  UTMESS
   from types import TupleType, ListType
 
   ier=0
@@ -57,6 +57,8 @@ def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS,
   #    miss3d=loc_fic+'miss3d'
      
   miss3d=loc_fic+'miss3d'
+  # miss3d='/aster/logiciels/MISS3D/miss3d.csh-beta-modif'
   
   # if VERSION=='V1_2':
   #    if PARAMETRE != None and PARAMETRE['TYPE']=='BINAIRE':
@@ -83,14 +85,15 @@ def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS,
             'FICH_RESU_IMPE','FICH_RESU_FORC','TYPE','DREF','ALGO',
             'OFFSET_MAX','OFFSET_NB','SPEC_MAX','SPEC_NB','ISSF',
             'FICH_POST_TRAI','CONTR_NB','CONTR_LISTE','LFREQ_NB',
-            'LFREQ_LISTE']
+            'LFREQ_LISTE','DIRE_ONDE']
   if PARAMETRE != None and PARAMETRE['LFREQ_NB'] != None:
     if len(PARAMETRE['LFREQ_LISTE']) != PARAMETRE['LFREQ_NB']:
-      UTMESS('F', 'MACRO_MISS3D', 'Longueur de LFREQ_LISTE incorrecte')
+      UTMESS('F','MISS0_1')
   if PARAMETRE != None and PARAMETRE['CONTR_NB'] != None:
     if len(PARAMETRE['CONTR_LISTE']) != 3*PARAMETRE['CONTR_NB']:
-      UTMESS('F', 'MACRO_MISS3D', 'Longueur de CONTR_LISTE incorrecte')
+      UTMESS('F','MISS0_2')
   
+  pndio = '0'
   dpara = {}
   for cle in l_para:
     if cle in ('SURF', 'ISSF', ):
@@ -102,7 +105,10 @@ def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS,
         dpara[cle] = repr(' '.join([str(s) for s in PARAMETRE[cle]]))
       else:
         dpara[cle] = str(PARAMETRE[cle])
-  
+      if cle in ('DIRE_ONDE', ):
+        pndio = '1'
+        dpara['SURF'] = 'NON'
+        
   EXEC_LOGICIEL(
                 LOGICIEL=miss3d,
                 ARGUMENT=(MODUL2,
@@ -135,6 +141,8 @@ def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS,
                           dpara['LFREQ_LISTE'],
                           dpara['TYPE'], 
                           prfor,
+                          pndio,
+                          dpara['DIRE_ONDE'],
                          ),
                 )
 
index a24af1f6456f6db545e7b45564b79dc9bc13fff3..1ed675e3efff00192db2d34db0493374dbc8bac3 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macro_mode_meca_ops Macro  DATE 14/06/2005   AUTEUR DURAND C.DURAND 
+#@ MODIF macro_mode_meca_ops Macro  DATE 30/10/2007   AUTEUR BOYERE E.BOYERE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -110,7 +110,6 @@ def macro_mode_meca_ops(self,MATR_A,MATR_B,INFO,METHODE,OPTION,CALC_FREQ,
                                   **motscit)
 
      __nomre0=NORM_MODE(reuse     =__nomre0,
-                        MASS_INER =normode['MASS_INER'],
                         MODE      =__nomre0,
                         NORME     =normode['NORME'],
                         INFO      =normode['INFO'],)
index 589dde018183dea17ba040d8ae4d1904263f01d8..89ffe2ca7bf661f432a05772e7b7b5fb1460036d 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macro_proj_base_ops Macro  DATE 05/09/2005   AUTEUR DURAND C.DURAND 
+#@ MODIF macro_proj_base_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -25,7 +25,7 @@ def macro_proj_base_ops(self,BASE,NB_VECT,MATR_ASSE_GENE,VECT_ASSE_GENE,PROFIL,*
      Ecriture de la macro MACRO_PROJ_BASE
   """
   ier=0
-  from Utilitai.Utmess     import UTMESS
+  from Utilitai.Utmess     import  UTMESS
   # On importe les definitions des commandes a utiliser dans la macro
   NUME_DDL_GENE  =self.get_cmd('NUME_DDL_GENE')
   PROJ_MATR_BASE =self.get_cmd('PROJ_MATR_BASE')
@@ -40,7 +40,7 @@ def macro_proj_base_ops(self,BASE,NB_VECT,MATR_ASSE_GENE,VECT_ASSE_GENE,PROFIL,*
       if   m['MATR_ASSE']     :  motscles['MATR_ASSE']     =m['MATR_ASSE']
       elif m['MATR_ASSE_GENE']:  motscles['MATR_ASSE_GENE']=m['MATR_ASSE_GENE']
       else:
-          UTMESS('F', "MACRO_PROJ_BASE", "MATR_ASSE et MATR_ASSE_GENE absents")
+          UTMESS('F','MODAL0_1')
       self.DeclareOut('mm',m['MATRICE'])
       mm=PROJ_MATR_BASE(BASE=BASE,NUME_DDL_GENE=_num,**motscles)
 
@@ -51,7 +51,7 @@ def macro_proj_base_ops(self,BASE,NB_VECT,MATR_ASSE_GENE,VECT_ASSE_GENE,PROFIL,*
       if   v['VECT_ASSE']     :  motscles['VECT_ASSE']     =v['VECT_ASSE']
       elif v['VECT_ASSE_GENE']:  motscles['VECT_ASSE_GENE']=v['VECT_ASSE_GENE']
       else:
-          UTMESS('F', "MACRO_PROJ_BASE", "MATR_ASSE et MATR_ASSE_GENE absents")
+          UTMESS('F','MODAL0_1')
       motscles['TYPE_VECT']=v['TYPE_VECT']
       self.DeclareOut('vv',v['VECTEUR'])
       vv=PROJ_VECT_BASE(BASE=BASE,NUME_DDL_GENE=_num,**motscles)
index 920a6e2b75489179525c8cdd3ac06e7ecbac1aae..7d817d304dd7a7fc9b21314407e71ba4c19a63dd 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macro_visu_meidee_ops Macro  DATE 02/04/2007   AUTEUR BODEL C.BODEL 
+#@ MODIF macro_visu_meidee_ops Macro  DATE 14/05/2008   AUTEUR BODEL C.BODEL 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # pour la gestion de l'interface graphique dans meidee_iface
 
 
-
 def macro_visu_meidee_ops( self,
-                           INTERACTIF       = None,
-                           RESULTATS        = None,
-                           UNITE_FIMEN      = None,
-                           UNITE_RESU       = None,
-                           EXPANSION        = None,
-                           FLUIDE_ELASTIQUE = None,
-                           TURBULENT        = None,
+                           INTERACTIF         = None,
+                           UNITE_FIMEN        = None,
+                           UNITE_RESU         = None,
+                           EXPANSION          = None,
+                           FLUIDE_ELASTIQUE   = None,
+                           TURBULENT          = None,
+                           MODIFSTRUCT        = None,
+                           GROUP_NO_CAPTEURS  = None,
+                           GROUP_NO_EXTERIEUR = None,
+                           RESU_FLUDELA       = None,
+                           RESU_TURBULENT     = None,
+                           RESU_MODIFSTRU     = None,
                            **args):
-    ier = 0
-
-    from Utilitai.UniteAster import UniteAster
-    from Meidee.meidee_correlation import InterfaceCorrelation
-    from Meidee.meidee_fludela import InterfaceFludela, InterfaceDisplay
-    from Meidee.meidee_turbulent import InterfaceTurbulent
-    from Meidee.meidee_iface import MessageBox, TabbedWindow
-    from Meidee.meidee_cata import MeideeObjects
-    from Tkinter import Tk
-    from Accas import _F
     import aster
-    import sys
-##    prev = aster.onFatalError()
-##    aster.onFatalError("EXCEPTION")
+    from Meidee.meidee_cata import MeideeObjects
+    ier = 0
+    
+    prev = aster.onFatalError()
+    aster.onFatalError("EXCEPTION")
 
     # La macro compte pour 1 dans la numerotation des commandes
     self.set_icmd(1)
 
+    
+    # gestion des concepts sortants de la macro, declares a priori
+    table = []
+    table_fonction = []
 
+    if not RESU_MODIFSTRU:
+        out_modifstru = {}
+    else:
+        out_modifstru = RESU_MODIFSTRU[0] # max=1 dans le capy
 
-    # Fichiers fimen éventuels associés aux unités logiques en entrée
-    fichiers_fimen = []
-    print "FIMEN:", UNITE_FIMEN
-    if UNITE_FIMEN:
-        if type(FIMEN)==int:
-            UNITE_FIMEN= [ UNITE_FIMEN ]
-        for unit in UNITE_FIMEN:
-            UL = UniteAster()
-            fichiers_fimen.append( (unit,UL.Nom(unit)) )
-
-    tables = []
-    type_tables = []
-    for res in RESULTATS:
-        tables.append(res['TABLE'])
-        type_tables.append(res['TYPE_TABLE'])
-    out = {"DeclareOut" : self.DeclareOut,
-           "TablesOut" : tables,
-           "TypeTables" : type_tables}
-           
 
+    if not RESU_TURBULENT:
+        RESU_TURBULENT = []
+    else:
+        for res in RESU_TURBULENT:
+            table_fonction.append(res['TABLE'])
+    out_turbulent = {"DeclareOut" : self.DeclareOut,
+                     "TypeTables" : 'TABLE_FONCTION',
+                     "ComptTable" : 0,
+                     "TablesOut"  : table_fonction}
+
+    if not RESU_FLUDELA:
+        RESU_FLUDELA = []
+    else:
+        for res in RESU_FLUDELA:
+            table.append(res['TABLE'])
+    out_fludela = {"DeclareOut" : self.DeclareOut,
+                   "TypeTables" : 'TABLE',
+                   "ComptTable" : 0,
+                   "TablesOut" : table}
 
+    
     # Mode interactif : ouverture d'une fenetre Tk
     if INTERACTIF == "OUI":
-        
-        # fenetre principale        
-        tk = Tk()
-        tk.rowconfigure(0, weight=1)
-        tk.columnconfigure(0,weight=1)
-        tabs = TabbedWindow( tk, [ "Correlation", "Fludela","Fluide Turbulent" ] )
-        tabs.grid(sticky='n'+'e'+'s'+'w')
-        main = tabs.root()
-        
-        # ecriture des message dans un fichier message
-        mess = MessageBox(UNITE_RESU, interactif = 'oui')
-                # importation des concepts aster de la memoire jeveux    
-        objects = MeideeObjects(self, mess)
-        tabs.set_objects(objects)
-        
-        iface = InterfaceCorrelation(main, objects, self, mess)
-        fludela = InterfaceFludela(main, objects, fichiers_fimen, mess, out)
-        turbulent = InterfaceTurbulent(main, objects, mess, out)
-        
-        tabs.set_tab("Correlation",iface.main)
-        tabs.set_tab("Fludela", fludela )
-        tabs.set_tab("Fluide Turbulent", turbulent)
-        tabs.set_current_tab("Correlation")
-
-
-        try:
-            tk.mainloop()
-        except :
-            print "MEIDEE : *ERREUR*"
-
-        mess.close_file()
-
-
+        create_interactive_window(self,
+                                  UNITE_FIMEN,
+                                  UNITE_RESU,
+                                  out_fludela,
+                                  out_turbulent,
+                                  out_modifstru)
     else:
+        from Meidee.meidee_calcul import MessageBox
         from Meidee.meidee_test import TestMeidee
+        mess = MessageBox(UNITE_RESU)
+        mess.disp_mess("Mode non intéractif")
         
-        mess = MessageBox(UNITE_RESU, interactif = 'non')
-        # importation des concepts aster existants de la memoire jeveux    
         objects = MeideeObjects(self, mess)
-        
-        mess.disp_mess( " mode non interactif" )
-        
+
+        # importation des concepts aster existants de la memoire jeveux
         TestMeidee(self,
                    mess,
-                   out,
+                   out_fludela,
+                   out_turbulent,
+                   out_modifstru,
                    objects,
                    EXPANSION,
                    FLUIDE_ELASTIQUE,
-                   TURBULENT
+                   TURBULENT,
+                   MODIFSTRUCT,
+                   GROUP_NO_CAPTEURS,
+                   GROUP_NO_EXTERIEUR              
                    )
 
         mess.close_file()
+    aster.onFatalError(prev)
+    return ier
+
+
+
+def create_tab_mess_widgets(tk, UNITE_RESU):
+    """Construits les objects table et boîte à messages."""
+    try:
+        from Pmw import PanedWidget
+    except ImportError:
+        PanedWidget = None
     
-##    aster.onFatalError(prev)
+    from Meidee.meidee_iface import MessageBoxInteractif, TabbedWindow
     
-    return ier
+    if PanedWidget:
+        pw = PanedWidget(tk, orient='vertical',
+                         hull_borderwidth = 1,
+                         hull_relief = 'sunken',
+                         )
+        tabsw = pw.add("main", min=.1, max=.9)
+        msgw = pw.add("msg", min=.1, max=.2)
+        pw.grid(sticky='nsew')
+        tabsw.rowconfigure(0, weight=1)
+        tabsw.columnconfigure(0, weight=1)
+        msgw.rowconfigure(0, weight=1)
+        msgw.columnconfigure(0, weight=1)
+    else:
+        tabsw = tk
+        msgw = tk
+        tk.rowconfigure(1, weight=3)
+        tk.rowconfigure(1, weight=1)
+    
+    tabs = TabbedWindow(tabsw, ["Expansion de modeles",
+                                "Modification structurale",
+                                "MEIDEE mono-modal",
+                                "Identification de chargement"])
+
+    tabs.grid(row=0, column=0, sticky='nsew')
+    # pack(side='top',expand=1,fill='both')
+    
+    # ecriture des message dans un fichier message
+    mess = MessageBoxInteractif(msgw, UNITE_RESU)
+    if PanedWidget:
+        mess.grid(row=0, column=0, sticky='nsew')
+        #mess.pack(side='top',expand=1,fill='both')
+    else:
+        mess.grid(row=1, column=0, sticky='nsew')
+        #mess.pack(side='top',expand=1,fill='both')
+    
+    return tabs, mess
+
+def get_fimen_files(UNITE_FIMEN, FIMEN=None):
+    """Fichiers fimen éventuels associés aux unités logiques en entrée"""
+    # XXX FIMEN is not defined (should it be included in the macro)
+    from Utilitai.UniteAster import UniteAster
+    fichiers_fimen = []
+    print "FIMEN:", UNITE_FIMEN
+
+    if UNITE_FIMEN:
+        if type(FIMEN)==int:
+            UNITE_FIMEN= [ UNITE_FIMEN ]
+        for unit in UNITE_FIMEN:
+            UL = UniteAster()
+            fichiers_fimen.append( (unit, UL.Nom(unit)) )
+
+    return fichiers_fimen
 
+
+class FermetureCallback:
+    """Opérations à appliquer lors de la fermeture de la
+    fenêtre Tk.
+    """
+
+    def __init__(self, main_tk, turbulent):
+        self.main_tk = main_tk
+        self.turbulent = turbulent
+
+    def apply(self):
+        """Enlève les fichiers temporaires de Xmgrace"""
+        self.turbulent.xmgr_manager.fermer()
+        self.main_tk.quit()
+
+
+def create_interactive_window(macro,
+                              UNITE_FIMEN,
+                              UNITE_RESU,
+                              out_fludela,
+                              out_turbulent,
+                              out_modifstru):
+    """Construit la fenêtre interactive comprenant une table pour 
+    les 4 domaines de Meidee."""
+    from Tkinter import Tk
+    
+    from Meidee.meidee_cata import MeideeObjects
+    from Meidee.meidee_correlation import InterfaceCorrelation
+    from Meidee.meidee_modifstruct import InterfaceModifStruct
+    from Meidee.meidee_fludela import InterfaceFludela
+    from Meidee.meidee_turbulent import InterfaceTurbulent
+    
+    # fenetre principale
+    tk = Tk()
+    tk.rowconfigure(0, weight=1)
+    tk.columnconfigure(0,weight=1)
+    
+    tabs, mess = create_tab_mess_widgets(tk, UNITE_RESU)
+    main = tabs.root()
+    
+    # importation des concepts aster de la memoire jeveux    
+    objects = MeideeObjects(macro, mess)
+    tabs.set_objects(objects)
+    
+    iface = InterfaceCorrelation(main, objects, macro, mess)
+    imodifstruct = InterfaceModifStruct(main, objects, macro,
+                                        mess, out_modifstru)
+    fludela = InterfaceFludela(main, objects,
+                               get_fimen_files(UNITE_FIMEN), mess, out_fludela)
+    turbulent = InterfaceTurbulent(main, objects, mess, out_turbulent)
+    
+    tabs.set_tab("Expansion de modeles", iface.main)
+    tabs.set_tab("Modification structurale", imodifstruct.main)
+    tabs.set_tab("MEIDEE mono-modal", fludela )
+    tabs.set_tab("Identification de chargement", turbulent)
+    
+    #tabs.set_current_tab("Modifstruct")
+    tabs.set_current_tab("Identification de chargement")
+
+    tk.protocol("WM_DELETE_WINDOW", FermetureCallback(tk, turbulent).apply)
+    
+    try:
+        tk.mainloop()
+    except :
+        print "MEIDEE : *ERREUR*"
+
+    
index 62caa2307cc05ba3ce747b9619127fcaade65a3a..348cb750fd458e5c5fde7937def47051a637c591 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF observation_ops Macro  DATE 05/06/2007   AUTEUR BODEL C.BODEL 
+#@ MODIF observation_ops Macro  DATE 26/03/2008   AUTEUR BODEL C.BODEL 
 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 
@@ -66,14 +66,14 @@ def observation_ops(self,
 
     # La macro n'est pas encoire capable de traiter les resultats dyna_harmo
     if isinstance(RESULTAT, dyna_harmo):
-        UTMESS('E',UTILITAI7_8)
+        UTMESS('E','UTILITAI7_8')
 
-  
-#***********************************************  
+
+#***********************************************
 #  PHASE DE PROJECTION
-#*********************************************** 
+#***********************************************
 
-    if PROJECTION == 'OUI' :   
+    if PROJECTION == 'OUI' :
         __proj=PROJ_CHAMP(RESULTAT = RESULTAT,
                           MODELE_1 = MODELE_1,
                           MODELE_2 = MODELE_2,
@@ -86,9 +86,7 @@ def observation_ops(self,
         __proj = RESULTAT
 
 
-                             
-    
-#***********************************************  
+#***********************************************
 #  PHASE DE CHANGEMENT DE REPERE
 #***********************************************
 # Le changement de repere se fait dans les routines exterieures crea_normale et crea_repere
@@ -110,24 +108,34 @@ def observation_ops(self,
 
     # cham_mater et cara_elem pour le resultat a projeter
     jdc = CONTEXT.get_current_step().jdc
-    nom_cara_elem = aster.getvectjev( RESULTAT.nom.ljust(19) + '.CARA        ' )
-    nom_cara_elem = nom_cara_elem[0].strip() 
-    cara_elem = jdc.sds_dict[nom_cara_elem]
-    nom_cham_mater = aster.getvectjev( RESULTAT.nom.ljust(19) + '.MATE        ' )
-    nom_cham_mater = nom_cham_mater[0].strip()
-    cham_mater = jdc.sds_dict[nom_cham_mater]
+    nom_cara_elem = aster.getvectjev( RESULTAT.nom.ljust(19) +
+                                      '.CARA        ' )[0].strip()
+    if len(nom_cara_elem) > 0 :
+##        nom_cara_elem = nom_cara_elem[0].strip()
+        cara_elem = jdc.sds_dict[nom_cara_elem]
+    else:
+        cara_elem = None
+    
+    nom_cham_mater = aster.getvectjev( RESULTAT.nom.ljust(19) +
+                                       '.MATE        ' )[0].strip()
+    if len(nom_cham_mater) > 0 :
+##        nom_cham_mater = nom_cham_mater[0].strip()
+        cham_mater = jdc.sds_dict[nom_cham_mater]
+    else:
+        cham_mater = None
 
     # recuperation du maillage associe au modele experimental
-    _maillag = aster.getvectjev( MODELE_2.nom.ljust(8) + '.MODELE    .NOMA        ' )
+    _maillag = aster.getvectjev( MODELE_2.nom.ljust(8) + '.MODELE    .LGRF        ' )
     maillage = _maillag[0].strip()
     jdc = CONTEXT.get_current_step().jdc
     mayaexp = jdc.sds_dict[maillage]
-    
-    _maillag = aster.getvectjev( MODELE_1.nom.ljust(8) + '.MODELE    .NOMA        ' )
+
+    _maillag = aster.getvectjev( MODELE_1.nom.ljust(8) + '.MODELE    .LGRF        ' )
     maillage = _maillag[0].strip()
     jdc = CONTEXT.get_current_step().jdc
     mayanum = jdc.sds_dict[maillage]
-   
+
+
     if MODIF_REPERE != None :
         for modi_rep in MODIF_REPERE :
             type_cham = modi_rep['TYPE_CHAM']
@@ -135,10 +143,10 @@ def observation_ops(self,
             mcfact1 = { 'NOM_CMP'   : nom_cmp,
                         'TYPE_CHAM' : type_cham,
                         'NOM_CHAM'  : NOM_CHAM }
-            
+
             mcfact2 = { }
             modi_rep = modi_rep.val
-            
+
             if modi_rep['REPERE'] == 'NORMALE' :
                 # Cas ou l'utilisateur choisit de creer les reperes locaux
                 # selon la normale. On fait un changement de repere local
@@ -147,11 +155,10 @@ def observation_ops(self,
                     if modi_rep.has_key(option):
                         vect = { option : modi_rep[option] }
                 if len(vect) != 1 :
-                    U2MESS('E',UTILITAI7_9)  
-                chnorm    = crea_normale(self, MODELE_1, MODELE_2,
-                                         cham_mater, cara_elem, NUME_DDL)
-                           
+                    UTMESS('E','UTILITAI7_9')
 
+                chnorm = crea_normale(self, MODELE_1, MODELE_2, NUME_DDL,
+                                                      cham_mater, cara_elem)
                 chnormx = chnorm.EXTR_COMP('DX',[],1)
                 ind_noeuds = chnormx.noeud
                 nom_allno = [mayaexp.NOMNOE.get()[k-1] for k in ind_noeuds]
@@ -161,7 +168,7 @@ def observation_ops(self,
                 for typ in ['NOEUD','GROUP_NO','MAILLE','GROUP_MA','TOUT']:
                     if modi_rep.has_key(typ) :
                         list_no_exp = find_no(mayaexp, {typ : modi_rep[typ]})
-                
+
                 # boucle sur les noeuds pour modifier les reperes.
                 __bid = [None]*(len(list_no_exp) + 1)
                 __bid[0] = __proj
@@ -180,21 +187,21 @@ def observation_ops(self,
                                               CRITERE     = 'RELATIF',
                                               **args)
                     k = k + 1
-                    
+
                 __proj = __bid[-1:][0]
 
-                
+
             else:
                 for typ in ['NOEUD','GROUP_NO','MAILLE','GROUP_MA','TOUT']:
                     if modi_rep.has_key(typ) :
-                        mcfact1.update({typ : modi_rep[typ]})        
+                        mcfact1.update({typ : modi_rep[typ]})
                 if modi_rep['REPERE'] == 'CYLINDRIQUE' :
                     origine = modi_rep['ORIGINE']
                     axe_z   = modi_rep['AXE_Z']
                     mcfact2.update({ 'REPERE'  : 'CYLINDRIQUE',
                                      'ORIGINE' : origine,
                                      'AXE_Z'   : axe_z })
-                    
+
                 elif modi_rep['REPERE'] == 'UTILISATEUR' :
                     angl_naut = modi_rep['ANGL_NAUT']
                     mcfact2.update({ 'REPERE'    : 'UTILISATEUR',
@@ -205,11 +212,11 @@ def observation_ops(self,
                                      CRITERE     = 'RELATIF',
                                      **args)
                 __proj = __bid
-                    
+
 
     else: # pas de modif de repere demandee
         pass
-            
+
 
 #*************************************************
 # Phase de selection des DDL de mesure
@@ -221,10 +228,10 @@ def observation_ops(self,
 
     if FILTRE != None:
         nb_fi = len(FILTRE)
+        liste = []
 
         for ind in num_ordr:
             filtres = []
-            liste = []
             __chamex = CREA_CHAMP(TYPE_CHAM  = 'NOEU_DEPL_R',
                                   OPERATION  = 'EXTR',
                                   RESULTAT   = __proj,
@@ -248,14 +255,17 @@ def observation_ops(self,
                                        ASSE      = filtres
                                        );
 
+
             mcfact2 = {'CHAM_GD'    : __cham[ind-1],
                        'MODELE'     : MODELE_2,
-                       'CHAM_MATER' : cham_mater,
-                       'CARA_ELEM'  : cara_elem,
                        'NOM_CAS'    : str(ind)}
+            if cham_mater is not None:
+                mcfact2['CHAM_MATER'] = cham_mater
+            if cara_elem is not None:
+                mcfact2['CARA_ELEM'] = cara_elem
 
             liste.append(mcfact2)
-            DETRUIRE( CONCEPT= _F( NOM = __chamex ))
+            DETRUIRE( CONCEPT= _F( NOM = __chamex ), INFO=1)
 
 
         self.DeclareOut( 'RESU', self.sd)
@@ -266,13 +276,13 @@ def observation_ops(self,
                               NOM_CHAM  = 'DEPL',
                               AFFE      = liste,
                              );
-            
+
         if isinstance( RESULTAT, mode_meca):
             # Fabrication de la base modale resultat. On doit tricher un peu (encore!!), en
             # faisant un defi_base_modale dans lequel on met zero modes du concept RESULTAT
             # TODO : permettre la creation directement d'un resu de type mode_meca avec
             # CREA_RESU
-            RESBID = CREA_RESU( OPERATION = 'AFFE',
+            _RESBID = CREA_RESU( OPERATION = 'AFFE',
                                 TYPE_RESU = 'MULT_ELAS',
                                 NOM_CHAM  = 'DEPL',
                                 AFFE      = liste,
@@ -281,7 +291,7 @@ def observation_ops(self,
             RESU = DEFI_BASE_MODALE( RITZ = (
                                              _F( MODE_MECA = RESULTAT,
                                                  NMAX_MODE = 0,),
-                                             _F( MULT_ELAS = RESBID),
+                                             _F( MULT_ELAS = _RESBID),
                                             ),
                                      NUME_REF=NUME_DDL
                                    );
@@ -301,22 +311,21 @@ def observation_ops(self,
 # RECUPERATION DES NORMALES
 #**********************************************
 
-def crea_normale(self, modele_1, modele_2, cham_mater, cara_el, nume_ddl):
-
+def crea_normale(self, modele_1, modele_2,
+                 nume_ddl, cham_mater=None, cara_elem=None):
     """Cree un champ de vecteurs normaux sur le maillage experimental, par
        projection du champ de normales cree sur le maillage numerique
     """
-    
     import Numeric
     PROJ_CHAMP  = self.get_cmd('PROJ_CHAMP')
     CREA_CHAMP  = self.get_cmd('CREA_CHAMP')
     CREA_RESU   = self.get_cmd('CREA_RESU')
     DEFI_GROUP  = self.get_cmd('DEFI_GROUP')
     import aster
-    from Accas import _F    
+    from Accas import _F
     # recherche du maillage associe au modele numerique
     nom_modele_num = modele_1.nom
-    _maillag = aster.getvectjev( nom_modele_num.ljust(8) + '.MODELE    .NOMA        ' )
+    _maillag = aster.getvectjev( nom_modele_num.ljust(8) + '.MODELE    .LGRF        ' )
     maillage = _maillag[0].strip()
     jdc = CONTEXT.get_current_step().jdc
     mayanum = jdc.sds_dict[maillage]
@@ -324,16 +333,22 @@ def crea_normale(self, modele_1, modele_2, cham_mater, cara_el, nume_ddl):
 
     DEFI_GROUP( reuse = mayanum,
                 MAILLAGE      = mayanum,
-                CREA_GROUP_MA = _F( NOM  = '&&TOUMAIL',
+                CREA_GROUP_MA = _F( NOM  = '&&TOUMAI',
                                     TOUT = 'OUI' )
                );
-    
+
     __norm1 = CREA_CHAMP( MODELE    = modele_1,
                           OPERATION = 'NORMALE',
                           TYPE_CHAM = 'NOEU_GEOM_R',
-                          GROUP_MA  = '&&TOUMAIL',
+                          GROUP_MA  = '&&TOUMAI',
                          );
-    
+
+    DEFI_GROUP( reuse = mayanum,
+                MAILLAGE      = mayanum,
+                DETR_GROUP_MA = _F( NOM  = '&&TOUMAI' )
+               );
+
+
     __norm2 = CREA_CHAMP( OPERATION = 'ASSE',
                           TYPE_CHAM = 'NOEU_DEPL_R',
                           MODELE    = modele_1,
@@ -344,16 +359,19 @@ def crea_normale(self, modele_1, modele_2, cham_mater, cara_el, nume_ddl):
                                          )
                          );
 
+    affe_dct = {'CHAM_GD' : __norm2,
+                'INST' : 1,
+                'MODELE' : modele_1}
+    if cham_mater is not None:
+        affe_dct["CHAM_MATER"] = cham_mater
+    if cara_elem is not None:
+        affe_dct["CARA_ELEM"] = cara_elem
+    
     __norm3 = CREA_RESU( OPERATION = 'AFFE',
                          TYPE_RESU = 'EVOL_ELAS',
                          NOM_CHAM  = 'DEPL',
-                         AFFE      = _F( CHAM_GD    = __norm2,
-                                         INST       = 1,
-                                         MODELE     = modele_1,
-                                         CHAM_MATER = cham_mater,
-                                         CARA_ELEM  = cara_el
-                                         )
-                         );
+                         AFFE      = _F(**affe_dct)
+                       );
 
 
     __norm4 = PROJ_CHAMP( RESULTAT   = __norm3,
@@ -372,7 +390,7 @@ def crea_normale(self, modele_1, modele_2, cham_mater, cara_el, nume_ddl):
                           TYPE_CHAM  = 'NOEU_DEPL_R',
                           );
 
-        
+
     return __norm5
 
 
@@ -429,12 +447,12 @@ def crea_repere(chnorm, ind_no, vect):
         pass
     elif nom_para == 'CONDITION_Y':
         pass
+
     # 3) Calcul de l'angle nautique associe au repere local
     angl_naut = anglnaut(reploc)
 
     return angl_naut
-        
+
 #*****************************************************************************
 # Aller chercher une liste de noeuds pour un mot cle 'NOEUD', 'GROUP_NO'
 # 'MAILLE' ou 'GROUP_MA'
@@ -457,7 +475,7 @@ def find_no(maya,mcsimp):
         mcsimp['GROUP_NO'] = [mcsimp['GROUP_NO']]
     if mcsimp.has_key('GROUP_MA') and type(mcsimp['GROUP_MA']) != tuple :
         mcsimp['GROUP_MA'] = [mcsimp['GROUP_MA']]
-    
+
     if mcsimp.has_key('NOEUD') :
         list_no = list(mcsimp['NOEUD'])
     elif mcsimp.has_key('GROUP_NO') :
@@ -478,7 +496,8 @@ def find_no(maya,mcsimp):
         for group in mcsimp['GROUP_MA'] :
             list_ma.append(maya.GROUPEMA.get()[group.ljust(8)])
         for mail in list_ma :
-            ind_ma = maya.NOMMAI.get().index(mail.ljust(8))
+            tmp = list(maya.NOMMAI.get())
+            ind_ma = tmp.index(mail.ljust(8))
             for ind_no in maya.CONNEX[ind_ma] :
                 nomnoe = maya.NOMNOE.get()[ind_no]
                 if nomnoe not in list_no :
@@ -498,7 +517,7 @@ def cross_product(a, b):
     For a dimension of 2,
     the z-component of the equivalent three-dimensional cross product is
     returned.
-    
+
     For backward compatibility with Numeric <= 23
     """
     from Numeric import asarray, array
@@ -591,6 +610,6 @@ def anglnaut(P):
 ##                                 -sin(B) = reploc[2][0]
 ##                            cos(B)sin(G) = reploc[2][1]
 ##                            cos(B)cos(G) = reploc[2][2]
-             
-        
-                        
+
+
+
index db6f62abfe43a20bec690b1ba80b530a39c2c4b1..944f4395de7e5150d70e9f9d8dc0304264959cf7 100644 (file)
@@ -1,36 +1,39 @@
-#@ MODIF post_dyna_alea_ops Macro  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF post_dyna_alea_ops Macro  DATE 25/04/2008   AUTEUR ZENTNER I.ZENTNER 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2006  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.        
+# 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.
 # ======================================================================
 
-def post_dyna_alea_ops(self,INTE_SPEC,NUME_VITE_FLUI,TOUT_ORDRE,NUME_ORDRE_I,
-                       NOEUD_I,OPTION,MOMENT,TITRE,INFO,**args):
+import random
+import Numeric
+from sets  import Set
+from types import ListType, TupleType
+from math  import pi,sqrt,log,exp
+
+EnumTypes = (ListType, TupleType)
+
+
+def post_dyna_alea_ops(self,INTE_SPEC, FRAGILITE,TITRE,INFO,**args):
    import aster
-   from types import ListType, TupleType
-   EnumTypes = (ListType, TupleType)
    from Accas               import _F
    from Utilitai.Utmess     import UTMESS
    from Utilitai.t_fonction import t_fonction
    from Utilitai.Table      import Table
-   import Numeric
-   import math
-   from math import pi,sqrt
-   
+
    commande='POST_DYNA_ALEA'
 
    ier = 0
@@ -39,7 +42,7 @@ def post_dyna_alea_ops(self,INTE_SPEC,NUME_VITE_FLUI,TOUT_ORDRE,NUME_ORDRE_I,
 
    # Le concept sortant (de type table_sdaster ou dérivé) est tab
    self.DeclareOut('tabout', self.sd)
-   
+
    # On importe les definitions des commandes a utiliser dans la macro
    # Le nom de la variable doit etre obligatoirement le nom de la commande
    CREA_TABLE    = self.get_cmd('CREA_TABLE')
@@ -47,208 +50,379 @@ def post_dyna_alea_ops(self,INTE_SPEC,NUME_VITE_FLUI,TOUT_ORDRE,NUME_ORDRE_I,
    IMPR_TABLE    = self.get_cmd('IMPR_TABLE')
    RECU_FONCTION = self.get_cmd('RECU_FONCTION')
    IMPR_FONCTION = self.get_cmd('IMPR_FONCTION')
+   DEFI_LIST_REEL = self.get_cmd('DEFI_LIST_REEL')
+   DEFI_FONCTION  = self.get_cmd('DEFI_FONCTION')
+   CALC_FONCTION  = self.get_cmd('CALC_FONCTION')
 
-   intespec=INTE_SPEC.EXTR_TABLE()
 
 #  ------------------------------------------------------------------
-#  Liste des moments spectraux
-#  repérer le type de l'interspectre et son nom
-#                1- concept interspectre
-#                2- table de table d interspectre
-
-   if 'NUME_VITE_FLUI' in intespec.para :
-      if TOUT_ORDRE!=None :
-         jnuor=intespec['NUME_VITE_FLUI'].values()['NUME_VITE_FLUI']
-         jvite=dict([(i,0) for i in jnuor]).keys()
-      else :
-        jvite=[NUME_VITE_FLUI,]
-   else :
-      jvite  =[None]
+#---------algorithme d'optimisation pour le  maximum de vraisemblance
+   def vrais(x):
+      am=x[0]
+      assert am >0.000, 'optimize.py: am negatif'
+      beta=x[1]
+      assert am >0.000, 'optimize.py: beta negatif'
+      res=1.0
+      for k in range(Nbval):
+         ai=liste_indic[k]
+         xi=float(liste_def[k])
+         val=log(ai/am)
+         pfa=normcdf(val/beta)
+         f0=pfa**xi*(1.-pfa)**(1-xi)
+         res=res*f0
+      return -res
+
+   def boot_vrais(x):
+      am=x[0]
+      beta=x[1]
+      res=1.0
+      for k in range(Nbval):
+         ai=liste_indic[list_rand[k]]
+         xi=float(liste_def[list_rand[k]])
+         val=log(ai/am)
+         pfa=normcdf(val/beta)
+         f0=pfa**xi*(1.-pfa)**(1-xi)
+         res=res*f0
+      return -res
 
 #  ------------------------------------------------------------------
-#  Repérer les couples d'indices selectionnés
-#  vérification de l'égalité du nombre d indices en i et j
-
-   if NUME_ORDRE_I!=None :
-     l_ind_i=NUME_ORDRE_I
-     l_ind_j=args['NUME_ORDRE_J']
-     if type(l_ind_i) not in EnumTypes : l_ind_i=[l_ind_i]
-     if type(l_ind_j) not in EnumTypes : l_ind_j=[l_ind_j]
-     if len(l_ind_i)!=len(l_ind_j) :
-        txt  = "il faut autant d indices en I et J"
-        UTMESS('F',commande, txt)
-     listpara=['NUME_ORDRE_I','NUME_ORDRE_J']
-     listtype=['I','I']
-     dicotabl={'NUME_ORDRE_I'  : l_ind_i  ,\
-               'NUME_ORDRE_J'  : l_ind_j  , }
-   elif NOEUD_I!=None :
-     l_ind_i=NOEUD_I
-     l_ind_j=args['NOEUD_J']
-     l_cmp_i=args['NOM_CMP_I']
-     l_cmp_j=args['NOM_CMP_J']
-     if type(l_cmp_i) not in EnumTypes : l_cmp_i=[l_cmp_i]
-     if type(l_cmp_j) not in EnumTypes : l_cmp_j=[l_cmp_j]
-     if type(l_ind_i) not in EnumTypes : l_ind_i=[l_ind_i]
-     if type(l_ind_j) not in EnumTypes : l_ind_j=[l_ind_j]
-     if len(l_ind_i)!=len(l_ind_j) :
-        txt  = "il faut autant d indices en I et J"
-        UTMESS('F',commande, txt)
-     if len(l_cmp_i)!=len(l_cmp_j) :
-        txt  = "il faut autant de composantes en I et J"
-        UTMESS('F',commande, txt)
-     if len(l_ind_i)!=len(l_cmp_i) :
-        txt  = "il faut autant de composantes que de noeuds"
-        UTMESS('F',commande, txt)
-     listpara=['NOEUD_I','NOEUD_J','NOM_CMP_I','NOM_CMP_J']
-     listtype=['K8','K8','K8','K8',]
-     dicotabl={'NOEUD_I'  : l_ind_i,\
-               'NOEUD_J'  : l_ind_j,\
-               'NOM_CMP_I': l_cmp_i,\
-               'NOM_CMP_J': l_cmp_j }
-#  ------------------------------------------------------------------
-#  Cas de tous les indices centraux
-
-   elif OPTION!=None :
-      if 'NUME_ORDRE_I' in intespec.para :
-         inuor=intespec['NUME_ORDRE_I'].values()['NUME_ORDRE_I']
-         imode=dict([(i,0) for i in inuor]).keys()
-         l_ind_i=imode
-         l_ind_j=imode
-         listpara=['NUME_ORDRE_I','NUME_ORDRE_J']
-         listtype=['I','I']
-         dicotabl={'NUME_ORDRE_I'  : l_ind_i  ,\
-                   'NUME_ORDRE_J'  : l_ind_j  , }
-      else :
-         if 'NUME_VITE_FLUI' in intespec.para :
-            intespec=intespec.NUME_VITE_FLUI==jvite[0]
-         l_ind_i=intespec['NOEUD_I'].values()['NOEUD_I']
-         l_ind_j=intespec['NOEUD_J'].values()['NOEUD_J']
-         if len(l_ind_i)!=len(l_ind_j) :
-            txt  = "il faut autant d indices en I et J"
-            UTMESS('F',commande, txt)
-         l_cmp_i=intespec['NOM_CMP_I'].values()['NOM_CMP_I']
-         l_cmp_j=intespec['NOM_CMP_J'].values()['NOM_CMP_J']
-         if (len(l_ind_i)!=len(l_cmp_i) or len(l_ind_j)!=len(l_cmp_j)) :
-            txt  = "il faut autant de composantes que de noeuds"
-            UTMESS('F',commande, txt)
-         l_l=zip(zip(l_ind_i,l_cmp_i),zip(l_ind_j,l_cmp_j))
-         l_ind_i=[]
-         l_ind_j=[]
-         l_cmp_i=[]
-         l_cmp_j=[]
-         for ai,aj in l_l :
-             if ai==aj :
-                l_ind_i.append(ai[0])
-                l_ind_j.append(aj[0])
-                l_cmp_i.append(ai[1])
-                l_cmp_j.append(aj[1])
-         listpara=['NOEUD_I','NOEUD_J','NOM_CMP_I','NOM_CMP_J']
-         listtype=['K8','K8','K8','K8',]
-         dicotabl={'NOEUD_I'  : l_ind_i*len(jvite)  ,\
-                   'NOEUD_J'  : l_ind_j*len(jvite)  ,\
-                   'NOM_CMP_I': l_cmp_i*len(jvite)  ,\
-                   'NOM_CMP_J': l_cmp_j*len(jvite) }
-
-   if jvite[0]!=None :
-      listpara.append('NUME_VITE_FLUI')
-      listtype.append('I')
-      dicotabl['NUME_VITE_FLUI']=[]
+#  OPTION FRAGILITE
+# ------------------------------------------------------------------
+   if FRAGILITE !=None :
+      from Utilitai.optimize   import fmin
+      from Utilitai.stats   import normcdf
+
+      if FRAGILITE['LIST_PARA'] != None :
+         liste_a = FRAGILITE['LIST_PARA'].VALE.get()
+      elif FRAGILITE['VALE'] != None :
+         liste_a =FRAGILITE['VALE']
+
+
+      Nba=len(liste_a)
+      lpfa=[]
+      tab2 = FRAGILITE['TABL_RESU'].EXTR_TABLE()
+      dicta = tab2.values()
+
+      if dicta.has_key('DEFA') :
+         liste_def = dicta['DEFA']
+      else:
+         UTMESS('F','TABLE0_1',valk=('DEFA'))
+      if dicta.has_key('PARA_NOCI') :
+        liste_indic = dicta['PARA_NOCI']
+      else:
+        UTMESS('F','TABLE0_1',valk=('PARA_NOCI'))
+
+      Nbval=len(liste_indic)
+
+      test1 = Numeric.equal(None,liste_indic)
+      test2 = Numeric.equal(None,liste_def)
+      if test1 >=1 or test2 >=1:
+         UTMESS('F','TABLE0_15')
+
+      # estimation paramètres
+      x0 = [FRAGILITE['AM_INI'],FRAGILITE['BETA_INI']]
+      xopt = fmin(vrais,x0)
+
+      texte='PARAMETRES Am, beta ESTIMES : '+str(xopt)+'\n'
+      aster.affiche('MESSAGE',texte)      #print 'parametres Am, beta estimes: ', xopt
+
+      #courbe de fragilité
+      vec_a=Numeric.array(liste_a)
+      vecval=(Numeric.log(vec_a/xopt[0]))/xopt[1]
+      for m in range(Nba):
+         lpfa.append(normcdf(vecval[m]))
+
+      # table sortie
+
+      mcfact=[]
+      if  TITRE !=None :
+           mcfact.append(_F(PARA= 'TITRE' , LISTE_K= TITRE  ))
+
+      mcfact.append(_F(PARA= 'AM' ,LISTE_R=xopt[0] ))
+      mcfact.append(_F(PARA= 'BETA' ,LISTE_R=xopt[1] ))
+      mcfact.append(_F(PARA= 'PARA_NOCI' ,LISTE_R =liste_a  ))
+      mcfact.append(_F(PARA= 'PFA' ,LISTE_R = lpfa ))
+
+   #print 'fractiles a calculer par bootstrap : ', FRAGILITE['FRACTILE']
+
+
+      # si calcul de fractiles (intervalles de confiance) par bootstrap
+
+      if FRAGILITE['FRACTILE']!= None :
+         if INFO==2 :
+            texte='FRACTILES A CALCULER PAR BOOTSTRAP '+ str(FRAGILITE['FRACTILE']) +'\n'
+            aster.affiche('MESSAGE',texte)
+         if FRAGILITE['NB_TIRAGE']!= None :
+            Nboot = FRAGILITE['NB_TIRAGE']
+            if Nboot > Nbval :
+               UTMESS('F','PROBA0_11')     #assert Nboot <= Nbval , 'ERREUR: nombre de tirages demandes trop grand'
+         else:
+            Nboot = Nbval
+
+         list_fonc = []
+         lfract =FRAGILITE['FRACTILE']
+         __F1=[None]*Nbval
+         __ABS=[None]*Nbval
+         __ORDO=[None]*Nbval
+
+         for kb in range(Nboot) : #in range(Nbval)
+
+            lpfa = []
+            list_rand = []
+
+            for kb2 in range(Nbval) :
+               list_rand.append(random.randint(0,Nbval-1))
+
+            xopt = fmin(boot_vrais,x0)
+            if INFO==2 :
+               texte1='BOOTSTRAP TIRAGE '+ str(kb+1)
+               texte2='  PARAMETRES Am, beta ESTIMES : '+str(xopt)+'\n'
+               aster.affiche('MESSAGE',texte1) #print 'bootstrap tirage', kb+1, ', -  parametres Am, beta estimes: ', xopt
+               aster.affiche('MESSAGE',texte2)
+            vecval=(Numeric.log(vec_a/xopt[0]))/xopt[1]
+            for m in range(Nba):
+               lpfa.append(normcdf(vecval[m]))
+
+            __ABS[kb]=DEFI_LIST_REEL( VALE = liste_a  );
+            __ORDO[kb]=DEFI_LIST_REEL( VALE = lpfa );
+
+            __F1[kb]=DEFI_FONCTION(  NOM_PARA='PGAZ',
+                                     NOM_RESU = 'PFA',
+                                     VALE_PARA = __ABS[kb],
+                                     VALE_FONC = __ORDO[kb],);
+            list_fonc.append(__F1[kb],)
+
+
+         #__FRACTILE = [None]*len(lfract)
+         liste = [None]*len(lfract)
+         for kb in range(len(lfract)):
+            __FRACTILE=CALC_FONCTION(FRACTILE=_F(FONCTION=(list_fonc),
+                             FRACT=lfract[kb]), );
+            liste[kb]= __FRACTILE.Ordo()
+            mcfact.append(_F(PARA= str(lfract[kb]) ,LISTE_R =liste[kb]  ))
+
+
+      #   fin FRAGILITE
+      tabout = CREA_TABLE(LISTE=mcfact,TITRE = 'POST_DYNA_ALEA concept : '+self.sd.nom)
+
 #  ------------------------------------------------------------------
-#  Liste des moments spectraux
 
-   l_moments=[0,1,2,3,4]
-   if MOMENT!=None :
-      l_moments=l_moments+list(MOMENT)
-      l_moments=dict([(i,0) for i in l_moments]).keys()
 
 #  ------------------------------------------------------------------
-#  Boucle sur les tables
-
-   l_ind=zip(l_ind_i,l_ind_j)
-   for vite in jvite :
-     if INFO==2 :
-        texte='POUR LA MATRICE INTERSPECTRALE '+INTE_SPEC.nom+'\n'
-        aster.affiche('MESSAGE',texte)
-     for ind in l_ind :
-        mcfact=[]
-        if vite!=None : 
-          dicotabl['NUME_VITE_FLUI'].append(vite)
-          mcfact.append(_F(NOM_PARA='NUME_VITE_FLUI',VALE_I=vite))
-        if 'NOEUD_I' in listpara :
-          mcfact.append(_F(NOM_PARA='NOEUD_I',VALE_K=ind[0]))
-          mcfact.append(_F(NOM_PARA='NOEUD_I',VALE_K=ind[1]))
-          if INFO==2 :
-             aster.affiche('MESSAGE','INDICES :'+ind[0]+' - '+ind[1]+'\n')
-        else :
-          mcfact.append(_F(NOM_PARA='NUME_ORDRE_I',VALE_I=ind[0]))
-          mcfact.append(_F(NOM_PARA='NUME_ORDRE_J',VALE_I=ind[1]))
+#  OPTION INTESPEC
+# ------------------------------------------------------------------
+   if INTE_SPEC !=None :
+
+      TOUT_ORDRE = args['TOUT_ORDRE']
+      NUME_VITE_FLUI=args['NUME_VITE_FLUI']
+
+      NUME_ORDRE_I=args['NUME_ORDRE_I']
+      NOEUD_I=args['NOEUD_I']
+      OPTION=args['OPTION']
+
+      MOMENT=args['MOMENT']
+
+      intespec=INTE_SPEC.EXTR_TABLE()
+      # pour la clarté !
+      NUME_VITE_FLUI_present = 'NUME_VITE_FLUI' in intespec.para
+      NUME_ORDRE_I_present   = 'NUME_ORDRE_I'   in intespec.para
+      NOEUD_I_present        = 'NOEUD_I'        in intespec.para
+
+      # table résultat
+      tabres = Table(titr='POST_DYNA_ALEA concept : %s' % self.sd.nom)
+
+#     ------------------------------------------------------------------
+#     Liste des moments spectraux
+#     repérer le type de l'interspectre et son nom
+#                   1- concept interspectre
+#                   2- table de table d interspectre
+
+      if NUME_VITE_FLUI_present :
+         if TOUT_ORDRE != None :
+            jvite = list(Set(intespec.NUME_VITE_FLUI.not_none_values()))
+            jvite.sort()
+         else :
+            jvite=[NUME_VITE_FLUI,]
+      else :
+         jvite  =[None]
+
+#     ------------------------------------------------------------------
+#     Repérer les couples d'indices selectionnés
+#     vérification de l'égalité du nombre d indices en i et j
+
+      if NUME_ORDRE_I!=None :
+        l_ind_i=NUME_ORDRE_I
+        l_ind_j=args['NUME_ORDRE_J']
+        if type(l_ind_i) not in EnumTypes : l_ind_i=[l_ind_i]
+        if type(l_ind_j) not in EnumTypes : l_ind_j=[l_ind_j]
+        if len(l_ind_i)!=len(l_ind_j) :
+           UTMESS('F','PROBA0_8')
+        # paramètres fixes de la table
+        tabres.add_para(['NUME_ORDRE_I','NUME_ORDRE_J'], 'I')
+      elif NOEUD_I!=None :
+        l_ind_i=NOEUD_I
+        l_ind_j=args['NOEUD_J']
+        l_cmp_i=args['NOM_CMP_I']
+        l_cmp_j=args['NOM_CMP_J']
+        if type(l_cmp_i) not in EnumTypes : l_cmp_i=[l_cmp_i]
+        if type(l_cmp_j) not in EnumTypes : l_cmp_j=[l_cmp_j]
+        if type(l_ind_i) not in EnumTypes : l_ind_i=[l_ind_i]
+        if type(l_ind_j) not in EnumTypes : l_ind_j=[l_ind_j]
+        if len(l_ind_i)!=len(l_ind_j) :
+           UTMESS('F','PROBA0_8')
+        if len(l_cmp_i)!=len(l_cmp_j) :
+           UTMESS('F','PROBA0_9')
+        if len(l_ind_i)!=len(l_cmp_i) :
+           UTMESS('F','PROBA0_10')
+        # paramètres fixes de la table
+        tabres.add_para(['NOEUD_I','NOEUD_J','NOM_CMP_I','NOM_CMP_J'], 'K8')
+
+#     ------------------------------------------------------------------
+#     Cas de tous les indices centraux
+
+      elif OPTION!=None :
+         if NUME_VITE_FLUI_present :
+               intespec = intespec.NUME_VITE_FLUI == jvite[0]
+
+         if NUME_ORDRE_I_present :
+            imode = list(Set(intespec.NUME_ORDRE_I.not_none_values()))
+            l_ind_i=imode
+            l_ind_j=imode
+            # paramètres fixes de la table
+            tabres.add_para(['NUME_ORDRE_I','NUME_ORDRE_J'], 'I')
+         else :
+            l_ind_i = intespec.NOEUD_I.values()
+            l_ind_j = intespec.NOEUD_J.values()
+            if len(l_ind_i) != len(l_ind_j) :
+               UTMESS('F','PROBA0_8')
+            l_cmp_i = intespec.NOM_CMP_I.values()
+            l_cmp_j = intespec.NOM_CMP_J.values()
+            if (len(l_ind_i) != len(l_cmp_i) or len(l_ind_j) != len(l_cmp_j)) :
+               UTMESS('F','PROBA0_10')
+            l_l=zip(zip(l_ind_i,l_cmp_i),zip(l_ind_j,l_cmp_j))
+            l_ind_i=[]
+            l_ind_j=[]
+            l_cmp_i=[]
+            l_cmp_j=[]
+            for ai,aj in l_l :
+                if ai==aj :
+                   l_ind_i.append(ai[0])
+                   l_ind_j.append(aj[0])
+                   l_cmp_i.append(ai[1])
+                   l_cmp_j.append(aj[1])
+            # paramètres fixes de la table
+            tabres.add_para(['NOEUD_I','NOEUD_J','NOM_CMP_I','NOM_CMP_J'], 'K8')
+
+      if jvite[0]!=None :
+         tabres.add_para('NUME_VITE_FLUI', 'I')
+
+
+#     ------------------------------------------------------------------
+#     Liste des moments spectraux
+
+      l_moments=[0,1,2,3,4]
+      if MOMENT!=None :
+         l_moments.extend(list(MOMENT))
+         l_moments=list(Set(l_moments))
+
+#     ------------------------------------------------------------------
+#     Boucle sur les fonctions
+
+      if NOEUD_I_present :
+         l_ind=zip(l_ind_i,l_ind_j, l_cmp_i,l_cmp_j)
+      else :
+         l_ind=zip(l_ind_i, l_ind_j )
+
+
+      # pour la présentation de la table finale, on stocke le nbre de paramètres "initiaux"
+      nbpara0 = len(tabres.para)
+
+      for vite in jvite :
         if INFO==2 :
-             aster.affiche('MESSAGE','INDICES :'+str(ind[0])+' - '\
-                                                +str(ind[1])+'\n')
-        __fon1=RECU_FONCTION(TABLE        = INTE_SPEC,
-                             NOM_PARA_TABL= 'FONCTION_C',
-                             FILTRE       = mcfact, )
-        val  = __fon1.Valeurs()
-        fvalx= Numeric.array(val[0])
-        fvaly= Numeric.array(val[1])
-        frez = fvalx[0]
-
-#--- moments spectraux
-
-        val_mom={}
-        for i_mom in l_moments :
-            trapz     = Numeric.zeros(len(fvaly),Numeric.Float)
-            trapz[0]  = 0.
-            valy      = fvaly*(2*pi*fvalx)**i_mom
-            trapz[1:] = (valy[1:]+valy[:-1])/2*(fvalx[1:]-fvalx[:-1])
-            prim_y    = Numeric.cumsum(trapz)
-            val_mom[i_mom] = prim_y[-1]
-        for i_mom in l_moments :
-          chmo='LAMBDA_'+str(i_mom).zfill(2)
-          if dicotabl.has_key(chmo) : dicotabl[chmo].append(val_mom[i_mom])
-          else :
-                 dicotabl[chmo]=[val_mom[i_mom],]
-                 listpara.append(chmo)
-                 listtype.append('R')
-
-#--- fonctions statistiques
-
-        pstat  = {'ECART'           :0.,\
-                  'NB_PASS_ZERO_P_S':0.,\
-                  'NB_EXTREMA_P_S'  :0.,\
-                  'FACT_IRRE'       :0.,\
-                  'FREQ_APPAR'      :0.,}
-        if (NUME_VITE_FLUI or frez>=0.) :
-#--- cas NUME_VITE_FLUI, seule la partie positive du spectre est utilisée
-#--- Il faut donc doubler lambda  pour calculer le bon écart type
-            pstat['ECART'] = sqrt(val_mom[0]*2.)
-        else :
-            pstat['ECART'] = sqrt(val_mom[0])
-        if abs(val_mom[2])>=1e-20 :
-              pstat['NB_EXTREMA_P_S'] = 1./pi*sqrt(val_mom[4]/val_mom[2])
-        if abs(val_mom[0])>=1e-20 :
-           pstat['NB_PASS_ZERO_P_S'] = 1./pi*sqrt(val_mom[2]/val_mom[0])
-           pstat['FREQ_APPAR'] = 0.5*pstat['NB_PASS_ZERO_P_S']
-           if abs(val_mom[4])>=1e-20 :
-              pstat['FACT_IRRE'] = sqrt( val_mom[2]*val_mom[2]/val_mom[0]/val_mom[4])
-
-        for key in pstat.keys(): 
-          if dicotabl.has_key(key) : dicotabl[key].append(pstat[key])
-          else :
-                 dicotabl[key]=[pstat[key],]
-                 listpara.append(key)
-                 listtype.append('R')
+           texte='POUR LA MATRICE INTERSPECTRALE '+INTE_SPEC.nom+'\n'
+           aster.affiche('MESSAGE',texte)
+        for ind in l_ind :
+           dlign = {}
+           mcfact=[]
+           if vite!=None :
+             dlign['NUME_VITE_FLUI'] = vite
+             mcfact.append(_F(NOM_PARA='NUME_VITE_FLUI',VALE_I=vite))
+           if NOEUD_I_present :
+             i_foncstat = ind[0] == ind[1] and  ind[2] == ind[3]
+             dlign['NOEUD_I'], dlign['NOEUD_J'], dlign['NOM_CMP_I'], dlign['NOM_CMP_J'] = \
+                  ind[0], ind[1], ind[2], ind[3]
+             mcfact.append(_F(NOM_PARA='NOEUD_I',VALE_K=ind[0]))
+             mcfact.append(_F(NOM_PARA='NOEUD_J',VALE_K=ind[1]))
+             mcfact.append(_F(NOM_PARA='NOM_CMP_I',VALE_K=ind[2]))
+             mcfact.append(_F(NOM_PARA='NOM_CMP_J',VALE_K=ind[3]))
+             if INFO==2 :
+                aster.affiche('MESSAGE','INDICES :'+ind[0]+' - '+ind[1])
+                aster.affiche('MESSAGE','INDICES :'+ind[2]+' - '+ind[3]+'\n')                
+           else :
+             i_foncstat = ind[0] == ind[1]
+             dlign['NUME_ORDRE_I'], dlign['NUME_ORDRE_J'] = ind[0], ind[1]
+             mcfact.append(_F(NOM_PARA='NUME_ORDRE_I',VALE_I=ind[0]))
+             mcfact.append(_F(NOM_PARA='NUME_ORDRE_J',VALE_I=ind[1]))
+             if INFO==2 :
+                aster.affiche('MESSAGE','INDICES :'+str(ind[0])+' - '\
+                                                   +str(ind[1])+'\n')
+                                                   
+           __fon1=RECU_FONCTION(TABLE        = INTE_SPEC,
+                                NOM_PARA_TABL= 'FONCTION_C',
+                                FILTRE       = mcfact, )
+
+           val  = __fon1.Valeurs()
+           fvalx= Numeric.array(val[0])
+           fvaly= Numeric.array(val[1])
+           frez = fvalx[0]
+
+           # -- moments spectraux
+
+           val_mom={}
+           for i_mom in l_moments :
+               trapz     = Numeric.zeros(len(fvaly),Numeric.Float)
+               trapz[0]  = 0.
+               valy      = fvaly*(2*pi*fvalx)**i_mom
+               trapz[1:] = (valy[1:]+valy[:-1])/2*(fvalx[1:]-fvalx[:-1])
+               prim_y    = Numeric.cumsum(trapz)
+               val_mom[i_mom] = prim_y[-1]
+           for i_mom in l_moments :
+             chmo='LAMBDA_'+str(i_mom).zfill(2)
+             dlign[chmo] = val_mom[i_mom]
+
+        #--- si auto-spectre:
+           if i_foncstat:
+              # test si le spectre est bien à valeurs positives                    
+              if min(fvaly) < 0.0 :
+                 aster.affiche('MESSAGE', str(ind)+'\n')
+                 UTMESS('F','MODELISA9_95')
+              # -- fonctions statistiques              
+              if NUME_VITE_FLUI or frez >= 0. :
+                  # -- cas NUME_VITE_FLUI, seule la partie positive du spectre est utilisée
+                  # -- Il faut donc doubler lambda  pour calculer le bon écart type
+                  dlign['ECART'] = sqrt(val_mom[0]*2.)
+              else :
+                  dlign['ECART'] = sqrt(val_mom[0])
+              if abs(val_mom[2])>=1e-20 :
+                    dlign['NB_EXTREMA_P_S'] = 1./pi*sqrt(val_mom[4]/val_mom[2])
+              if abs(val_mom[0])>=1e-20 :
+                 dlign['NB_PASS_ZERO_P_S'] = 1./pi*sqrt(val_mom[2]/val_mom[0])
+                 dlign['FREQ_APPAR'] = 0.5*dlign['NB_PASS_ZERO_P_S']
+                 if abs(val_mom[4])>=1e-20 :
+                    dlign['FACT_IRRE'] = sqrt( val_mom[2]*val_mom[2]/val_mom[0]/val_mom[4])
+
+           # ajoute la ligne à la Table
+           tabres.append(dlign)
 
 #--- construction de la table produite
 
-   mcfact=[]
-   for i in range(len(listpara)) :
-      if listtype[i]=='R':
-         mcfact.append(_F(PARA=listpara[i] ,LISTE_R=dicotabl[listpara[i]] ))
-      if listtype[i]=='K8':
-         mcfact.append(_F(PARA=listpara[i] ,LISTE_K=dicotabl[listpara[i]] ))
-      if listtype[i]=='I':
-         mcfact.append(_F(PARA=listpara[i] ,LISTE_I=dicotabl[listpara[i]] ))
-   tabout = CREA_TABLE(LISTE=mcfact,TITRE = 'POST_DYNA_ALEA concept : '+self.sd.nom)
+      # tri des paramètres
+      ord_para = tabres.para[nbpara0:]
+      ord_para.sort()
+      ord_para = tabres.para[:nbpara0] + ord_para
+      dprod = tabres[ord_para].dict_CREA_TABLE()
+
+      tabout = CREA_TABLE(**dprod)
 
    return ier
+
index c72135c1bf817a98af792424143b9df4b2f15510..a66baa1fb5372a697274a6a6e57f629484669fa9 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF post_gp_ops Macro  DATE 31/10/2006   AUTEUR REZETTE C.REZETTE 
+#@ MODIF post_gp_ops Macro  DATE 15/04/2008   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -6,7 +6,7 @@
 # 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.                                                  
+# (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            
@@ -27,12 +27,14 @@ def post_gp_ops(self, **args):
    """
       Corps de la macro POST_GP
    """
+   import pdb
    macro = 'POST_GP'
    ier=0
    from Accas import _F
    from Utilitai.Utmess     import UTMESS
-   from Utilitai.Table      import Table, merge
+   from Utilitai.Table      import Table, merge, Colonne
    from Utilitai.t_fonction import t_fonction
+   from Cata.cata import evol_noli
    import aster
    
    # ----- On importe les definitions des commandes a utiliser dans la macro
@@ -41,6 +43,13 @@ def post_gp_ops(self, **args):
    POST_ELEM     = self.get_cmd('POST_ELEM')
    POST_RELEVE_T = self.get_cmd('POST_RELEVE_T')
    CREA_TABLE    = self.get_cmd('CREA_TABLE')
+   DEFI_LIST_ENTI= self.get_cmd('DEFI_LIST_ENTI')
+   CALC_ELEM     = self.get_cmd('CALC_ELEM')
+   RECU_FONCTION = self.get_cmd('RECU_FONCTION')
+   DETRUIRE      = self.get_cmd('DETRUIRE')
+   DEFI_GROUP    = self.get_cmd('DEFI_GROUP')
+   IMPR_CO       = self.get_cmd('IMPR_CO')
+   FIN           = self.get_cmd('FIN')
    
    # ----- Comptage, commandes + déclaration concept sortant
    self.set_icmd(1)
@@ -51,7 +60,7 @@ def post_gp_ops(self, **args):
    # 0. ----- Type de calcul
    identification = self['IDENTIFICATION'] != None
    if identification:
-      # 0.1. --- identification : on boule sur les valeurs de TEMP.
+      # 0.1. --- identification : on boucle sur les valeurs de TEMP.
       #          Pour chaque couple (T, Kjc(T)), on évalue les Ki, Kmoy et
       #          les valeurs de Gpmax, DeltaLmax, inst.max correspondantes.
       mccalc = self['IDENTIFICATION']
@@ -74,100 +83,434 @@ def post_gp_ops(self, **args):
    if not type(l_crit) in EnumTypes:
       l_crit = [l_crit,]
    
+
+   # Maillage associe au modele
+   __MAIL = aster.getvectjev( self['MODELE'].nom.ljust(8) + '.MODELE    .LGRF        ' )
+   nom_maillage = __MAIL[0].strip()
+   
+   jdc = CONTEXT.get_current_step().jdc
+   maya = jdc.sds_dict[nom_maillage]
+   
    # 1. ----- calcul de G-theta
-   nbcour = len(self['THETA_2D'])
-   l_tab = []
-   for occ in self['THETA_2D']:
-      dMC = occ.cree_dict_valeurs(occ.mc_liste)
-      
-      __theta = CALC_THETA(MODELE=self['MODELE'],
-                           DIRECTION=self['DIRECTION'],
-                           THETA_2D=_F(GROUP_NO=dMC['GROUP_NO'],
-                                       MODULE=1.0,
-                                       R_INF=dMC['R_INF'],
-                                       R_SUP=dMC['R_SUP']),)
-
-      __gtheta = CALC_G(THETA=_F(THETA=__theta),
-                        EXCIT=self['EXCIT'].List_F(),
-                        RESULTAT=self['RESULTAT'],
-                        TOUT_ORDRE='OUI',
-                        SYME_CHAR=self['SYME_CHAR'],
-                        COMP_ELAS=self['COMP_ELAS'].List_F(),)
-
-      tab = __gtheta.EXTR_TABLE()
-      
-      # une Table par couronne
-      l_tab.append(tab)
+   
+   # Cas 2D
+   if self['THETA_2D'] is not None:
+      is_2D = True
+   else:
+      is_2D = False
+   
+   if is_2D:
+      nbcour = len(self['THETA_2D'])
+      nb_tranches = 1
+      ep_z = 1
+      l_tab = []
+      for occ in self['THETA_2D']:
+         dMC = occ.cree_dict_valeurs(occ.mc_liste)
+         
+         __theta = CALC_THETA(MODELE=self['MODELE'],
+                              DIRECTION=self['DIRECTION'],
+                              THETA_2D=_F(GROUP_NO=dMC['GROUP_NO'],
+                                          MODULE=1.0,
+                                          R_INF=dMC['R_INF'],
+                                          R_SUP=dMC['R_SUP']),)
+   
+         __gtheta = CALC_G(THETA=_F(THETA=__theta),
+                           EXCIT=self['EXCIT'].List_F(),
+                           RESULTAT=self['RESULTAT'],
+                           TOUT_ORDRE='OUI',
+                           SYME_CHAR=self['SYME_CHAR'],
+                           COMP_ELAS=self['COMP_ELAS'].List_F(),)
+   
+         tab = __gtheta.EXTR_TABLE()
+         
+         # une Table par couronne
+         l_tab.append(tab)
+         
+   else:
+      #Cas 3D
+      nbcour = len(self['THETA_3D'])
+      nb_tranches = self['NB_TRANCHES']
+      l_tab = []
+      l_noeuds_fissure, pas = getFondFissInfo(self['FOND_FISS'])
+      nb_noeuds_fissure = len(l_noeuds_fissure)
+      
+      for occ in self['THETA_3D']:
+         dMC = occ.cree_dict_valeurs(occ.mc_liste)
+         
+         # on met les mots-clés facultatifs dans des dictionnaires
+         dpar_theta = {}
+         if self['DIRECTION'] is not None:
+            dpar_theta['DIRECTION'] = self['DIRECTION']
+         
+         __gtheta = CALC_G(
+                           THETA=_F(R_INF=dMC['R_INF'],
+                                    R_SUP=dMC['R_SUP'],
+                                    MODULE=1.0,
+                                    FOND_FISS=self['FOND_FISS'],
+                                    **dpar_theta),
+                           EXCIT=self['EXCIT'].List_F(),
+                           RESULTAT=self['RESULTAT'],
+                           TOUT_ORDRE='OUI',
+                           SYME_CHAR=self['SYME_CHAR'],
+                           COMP_ELAS=self['COMP_ELAS'].List_F(),
+                           LISSAGE=self['LISSAGE'].List_F()
+                           )
+
+         tab = __gtheta.EXTR_TABLE()
+         
+         # une Table par couronne
+         l_tab.append(tab)
+
+   
 
    # 2. ----- Calcul de l'energie élastique en exploitant les groupes de
    #          mailles fournis par la procedure de maillage
-   l_copo = [grma.strip() for grma in self['GROUP_MA']]
-   nbcop = len(l_copo)
-   l_charg = [charg['CHARGE'] for charg in self['EXCIT']]
-   
-   __ener = POST_ELEM(MODELE=self['MODELE'],
-                        RESULTAT=self['RESULTAT'],
-                        CHARGE=l_charg,
-                        TOUT_ORDRE='OUI',
-                        ENER_ELAS=_F(GROUP_MA=l_copo),
-                        TITRE='Energie élastique',)
-
-   t_enel = __ener.EXTR_TABLE()
-   
-   # 2.1. ----- Indice de chaque copeau et deltaL
-   d_icop = dict(zip(l_copo, range(1, nbcop + 1)))
-   
-   l_lieu = [grma.strip() for grma in t_enel.LIEU.values()]
-   l_icop = [d_icop[grma] for grma in l_lieu]
-   t_enel['ICOP'] = l_icop
-   t_enel.fromfunction('DELTAL', fDL, 'ICOP', { 'pascop' : self['PAS_ENTAILLE'] })
-   
-   # 2.2. ----- Calcul de Gp fonction de Ener.Totale et de deltaL
-   t_enel.fromfunction('GP', fGp_Etot, ('TOTALE', 'ICOP'),
-         { 'pascop' : self['PAS_ENTAILLE'],
-           'syme'   : self['SYME_CHAR'] != 'SANS',
-           'R'      : self['RAYON_AXIS'] })
-   
-   # 2.3. ----- Tableau de Gp = f(icop) pour chaque instant
-   if info >= 2:
-      tGp_t_icop = t_enel['INST', 'DELTAL', 'GP']
-      tGp_t_icop.titr = "Gp à chaque instant en fonction de la distance au " \
-                        "fond d'entaille"
-      tGp_t_icop.ImprTabCroise()
-   
-   # 2.4. ----- Table Gpmax
-   ttmp = t_enel['NUME_ORDRE', 'INST', 'ICOP', 'DELTAL', 'GP']
-   l_numord = list(Set(ttmp.NUME_ORDRE.values()))
-   l_numord.sort()
-   for j in l_numord:
-      tj = ttmp.NUME_ORDRE == j
-      if self['CRIT_MAXI_GP'] == 'ABSOLU':
-         t = tj.GP.MAXI()
+
+   l_copo_tot = [grma.strip() for grma in self['GROUP_MA']]
+   nbcop_tot = len(l_copo_tot)
+   nbcop = nbcop_tot/nb_tranches
+   
+   if self['LIST_EP_COPEAUX'] is not None:
+      l_ep_copeaux_tot = self['LIST_EP_COPEAUX']
+   
+   l_t_enel = []
+   
+   if self['TRAC_COMP']=='OUI':
+      # prise en compte de la traction-compression dans le calcul de l'energie
+      resu2=CALC_ELEM(OPTION=('EQUI_ELNO_SIGM'),
+                     RESULTAT=self['RESULTAT'],
+                     )
+                     
+      # indices des mailles du dernier group_ma
+      # (pour avoir le nombre de mailles par tranche)
+      l_mailles_last_gm = maya.GROUPEMA.get()[l_copo_tot[-1].ljust(8)]
+      
+      # initialisation des concepts reutilises dans la boucle
+      # on suppose que chaque tranche a le meme nombre de mailles
+      
+      kk = 0
+      
+      E_el = [None]*len(l_mailles_last_gm)*nb_tranches
+
+      T_el = [None]*len(l_mailles_last_gm)*nb_tranches
+      
+      # on recupere les sd en dehors de la boucle
+      maya_GROUPEMA = maya.GROUPEMA.get()
+      maya_NOMMAI = maya.NOMMAI.get()
+      maya_CONNEX = maya.CONNEX.get()
+      maya_NOMNOE = maya.NOMNOE.get()
+
+   # liste des tables tb_Gpmax repartie aux noeuds
+   l_tb_Gpmax_noeuds = []
+      
+   for i in range(0,nb_tranches):
+      l_copo = l_copo_tot[i*nbcop:(i+1)*nbcop]   
+      l_charg = [charg['CHARGE'] for charg in self['EXCIT']]
+      
+      if info >= 2 and not is_2D:
+         print "<I> Calcul de la tranche %i"%(i+1)
+      
+      if self['TRAC_COMP']=='OUI':
+         
+         # l_copo est une liste commulative de mailles
+         # il faut lancer POST_ELEM sur chaque maille de chaque copeau
+         # puis regarder la trace de SIEF_ELGA sur ce copeau
+         
+         # on fera attention a ne pas lancer POST_ELEM sur une maille qui 
+         # a deja ete calculee en stockant son resultat pour la maille en question
+         d_groupma={}
+         d_nomma={}
+         
+         # indices des mailles des copeaux
+         for group_ma in l_copo:
+            d_groupma[group_ma] = maya_GROUPEMA[group_ma.ljust(8)]
+         
+         # le dernier copeau contient tous les elements
+         # on calcule l energie de chaque element de ce copeau
+         last_copo = l_copo[-1]
+         
+         d_ener = {}
+         
+         d_nomma = {}
+         
+         for k, id_elem in enumerate(d_groupma[last_copo]):
+            
+            
+            # les id des elements dans Aster commencent a 1
+            # la liste python commence a 0
+            elem = maya_NOMMAI[id_elem-1]
+            d_nomma[id_elem]=elem
+            
+            E_el[kk] = POST_ELEM(MODELE=self['MODELE'],
+                                 RESULTAT=self['RESULTAT'],
+                                 CHARGE=l_charg,
+                                 TOUT_ORDRE='OUI',
+                                 ENER_ELAS=_F(MAILLE=elem),
+                                 TITRE='Energie élastique',)
+            
+            T_el[kk] = E_el[kk].EXTR_TABLE()
+            
+            l_enel = T_el[kk].TOTALE.values()
+            
+            # signe de la trace <=> signe de la composante VMIS_SG du tenseur EQUI_ELNO_SIGM,
+            # mais E_enel est par element => on fait une moyenne sur les noeuds de l'element
+            
+            list_no = []
+            for ind_no in maya_CONNEX[id_elem] :
+               nomnoe = maya_NOMNOE[ind_no-1]
+               if nomnoe not in list_no :
+                  list_no.append(nomnoe)
+            
+            # print "liste des noeuds de la maille ", id_elem, ": ", list_no
+            
+            l_inst = T_el[kk].INST.values()
+            nb_inst = len(l_inst)
+            
+            T_noeuds = Table()
+            T_noeuds['INST']=l_inst
+               
+            # pour chaque noeud de l'element on recupere sa trace
+            for noeud in list_no:
+               
+               VM=RECU_FONCTION(RESULTAT=resu2,
+                                    TOUT_INST='OUI',
+                                    NOM_CHAM='EQUI_ELNO_SIGM',
+                                    NOM_CMP='VMIS_SG',
+                                    MAILLE=elem,
+                                    NOEUD=noeud);
+   
+               T_noeuds[noeud]=VM.Ordo()
+               
+               DETRUIRE(CONCEPT=(_F(NOM=VM)))
+               
+            T_noeuds.fromfunction('VM_MAIL', moyenne, list_no)
+            
+            l_VM_MAIL = T_noeuds.VM_MAIL.values()
+            
+            for j, vm in enumerate(l_VM_MAIL):
+               if vm < 0:
+                  l_enel[j]=-l_enel[j]
+                  
+            del T_el[kk]['TOTALE']
+            T_el[kk][elem]=l_enel
+   
+            if k==0:
+            
+               # Table de l'energie elastique sur le GROUP_MA
+               T_el_gm = Table()
+               T_el_gm['NUME_ORDRE'] = T_el[kk].NUME_ORDRE.values()
+               T_el_gm['INST'] = T_el[kk].INST.values()
+               T_el_gm['LIEU'] = [last_copo]*nb_inst
+               T_el_gm['ENTITE'] = ['GROUP_MA']*nb_inst
+               
+            T_el_gm[elem]=l_enel
+            
+            kk+=1
+         
+         # sommation sur les mailles du group_ma:
+         l_nomma = d_nomma.values()
+         T_el_gm.fromfunction('TOTALE', mysum, l_nomma)
+         
+         # Table totale
+         t_enel=Table(titr="Energie élastique")
+         t_enel['NUME_ORDRE']=T_el_gm.NUME_ORDRE.values()
+         t_enel['INST']=T_el_gm.INST.values()
+         t_enel['LIEU']=T_el_gm.LIEU.values()
+         t_enel['ENTITE']=T_el_gm.ENTITE.values()
+         t_enel['TOTALE']=T_el_gm.TOTALE.values()
+   
+         # t_enel ne contient jusqu'ici que l'energie elastique du dernier copeau
+         
+         # calcul de l'energie elastique pour les autres copeaux
+         T_el_sub = T_el_gm.copy()
+         
+         for k in range(len(l_copo)-2,-1,-1):
+            group_ma = l_copo[k]
+            T_el_sub = T_el_sub.copy()
+            del T_el_sub['LIEU']
+            del T_el_sub['TOTALE']
+            T_el_sub['LIEU']=[group_ma]*nb_inst
+            l_id_elem = d_groupma[group_ma]
+            l_nom_elem = []
+            
+            for id_elem, nom_elem in d_nomma.items():
+               if not id_elem in l_id_elem:
+                  # colonne a supprimer
+                  del T_el_sub[nom_elem]
+                  del d_nomma[id_elem]
+               else:
+                  l_nom_elem.append(nom_elem)
+            
+            T_el_sub.fromfunction('TOTALE', sum_and_check, l_nom_elem)
+            
+            # Table de l'energie elastique sur le GROUP_MA               
+            T_el_gm_k = Table()
+            T_el_gm_k['NUME_ORDRE'] =T_el_sub.NUME_ORDRE.values()
+            T_el_gm_k['INST'] = T_el_sub.INST.values()
+            T_el_gm_k['LIEU'] = [group_ma]*nb_inst
+            T_el_gm_k['ENTITE'] = ['GROUP_MA']*nb_inst
+            T_el_gm_k['TOTALE'] = T_el_sub.TOTALE.values()
+            
+            # contribution du group_ma a la table totale:
+            t_enel = merge(t_enel, T_el_gm_k)
+   
+         t_enel.sort('NUME_ORDRE')
+      
+      else:
+         # si self['TRAC_COMP']!='OUI'
+         # calcul classique de l'energie elastique
+      
+         __ener = POST_ELEM(MODELE=self['MODELE'],
+                                 RESULTAT=self['RESULTAT'],
+                                 CHARGE=l_charg,
+                                 TOUT_ORDRE='OUI',
+                                 ENER_ELAS=_F(GROUP_MA=l_copo),
+                                 TITRE='Energie élastique',)
+      
+         t_enel = __ener.EXTR_TABLE()
+   
+      # 2.1. ----- Indice de chaque copeau et deltaL
+      d_icop = dict(zip(l_copo, range(1, nbcop + 1)))
+      
+      l_lieu = [grma.strip() for grma in t_enel.LIEU.values()]
+      
+      l_icop = [d_icop[grma] for grma in l_lieu]
+      
+      t_enel['ICOP'] = l_icop
+   
+      l_numord = list(Set(t_enel.NUME_ORDRE.values()))
+      l_numord.sort()
+
+      if self['PAS_ENTAILLE'] is not None:
+         t_enel.fromfunction('DELTAL', fDL, 'ICOP', { 'pascop' : self['PAS_ENTAILLE'] })
+      else:
+         l_ep_copeaux_tranche = l_ep_copeaux_tot[i*nbcop:(i+1)*nbcop]
+         t_enel['DELTAL'] = l_ep_copeaux_tranche*len(l_numord)
+
+      # 2.2. ----- Calcul de Gp fonction de Ener.Totale et de deltaL
+      if is_2D:
+         t_enel.fromfunction('GP', fGp_Etot, ('TOTALE', 'DELTAL'),
+            {'syme'   : self['SYME_CHAR'] != 'SANS',
+             'R'      : self['RAYON_AXIS'],})
       else:
-         t = MaxRelatif(tj, 'GP')
-      if j == 1:
-         tb_Gpmax = t
+         ep_tranche = largeur_tranche(nom_maillage, l_noeuds_fissure, pas, i)
+         #print "ep_tranche %i: "%i, ep_tranche
+         t_enel.fromfunction('GP', fGp_Etot, ('TOTALE', 'DELTAL'),
+               {'syme'   : self['SYME_CHAR'] != 'SANS',
+                'R'      : ep_tranche })
+      
+      #if info >= 2:
+      #   print "Table de l'énergie élastique: ", t_enel
+      
+      l_t_enel.append(t_enel)
+      # 2.3. ----- Tableau de Gp = f(icop) pour chaque instant
+      if info >= 2:
+         tGp_t_icop = t_enel['INST', 'DELTAL', 'GP']
+         tGp_t_icop.titr = "Gp à chaque instant en fonction de la distance au " \
+                           "fond d'entaille"
+         tGp_t_icop.ImprTabCroise()
+   
+      # 2.4. ----- Table Gpmax
+      ttmp = t_enel['NUME_ORDRE', 'INST', 'ICOP', 'DELTAL', 'GP']
+
+      for j in l_numord:
+         tj = ttmp.NUME_ORDRE == j
+         
+         ## pour tester le comportement de Gpmax quand GP est identiquement nul
+         #del tj['GP']
+         #tj['GP']=[0]*len(tj.GP.values())
+         
+         if self['CRIT_MAXI_GP'] == 'ABSOLU':
+            t = tj.GP.MAXI()
+         else:
+            t = MaxRelatif(tj, 'GP')
+         
+         # cas GP identiquement nul: plusieurs max de GP
+         # on prend le DELTAL minimum
+         if len(t.GP.values())>1:
+            t = t.DELTAL.MINI()
+         
+         if j == 1:
+            tb_Gpmax_i = t
+         else:
+            tb_Gpmax_i = tb_Gpmax_i | t
+      
+      
+      tb_Gpmax_i.Renomme('GP', 'GPMAX')
+      tb_Gpmax_i.Renomme('ICOP', 'ICOPMAX')
+      tb_Gpmax_i.Renomme('DELTAL', 'DELTALMAX')
+      tb_Gpmax_i.titr = 'Gpmax à chaque instant'
+      
+      # On transfert Gpmax au noeud sommet à gauche et au milieu (si cas quadratique)
+      # sauf pour la dernière tranche où on transfère également au noeud sommet de droite.
+      # Tout cela pour pouvoir avoir une table complète avec les G et les Gpmax.
+      if not is_2D:
+         tb_Gpmax_i['NUME_TRANCHE']=[i+1]*len(tb_Gpmax_i['GPMAX'])
+         if i==0:
+            l_inst = tb_Gpmax_i.INST.values()
+            nb_inst = len(l_inst)
+         if pas==1:
+            tb_Gpmax_i_noeuds = tb_Gpmax_i.copy()
+            tb_Gpmax_i_noeuds['NOEUD']=[l_noeuds_fissure[i]]*nb_inst
+            l_tb_Gpmax_noeuds.append(tb_Gpmax_i_noeuds)
+         else:
+            tb_Gpmax_i_noeuds_1 = tb_Gpmax_i.copy()
+            tb_Gpmax_i_noeuds_1['NOEUD'] = [l_noeuds_fissure[pas*i]]*nb_inst
+            l_tb_Gpmax_noeuds.append(tb_Gpmax_i_noeuds_1)
+            tb_Gpmax_i_noeuds_2 = tb_Gpmax_i.copy()
+            tb_Gpmax_i_noeuds_2['NOEUD'] = [l_noeuds_fissure[pas*i+1]]*nb_inst
+            l_tb_Gpmax_noeuds.append(tb_Gpmax_i_noeuds_2)
+         if i==nb_tranches-1:
+            tb_Gpmax_i_noeuds_3 = tb_Gpmax_i.copy()
+            tb_Gpmax_i_noeuds_3['NOEUD'] = [l_noeuds_fissure[-1]]*nb_inst
+            l_tb_Gpmax_noeuds.append(tb_Gpmax_i_noeuds_3)
+            
+
+      
+      if i == 0:
+         tb_Gpmax = tb_Gpmax_i
       else:
-         tb_Gpmax = tb_Gpmax | t
-   tb_Gpmax.Renomme('GP', 'GPMAX')
-   tb_Gpmax.Renomme('ICOP', 'ICOPMAX')
-   tb_Gpmax.Renomme('DELTAL', 'DELTALMAX')
-   tb_Gpmax.titr = 'Gpmax à chaque instant'
-   if info >= 2:
-      print tb_Gpmax
+         tb_Gpmax = merge(tb_Gpmax, tb_Gpmax_i)
+   
+   # FIN BOUCLE SUR LES TRANCHES
+   
+   if not is_2D:
+      tb_Gpmax_noeuds = Table(para=tb_Gpmax.para+['NOEUD'])
+      for j, tb in enumerate(l_tb_Gpmax_noeuds):
+         if j==0:
+            tb_Gpmax_noeuds = tb
+         else:
+            tb_Gpmax_noeuds = merge(tb_Gpmax_noeuds, tb)
+   
    
    # 2.5. ----- extraction de la température en fond d'entaille
+   #voir le cas 3D => THETA_3D, mais qu'en est-il des tranches?
    if self['RESU_THER']:
-      grno_fond = self['THETA_2D'][0]['GROUP_NO']
+      #sur un seul noeud ou sur tous les noeuds du fond d'entaille?
+      
+      if is_2D:
+         grno_fond = self['THETA_2D'][0]['GROUP_NO']
+      else:
+         grma_fond = self['THETA_3D'][0]['GROUP_MA']
+         grno_fond = "GRNOFOND"
+         DEFI_GROUP(reuse =maya,
+                    MAILLAGE=maya,
+                    CREA_GROUP_NO=_F(GROUP_MA=grma_fond,
+                                     NOM=grno_fond,),);
+      
+      l_ordres = DEFI_LIST_ENTI(VALE=l_numord)
       __relev = POST_RELEVE_T(ACTION=_F(RESULTAT=self['RESU_THER'],
                                         OPERATION='EXTRACTION',
                                         INTITULE='Temperature',
                                         NOM_CHAM='TEMP',
-                                        TOUT_ORDRE='OUI',
+                                        LIST_ORDRE=l_ordres,
                                         NOM_CMP='TEMP',
                                         GROUP_NO=grno_fond,),)
-      t_relev = __relev.EXTR_TABLE()['NUME_ORDRE', 'TEMP']
-   
+
+      t_relev = __relev.EXTR_TABLE()['NUME_ORDRE', 'NOEUD', 'TEMP']
    
    # 3. ----- boucle sur les mots-clés facteurs
    #          opérations dépendant de la température
@@ -178,7 +521,7 @@ def post_gp_ops(self, **args):
       # 3.0. ----- Temperature fonction du temps : si on n'a pas de RESU_THER,
       #            on prend la température d'identification.
       if not self['RESU_THER']:
-         l_rows = [{'NUME_ORDRE' : i, 'TEMP' : TEMP} for i in l_numord]
+         l_rows = [{'NUME_ORDRE' : j, 'TEMP' : TEMP} for j in l_numord]
          t_relev = Table(rows=l_rows, para=('NUME_ORDRE', 'TEMP'), typ=('R', 'R'))
          flag_mat = True
       
@@ -188,44 +531,73 @@ def post_gp_ops(self, **args):
                { 'para' : 'E', 'MATER' : MATER })
          t_relev.fromfunction('NU', CallRCVALE, 'TEMP',
                { 'para' : 'NU', 'MATER' : MATER })
-         #tb_Gpmax = merge(tb_Gpmax, t_relev, 'NUME_ORDRE')
          flag_mat = False
       
       # 3.2. ----- paramètres
       dict_constantes = {
          'YOUNG' : CallRCVALE(TEMP, 'E', MATER),
          'NU'    : CallRCVALE(TEMP, 'NU', MATER),
-         'R'     : self['RAYON_AXIS'],
       }
+      if is_2D:
+         dict_constantes['R'] = self['RAYON_AXIS']
+      else:
+         dict_constantes['R'] = ep_tranche
+         
       
       # 3.3. ----- calcul de Kj(G)
       l_tabi = []
       for k, tab in enumerate(l_tab):
-         # fusion avec TEMP, E et nu.
-         tab = merge(tab, t_relev, 'NUME_ORDRE')
+         #tab: table de la couronne k
          
          # calcul de Kj(G) = K_i
          new_para = 'K_%d' % (k + 1)
-         tab.fromfunction(new_para, fKj, ('G', 'YOUNG', 'NU'),
-                          { 'R' : self['RAYON_AXIS'] })
-         
-         # renomme G en G_i
-         tab.Renomme('G', 'G_%d' % (k + 1))
+         if is_2D:
+            # fusion avec TEMP, E et nu
+            tab = merge(tab, t_relev, 'NUME_ORDRE')
+            tab.fromfunction(new_para, fKj, ('G', 'YOUNG', 'NU'),
+                           { 'R' : self['RAYON_AXIS'] })
+            # renomme G en G_i
+            tab.Renomme('G', 'G_%d' % (k + 1))
+         else:
+            if self['RESU_THER']:
+               tab=merge(tab, t_relev, ['NUME_ORDRE', 'NOEUD'])
+            else:
+               tab=mergeLineInTable(tab, t_relev, nb_noeuds_fissure)
+
+            # en 3D, le paramètre R n'intervient pas
+            tab.fromfunction(new_para, fKj, ('G_LOCAL', 'YOUNG', 'NU'))
+            tab.Renomme('G_LOCAL', 'G_%d' % (k + 1))
+
          l_tabi.append(tab)
       
       # 3.4 ----- Table des Gi, Ki sur les differentes couronnes + Kmoyen
-      tabK_G = l_tabi[0]['NUME_ORDRE']
-      for tab in l_tabi:
-         tabK_G = merge(tabK_G, tab, 'NUME_ORDRE')
+      if is_2D:
+         tabK_G = l_tabi[0]['NUME_ORDRE']
+         for tab in l_tabi:
+            tabK_G = merge(tabK_G, tab, 'NUME_ORDRE')
+      else:
+         tabK_G=l_tabi[0]
+         for i in range(1,len(l_tabi)):
+            tabK_G = merge(tabK_G, l_tabi[i], ['NUME_ORDRE', 'NOEUD'])
       tabK_G.titr = 'G et K sur les differentes couronnes + moyennes'
-      tabK_G.fromfunction('GMOY', moyenne, ['G_%d' % (k + 1) for k in range(nbcour)])
+      tabK_G.fromfunction('GMOY', moyenne_positive, ['G_%d' % (k + 1) for k in range(nbcour)])
       tabK_G.fromfunction('KMOY', moyenne, ['K_%d' % (k + 1) for k in range(nbcour)])
       
       # 3.5. ----- Contribution à la table globale
-      tabres = merge(tabK_G, tb_Gpmax, 'NUME_ORDRE')
-      tabres['OCCURRENCE'] = [iocc + 1] * len(l_numord)
-      if info >= 2:
-         print tabres
+      
+      if is_2D:
+         tabres = merge(tabK_G, tb_Gpmax, 'NUME_ORDRE')
+         tabres['OCCURRENCE'] = [iocc + 1] * len(l_numord)
+      else:
+         # tb_Gpmax est une table sur les tranches, 
+         # on l'ajoute dans la table aux noeuds tabres avec la convention:
+         # au 1er noeud et noeud milieu de la tranche on affecte la valeur de la tranche
+         # sauf pour la derniere tranche où on affecte la valeur sur les 3 noeuds de la tranche
+         tabres = tabK_G         
+         tabres = merge(tabK_G, tb_Gpmax_noeuds, ['NUME_ORDRE', 'NOEUD'])
+         tabres['OCCURRENCE'] = [iocc + 1] * len(l_numord) * nb_noeuds_fissure
+      #if info >= 2:
+      #   print tabres
       
       # 3.5.1. --- Table globale
       if iocc == 0:
@@ -242,37 +614,122 @@ def post_gp_ops(self, **args):
          'PROL_DROITE' : 'CONSTANT',
          'PROL_GAUCHE' : 'CONSTANT',
       }
-      # Gpmax fonction du temps
-      d_para.update({ 'NOM_RESU' : 'GPMAX' })
-      fGp = t_fonction(tabres.INST.values(), tabres.GPMAX.values(), d_para)
       
       # 3.6.1. --- identification
       if identification:
          KJ_CRIT = l_crit[iocc]
-         # définition des fonctions pour faire les interpolations
-         d_para.update({ 'NOM_RESU' : 'DELTALMAX' })
-         fdL = t_fonction(tabres.INST.values(), tabres.DELTALMAX.values(), d_para)
-   
-         d_para.update({ 'NOM_PARA' : 'KMOY',
-                         'NOM_RESU' : 'INST', })
-         valkmoy = tabres.KMOY.values()
-         finv = t_fonction(valkmoy, tabres.INST.values(), d_para)
-         
+         # on verifie que KJ_CRIT soit compris dans l'intervalle [KMOY_min, KMOY_max]
+         valkmoy = tabres.KMOY.values()            
          if not (min(valkmoy) <= KJ_CRIT <= max(valkmoy)):
-            UTMESS('A', macro, 'Interpolation hors du domaine (prolongement ' \
-                               'constant utilisé).')
-         # valeurs à mettre dans la table
-         ti   = finv(KJ_CRIT)
-         Gpi  = fGp(ti)
-         d_ident = {
-            'KJ_CRIT'   : KJ_CRIT,
-            'INST'      : ti,
-            'GPMAX'     : Gpi,
-            'KGPMAX'    : fKj(Gpi, **dict_constantes),
-            'DELTALMAX' : fdL(ti),
-         }
-         lv_ident.append(d_ident)
-      
+#                               'constant utilisé).')
+            UTMESS('A','RUPTURE0_1')
+         if is_2D:
+            # définition des fonctions pour faire les interpolations
+            d_para.update({ 'NOM_RESU' : 'DELTALMAX' })
+            # DeltaMax en fonction du temps
+            fdL = t_fonction(tb_Gpmax.INST.values(), tb_Gpmax.DELTALMAX.values(), d_para)
+            # Gpmax fonction du temps
+            d_para.update({ 'NOM_RESU' : 'GPMAX' })
+            fGp = t_fonction(tb_Gpmax.INST.values(), tb_Gpmax.GPMAX.values(), d_para)
+            
+            d_para.update({ 'NOM_PARA' : 'KMOY',
+                           'NOM_RESU' : 'INST', })
+            valkmoy = tabres.KMOY.values()
+            # temps en fonction de Kmoy
+            finv = t_fonction(valkmoy, tabres.INST.values(), d_para)
+
+            # valeurs à mettre dans la table
+            # temps correspondant à KJ_CRIT
+            ti   = finv(KJ_CRIT)
+            # GP correspondant au temps critique
+            Gpi  = fGp(ti)
+            d_ident = {
+               'KJ_CRIT'   : KJ_CRIT,
+               'INST'      : ti,
+               'GPMAX'     : Gpi,
+               'KGPMAX'    : fKj(Gpi, **dict_constantes),
+               'DELTALMAX' : fdL(ti),
+            }
+            lv_ident.append(d_ident)
+         else:
+            
+            l_i_noeuds_sommets = range(0,len(l_noeuds_fissure),pas)
+            t_noeud_Kcrit = Table(para=tabres.para)
+            
+            # On determine quel noeud sommet maximise KMOY au cours du temps:
+            
+            row_KMOY_max = tabres.KMOY.MAXI()
+            noeud_KMOY_max = row_KMOY_max.NOEUD.values()[0]
+            
+            # avec le noeud ou KJ_CRIT est atteint, on regarde GP a gauche et a droite. 
+            # le GP le plus grand correspond au GPmax
+            # on garde la tranche ou GP est le plus grand            
+            
+            id_noeud_KMOY_max = list(l_noeuds_fissure).index(noeud_KMOY_max)
+            if id_noeud_KMOY_max==0:
+               # "Gpmax sur la 1ere tranche"
+               nume_tranche_Gpmax = 1
+            elif id_noeud_KMOY_max==(len(l_noeuds_fissure)-1):
+               # "Gpmax sur la derniere tranche"
+               nume_tranche_Gpmax = nb_tranches
+            else:
+               # "Gpmax sur une tranche intermediaire"
+               Gpi_tot = Table(para=tb_Gpmax.para)
+               Gpi_gauche = tb_Gpmax.NUME_TRANCHE==(id_noeud_KMOY_max/pas)
+               Gpi_tot.append(Gpi_gauche.rows[0])
+               Gpi_droite = tb_Gpmax.NUME_TRANCHE==(id_noeud_KMOY_max/pas+1)
+               Gpi_tot.append(Gpi_droite.rows[0])
+               Gpi_tab = Gpi_tot.GPMAX.MAXI()
+               nume_tranche_Gpmax = Gpi_tab.NUME_TRANCHE.values()[0]
+            
+            # tb_Gpmax_TrancheCrit est une table de la meme nature que la table 2D tb_Gpmax
+            # i.e. valeurs sur la seule tranche qui nous interesse (ou on sait
+            # que KJ_CRIT sera atteint)
+            
+            tb_Gpmax_TrancheCrit = tb_Gpmax.NUME_TRANCHE==nume_tranche_Gpmax
+            
+            # avec le noeud ou KJ_CRIT est atteint, on determine le temps
+            # critique par interpolation            
+            tabres_NoeudCrit = tabres.NOEUD==noeud_KMOY_max
+            
+            # la suite est idem 2D, seuls les noms des tables changent
+    
+            # définition des fonctions pour faire les interpolations
+            d_para.update({ 'NOM_RESU' : 'DELTALMAX' })
+            # DeltaMax en fonction du temps
+            fdL = t_fonction(tb_Gpmax_TrancheCrit.INST.values(),
+                              tb_Gpmax_TrancheCrit.DELTALMAX.values(),
+                              d_para)
+            
+            # Gpmax fonction du temps
+            d_para.update({ 'NOM_RESU' : 'GPMAX' })
+            fGp = t_fonction(tb_Gpmax_TrancheCrit.INST.values(),
+                              tb_Gpmax_TrancheCrit.GPMAX.values(),
+                              d_para)
+            
+    
+            d_para.update({ 'NOM_PARA' : 'KMOY',
+                           'NOM_RESU' : 'INST', })
+            valkmoy = tabres_NoeudCrit.KMOY.values()
+            # temps en fonction de Kmoy
+            finv = t_fonction(valkmoy, tabres_NoeudCrit.INST.values(), d_para)
+   
+            # valeurs à mettre dans la table
+            # temps correspondant a KJ_CRIT
+            ti   = finv(KJ_CRIT)
+            # GP correspondant au temps critique
+            Gpi  = fGp(ti)
+            # par rapport a 2D, on ajoute 'NUME_TRANCHE'
+            d_ident = {
+               'KJ_CRIT'      : KJ_CRIT,
+               'INST'         : ti,
+               'NUME_TRANCHE' : int(nume_tranche_Gpmax),
+               'GPMAX'        : Gpi,
+               'KGPMAX'       : fKj(Gpi, **dict_constantes),
+               'DELTALMAX'    : fdL(ti),
+            }
+            lv_ident.append(d_ident)
+            
       # 3.6.2. --- prédiction
       else:
          pass
@@ -280,9 +737,13 @@ def post_gp_ops(self, **args):
    # 4. ----- Construction de la table résultat si demandée
    # 4.1. --- identification
    if identification:
+      if is_2D:
+         para_tab_ident=('KJ_CRIT', 'INST', 'GPMAX', 'KGPMAX', 'DELTALMAX')
+      else:
+         para_tab_ident=('KJ_CRIT', 'INST', 'NUME_TRANCHE', 'GPMAX', 'KGPMAX', 'DELTALMAX')
       tab_ident = Table(rows=lv_ident,
-                        para=('KJ_CRIT', 'INST', 'GPMAX', 'KGPMAX', 'DELTALMAX'),
-                        typ= ('R',       'R',    'R',     'R',      'R'),
+                        para=para_tab_ident,
+                        typ = ('R')*len(para_tab_ident),
                         titr='Identification aux valeurs de tenacités critiques')
       dprod_result = tab_ident.dict_CREA_TABLE()
       if info >= 2:
@@ -295,7 +756,25 @@ def post_gp_ops(self, **args):
                       'NOM_RESU' : 'GP_CRIT', })
       fGpc = t_fonction(mccalc['TEMP'], mccalc['GP_CRIT'], d_para)
       
-      tab_pred = tabl_glob['NUME_ORDRE', 'INST', 'TEMP', 'DELTALMAX', 'GPMAX']
+      # en 3D, GPMAX et DELTALMAX ne sont pas dans tab_glob: les recuperer de tb_Gpmax
+      
+      if is_2D:
+         tab_pred = tabl_glob['NUME_ORDRE', 'INST', 'TEMP', 'DELTALMAX', 'GPMAX']
+      else:
+         tab_pred = tb_Gpmax['NUME_ORDRE', 'INST', 'NUME_TRANCHE', 'DELTALMAX', 'GPMAX']
+         # on recupere TEMP de tabl_glob
+         tab_temp_tranche=Table(para=['NUME_ORDRE', 'NUME_TRANCHE', 'TEMP'])
+         # on fait une moyenne de la temperature sur les noeuds d'une tranche
+         for ordre in l_numord:
+            tabl_glob_ORDRE_i = tabl_glob.NUME_ORDRE==ordre
+            temp_ORDRE_i = tabl_glob_ORDRE_i.TEMP.values()
+            for i_tranche in range(nb_tranches):
+               l_temp_noeuds_tranche_i = temp_ORDRE_i[i_tranche : i_tranche+pas+1]
+               temp_tranche_i = moyenne(*l_temp_noeuds_tranche_i)
+               d = {'NUME_ORDRE': ordre, 'NUME_TRANCHE': i_tranche+1, 'TEMP': temp_tranche_i}
+               tab_temp_tranche.append(d)
+         tab_pred = merge(tab_pred, tab_temp_tranche, ['NUME_ORDRE', 'NUME_TRANCHE'])
+      
       tab_pred.fromfunction('GP_CRIT', fGpc, 'TEMP')
       tab_pred.fromfunction('PREDICTION', crit, ('GP_CRIT', 'GPMAX'))
       tab_pred.titr = 'Comparaison Gpmax à Gpcrit(T)'
@@ -318,10 +797,12 @@ def CallRCVALE(TEMP, para, MATER):
    return valres
 
 # -----------------------------------------------------------------------------
-def fKj(G, YOUNG, NU, R):
+def fKj(G, YOUNG, NU, R=1):
    """Calcul de Kj à partir de G (formule d'Irwin)
+      R n'intervient pas en 3D
    """
-   return (G / R * YOUNG / (1.0 - NU**2))**0.5
+   Kj=(abs(G / R * YOUNG / (1.0 - NU**2)))**0.5
+   return Kj
 
 # -----------------------------------------------------------------------------
 def fDL(ICOP, pascop):
@@ -330,16 +811,20 @@ def fDL(ICOP, pascop):
    return ICOP * pascop
 
 # -----------------------------------------------------------------------------
-def fGp_Etot(TOTALE, ICOP, pascop, R, syme=False):
+def fGp_Etot(TOTALE, DELTAL, R, syme=False):
    """Gp(Etotale, K), deltal pris dans le context global.
-      ICOP   : numéro du copeau,
-      pascop : pas d'entaille.
-      syme   : True s'il y a symétrie.
+      ICOP      : numéro du copeau,
+      DELTAL    : liste des epaisseurs des copeaux
+      R         : rayon en axisymetrique,
+                  longueur de l'élément 1D situé sur le front d'entaille si modèle 3D.
+      syme      : True s'il y a symétrie.
    """
-   fact_axis = 1.
+   import types
+   fact_syme = 1.
    if syme:
-      fact_axis = 2.
-   return fact_axis * TOTALE / (fDL(ICOP, pascop) * R)
+      fact_syme = 2.
+   Gp_Etot = fact_syme * TOTALE / (DELTAL * R )
+   return Gp_Etot
 
 # -----------------------------------------------------------------------------
 def MaxRelatif(table, nom_para):
@@ -369,3 +854,86 @@ def moyenne(*args):
    """
    return sum(args)/len(args)
 
+def moyenne_positive(*args):
+   """Fonction moyenne
+   """
+   return sum([abs(a) for a in args])/len(args)
+
+def mysum(*args):
+   """Fonction sum.
+      La fonction sum ne peut pas etre appelee sur une liste de parametre
+      d'une table via fromfunction
+   """
+   return sum(args)
+
+def sum_and_check(*args):
+   """Fonction sum.
+      Verifie si la somme est positive.
+      Si la somme est negative, on la met egale a zero
+   """
+   somme = sum(args)
+   if somme<0:
+      somme=0
+   return somme
+
+# On recupere des infos sur le fond de fissure
+def getFondFissInfo(fondfiss):
+   # >FONFISS .FOND      .NOEU        <
+   # >FONFISS .FOND      .TYPE        < 
+   import aster
+   l_noeuds_fissure = aster.getvectjev(fondfiss.nom.ljust(8)+'.FOND      .NOEU        ')
+   type_mailles = aster.getvectjev(fondfiss.nom.ljust(8)+'.FOND      .TYPE        ')
+   if (type_mailles[0].strip() == 'SEG3' ):
+      pas = 2
+   else:
+      pas = 1
+   return l_noeuds_fissure, pas
+
+########################################################################
+# determination de la distance min entre 2 points consécutifs de la ligne de coupe
+
+def largeur_tranche(nom_maillage, l_noms_noeuds_fissure, pas, i_tranche):
+   # >MA      .COORDO    .VALE        <
+   from math import sqrt
+   import aster
+   
+   # tuple des noms des noeuds du maillage
+   t_noms_noeuds_maillage = aster.getvectjev(nom_maillage.ljust(8)+'.NOMNOE')
+   # on convertit en liste pour utiliser la methode index
+   # qui est plus optimal qu'une boucle sur les indices du tuple
+   l_noms_noeuds_maillage = list(t_noms_noeuds_maillage)
+   
+   l_numeros_noeuds_fissure = []
+   for i in range(0,len(l_noms_noeuds_fissure),pas):
+      nom = l_noms_noeuds_fissure[i]
+      index = l_noms_noeuds_maillage.index(nom)
+      l_numeros_noeuds_fissure.append(index)
+   
+   coor1=aster.getvectjev(nom_maillage.ljust(8)+'.COORDO    .VALE        ',
+                        l_numeros_noeuds_fissure[i_tranche]*3,3)
+   coor2=aster.getvectjev(nom_maillage.ljust(8)+'.COORDO    .VALE        ',
+                        l_numeros_noeuds_fissure[i_tranche+1]*3,3)
+   
+   d=sqrt( (coor1[0]-coor2[0])**2+(coor1[1]-coor2[1])**2+(coor1[2]-coor2[2])**2)
+   return d
+   
+def mergeLineInTable(multiTable, lineTable, nb_noeuds):
+   # on ajoute a la table multiTable les colonnes de lineTable
+   # pour chaque nume_ordre autant de fois qu'il y a de nb_noeuds
+   from Utilitai.Table      import Table, merge
+   
+   l_ordre = lineTable.NUME_ORDRE
+   l_para = lineTable.copy().para
+   l_para.remove('NUME_ORDRE')
+   for i, ordre in enumerate(l_ordre):
+      multiTable_i = multiTable.NUME_ORDRE==ordre
+      row_i = lineTable.rows[i]
+      for para in l_para:
+         valeur_i = row_i[para]
+         multiTable_i[para] = [valeur_i] * nb_noeuds
+      if i==0:
+         newTable=multiTable_i
+      else:
+         newTable = merge(newTable, multiTable_i)
+         
+   return newTable
index e6c075d648a8ec794067a19ac7e05b6ab4ecc9a2..4222d3563ea2ce2cf6b4a4a0dd66d77b0b330751 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF post_k1_k2_k3_ops Macro  DATE 09/05/2007   AUTEUR REZETTE C.REZETT
+#@ MODIF post_k1_k2_k3_ops Macro  DATE 13/05/2008   AUTEUR GALENNE E.GALENN
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # ======================================================================
 
 def veri_tab(tab,nom,ndim) :
-   from Utilitai.Utmess     import UTMESS
+   from Utilitai.Utmess     import  UTMESS
    macro = 'POST_K1_K2_K3'
    for label in ('DX','DY','COOR_X','COOR_Y','ABSC_CURV') :
        if label not in tab.para :
-          message='le label '+label+' doit etre present dans la table : '+nom
-          UTMESS('F', macro, message)
+          UTMESS('F','RUPTURE0_2',valk=[label,nom])
    if ndim==3 :
       if 'DZ'     not in tab.para :
-          message='le label DZ doit etre present dans la table : '+nom
-          UTMESS('F', macro, message)
+          label='DZ'
+          UTMESS('F','RUPTURE0_2',valk=[label,nom])
       if 'COOR_Z' not in tab.para :
-          message='le label COOR_Z doit etre present dans la table : '+nom
-          UTMESS('F', macro, message)
+          label='COOR_Z'
+          UTMESS('F','RUPTURE0_2',valk=[label,nom])
 
 def cross_product(a,b):
     cross = [0]*3
@@ -72,11 +71,13 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
    from types import ListType, TupleType
    from Accas import _F
    from Utilitai.Table      import Table, merge
+   from SD.sd_l_charges import sd_l_charges
+   from SD.sd_mater     import sd_compor1
    EnumTypes = (ListType, TupleType)
 
    macro = 'POST_K1_K2_K3'
    from Accas               import _F
-   from Utilitai.Utmess     import UTMESS
+   from Utilitai.Utmess     import  UTMESS
 
    ier = 0
    # La macro compte pour 1 dans la numerotation des commandes
@@ -96,40 +97,33 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
 
    AFFE_MODELE      = self.get_cmd('AFFE_MODELE')
    PROJ_CHAMP      = self.get_cmd('PROJ_CHAMP')
-   
+      
 #   ------------------------------------------------------------------
 #                         CARACTERISTIQUES MATERIAUX
 #   ------------------------------------------------------------------
-   matph = aster.getvectjev( string.ljust(MATER.nom,8)+'.MATERIAU.NOMRC         ')
+   matph = MATER.NOMRC.get()  
    phenom=None
    for cmpt in matph :
        if cmpt[:4]=='ELAS' :
           phenom=cmpt
           break
-   if phenom==None : UTMESS('F', macro, 'IL FAUT DEFINIR ELAS DANS DEFI_MATERIAU')
+   if phenom==None : UTMESS('F','RUPTURE0_5')
 #   --- RECHERCHE SI LE MATERIAU DEPEND DE LA TEMPERATURE:
-   valk = aster.getvectjev( string.ljust(MATER.nom,8)+'.'+phenom[:10]+'.VALK')
-   valk = [x.strip() for x in valk]
-   valr = aster.getvectjev( string.ljust(MATER.nom,8)+'.'+phenom[:10]+'.VALR')
+   compor = sd_compor1('%-8s.%s' % (MATER.nom, phenom))
+   valk = [s.strip() for s in compor.VALK.get()]
+   valr = compor.VALR.get()
    dicmat=dict(zip(valk,valr))
 #   --- PROPRIETES MATERIAUX DEPENDANTES DE LA TEMPERATURE
    Tempe3D = False
-   if dicmat.has_key('TEMP_DEF') and FOND_FISS and RESULTAT : 
-# on recupere juste le nom du resultat thermique
+   if FOND_FISS and args['EVOL_THER'] : 
+# on recupere juste le nom du resultat thermique (la température est variable de commande)
       ndim   = 3
-      Lchar = aster.getvectjev(string.ljust(RESULTAT.nom,8)+'.0000.EXCIT.LCHA        ')
-      for i in range(len(Lchar)):
-         resuth = aster.getvectjev(Lchar[i][0:8]+'.CHME.TEMPE.TEMP        ')
-         if resuth !=None :
-            Tempe3D = True
-            break
-   elif dicmat.has_key('TEMP_DEF') and not Tempe3D :
-      message = 'LES PROPRIETES MATERIAUX, NECESSAIRES AUX CALCULS \n'
-      message = message +'DES COEFFICIENTS D INTENSITE DES CONTRAINTES, ONT ETE OBTENUES A LA\n'
-      message = message +'TEMPERATURE DE REFERENCE DU MATERIAU ET NON A LA TEMPERATURE CALCULEE.'
-      UTMESS('A', macro, message)
+      Tempe3D=True
+      resuth=string.ljust(args['EVOL_THER'].nom,8).rstrip()
+   if dicmat.has_key('TEMP_DEF') and not args['EVOL_THER'] :
       nompar = ('TEMP',)
       valpar = (dicmat['TEMP_DEF'],)
+      UTMESS('A','RUPTURE0_6',valr=valpar)
       nomres=['E','NU']
       valres,codret = MATER.RCVALE('ELAS',nompar,valpar,nomres,'F')
       e = valres[0]
@@ -147,7 +141,7 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
       unmnu2 = 1. - nu**2
       unpnu  = 1. + nu
       if MODELISATION=='3D' :
-         UTMESS('I', macro, 'l operateur CALC_G -option CALC_K_G- calcule plus precisement les K1 K2 K3')
+         coefk='K1 K2 K3'
          ndim   = 3
          coefd  = coefd      / ( 8.0 * unmnu2 )
          coefd3 = e*sqrt(2*pi) / ( 8.0 * unpnu )
@@ -159,19 +153,19 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
          coefg  = unmnu2 / e
          coefg3 = unpnu  / e
       elif MODELISATION=='D_PLAN' :
-         UTMESS('I', macro, 'l operateur CALC_G -option CALC_K_G- calcule plus precisement les K1 K2')
+         coefk='K1 K2'
          ndim   = 2
          coefd  = coefd / ( 8. * unmnu2 )
          coefg  = unmnu2 / e
          coefg3 = unpnu  / e
       elif MODELISATION=='C_PLAN' :
-         UTMESS('I', macro, 'l operateur CALC_G -option CALC_K_G- calcule plus precisement les K1 K2')
+         coefk='K1 K2'
          ndim   = 2
          coefd  = coefd / 8.
          coefg  = 1. / e
          coefg3 = unpnu / e
       else :
-         UTMESS('F', macro, 'modélisation non implantée')
+         UTMESS('F','RUPTURE0_10')
 
 
 #   ------------------------------------------------------------------
@@ -187,49 +181,49 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
       TYPE_MAILLAGE = args['TYPE_MAILLAGE']
       NB_NOEUD_COUPE = args['NB_NOEUD_COUPE']
       if NB_NOEUD_COUPE ==None : NB_NOEUD_COUPE = 5
-      LNOFO = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.FOND      .NOEU        ')
+      LNOFO = FOND_FISS.FOND_______NOEU.get()
       RECOL = False
 # Cas double fond de fissure : par convention les noeuds sont ceux de fond_inf
       if LNOFO==None :
          RECOL = True
-         LNOFO = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.FOND_INF  .NOEU        ')
-         if LNOFO==None : UTMESS('F', macro, 'PROBLEME A LA RECUPERATION DES NOEUDS DU FOND DE FISSURE \n')
+         LNOFO = FOND_FISS.FONDINF____NOEU.get()
+         if LNOFO==None : UTMESS('F','RUPTURE0_11')
       LNOFO = map(string.rstrip,LNOFO)
       Nbfond = len(LNOFO)
 
       if MODELISATION=='3D' :
 #   ----------Mots cles TOUT, NOEUD, SANS_NOEUD -------------
-        Typ = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.FOND      .TYPE        ')
+        Typ = FOND_FISS.FOND_______TYPE.get()
         if (Typ[0]=='SEG2    ') or (Typ[0]=='SEG3    ' and TOUT=='OUI') :
            pas = 1
         elif (Typ[0]=='SEG3    ') : 
            pas = 2
         else :
-           UTMESS('F', macro, 'TYPE DE MAILLES DU FOND DE FISSURE NON DEFINI')
+           UTMESS('F','RUPTURE0_12')
 ####
         NO_SANS = []
         NO_AVEC = []
         if GROUP_NO!=None :
-          collgrno=aster.getcolljev(string.ljust(MAILLAGE.nom,8)+'.GROUPENO')
-          cnom = aster.getvectjev(string.ljust(MAILLAGE.nom,8)+'.NOMNOE')
+          collgrno = MAILLAGE.GROUPENO.get()
+          cnom = MAILLAGE.NOMNOE.get()
           if type(GROUP_NO) not in EnumTypes : GROUP_NO = (GROUP_NO,)
           for m in range(len(GROUP_NO)) :
             ngrno=GROUP_NO[m].ljust(8).upper()
             if ngrno not in collgrno.keys() :
-              UTMESS('F', macro, "LE GROUP_NO "+ngrno+" N EST PAS DANS LE MAILLAGE")
+              UTMESS('F','RUPTURE0_13',valk=ngrno)
             for i in range(len(collgrno[ngrno])) : NO_AVEC.append(cnom[collgrno[ngrno][i]-1])
           NO_AVEC= map(string.rstrip,NO_AVEC)
         if NOEUD!=None : 
           if type(NOEUD) not in EnumTypes : NO_AVEC = (NOEUD,)
           else : NO_AVEC = NOEUD
         if SANS_GROUP_NO!=None :
-          collgrno=aster.getcolljev(string.ljust(MAILLAGE.nom,8)+'.GROUPENO')
-          cnom = aster.getvectjev(string.ljust(MAILLAGE.nom,8)+'.NOMNOE')
+          collgrno = MAILLAGE.GROUPENO.get()
+          cnom = MAILLAGE.NOMNOE.get()
           if type(SANS_GROUP_NO) not in EnumTypes : SANS_GROUP_NO = (SANS_GROUP_NO,)
           for m in range(len(SANS_GROUP_NO)) :
             ngrno=SANS_GROUP_NO[m].ljust(8).upper()
             if ngrno not in collgrno.keys() :
-              UTMESS('F', macro, "LE GROUP_NO "+ngrno+" N EST PAS DANS LE MAILLAGE")
+              UTMESS('F','RUPTURE0_13',valk=ngrno)
             for i in range(len(collgrno[ngrno])) : NO_SANS.append(cnom[collgrno[ngrno][i]-1])
           NO_SANS= map(string.rstrip,NO_SANS)
         if SANS_NOEUD!=None : 
@@ -244,7 +238,7 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
               Lnf1.append(NO_AVEC[i])
               Nbf1 = Nbf1 +1
             else : 
-              UTMESS('F', macro, 'LE NOEUD %s N APPARTIENT PAS AU FOND DE FISSURE'%NO_AVEC[i])
+              UTMESS('F','RUPTURE0_15',valk=NO_AVEC[i])
         else :
            for i in range(0,Nbfond,pas) :
               if not (LNOFO[i] in NO_SANS) :
@@ -257,12 +251,12 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
 ##### Cas maillage libre###########
 # creation des directions normales et macr_lign_coup
       if TYPE_MAILLAGE =='LIBRE':
-        if not RESULTAT : UTMESS('F', macro, 'MOT CLE RESULTAT OBLIGATOIRE POUR TYPE_MAILLAGE = LIBRE')
+        if not RESULTAT : UTMESS('F','RUPTURE0_16')
         Lnofon = Lnf1
         Nbnofo = Nbf1
-        ListmaS = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.LEVRESUP  .MAIL        ')
+        ListmaS = FOND_FISS.LEVRESUP___MAIL.get()
         if SYME_CHAR=='SANS':
-          ListmaI = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.LEVREINF  .MAIL        ')
+          ListmaI = FOND_FISS.LEVREINF___MAIL.get()
         __NCOFON=POST_RELEVE_T(ACTION=_F(INTITULE='Tab pour coordonnees noeuds du fond',
                                             NOEUD=LNOFO,
                                             RESULTAT=RESULTAT,
@@ -281,11 +275,11 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
         l_coorf = [(i[0],i[1:]) for i in l_coorf]
         d_coorf = dict(l_coorf) 
 # Coordonnee d un pt quelconque des levres pr determination sens de propagation
-        cmail=aster.getvectjev(string.ljust(MAILLAGE.nom,8)+'.NOMMAI')
+        cmail=MAILLAGE.NOMMAI.get()
         for i in range(len(cmail)) :
             if cmail[i] == ListmaS[0] : break
-        colcnx=aster.getcolljev(string.ljust(MAILLAGE.nom,8)+'.CONNEX')
-        cnom = aster.getvectjev(string.ljust(MAILLAGE.nom,8)+'.NOMNOE')
+        colcnx=MAILLAGE.CONNEX.get()
+        cnom = MAILLAGE.NOMNOE.get()
         NO_TMP = []
         for k in range(len(colcnx[i+1])) : NO_TMP.append(cnom[colcnx[i+1][k]-1])
         __NCOLEV=POST_RELEVE_T(ACTION=_F(INTITULE='Tab pour coordonnees pt levre',
@@ -305,7 +299,7 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
         VN = [None]*Nbfond
         absfon = [0,]
         if MODELISATION=='3D' :
-          DTANOR = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.DTAN_ORIGINE')
+          DTANOR = FOND_FISS.DTAN_ORIGINE.get()
           Pfon2 = array([d_coorf[LNOFO[0]][0],d_coorf[LNOFO[0]][1],d_coorf[LNOFO[0]][2]])
           VLori = Pfon2 - Plev
           if DTANOR != None :
@@ -330,7 +324,7 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
           VLextr = Pfon2 - Plev
           absf = sqrt(dot(transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1]
           absfon.append(absf)
-          DTANEX = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.DTAN_EXTREMITE')
+          DTANEX = FOND_FISS.DTAN_EXTREMITE.get()
           if DTANEX != None :
             VN[i] = array(DTANEX)
           else :
@@ -355,13 +349,12 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
         TlibS = [None]*Nbf1
         TlibI = [None]*Nbf1
         if NB_NOEUD_COUPE < 3 : 
-          message = 'LE NOMBRE DE NOEUDS NB_NOEUD_COUPE DOIT ETRE SUPERIEUR A 3 : ON PREND LA VALEUR PAR DEFAUT'
-          UTMESS('A', macro, message)
+          UTMESS('A','RUPTURE0_17')
           NB_NOEUD_COUPE = 5
         MOD = aster.getvectjev(string.ljust(RESULTAT.nom,19)+'.MODL        ')
-        if MOD==None : UTMESS('F', macro, 'PROBLEME A LA RECUPERATION DU MODELE DANS LA SD RESULTAT FOURNIE')
-        MOD = map(string.rstrip,MOD)
-        MODEL = self.jdc.sds_dict[MOD[0]]
+        if MOD==None : UTMESS('F','RUPTURE0_18')
+        MODEL = self.jdc.sds_dict[MOD[0].rstrip()]
+        dmax  = PREC_VIS_A_VIS * ABSC_CURV_MAXI
         for i in range(Nbf1):
           Porig = array(d_coorf[Lnf1[i]] )
           if Lnf1[i]==LNOFO[0] and DTANOR : Pextr = Porig - ABSC_CURV_MAXI*dicVN[Lnf1[i]]
@@ -370,33 +363,31 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
           TlibS[i] = MACR_LIGN_COUPE(RESULTAT=RESULTAT,
                 NOM_CHAM='DEPL',MODELE=MODEL, VIS_A_VIS=_F(MAILLE_1 = ListmaS),
                 LIGN_COUPE=_F(NB_POINTS=NB_NOEUD_COUPE,COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
-                               TYPE='SEGMENT', COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),),);
+                               TYPE='SEGMENT', COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
+                               DISTANCE_MAX=dmax),);
           if SYME_CHAR=='SANS':
             TlibI[i] = MACR_LIGN_COUPE(RESULTAT=RESULTAT,
                   NOM_CHAM='DEPL',MODELE=MODEL, VIS_A_VIS=_F(MAILLE_1 = ListmaI),
                 LIGN_COUPE=_F(NB_POINTS=NB_NOEUD_COUPE,COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
-                               TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),),);
+                               TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
+                               DISTANCE_MAX=dmax),);
 
 
 ##### Cas maillage regle###########
       else:
 #   ---------- Dictionnaires des levres  -------------  
-        NnormS = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.SUPNORM   .NOEU        ')
+        NnormS = FOND_FISS.SUPNORM____NOEU.get()
         if NnormS==None : 
-          message= 'PROBLEME A LA RECUPERATION DES NOEUDS DE LA LEVRE SUP : VERIFIER '
-          message=message+'QUE LE MOT CLE LEVRE_SUP EST BIEN RENSEIGNE DANS DEFI_FOND_FISS\n'
-          UTMESS('F', macro, message)
+          UTMESS('F','RUPTURE0_19')
         NnormS = map(string.rstrip,NnormS)
         if LNOFO[0]==LNOFO[-1] and MODELISATION=='3D' : Nbfond=Nbfond-1  # Cas fond de fissure ferme
         NnormS = [[LNOFO[i],NnormS[i*20:(i+1)*20]] for i in range(0,Nbfond)]
         NnormS = [(i[0],i[1][0:]) for i in NnormS]
         dicoS = dict(NnormS)
         if SYME_CHAR=='SANS':
-           NnormI = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.INFNORM   .NOEU        ')
+           NnormI = FOND_FISS.INFNORM____NOEU.get()
            if NnormI==None : 
-             message= 'PROBLEME A LA RECUPERATION DES NOEUDS DE LA LEVRE INF : VERIFIER '
-             message=message+'QUE LE MOT CLE LEVRE_INF EST BIEN RENSEIGNE DANS DEFI_FOND_FISS\n'
-             UTMESS('F', macro, message)
+             UTMESS('F','RUPTURE0_20')
            NnormI = map(string.rstrip,NnormI)
            NnormI = [[LNOFO[i],NnormI[i*20:(i+1)*20]] for i in range(0,Nbfond)]
            NnormI = [(i[0],i[1][0:]) for i in NnormI]
@@ -489,120 +480,189 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
                     if abss<rmprec :
                       dist = sqrt(dot(transpose(Psup-Pinf),Psup-Pinf))
                       if dist>precn : 
-                        message= 'LES NOEUDS NE SONT PAS EN VIS-A-VIS \n'
-                        message=message+'DANS LE PLAN PERPENDICULAIRE AU NOEUD %s \n'%Lnf1[i]
-                        UTMESS('A', macro, message)
+                        UTMESS('A','RUPTURE0_21',valk=Lnf1[i])
                       else :
                         NBTRLI = NBTRLI +1
                         Tmpinf.append(dicoI[Lnf1[i]][k])
 # On verifie qu il y a assez de noeuds
            if NBTRLS < 3 : 
-              message= 'IL MANQUE DES POINTS DANS LE PLAN DEFINI PAR LA LEVRE \n'
-              message=message+'SUPERIEURE ET PERPENDICULAIRE AU FOND %s :\n'%Lnf1[i]
-              if itots<3 : message=message+' Augmenter PREC_NORM dans DEFI_FOND_FISS \n'
-              else : message=message+' Augmenter ABSC_CURV_MAXI'
-              if Lnf1[i]==LNOFO[0] or Lnf1[i]==LNOFO[-1]: message=message+' OU VERIFIER LES TANGENTES EXTREMITES'
-              UTMESS('A',macro, message)
+              UTMESS('A+','RUPTURE0_22',valk=Lnf1[i])
+              if Lnf1[i]==LNOFO[0] or Lnf1[i]==LNOFO[-1]: UTMESS('A+','RUPTURE0_23')
+              if itots<3 : UTMESS('A','RUPTURE0_24')
+              else : UTMESS('A','RUPTURE0_25')
            elif (SYME_CHAR=='SANS') and (NBTRLI < 3) :
-              message= 'IL MANQUE DES POINTS DANS LE PLAN DEFINI PAR LA LEVRE \n'
-              message=message+'INFERIEURE ET PERPENDICULAIRE AU FOND %s :\n'%Lnf1[i]
-              if itoti<3 : message=message+' Augmenter PREC_NORM dans DEFI_FOND_FISS \n'
-              else : message=message+' Augmenter ABSC_CURV_MAXI'
-              if Lnf1[i]==LNOFO[0] or Lnf1[i]==LNOFO[-1]: message=message+' OU VERIFIER LES TANGENTES EXTREMITES'
-              UTMESS('A',macro, message)
+              UTMESS('A+','RUPTURE0_26',valk=Lnf1[i])
+              if Lnf1[i]==LNOFO[0] or Lnf1[i]==LNOFO[-1]: UTMESS('A+','RUPTURE0_23')
+              if itoti<3 : UTMESS('A','RUPTURE0_24')
+              else :UTMESS('A','RUPTURE0_25')
+#              UTMESS('A','RUPTURE0_23')
            else :
               Lnosup[Nbnofo] = Tmpsup
               if SYME_CHAR=='SANS' : Lnoinf[Nbnofo] = Tmpinf
               Lnofon.append(Lnf1[i])
               Nbnofo = Nbnofo+1
         if Nbnofo == 0 :
-          message= 'CALCUL POSSIBLE POUR AUCUN NOEUD DU FOND :'
-          message=message+' VERIFIER LES DONNEES'
-          UTMESS('F',macro, message)
+          UTMESS('F','RUPTURE0_30')
 
 #------------- Cas X-FEM ---------------------------------
    elif FISSURE :
      MAILLAGE = args['MAILLAGE']
      DTAN_ORIG = args['DTAN_ORIG']
      DTAN_EXTR = args['DTAN_EXTR']
+     dmax  = PREC_VIS_A_VIS * ABSC_CURV_MAXI
 #Projection du resultat sur le maillage lineaire initial     
      MOD = aster.getvectjev(string.ljust(RESULTAT.nom,19)+'.MODL        ')
-     if MOD==None : UTMESS('F', macro, 'PROBLEME A LA RECUPERATION DU MODELE DANS LA SD RESULTAT FOURNIE')
-     MOD = map(string.rstrip,MOD)
-     MODEL = self.jdc.sds_dict[MOD[0]]
-     __MODLINE=AFFE_MODELE(MAILLAGE=MAILLAGE,
+     if MOD==None : UTMESS('F','RUPTURE0_18')
+     MODEL = self.jdc.sds_dict[MOD[0].rstrip()]
+     xcont = MODEL.xfem.XFEM_CONT.get()
+     if xcont[0] == 0 :
+       __RESX = RESULTAT
+# Si XFEM + contact : il faut reprojeter sur le maillage lineaire
+     if xcont[0] != 0 :
+       __MODLINE=AFFE_MODELE(MAILLAGE=MAILLAGE,
                            AFFE=(_F(TOUT='OUI',
                             PHENOMENE='MECANIQUE',
                             MODELISATION=MODELISATION,),),);        
-     __RESLIN=PROJ_CHAMP(METHODE='ELEM',TYPE_CHAM='NOEU',NOM_CHAM='DEPL',
+       __RESX=PROJ_CHAMP(METHODE='ELEM',TYPE_CHAM='NOEU',NOM_CHAM='DEPL',
                      RESULTAT=RESULTAT,
                      MODELE_1=MODEL,
                      MODELE_2=__MODLINE, );   
 #Recuperation des coordonnees des points du fond de fissure (x,y,z,absc_curv)
-     Listfo = aster.getvectjev(string.ljust(FISSURE.nom,8)+'.FONDFISS               ')
+     Listfo = FISSURE.FONDFISS.get()
      Nbfond = len(Listfo)/4
-# Calcul des normales a chaque point du fond
-     v1 =  array(VECT_K1)
-     v1  = v1/sqrt(v1[0]**2+v1[1]**2+v1[2]**2)
-     v1x = aster.getvectjev(string.ljust(FISSURE.nom,8)+'.GRLNNO    .VALE        ')[0:3]
-     v1x = array(v1x)
-     verif = dot(transpose(v1),v1x) 
-     if verif < 0 : v1 = -v1
-     if abs(verif) < 0.9 :
-      message= 'DIFFERENCE ENTRE LE VECTEUR VECT_K1 ET LA NORMALE AU PLAN DE LA FISSURE %s.\n'%FISSURE.nom
-      message=message+'ON CONTINUE AVEC LA NORMALE AU PLAN : (%f,%f,%f).'%(v1x[0],v1x[1],v1x[2])
-      UTMESS('A',macro, message)
-      v1 = v1x
+# Calcul de la direction de propagation en chaque point du fond
+     VP = [None]*Nbfond
      VN = [None]*Nbfond
      absfon = [0,]
-     i = 0
-     if MODELISATION=='3D' :
-       if DTAN_ORIG != None :
-         VN[i] = array(DTAN_ORIG)
-       else :
+     Vpropa = FISSURE.BASEFOND.get()
+# Cas fissure non necessairement plane     
+     if VECT_K1 == None :
+       i = 0
+       if MODELISATION=='3D' :
+         if DTAN_ORIG != None :
+           VP[0] = array(DTAN_ORIG)
+           VP[0] = VP[0]/sqrt(VP[0][0]**2+VP[0][1]**2+VP[0][2]**2)
+           VN[0] = array([Vpropa[0],Vpropa[1],Vpropa[2]])
+           verif = dot(transpose(VP[0]),VN[0]) 
+           if abs(verif) > 0.01:
+             UTMESS('A','RUPTURE1_33',valr=[VN[0][0],VN[0][1],VN[0][2]])
+         else :
+           VN[0] = array([Vpropa[0],Vpropa[1],Vpropa[2]])
+           VP[0] = array([Vpropa[3+0],Vpropa[3+1],Vpropa[3+2]])
+         for i in range(1,Nbfond-1):
+           Pfon1 = array([Listfo[4*(i-1)],Listfo[4*(i-1)+1],Listfo[4*(i-1)+2]])
+           Pfon2 = array([Listfo[4*i],Listfo[4*i+1],Listfo[4*i+2]])
+           absf = sqrt(dot(transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1]
+           absfon.append(absf)
+           VN[i] = array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+           VP[i] = array([Vpropa[3+6*i],Vpropa[3+6*i+1],Vpropa[3+6*i+2]])
+           verif = dot(transpose(VN[i]),VN[i-1]) 
+           if abs(verif) < 0.98:
+             UTMESS('A','RUPTURE1_35',vali=[i-1,i])
+         i = Nbfond-1
+         Pfon1 = array([Listfo[4*(i-1)],Listfo[4*(i-1)+1],Listfo[4*(i-1)+2]])
          Pfon2 = array([Listfo[4*i],Listfo[4*i+1],Listfo[4*i+2]])
-         Pfon3 = array([Listfo[4*(i+1)],Listfo[4*(i+1)+1],Listfo[4*(i+1)+2]])
-         VT = (Pfon3 - Pfon2)/sqrt(dot(transpose(Pfon3-Pfon2),Pfon3-Pfon2))
-         VN[0] = array(cross_product(VT,v1))
-       for i in range(1,Nbfond-1):
+         absf = sqrt(dot(transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1]
+         absfon.append(absf)
+         if DTAN_EXTR != None :
+           VP[i] = array(DTAN_EXTR)
+           VN[i] = array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+           verif = dot(transpose(VP[i]),VN[0]) 
+           if abs(verif) > 0.01:
+             UTMESS('A','RUPTURE1_34',valr=[VN[i][0],VN[i][1],VN[i][2]])
+         else :
+           VN[i] = array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+           VP[i] = array([Vpropa[3+6*i],Vpropa[3+6*i+1],Vpropa[3+6*i+2]])
+       else : 
+         for i in range(0,Nbfond):
+           VP[i] = array([Vpropa[2+4*i],Vpropa[3+4*i],0.])
+           VN[i] = array([Vpropa[0+4*i],Vpropa[1+4*i],0.])
+# Cas fissure plane (VECT_K1 donne)
+     if VECT_K1 != None :
+       v1 =  array(VECT_K1)
+       v1  = v1/sqrt(v1[0]**2+v1[1]**2+v1[2]**2)
+       v1 =  array(VECT_K1)
+       i = 0
+       if MODELISATION=='3D' :
+# Sens du vecteur VECT_K1       
+         v1x =array([Vpropa[0],Vpropa[1],Vpropa[2]])
+         verif = dot(transpose(v1),v1x) 
+         if verif < 0 : v1 = -v1
+         VN = [v1]*Nbfond
+         if DTAN_ORIG != None :
+           VP[i] = array(DTAN_ORIG)
+           VP[i] = VP[i]/sqrt(VP[i][0]**2+VP[i][1]**2+VP[i][2]**2)
+           verif = dot(transpose(VP[i]),VN[0]) 
+           if abs(verif) > 0.01:
+             UTMESS('A','RUPTURE1_36')
+         else :
+           Pfon2 = array([Listfo[4*i],Listfo[4*i+1],Listfo[4*i+2]])
+           Pfon3 = array([Listfo[4*(i+1)],Listfo[4*(i+1)+1],Listfo[4*(i+1)+2]])
+           VT = (Pfon3 - Pfon2)/sqrt(dot(transpose(Pfon3-Pfon2),Pfon3-Pfon2))
+           VP[0] = array(cross_product(VT,v1))
+           VNi = array([Vpropa[3],Vpropa[4],Vpropa[5]])
+           verif = dot(transpose(VP[i]),VNi) 
+           if abs(verif) < 0.99:
+             vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
+             UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
+         for i in range(1,Nbfond-1):
+           Pfon1 = array([Listfo[4*(i-1)],Listfo[4*(i-1)+1],Listfo[4*(i-1)+2]])
+           Pfon2 = array([Listfo[4*i],Listfo[4*i+1],Listfo[4*i+2]])
+           Pfon3 = array([Listfo[4*(i+1)],Listfo[4*(i+1)+1],Listfo[4*(i+1)+2]])
+           absf = sqrt(dot(transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1]
+           absfon.append(absf)
+           VT = (Pfon3 - Pfon2)/sqrt(dot(transpose(Pfon3-Pfon2),Pfon3-Pfon2))
+           VT = VT+(Pfon2 - Pfon1)/sqrt(dot(transpose(Pfon2-Pfon1),Pfon2-Pfon1))
+           VP[i] = array(cross_product(VT,v1)) 
+           VP[i] = VP[i]/sqrt(dot(transpose(VP[i]),VP[i]))
+           VNi = array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+           verif = dot(transpose(VN[i]),VNi) 
+           if abs(verif) < 0.99:
+             vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
+             UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
+         i = Nbfond-1
          Pfon1 = array([Listfo[4*(i-1)],Listfo[4*(i-1)+1],Listfo[4*(i-1)+2]])
          Pfon2 = array([Listfo[4*i],Listfo[4*i+1],Listfo[4*i+2]])
-         Pfon3 = array([Listfo[4*(i+1)],Listfo[4*(i+1)+1],Listfo[4*(i+1)+2]])
          absf = sqrt(dot(transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1]
          absfon.append(absf)
-         VT = (Pfon3 - Pfon2)/sqrt(dot(transpose(Pfon3-Pfon2),Pfon3-Pfon2))
-         VT = VT+(Pfon2 - Pfon1)/sqrt(dot(transpose(Pfon2-Pfon1),Pfon2-Pfon1))
-         VN[i] = array(cross_product(VT,v1)) 
-         VN[i] = VN[i]/sqrt(dot(transpose(VN[i]),VN[i]))
-       i = Nbfond-1
-       Pfon1 = array([Listfo[4*(i-1)],Listfo[4*(i-1)+1],Listfo[4*(i-1)+2]])
-       Pfon2 = array([Listfo[4*i],Listfo[4*i+1],Listfo[4*i+2]])
-       absf = sqrt(dot(transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1]
-       absfon.append(absf)
-       if DTAN_EXTR != None :
-         VN[i] = array(DTAN_EXTR)
-       else :
-         VT = (Pfon2 - Pfon1)/sqrt(dot(transpose(Pfon2-Pfon1),Pfon2-Pfon1))
-         VN[i] = array(cross_product(VT,v1))
-     else :  
+         if DTAN_EXTR != None :
+           VP[i] = array(DTAN_EXTR)
+           VP[i] = VP[i]/sqrt(VP[i][0]**2+VP[i][1]**2+VP[i][2]**2)
+           verif = dot(transpose(VP[i]),VN[i]) 
+           if abs(verif) > 0.01:
+             UTMESS('A','RUPTURE1_37')
+         else :
+           VT = (Pfon2 - Pfon1)/sqrt(dot(transpose(Pfon2-Pfon1),Pfon2-Pfon1))
+           VP[i] = array(cross_product(VT,v1))
+           VNi = array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+           verif = dot(transpose(VN[i]),VNi) 
+           if abs(verif) < 0.99 :
+             vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
+             UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
+       else :  
          VT = array([0.,0.,1.])
-         VN[i] = array(cross_product(v1,VT))   
+         for i in range(0,Nbfond):
+           VP[i] = array(cross_product(v1,VT))  
+           VN[i] = v1
+           VNi = array([Vpropa[0+4*i],Vpropa[1+4*i],0.])
+           verif = dot(transpose(VN[i]),VNi) 
+           if abs(verif) < 0.99 :
+             vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
+             UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
 #Sens de la tangente   
      if MODELISATION=='3D' : i = Nbfond/2
      else : i = 0
-     Po =  array([Listfo[4*(i-1)],Listfo[4*(i-1)+1],Listfo[4*(i-1)+2]])
-     Porig = Po + ABSC_CURV_MAXI*VN[i]
-     Pextr = Po - ABSC_CURV_MAXI*VN[i]
-     __Tabg = MACR_LIGN_COUPE(RESULTAT=__RESLIN,NOM_CHAM='DEPL',
+     Po =  array([Listfo[4*i],Listfo[4*i+1],Listfo[4*i+2]])
+     Porig = Po + ABSC_CURV_MAXI*VP[i]
+     Pextr = Po - ABSC_CURV_MAXI*VP[i]
+     __Tabg = MACR_LIGN_COUPE(RESULTAT=__RESX,NOM_CHAM='DEPL',
                    LIGN_COUPE=_F(NB_POINTS=3,COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
-                                  TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),),);
+                                  TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
+                                  DISTANCE_MAX=dmax),);
      tmp=__Tabg.EXTR_TABLE()
      test = getattr(tmp,'H1X').values()
      if test==[None]*3 : 
-        message = 'PROBLEME DANS LA RECUPERATION DU SAUT DE DEPLACEMENT SUR LES LEVRES :\n '
-        message=message+'VERIFIER QUE LE RESULTAT CORRESPOND BIEN A UN CALCUL SUR DES ELEMENT X-FEM ET QUE\n '
-        message=message+'LE MAILLAGE FOURNI EST BIEN LE MAILLAGE LINEAIRE INITIAL'
-        UTMESS('F',macro, message)
+        UTMESS('F','RUPTURE0_33')
      if test[0]!=None :
        sens = 1
      else :
@@ -612,30 +672,42 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
      TSaut = [None]*Nbfond    
      NB_NOEUD_COUPE = args['NB_NOEUD_COUPE']
      if NB_NOEUD_COUPE < 3 : 
-       message = 'LE NOMBRE DE NOEUDS NB_NOEUD_COUPE DOIT ETRE SUPERIEUR A 3 : ON PREND LA VALEUR PAR DEFAUT'
-       UTMESS('A', macro, message)
+       UTMESS('A','RUPTURE0_34')
        NB_NOEUD_COUPE = 5
      for i in range(Nbfond):
         Porig = array([Listfo[4*i],Listfo[4*i+1],Listfo[4*i+2]])
-        if i==0 and DTAN_ORIG!=None : Pextr = Porig - ABSC_CURV_MAXI*VN[i]
-        elif i==(Nbfond-1) and DTAN_EXTR!=None : Pextr = Porig - ABSC_CURV_MAXI*VN[i]
-        else : Pextr = Porig + ABSC_CURV_MAXI*VN[i]*sens
-        TSaut[i] = MACR_LIGN_COUPE(RESULTAT=__RESLIN,NOM_CHAM='DEPL',
+        if i==0 and DTAN_ORIG!=None : Pextr = Porig - ABSC_CURV_MAXI*VP[i]
+        elif i==(Nbfond-1) and DTAN_EXTR!=None : Pextr = Porig - ABSC_CURV_MAXI*VP[i]
+        else : Pextr = Porig + ABSC_CURV_MAXI*VP[i]*sens
+        TSaut[i] = MACR_LIGN_COUPE(RESULTAT=__RESX,NOM_CHAM='DEPL',
                          LIGN_COUPE=_F(NB_POINTS=NB_NOEUD_COUPE,COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
-                                        TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),),);
+                                        TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
+                                        DISTANCE_MAX=dmax),);
 
      Nbnofo = Nbfond
-     DETRUIRE(CONCEPT=_F(NOM=__MODLINE),INFO=1) 
-     DETRUIRE(CONCEPT=_F(NOM=__RESLIN),INFO=1) 
+     if xcont[0] != 0 :  
+       DETRUIRE(CONCEPT=_F(NOM=__MODLINE),INFO=1) 
+       DETRUIRE(CONCEPT=_F(NOM=__RESX),INFO=1) 
    
+     if INFO==2 :
+        mcfact=[]
+        mcfact.append(_F(PARA='PT_FOND',LISTE_I=range(Nbfond)))
+        mcfact.append(_F(PARA='VN_X'        ,LISTE_R=[VN[i][0] for i in range(Nbfond)]))
+        mcfact.append(_F(PARA='VN_Y'        ,LISTE_R=[VN[i][1] for i in range(Nbfond)]))
+        mcfact.append(_F(PARA='VN_Z'        ,LISTE_R=[VN[i][2] for i in range(Nbfond)]))
+        mcfact.append(_F(PARA='VP_X'        ,LISTE_R=[VP[i][0] for i in range(Nbfond)]))
+        mcfact.append(_F(PARA='VP_Y'        ,LISTE_R=[VP[i][1] for i in range(Nbfond)]))
+        mcfact.append(_F(PARA='VP_Z'        ,LISTE_R=[VP[i][2] for i in range(Nbfond)]))
+        __resu2=CREA_TABLE(LISTE=mcfact,TITRE='             VECTEUR NORMAL A LA FISSURE    -    DIRECTION DE PROPAGATION')
+        aster.affiche('MESSAGE',__resu2.EXTR_TABLE().__repr__())
+        DETRUIRE(CONCEPT=_F(NOM=__resu2),INFO=1)
    
    else :
-     Nbnofo = 1
+     Nbnofo = 1 
+     
 #   ----------Recuperation de la temperature au fond -------------  
    if Tempe3D :
-      resuth = map(string.rstrip,resuth)
-      Rth = self.jdc.sds_dict[resuth[0]]
+      Rth = self.jdc.sds_dict[resuth]
       __TEMP=POST_RELEVE_T(ACTION=_F(INTITULE='Temperature fond de fissure',
                                        NOEUD=Lnofon,TOUT_CMP='OUI',
                                        RESULTAT=Rth,NOM_CHAM='TEMP',TOUT_ORDRE='OUI',
@@ -703,12 +775,12 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
                DETRUIRE(CONCEPT=_F(NOM=__TINF),INFO=1)                 
             else :
                tabinf=TABL_DEPL_INF.EXTR_TABLE()
-               if TABL_DEPL_INF==None : UTMESS('F', macro, 'TABL_DEPL_SUP et TABL_DEPL_INF sont obligatoires si SYME_CHAR=SANS')
+               if TABL_DEPL_INF==None : UTMESS('F','RUPTURE0_35')
                veri_tab(tabinf,TABL_DEPL_INF.nom,ndim)
                Li = [string.ljust(Lnoinf[ino][i],8) for i in range(len(Lnoinf[ino]))]
                tabinf=tabinf.NOEUD==Li
          else :
-            if TABL_DEPL_INF==None : UTMESS('F', macro, 'TABL_DEPL_SUP et TABL_DEPL_INF sont obligatoires si SYME_CHAR=SANS')
+            if TABL_DEPL_INF==None : UTMESS('F','RUPTURE0_35')
             tabinf=TABL_DEPL_INF.EXTR_TABLE()
             veri_tab(tabinf,TABL_DEPL_INF.nom,ndim)
 
@@ -732,13 +804,12 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
              if type(NUME_ORDRE) not in EnumTypes : NUME_ORDRE=(NUME_ORDRE,)
              l_ord=list(NUME_ORDRE)
            elif LIST_ORDRE !=None : 
-              l_ord= aster.getvectjev(string.ljust(LIST_ORDRE.nom,19)+'.VALE'
+              l_ord = LIST_ORDRE.VALE.get(
            l_inst = []
            for ord in l_ord :
              if ord in l_ord_tab : l_inst.append(d_ord_tab[ord])
              else :  
-               message ='LE NUMERO D ORDRE %i N A PAS ETE ETE TROUVE DANS LA TABLE\n'%ord 
-               UTMESS('F', macro, message)
+               UTMESS('F','RUPTURE0_37',vali=ord)
            PRECISION = 1.E-6
            CRITERE='ABSOLU'
          elif INST !=None or LIST_INST !=None :
@@ -752,11 +823,9 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
                if CRITERE=='RELATIF' and inst!=0.: match=[x for x in l_inst_tab if abs((inst-x)/inst)<PRECISION]
                else                              : match=[x for x in l_inst_tab if abs(inst-x)<PRECISION]
                if len(match)==0 : 
-                 message = 'PAS D INSTANT TROUVE DANS LA TABLE POUR L INSTANT %f\n'%inst
-                 UTMESS('F', macro, message)
+                 UTMESS('F','RUPTURE0_38',valr=inst)
                if len(match)>=2 :
-                 message = 'PLUSIEURS INSTANTS TROUVES DANS LA TABLE POUR L INSTANT %f\n'%inst 
-                 UTMESS('F', macro, message)
+                 UTMESS('F','RUPTURE0_39',valr=inst)
          else :
             l_inst=l_inst_tab
             PRECISION = 1.E-6
@@ -792,7 +861,9 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
           if not FOND_FISS :
             refs=copy.copy(abscs)
             refs.sort()
-            if refs!=abscs : UTMESS('F', macro, 'ABSC_CURV NON CROISSANTS POUR TABL_DEPL_INF')
+            if refs!=abscs :
+               mctabl='TABL_DEPL_INF' 
+               UTMESS('F','RUPTURE0_40',valk=mctabl)
             if ABSC_CURV_MAXI!=None : rmax = ABSC_CURV_MAXI
             else                    : rmax = abscs[-1]
             precv = PREC_VIS_A_VIS
@@ -834,17 +905,19 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
           if not FOND_FISS :
             refi=copy.copy(absci)
             refi.sort()
-            if refi!=absci : UTMESS('F', macro, 'ABSC_CURV NON CROISSANTS POUR TABL_DEPL_SUP')
+            if refi!=absci :
+                mctabl='TABL_DEPL_SUP' 
+                UTMESS('F','RUPTURE0_40',valk=mctabl)
             refic=[x for x in refi if x<rmprec]
             nbvali=len(refic)
           else :
             nbvali=len(absci)
           if nbvali!=nbval :
-             message= 'DIFFERENCE DE POINTS ENTRE LA LEVRE SUPERIEURE ET LA LEVRE INFERIEURE'
-             if FOND_FISS : message=message+' POUR TRAITER LE NOEUD %.s \n'%Lnofon[i]
-             message=message+' Nombre de points - levre superieure : %i\n'%len(refsc)
-             message=message+' Nombre de points - levre inferieure : %i\n'%len(refic)
-             UTMESS('A',macro, message)
+             if FOND_FISS : 
+                UTMESS('A+','RUPTURE0_42')
+                UTMESS('A','RUPTURE0_43',valk=Lnofon[i],vali=[len(refsc),len(refic)])
+             else:
+                UTMESS('A','RUPTURE0_42')
           nbval=min(nbval,nbvali)
           absci=array(absci[:nbval])
           coxi=array(tabinfi['COOR_X'].values()['COOR_X'][:nbval],Float)
@@ -857,7 +930,7 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
             dist=(coxs-coxi)**2+(coys-coyi)**2+(cozs-cozi)**2
             dist=sqrt(dist)
             for d in dist :
-               if d>precn : UTMESS('F', macro, 'LES NOEUDS NE SONT PAS EN VIS_A_VIS')
+               if d>precn : UTMESS('F','RUPTURE0_44')
           
           if FOND_FISS and not RESULTAT :#tri des noeuds avec abscisse
             Pfon = array([d_coor[Lnofon[ino]][0],d_coor[Lnofon[ino]][1],d_coor[Lnofon[ino]][2]])
@@ -883,13 +956,10 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
 
 #     --- CAS FISSURE X-FEM ---
         if  FISSURE : 
-           nbval = NB_NOEUD_COUPE
            H1 = getattr(tabsupi,'H1X').values()
+           nbval = len(H1)
            if H1[-1]==None : 
-             message = 'PROBLEME DANS LA RECUPERATION DU SAUT DE DEPLACEMENT SUR LES LEVRES :\n '
-             message=message+'VERIFIER QUE LE RESULTAT CORRESPOND BIEN A UN CALCUL SUR DES ELEMENT X-FEM ET QUE\n '
-             message=message+'LE MAILLAGE FOURNI EST BIEN LE MAILLAGE LINEAIRE INITIAL'
-             UTMESS('F',macro, message)
+             UTMESS('F','RUPTURE0_33')
            H1 = complete(H1)
            E1 = getattr(tabsupi,'E1X').values()
            E1 = complete(E1)
@@ -908,10 +978,10 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
 
 #     --- TESTS NOMBRE DE NOEUDS---
         if nbval<3 :
-           message= 'IL FAUT AU MOINS TROIS NOEUDS DANS LE PLAN DEFINI PAR LES LEVRES ET PERPENDICULAIRE AU FOND DE FISSURE'
-           if FOND_FISS : message=message+'Noeud %.s \n'%Lnofon[ino]
-           message=message+' : augmenter ABSC_CURV_MAXI\n'
-           UTMESS('F',macro, message)
+           UTMESS('F+','RUPTURE0_46')
+           if FOND_FISS :
+               UTMESS('F+','RUPTURE0_47',valk=Lnofon[ino])
+           UTMESS('F','RUPTURE0_25')
            
 #   ---------- CALCUL PROP. MATERIAU AVEC TEMPERATURE -----------  
         if Tempe3D :
@@ -938,7 +1008,8 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
 #       3 : VECTEUR TANGENT AU FOND DE FISSURE EN M
 #
         if FISSURE :
-           v2 = VN[ino]
+           v2 = VP[ino]
+           v1 = VN[ino]
         elif SYME_CHAR=='SANS' :
            vo =  array([( coxs[-1]+coxi[-1] )/2.,( coys[-1]+coyi[-1] )/2.,( cozs[-1]+cozi[-1] )/2.])
            ve =  array([( coxs[0 ]+coxi[0 ] )/2.,( coys[0 ]+coyi[0 ] )/2.,( cozs[0 ]+cozi[0 ] )/2.])
@@ -959,10 +1030,7 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
         dpls = asarray([dxs,dys,dzs])
         dpls = matrixmultiply(pgl,dpls)
         if SYME_CHAR!='SANS' and abs(dpls[0][0]) > 1.e-10 :
-          message= 'DEPLACEMENT NORMAL DU NOEUD %s NON NUL'%Lnofon[ino]
-          message=message+' ET SYME_CHAR = %s :\n'%SYME_CHAR
-          message=message+' VERIFIER LES CONDITIONS AUX LIMITES ET VECT_K1.'
-          UTMESS('A',macro, message)
+          UTMESS('A','RUPTURE0_49',valk=[Lnofon[ino],SYME_CHAR])
         if FISSURE :
            saut=dpls
         elif SYME_CHAR=='SANS' :
@@ -1089,6 +1157,8 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
         if FISSURE and MODELISATION=='3D': 
           mcfact.append(_F(PARA='PT_FOND',LISTE_I=[ino+1,]*3))
           mcfact.append(_F(PARA='ABSC_CURV',LISTE_R=[absfon[ino],]*3))
+        if FISSURE  and MODELISATION!='3D' and Nbfond!=1 :
+          mcfact.append(_F(PARA='PT_FOND',LISTE_I=[ino+1,]*3))
         mcfact.append(_F(PARA='METHODE',LISTE_I=(1,2,3)))
         mcfact.append(_F(PARA='K1_MAX' ,LISTE_R=kg[0].tolist() ))
         mcfact.append(_F(PARA='K1_MIN' ,LISTE_R=kg[1].tolist() ))
index 6295395ba2fa947f6127c00d6fbf1db2a9e0041e..54b71a9716e379fa57fb11917cf813ec2656a00f 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF post_k_trans_ops Macro  DATE 31/10/2006   AUTEUR REZETTE C.REZETTE 
+#@ MODIF post_k_trans_ops Macro  DATE 22/01/2008   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -26,7 +26,7 @@ def post_k_trans_ops(self,RESU_TRANS,K_MODAL,TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE,
   import aster
   import string
   from Accas import _F
-  from Utilitai.Utmess     import UTMESS
+  from Utilitai.Utmess     import  UTMESS
   from types import ListType, TupleType
   from Utilitai.Table      import Table, merge
   EnumTypes = (ListType, TupleType)
@@ -117,9 +117,7 @@ def post_k_trans_ops(self,RESU_TRANS,K_MODAL,TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE,
       
   if nmodtr != n_mode : 
       n_mode = min(nmodtr,n_mode)
-      message = 'NOMBRE DE MODES DIFFERENT ENTRE LA BASE MODALE'
-      message = message +'ET %s : ON PREND LE MINIMUM DES DEUX (%i)\n'%(nomresu,n_mode)
-      UTMESS('A', macro, message)
+      UTMESS('A','RUPTURE0_50',valk=nomresu,vali=n_mode)
 
 #  
 # Traitement des mots clés ORDRE/INST/LIST_INST et LIST_ORDRE
@@ -151,8 +149,7 @@ def post_k_trans_ops(self,RESU_TRANS,K_MODAL,TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE,
          l_ord.append(ord)
          l_inst.append(d_ins[ord][0])
       else :
-         message = 'LE NUMERO D ORDRE %i N APPARTIENT PAS AU RESULTAT %s'%(ord,nomresu) 
-         UTMESS('A', macro, message) 
+         UTMESS('A','RUPTURE0_51',vali=ord,valk=nomresu)
   elif LIST_INST or INST :
     CRITERE = args['CRITERE']
     PRECISION = args['PRECISION']
@@ -165,11 +162,9 @@ def post_k_trans_ops(self,RESU_TRANS,K_MODAL,TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE,
       if CRITERE=='RELATIF' and ins!=0.: match=[x for x in l0_inst if abs((ins-x)/ins)<PRECISION]
       else                             : match=[x for x in l0_inst if abs(ins-x)<PRECISION]
       if len(match)==0 : 
-         message = 'PAS D INSTANT TROUVE DANS LA TABLE POUR L INSTANT %f\n'%ins
-         UTMESS('A', macro, message)
+         UTMESS('A','RUPTURE0_38',valr=ins)
       elif len(match)>=2 :
-         message = 'PLUSIEURS INSTANTS TROUVES DANS LA TABLE POUR L INSTANT %f\n'%ins
-         UTMESS('A', macro, message)
+         UTMESS('A','RUPTURE0_39',valr=ins)
       else :
          l_inst.append(match[0])
          l_ord.append(d_ord[match[0]][0])
@@ -177,7 +172,7 @@ def post_k_trans_ops(self,RESU_TRANS,K_MODAL,TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE,
       l_ord = l0_ord
       l_inst = l0_inst
   nbarch = len(l_ord)
-  if nbarch ==0 : UTMESS('F', macro, 'AUCUN INSTANT OU NUMERO D ORDRE TROUVE') 
+  if nbarch ==0 : UTMESS('F','RUPTURE0_54')
   
 
 #  
index 4537a0fa0e246c86f56b8e40dd123ef2539b4682..249c8a79425783744cfcd3da84b0bc3fc5bbcdde 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF reca_algo Macro  DATE 16/05/2007   AUTEUR ASSIRE A.ASSIR
+#@ MODIF reca_algo Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETT
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE ASSIRE A.ASSIRE
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
@@ -23,6 +23,7 @@ import Numeric, MLab
 from Numeric import take, size
 import copy, os
 import LinearAlgebra 
+from externe_mess import UTMESS
 
 try:
   import aster
@@ -31,16 +32,6 @@ try:
   from Accas import _F
 except: pass
 
-try:
-   import Utilitai.Utmess
-   from Utilitai.Utmess import UTMESS
-except ImportError:
-   def UTMESS(code,sprg,texte):
-      fmt='\n <%s> <%s> %s\n\n'
-      print fmt % (code,sprg,texte)
-      if code=='F': sys.exit()
-
-
 
 def calcul_gradient(A,erreur):
    grad = Numeric.dot(Numeric.transpose(A),erreur)
index 17609ead246234df5168820be6ca1f4ce6384f78..91f78f3764951cbb617878da31789cbc9130a75a 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF reca_calcul_aster Macro  DATE 16/05/2007   AUTEUR ASSIRE A.ASSIR
+#@ MODIF reca_calcul_aster Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETT
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE ASSIRE A.ASSIRE
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
@@ -28,15 +28,7 @@ debug = False
 
 import copy, Numeric, types, os, sys, pprint, math
 from glob import glob
-
-try:
-   import Utilitai.Utmess
-   from Utilitai.Utmess import UTMESS
-except ImportError:
-   def UTMESS(code,sprg,texte):
-      fmt='\n <%s> <%s> %s\n\n'
-      print fmt % (code,sprg,texte)
-      if code=='F': sys.exit()
+from externe_mess import UTMESS
 
 from Utilitai.System import ExecCommand
 
@@ -525,12 +517,14 @@ Message:
                    UTMESS('F', nompro, message)
 
                 try:
-                   ier, message, table_lue = lecture_table(texte, 1, ' ')
+                   table_lue = lecture_table(texte, 1, ' ')
                    list_para = table_lue.para
                    tab_lue   = table_lue.values()
                 except Exception, err:
                    ier=1
                    message = "Impossible de recuperer les resultats de calcul esclave (lecture des tables)!\nMessage:\n" + str(err)
+                else:
+                   ier=0
 
                 if ier!=0 :
                    UTMESS('F', nompro, message)
@@ -606,13 +600,14 @@ Message:
                              UTMESS('F', nompro, message)
 
                           try:
-                             ier, message, table_lue = lecture_table(texte, 1, ' ')
+                             table_lue = lecture_table(texte, 1, ' ')
                              list_para = table_lue.para
                              tab_lue   = table_lue.values()
                           except Exception, err:
                              ier=1
                              message = "Impossible de recuperer les resultats de calcul esclave (lecture des tables)!\nMessage:\n" + str(err)
-
+                          else:
+                             ier=0
 
                           if ier!=0 :
                              UTMESS('F', nompro, message)
index b9270705f0bbfb89f511543993edd37ec2306053..b0daf6a736238350cc7d683082f6d7ac2538ca1f 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF reca_controles Macro  DATE 16/05/2007   AUTEUR ASSIRE A.ASSIR
+#@ MODIF reca_controles Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETT
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE ASSIRE A.ASSIRE
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 
 import string, copy, Numeric, types, os, sys, pprint
-
-try:
-   import Utilitai.Utmess
-   from Utilitai.Utmess import UTMESS
-except ImportError:
-   def UTMESS(code,sprg,texte):
-      fmt='\n <%s> <%s> %s\n\n'
-      print fmt % (code,sprg,texte)
-      if code=='F': sys.exit()
-
+from externe_mess import UTMESS
 
 # Nom de la routine
 nompro = 'MACR_RECAL'
index 4c60b3a064de5cc5b0dcc3ea9dcad08c9f0289dc..73585f0c6580f3fd7d1b56f35c7f8cad41f3331e 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF reca_interp Macro  DATE 16/05/2007   AUTEUR ASSIRE A.ASSIR
+#@ MODIF reca_interp Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETT
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE ASSIRE A.ASSIRE
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 
 import os, sys, pprint
 import Numeric
+from externe_mess import UTMESS
 
 try: import Macro
 except: pass
 
-try:
-   import Utilitai.Utmess
-   from Utilitai.Utmess import UTMESS
-except ImportError:
-   def UTMESS(code,sprg,texte):
-      fmt='\n <%s> <%s> %s\n\n'
-      print fmt % (code,sprg,texte)
-      if code=='F': sys.exit()
-
 
 #===========================================================================================
 
index e20cb6109e31e2de2e3590c5ab7735b020361751..4a4061ca238f397536f0f721d7a61b203f33f70c 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF reca_message Macro  DATE 16/05/2007   AUTEUR ASSIRE A.ASSIR
+#@ MODIF reca_message Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETT
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE ASSIRE A.ASSIRE
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 
 import os, Numeric
-
-try:
-   import Utilitai.Utmess
-   from Utilitai.Utmess import UTMESS
-except:
-   def UTMESS(code,sprg,texte):
-      fmt='\n <%s> <%s> %s\n\n'
-      print fmt % (code,sprg,texte)
-      if code=='F': sys.exit()
+from externe_mess import UTMESS
 
 #===========================================================================================
 
index c379670c31e1250bf6166143ba13c40875ed3123..d5d7f94a5f2d32df566876ec2b7fed4da06f0bff 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF reca_utilitaires Macro  DATE 16/05/2007   AUTEUR ASSIRE A.ASSIR
+#@ MODIF reca_utilitaires Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETT
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE ASSIRE A.ASSIRE
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
@@ -21,7 +21,7 @@
 
 import Numeric, LinearAlgebra, copy, os, string, types, sys, glob
 from Numeric import take
-
+from externe_mess import UTMESS
 
 try:    import Gnuplot
 except: pass
@@ -29,14 +29,7 @@ except: pass
 try:
    from Cata.cata import INFO_EXEC_ASTER, DEFI_FICHIER, IMPR_FONCTION, DETRUIRE
    from Accas import _F
-   import Utilitai.Utmess
-   from Utilitai.Utmess import UTMESS
-except ImportError:
-   def UTMESS(code,sprg,texte):
-      fmt='\n <%s> <%s> %s\n\n'
-      print fmt % (code,sprg,texte)
-      if code=='F': sys.exit()
-
+except : pass
 
 
 # ------------------------------------------------------------------------------
index 761b45fb360569c61f1a91052fba5fa8c75eea3c..e8c0eab51fb8f8e0b1260dd9e6968dc7e17c6021 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF stanley_ops Macro  DATE 12/09/2006   AUTEUR ASSIRE A.ASSIR
+#@ MODIF stanley_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETT
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  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.        
+# 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.
 # ======================================================================
 
 
@@ -30,7 +30,7 @@ def stanley_ops(self,RESULTAT,MODELE,CHAM_MATER,CARA_ELEM,DISPLAY,**args):
   import aster
   from Accas import _F
   from Noyau.N_utils import AsType
-  from Utilitai.Utmess import UTMESS
+  from Utilitai.Utmess import  UTMESS
   from Utilitai.UniteAster import UniteAster
 
   prev_onFatalError = aster.onFatalError()
@@ -43,12 +43,12 @@ def stanley_ops(self,RESULTAT,MODELE,CHAM_MATER,CARA_ELEM,DISPLAY,**args):
 
   # Redefinition eventuelle du DISPLAY
   if DISPLAY:
-    UTMESS('I','STANLEY', 'Redefinition du DISPLAY vers : ' + DISPLAY)
+    UTMESS('I','STANLEY_1',valk=DISPLAY)
     os.environ['DISPLAY'] = DISPLAY
 
   # Mode validation de la non-regression
   if args['UNITE_VALIDATION']:
-     UTMESS('I','STANLEY', 'Stanley fonctionne en mode validation de non-regresion')
+     UTMESS('I','STANLEY_2')
      UL = UniteAster()
      FICHIER_VALID=UL.Nom(args['UNITE_VALIDATION'])
   else:
@@ -56,12 +56,12 @@ def stanley_ops(self,RESULTAT,MODELE,CHAM_MATER,CARA_ELEM,DISPLAY,**args):
 
   # On ne lance Stanley que si la variable DISPLAY est définie
   if os.environ.has_key('DISPLAY'):
-  
+
     import Stanley
     from Stanley import stanley
 
     if (RESULTAT and MODELE and CHAM_MATER):
-      _MAIL = aster.getvectjev( string.ljust(MODELE.nom,8) + '.MODELE    .NOMA        ' )
+      _MAIL = aster.getvectjev( string.ljust(MODELE.nom,8) + '.MODELE    .LGRF        ' )
       _MAIL = string.strip(_MAIL[0])
       MAILLAGE = self.jdc.g_context[_MAIL]
       if CARA_ELEM:
@@ -72,17 +72,7 @@ def stanley_ops(self,RESULTAT,MODELE,CHAM_MATER,CARA_ELEM,DISPLAY,**args):
       stanley.PRE_STANLEY(FICHIER_VALID)
 
   else:
-      UTMESS('A','STANLEY',
-            """Aucune variable d'environnement DISPLAY définie !
-               STANLEY ne pourra pas fonctionner. On l'ignore.
-
-               Si vous etes en Interactif, cochez le bouton Suivi Interactif
-               dans ASTK.
-
-               Vous pouvez également préciser votre DISPLAY dans les arguments
-               de la commande STANLEY :
-
-               STANLEY(DISPLAY='adresse_ip:0.0');""")
+      UTMESS('A','STANLEY_3',valk=['STANLEY'])
 
   aster.onFatalError(prev_onFatalError)
 
index 35d34da1ae782470a49e6f73da8ef825a85b2ed7..62e7d02cb5e828c016d7f9660531e83241b8306c 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF test_fichier_ops Macro  DATE 22/05/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF test_fichier_ops Macro  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # ======================================================================
 
 import sys
-import os.path
+import os
 import re
-from math import floor, log10
-from types import StringType
 import md5
 
 #-------------------------------------------------------------------------------
-def test_fichier_ops(self, FICHIER, NB_CHIFFRE, EPSILON, VALE_K, INFO, **args):
+class TestFichierError(Exception):
+   pass
+
+#-------------------------------------------------------------------------------
+def convert(x):
+   return float(x)
+
+def f_SOMM(somme, lx):
+   return somme + sum([convert(x) for x in lx])
+
+def f_SOMM_ABS(somme, lx):
+   return somme + sum([abs(convert(x)) for x in lx])
+
+def f_MINI(val, lx):
+   return min(val, min([convert(x) for x in lx]))
+
+def f_MAXI(val, lx):
+   return max(val, max([convert(x) for x in lx]))
+
+def f_MINI_ABS(val, lx):
+   return min(val, min([abs(convert(x)) for x in lx]))
+
+def f_MAXI_ABS(val, lx):
+   return max(val, max([abs(convert(x)) for x in lx]))
+
+dict_func_test = {
+   'SOMM'     : f_SOMM,
+   'SOMM_ABS' : f_SOMM_ABS,
+   'MINI'     : f_MINI,
+   'MAXI'     : f_MAXI,
+   'MINI_ABS' : f_MINI_ABS,
+   'MAXI_ABS' : f_MAXI_ABS,
+}
+
+#-------------------------------------------------------------------------------
+def test_fichier_ops(self, FICHIER, NB_VALE, VALE, VALE_K, TYPE_TEST,
+                           CRITERE, PRECISION, INFO, **kwargs):
    """
-     Macro TEST_FICHIER permettant de tester la non-regression d'un fichier
-     'a une tolerance' pres pour les nombres reels en calculant
-     le md5sum.
+     Macro permettant de tester la non-regression d'un fichier.
+     On teste le nombre de réels présents, et, facultativement, la
+     somme de ces nombres et le texte du fichier.
    """
    ier = 0
    # La macro compte pour 1 dans la numerotation des commandes
@@ -45,233 +79,235 @@ def test_fichier_ops(self, FICHIER, NB_CHIFFRE, EPSILON, VALE_K, INFO, **args):
    
    import aster
    from Accas import _F
-   from Macro.test_fichier_ops import md5file
-   from Utilitai.Utmess import UTMESS
-
-   # vérifie la syntaxe des expressions régulières fournies
-   l_regexp = []
-   if args['EXPR_IGNORE']:
-      if type(args['EXPR_IGNORE']) is StringType:
-         lexp = [args['EXPR_IGNORE']]
-      else:
-         lexp = args['EXPR_IGNORE']
-      for exp in lexp:
-         try:
-            obj = re.compile(exp)
-         except re.error, s:
-            UTMESS('F', 'TEST_FICHIER',
-                   '<INVALID_REGEXP> %s pour %s' % (str(s), repr(exp)))
-         else:
-            l_regexp.append(exp)
+   from Utilitai.Utmess import  UTMESS
 
    is_ok = 0
 
    # vérifier que le fichier a été fermé
    tinfo__ = INFO_EXEC_ASTER(LISTE_INFO='ETAT_UNITE', FICHIER=FICHIER)
-   
-   if tinfo__['ETAT_UNITE', 1].find('OUVERT')>-1:
-      UTMESS('A',  'TEST_FICHIER',
-             "LE FICHIER N'A PAS ETE FERME :\n%s" % FICHIER)
+   if tinfo__['ETAT_UNITE', 1].find('OUVERT') > -1:
+      UTMESS('S','TEST0_2',valk=FICHIER)
 
-   # fichier correctement fermé
-   else:
-      # calcule le md5sum du fichier
-      ier, mdsum = md5file(FICHIER, NB_CHIFFRE, EPSILON, l_regexp, INFO)
-      if ier != 0:
-         if ier == 4:
-            texte_erreur = 'Fichier inexistant : '+FICHIER
-         else:
-            texte_erreur = 'Erreur dans md5file, code retour = '+str(ier)
-         texte_erreur = '<S> <TEST_FICHIER> '+texte_erreur
-         # aujourd'hui, je ne sais pas déclencher autre chose que <F>...
-         self.cr.fatal(texte_erreur)
-         return ier
-
-      # comparaison a la reference
-      if INFO > 0 :
-         aster.affiche('MESSAGE', ' %-20s : %32s\n' % ('REFERENCE', VALE_K))
-
-      if mdsum == VALE_K:
-         is_ok = 1
+   # lecture du fichier
+   if not os.path.isfile(FICHIER):
+      UTMESS('S', 'TEST0_3', valk=FICHIER)
+   fileobj = open(FICHIER, 'r')
+
+   # filtre par expression régulière
+   try:
+      fileobj = regexp_filter(fileobj, kwargs['EXPR_IGNORE'])
+   except TestFichierError, (idmess, valk):
+      UTMESS('S', idmess, valk=valk)
+
+   # calcule le nombre de réels et la somme ou min/max
+   nbval, valeur, md5sum = test_iter(fileobj, function=dict_func_test[TYPE_TEST], verbose=(INFO > 1))
+   fileobj.close()
 
    # produit le TEST_TABLE
-   tab1__ = CREA_TABLE(LISTE=(_F(PARA='TEST',
-                                 TYPE_K='K8',
-                                 LISTE_K='VALEUR  ',),
-                              _F(PARA='BOOLEEN',
-                                 LISTE_I=is_ok,),),)
-   if args['REFERENCE'] == 'NON_REGRESSION':
-      TEST_TABLE(TABLE=tab1__,
-                 FILTRE=_F(NOM_PARA='TEST',
-                           VALE_K='VALEUR  ',),
-                 NOM_PARA='BOOLEEN',
-                 VALE_I=1,
-                 PRECISION=1.e-3,
-                 CRITERE='ABSOLU',
-                 REFERENCE=args['REFERENCE'],
-                 VERSION=args['VERSION'],)
+   md5ref = VALE_K or 'non testé'
+   is_ok = int(md5sum == md5ref)
+   tab1__ = CREA_TABLE(LISTE=(_F(PARA='NBVAL',  LISTE_I=nbval,),
+                              _F(PARA='VALEUR', LISTE_R=valeur,),
+                              _F(PARA='TEXTE',  LISTE_I=is_ok),),)
+   if VALE is not None:
+      sVALE = '%20.13e' % VALE
    else:
+      sVALE = 'non testé'
+   UTMESS('I', 'TEST0_4', vali=(nbval, NB_VALE), valr=valeur, valk=(md5sum, md5ref, FICHIER, sVALE))
+   
+   kwopt = { 'REFERENCE' : kwargs['REFERENCE'], }
+   if kwargs['REFERENCE'] == 'NON_REGRESSION':
+      kwopt['VERSION'] = kwargs['VERSION']
+   
+   TEST_TABLE(TABLE=tab1__,
+              NOM_PARA='NBVAL',
+              VALE_I=NB_VALE,
+              CRITERE='ABSOLU',
+              PRECISION=0,
+              **kwopt)
+
+   if VALE:
+      TEST_TABLE(TABLE=tab1__,
+                 NOM_PARA='VALEUR',
+                 VALE=VALE,
+                 CRITERE=CRITERE,
+                 PRECISION=PRECISION,
+                 **kwopt)
+
+   if VALE_K:
       TEST_TABLE(TABLE=tab1__,
-                 FILTRE=_F(NOM_PARA='TEST',
-                           VALE_K='VALEUR  ',),
-                 NOM_PARA='BOOLEEN',
-                 VALE_I=1,
-                 PRECISION=1.e-3,
+                 NOM_PARA='TEXTE',
+                 VALE_I=int(True),
+                 PRECISION=0,
                  CRITERE='ABSOLU',
-                 REFERENCE=args['REFERENCE'],)
+                 **kwopt)
 
    DETRUIRE(CONCEPT=_F(NOM=('tinfo__','tab1__'),),
             ALARME='NON',INFO=1,)
    return ier
 
+#-------------------------------------------------------------------------------
+def regexp_filter(file_in, regexp_ignore, debug=False):
+   """Filtre le fichier fourni (file descriptor) en utilisant les
+   expressions régulières fournies.
+   On retourne l'objet file vers le fichier modifié (ou non).
+   """
+   if not regexp_ignore:      # None or []
+      return file_in
+   # vérification des expressions régulières
+   if type(regexp_ignore) not in (list, tuple):
+      regexp_ignore = [regexp_ignore,]
+   l_regexp = []
+   for exp in regexp_ignore:
+      try:
+         obj = re.compile(exp)
+      except re.error, s:
+         raise TestFichierError, ('TEST0_1', (s, str(exp)))
+      else:
+         l_regexp.append(obj)
+   # filtre du fichier
+   file_out = os.tmpfile()
+   file_in.seek(0)
+   for i, line in enumerate(file_in):
+      if debug:
+         print 'LIGNE', i,
+      keep = True
+      for exp in l_regexp:
+         if exp.search(line):
+            keep = False
+            if debug:
+               print ' >>>>>>>>>> IGNOREE <<<<<<<<<<'
+            break
+      if keep:
+         file_out.write(line)
+         if debug:
+            print
+   file_out.seek(0)
+   return file_out
+
 
 #-------------------------------------------------------------------------------
-def sign(x):
-   return int(x/abs(x))
-
-def _round(x, n, exp):
-   v = x * 10**(-exp+n)
-   val = int(v + sign(x)*0.4999)
-   return val
-
-def entier_ini(x, nbch, exp=None):
-   #if exp is None:
-      #exp = int(floor(log10(abs(x))))
-   val = _round(x, nbch-1, exp)
-   return val, exp-nbch+1
-
-def entier_triple(x, nbch, exp_epsi):
-   #if abs(x) <= 10**exp_epsi:
-      #return '0'
-   y = _round(x * 10**(-exp_epsi), 0, 0) * 10**exp_epsi
-   exp = int(floor(log10(abs(y))))
-   z1, e1 = entier_ini(y,           nbch+2, exp)
-   z2, e2 = entier_ini(z1 * 10**e1, nbch+1, exp)
-   z3, e3 = entier_ini(z2 * 10**e2, nbch,   exp)
-   return '%sE%d' % (z3, e3)
+re_float_expo = re.compile('[-+]?[0-9\.]+[eED][\-\+]{0,1}[0-9]+')
+re_float      = re.compile('[-+]?[0-9]+?\.[0-9]*')
+re_int        = re.compile('[0-9]+')
+
+re_fortran    = re.compile('([0-9]+)[dD]([\-\+]{0,1}[0-9]+)')
 
 #-------------------------------------------------------------------------------
-def md5file(fich, nbch, epsi,
-            regexp_ignore=[], info=0, output=None, format_func=entier_triple):
+def test_iter(obj, function, verbose=False):
    """
-   Cette methode retourne le md5sum d'un fichier en arrondissant les nombres
-   reels a la valeur significative.
+   Cette fonction compte le nombre de réels dans le fichier et une grandeur
+   à partir des valeurs (somme, sommes des valeurs absolues, min/max...).
    IN :
-      fich          : nom du fichier
-      nbch          : nombre de decimales significatives
-      epsi          : valeur en deca de laquelle on prend 0
-      regexp_ignore : liste d'expressions régulières permettant d'ignorer
-         certaines lignes
-      output        : pour rediriger l'interprétation du fichier (INFO=2)
-         dans le fichier de nom `output`,
-      info          : on affiche le résumé si info>0
-      format_func   : on peut préciser une autre fonction pour formatter 
-         les réels...
+      obj      : objet 'file' ou 'string' sur le lequel on peut itérer
+      function : fonction de test   val = func_test(val, [xi, ...])
+      verbose  : on affiche le résumé si info>0
    OUT :
-      code retour : 0 si ok, >0 sinon
-      md5sum
+      nombre de valeurs, valeur résultat
+   """
+   max_buff_size = 1000
+   nbval = 0
+   val = 0.
+   md5text = md5.new()
+   
+   # Si on lit tout le fichier d'un coup, on va environ 3 fois plus vite
+   # que si on le lit ligne à ligne, mais on consomme en mémoire environ
+   # 5 fois la taille du fichier...
+   # En lisant par paquet de 1000 (ou 10000), on va quasiment aussi vite
+   # en consommant très peu de mémoire.
+   
+   #    fichier     tout   ligne/ligne   1000 lignes
+   #     10 Mo       3 s      10 s       3 s
+   #     50 Mo      17 s      48 s      17 s
+   #    100 Mo      34 s      96 s      35 s
    
-         NE PAS AJOUTER D'IMPORT QUI RENDRAIT CETTE FONCTION
-               INUTILISABLE EN DEHORS DE CODE_ASTER.
-   """   
-   if output != None:
+   # l'itérateur est l'objet file lui-même ou on le crée sur la liste
+   if type(obj) is file:
+      obj.seek(0)
+      iterator = obj
+   else:
+      iterator = iter(obj)
+   
+   ok = True
+   buff = []
+   while ok:
       try:
-         sys.stdout = open(output, 'w')
-      except IOError, msg:
-         print "Erreur d'écriture sur %s : %s" % (output, msg)
+         text = iterator.next()
+      except StopIteration:
+         ok = False
+         text = ''
+      buff.append(text)
+      if ok and len(buff) < max_buff_size:
+         continue
+      else:
+         text = ''.join(buff)
+         buff = []
+
+      l_float = re_float_expo.findall(text)
+      l_float = [s.replace('D', 'E') for s in l_float]
+      text =    re_float_expo.sub('', text)
+      l_float.extend(re_float.findall(text))
+      text =         re_float.sub('', text)
+      l_float.extend(  re_int.findall(text))
+      text =           re_int.sub('', text)
+      
+      nbval += len(l_float)
+      val    = function(val, l_float)
+
+      text = ''.join([s.strip() for s in text.split()])
+      md5text.update(text)
+      
+      if verbose:
+         print 'Nombres réels et entiers :'
+         print l_float
+         print 'Texte :'
+         print text
    
-   #      1 Mo   10 Mo   100 Mo
-   # v0   2.6 s  20.4 s  196.6 s
-   # v1   2.0 s  10.3 s  94.9 s (pas de distinction entier/reel)
-   # remplacer le try/except par if re.search(...), 80% plus lent
-   # v2  10.7 s
-   if not os.path.isfile(fich):
-      return 4, ''
-   f = open(fich,'r')
-   m = md5.new()
-   exp_epsi = int(floor(log10(abs(epsi))))
-   i = 0
-   for ligne in f:
-      i = i+1
-      if info >= 2:
-         print 'LIGNE', i,
-      keep = True
-      for exp in regexp_ignore:
-         if re.search(exp, ligne):
-            keep = False
-            if info >= 2:
-               print ' >>>>>>>>>> IGNOREE <<<<<<<<<<',
-            break
-      if keep:
-         # découpe des nombres collés : 1.34E-142-1.233D+09
-         ligne = re.sub('([0-9]+)\-', '\g<1> -', ligne)
-         # conversion des DOUBLE fortran en 'E'
-         ligne = re.sub('([0-9]+)[dD]([\-\+]{0,1}[0-9]+)', '\g<1>E\g<2>', ligne)
-         r = ligne.split()
-         for x in r:
-            try:
-               xv = float(x)
-               if abs(xv)<epsi:
-                  s = '0'
-               else:
-                  #s = format_float % float(x)
-                  s = format_func(xv, nbch, exp_epsi)
-            except ValueError:
-               s = x
-            if info >= 2:
-               print (' %'+str(nbch+7)+'s') % s,
-            m.update(s)
-      if info >= 2:
-         print
-   f.close()
-   md5sum = m.hexdigest()
+   md5sum = md5text.hexdigest()
    
-   affich_resu = True
-   if info >= 1:
-      while affich_resu:
-         form = ' %-20s : %32s'
-         print form % ('Fichier', fich)
-         print form % ('Nombre de lignes', str(i))
-         #print form % ('Format des reels',format_float)
-         print form % ('Nombre de chiffres', str(nbch))
-         print form % ('Epsilon', str(epsi))
-         print form % ('md5sum', md5sum)
-         if output == None:
-            affich_resu = False
-         else:
-            sys.stdout = sys.__stdout__
-            output = None
-   return 0, md5sum
+   return nbval, val, md5sum
 
+#-------------------------------------------------------------------------------
+def test_file(filename, regexp_ignore=[], type_test='SOMM', verbose=False):
+   """Raccourci pour tester rapidement un fichier (utilisé par stanley.py).
+   """
+   if type(regexp_ignore) not in (list, tuple):
+      regexp_ignore = [regexp_ignore,]
+
+   fileobj = open(filename, 'r')
+   fileobj = regexp_filter(fileobj, regexp_ignore)
+
+   nbv, val, md5sum = test_iter(fileobj, function=dict_func_test[type_test], verbose=verbose)
+
+   return nbv, val, md5sum
 
 #-------------------------------------------------------------------------------
 if __name__ == '__main__':
    from optparse import OptionParser, OptionGroup
 
-   p = OptionParser(usage='usage: %s a_tester [options]' % sys.argv[0])
-   p.add_option('-n', '--nbch',
-      action='store', dest='nbch', type='int', default=6,
-      help='nombre de chiffres significatifs')
-   p.add_option('-e', '--epsilon',
-      action='store', dest='epsi', type='float', default=1.e-14,
-      help='epsilon en dessous duquel on considère les nombres nuls')
+   p = OptionParser(usage='usage: %s fichier [options]' % sys.argv[0])
+   p.add_option('--type_test',
+      action='store', dest='type_test', default='SOMM',
+      help='type du test : SOMM, SOMM_ABS, MIN, MAX')
    p.add_option('--expr_ignore',
       action='store', dest='exp', type='string',
       help='expression régulière à ignorer')
-   p.add_option('-o', '--output',
-      action='store', dest='output', type='string', default='output.txt',
-      help='fichier de sortie')
+   p.add_option('-v', '--verbose',
+      action='store_true', dest='verbose', default=False,
+      help='mode bavard')
    opts, args = p.parse_args()
 
-   if len(args)<1:
-      p.print_usage()
-      sys.exit(1)
+   if len(args) == 0:
+      p.error('fichier à tester ?')
+
    if opts.exp is None:
       exp = []
    else:
       exp = [opts.exp]
 
-   print 'Lignes retenues dans %s' % opts.output
-   iret = md5file(args[0], opts.nbch, opts.epsi,
-                  regexp_ignore=exp, info=2, output=opts.output)
+   fileobj = open(args[0], 'r')
+   fileobj = regexp_filter(fileobj, exp)
+   nbv2, sumv2, md5sum2 = test_iter(fileobj, function=dict_func_test[opts.type_test], verbose=opts.verbose)
+   print '%6d valeurs, resultat = %f, texte : %s' % (nbv2, sumv2, md5sum2)
+
 
index e9c4ef112fd3ef6ec205f10b268cb552f69dcc1d..be7ccc2bac3bd9e536428d2cf84cc27ddf3ae30e 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF algeline Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF algeline Messages  DATE 08/04/2008   AUTEUR MEUNIER S.MEUNIER 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -23,103 +23,116 @@ def _(x) : return x
 cata_msg={
 
 1: _("""
- option invalide !
+ Résolution FETI : option invalide
 """),
 
 2: _("""
- probleme objet  %(k1)s .fetg . il est de longueur impaire !
+ Résolution FETI : probleme objet  %(k1)s .fetg . il est de longueur impaire
 """),
 
 3: _("""
- pb division par zerodans la construction du alpha !
+ Résolution FETI : division par zéro dans la construction du alpha
 """),
 
 4: _("""
- valeur inferieure a la tolerance
+ valeur inférieure à la tolérance
 """),
 
 5: _("""
- pour l'instant, on ne traiteque le cas des matrices reelles.
+ Combinaison linéaire de matrices :
+ pour l'instant, on ne traite que le cas des matrices réelles
 """),
 
 7: _("""
- Impossible de récupérer les valeurs dans la table.
-"""),
-
-8: _("""
- attention
+ tbliva : impossible de récupérer les valeurs dans la table
 """),
 
 9: _("""
- l'origine de l'obstacle est mal positionnee par rapport au noeud de choc de numero  %(k1)s , de nom  %(k2)s , par rapport au jeu.
+ l'origine de l'obstacle est mal positionnée par rapport au noeud de choc
+ de numéro  %(k1)s , de nom  %(k2)s , par rapport au jeu.
 """),
 
 10: _("""
- l'origine de l'obstacle est mal positionnee par rapport au noeud de choc de numero  %(k1)s , de nom  %(k2)s , dans le plan normal au choc.
+ l'origine de l'obstacle est mal positionnee par rapport au noeud de choc
+ de numéro  %(k1)s , de nom  %(k2)s , dans le plan normal au choc.
 """),
 
 11: _("""
- la normale a l'obstacle fait un angle nul avec le noeud de choc de numero  %(k1)s , avec l'axe du tube.
+ la normale à l'obstacle fait un angle nul avec le noeud de choc
+ de numéro  %(k1)s , avec l'axe du tube.
 """),
 
 12: _("""
- la normale a l'obstacle fait un angle inferieur a 10 degres au noeud de choc de numero  %(k1)s , avec l'axe du tube.
+ la normale à l'obstacle fait un angle inferieur à 10 degrés au noeud de choc
+ de numéro  %(k1)s , avec l'axe du tube.
 """),
 
 13: _("""
- la normale a l'obstacle fait un angle inferieur a 45 degres au noeud de choc de numero  %(k1)s , avec l'axe du tube.
+ la normale à l'obstacle fait un angle inferieur à 45 degrés au noeud de choc
+ de numéro  %(k1)s , avec l'axe du tube.
 """),
 
 14: _("""
- les mailles doivent etre de  type quad4 ou tri3 et non de type  %(k1)s 
+ les mailles doivent etre de type QUAD4 ou TRI3 et non de type  %(k1)s 
 """),
 
 15: _("""
- l'angle au noeud  %(k1)s  forme par le vecteur normal de la maille  %(k2)s  et le vecteur normal de la maille  %(k3)s  est superieur a 90 degres et vaut  %(k4)s  degres.
+ l'angle au noeud  %(k1)s  formé par :
+    - le vecteur normal de la maille  %(k2)s 
+ et - le vecteur normal de la maille  %(k3)s
+ est supérieur à 90 degrés et vaut  %(k4)s  degrés.
 """),
 
 16: _("""
pref_noeud est trop long ou pref_nume est trop grand
PREF_NOEUD est trop long ou PREF_NUME est trop grand
 """),
 
 17: _("""
pref_maille est trop long ou pref_nume est trop grand
PREF_MAILLE est trop long ou PREF_NUME est trop grand
 """),
 
 18: _("""
- mot-cle facteur  %(k1)s  non traite
+ mot-clé facteur  %(k1)s  non traité
 """),
 
 19: _("""
- le group_no  %(k1)s  n'existe pas
+ le GROUP_NO  %(k1)s  n'existe pas
 """),
 
 20: _("""
- le nombre de noeuds n'est pas le meme pour les deux group_no
+ le nombre de noeuds n'est pas le meme pour les deux GROUP_NO
 """),
 
 21: _("""
- les group_no ne contiennent qu'un seul noeud
+ les GROUP_NO ne contiennent qu'un seul noeud
 """),
 
 22: _("""
- creation quad4 degenere
+ creation QUAD4 dégénéré
 """),
 
 23: _("""
-  le noeud  %(k1)s  n est pas equidistant des  noeuds  %(k2)s  et  %(k3)s  pour la maille : %(k4)s . ameliorez le  maillage. on arrete pour eviter des resultats faux
+ le noeud  %(k1)s  n'est pas équidistant des noeuds  %(k2)s  et  %(k3)s  pour la maille : %(k4)s 
+ Améliorez le  maillage. Le code s'arrete pour éviter des résultats faux.
+ - distance n1-n3 = %(r1)g
+ - distance n2-n3 = %(r2)g
+ - tolérance      = %(r3)g
 """),
 
 24: _("""
- valeur negative ou nulle pour la puissance quatrieme du nombre d ondes => valeur de l ordre de coque mal determinee => il faut affiner le maillage sur les coques : reduire le pas angulaire pour definir plus de noeuds sur les contours
+ valeur négative ou nulle pour la puissance quatrième du nombre d'ondes.
+ La valeur de l'ordre de coque est mal déterminée.
+ Il faut affiner le maillage sur les coques :
+ => réduire le pas angulaire pour définir plus de noeuds sur les contours.
 """),
 
 25: _("""
- nombre de noeuds sur la generatrice inferieur a 4 donc insuffisant pour determiner les coefficients de la deformee axiale
+ Nombre de noeuds sur la génératrice inférieur à 4 :
+ c'est insuffisant pour déterminer les coefficients de la déformée axiale
 """),
 
 26: _("""
- deplacement radial maximum nul sur la generatrice
+ déplacement radial maximum nul sur la génératrice
 """),
 
 27: _("""
@@ -130,89 +143,83 @@ cata_msg={
      Les resultats du calcul seront a prendre avec circonspection.
 """),
 
-
-
-
-
+28: _("""
+ Détermination des coefficients de la deformée axiale,
+ erreur relative sur la norme des déplacements radiaux : %(r1)g
+"""),
 
 29: _("""
- type inconnu
+ L'ordre de coque est peut-etre mal identifié.
+ La base modale est trop riche ou le nombre de noeuds du maillage sur une circonference
+ est trop faible
 """),
 
 30: _("""
- somme des carres des termes diagonaux nulle => critere indefini
+ somme des carrés des termes diagonaux nulle
+ => critère indéfini
 """),
 
 31: _("""
- somme des carres des termes diagonaux negligeable => critere indefini
+ somme des carrés des termes diagonaux négligeable
+ => critere indéfini
 """),
 
 32: _("""
cham_cine /= o. sur des ddls non elimines.
CHAM_CINE différent de zéro sur des DDL non éliminés.
 """),
 
 33: _("""
- la carte des caracteristiques geometriques des elements de poutre n existe pas
+ la carte des caractéristiques géometriques des éléments de poutre n'existe pas
 """),
 
 34: _("""
- caracteristiques geometriques elementaires de poutre non definies pour la maille  %(k1)s 
+ caractéristiques géométriques élémentaires de poutre non définies pour la maille  %(k1)s 
 """),
 
 35: _("""
- l une ou l autre des composantes <r1> et <r2> n existe pas dans le champ de la grandeur
+ l'une ou l'autre des composantes <R1> et <R2> n'existe pas dans le champ de la grandeur
 """),
 
 36: _("""
- la section de l element de poutre considere n est pas circulaire
+ la section de l'élément de poutre considéré n'est pas circulaire
 """),
 
 37: _("""
- rayon exterieur nul a l une ou l autre des extremites de l element considere
+ rayon extérieur nul à l'une ou l'autre des extrémités de l'élément considéré
 """),
 
 38: _("""
- le rayon exterieur n est pas constant sur l element considere
-"""),
-
-39: _("""
- arret justifie par le message ci-dessus.
-"""),
-
-40: _("""
- option de calcul non prevue !
-"""),
-
-41: _("""
- option non prevue en non compile mpi
+ le rayon extérieur n'est pas constant sur l'élément considéré
 """),
 
 42: _("""
- les vitesses reduites des fichiers .70 et .71 ne sont pas coherentes
+ les vitesses réduites des fichiers .70 et .71 ne sont pas cohérentes
 """),
 
 43: _("""
- les vitesses etudiees doivent etre strictement positives. le sens de l ecoulement est defini par le choix de la configuration experimentale grappe2 de reference
+ les vitesses etudiees doivent être strictement positives
+ le sens de l'écoulement est défini par le choix de la configuration experimentale GRAPPE2 de référence
 """),
 
 44: _("""
- seuls les cas d'enceintes circulaires et rectangulaires sont traites.
+ seuls les cas d'enceintes circulaires et rectangulaires sont traités.
 """),
 
 45: _("""
- le nombre total de tubes ne correspond pas a la somme des tubes des groupes d'equivalence 
+ le nombre total de tubes ne correspond pas à la somme des tubes des groupes d'équivalence 
 """),
 
 46: _("""
- la direction des tubes n est pas parallele a l un des axes.
+ la direction des tubes n'est pas parallèle à l'un des axes.
 """),
 
 47: _("""
- la direction des tubes n est la meme que celle de l axe directeur.
+ la direction des tubes n'est la meme que celle de l'axe directeur.
 """),
 
 48: _("""
- les vitesses etudiees doivent toutes etre du meme signe, sinon il y a ambiguite sur les positions d entree/sortie
+ les vitesses étudiées doivent toutes être du meme signe
+ sinon il y a ambiguité sur les positions d entrée/sortie
 """),
 
 49: _("""
@@ -232,39 +239,37 @@ cata_msg={
 """),
 
 53: _("""
- le domaine de recouvrement des coques interne et externe n existe pas
+ le domaine de recouvrement des coques interne et externe n'existe pas
 """),
 
 54: _("""
- la carte des caracteristiques geometriques des elements de coque n existe pas. il faut prealablement affecter ces caracteristiques aux groupes de mailles correspondant aux coques interne et externe, par l operateur <affe_cara_elem>
-"""),
-
-55: _("""
- ce programme suppose que la grandeur "cacoqu" a 2 entiers codes
+ la carte des caractéristiques géometriques des éléments de coque n'existe pas. il faut prealablement affecter ces caracteristiques aux groupes de mailles correspondant aux coques interne et externe, par l operateur <affe_cara_elem>
 """),
 
 56: _("""
- les caracteristiques des elements de coque n ont pas ete affectees distinctement a l un ou(et) l autre des groupes de mailles associes aux coques interne et externe
+ les caractéristiques des éléments de coque n'ont pas été affectées
+ distinctement à l'un ou(et) l'autre des groupes de mailles associés
+ aux coques interne et externe
 """),
 
 57: _("""
- la composante <ep> n existe pas dans le champ de la grandeur
+ la composante <EP> n'existe pas dans le champ de la grandeur
 """),
 
 58: _("""
- pas d epaisseur affectee aux elements de la coque interne
+ pas d'épaisseur affectée aux éléments de la coque interne
 """),
 
 59: _("""
epaisseur de la coque interne nulle
épaisseur de la coque interne nulle
 """),
 
 60: _("""
- pas d epaisseur affectee aux elements de la coque externe
+ pas d'epaisseur affectée aux éléments de la coque externe
 """),
 
 61: _("""
epaisseur de la coque externe nulle
épaisseur de la coque externe nulle
 """),
 
 62: _("""
@@ -272,7 +277,8 @@ cata_msg={
 """),
 
 63: _("""
- incoherence dans la definition de la configuration : jeu annulaire negatif ou nul
+ incohérence dans la définition de la configuration :
+ jeu annulaire négatif ou nul
 """),
 
 64: _("""
@@ -284,7 +290,7 @@ cata_msg={
 """),
 
 66: _("""
- coefficient de type non prevu
+ coefficient de type non prévu
 """),
 
 67: _("""
@@ -296,15 +302,18 @@ cata_msg={
 """),
 
 69: _("""
- la zone d excitation du fluide, de nom  %(k1)s , recoupe une autre zone.
+ la zone d'excitation du fluide, de nom  %(k1)s , recoupe une autre zone.
 """),
 
 70: _("""
- le noeud d application de l excitation doit appartenir a deux mailles, ni plus ni moins
+ le noeud d'application de l'excitation doit appartenir à deux mailles
+ ni plus ni moins
 """),
 
 71: _("""
- le noeud d application de l excitation est situe a la jonction de deux elements de diametres exterieurs differents => ambiguite pour le dimensionnement de l excitation
+ le noeud d'application de l excitation est situe à la jonction
+ de deux éléments de diamètres extérieurs différents
+ => ambiguité pour le dimensionnement de l'excitation
 """),
 
 72: _("""
@@ -315,16 +324,13 @@ cata_msg={
  le cylindre  %(k1)s  n a pas un axe rectiligne
 """),
 
-74: _("""
- erreur dans carces
-"""),
-
 75: _("""
- la composante  n'est pas dans le chamelem
+ la composante n'est pas dans le CHAM_ELEM
 """),
 
 76: _("""
- resolution impossible matrice singuliere, peut etre a cause des erreurs d arrondis
+ résolution impossible matrice singulière
+ peut être à cause des erreurs d'arrondis
 """),
 
 77: _("""
@@ -332,11 +338,12 @@ cata_msg={
 """),
 
 78: _("""
- ererur dans la recherche des valeurs propres - pas de convergence de l algorithme qr 
+ erreur dans la recherche des valeurs propres
+ pas de convergence de l algorithme QR 
 """),
 
 79: _("""
- le nombre de modes resultats:  %(k1)s  n est pas correct 
+ le nombre de modes résultats:  %(k1)s  n'est pas correct 
 """),
 
 80: _("""
@@ -344,11 +351,11 @@ cata_msg={
 """),
 
 81: _("""
- le cylindre  %(k1)s deborde de l enceinte circulaire
+ le cylindre  %(k1)s déborde de l'enceinte circulaire
 """),
 
 82: _("""
- pas de groupes  de noeuds a creer 
+ pas de groupes de noeuds à créer 
 """),
 
 83: _("""
@@ -372,47 +379,50 @@ cata_msg={
 """),
 
 88: _("""
- un cote de l enceinte est delongueur nulle
+ une cote de l'enceinte est de longueur nulle
 """),
 
 89: _("""
- les quatres sommets de l enceinte ne forment pas un rectangle
+ les quatres sommets de l'enceinte ne forment pas un rectangle
 """),
 
 90: _("""
- le cylindre  %(k1)s  deborde de l enceinte rectangulaire
+ le cylindre  %(k1)s  déborde de l'enceinte rectangulaire
 """),
 
 91: _("""
-  la renumerotation  %(k1)s  est incompatible avec le solveur multi_frontal.
+  la renumérotation  %(k1)s est incompatible avec le solveur multi_frontal.
 """),
 
 92: _("""
- absence de relation de comportement de type <elas> pour le materiau constitutif de la coque interne
+ absence de relation de comportement de type <ELAS> pour le matéiau constitutif de la coque interne
 """),
 
 93: _("""
- absence d un ou de plusieurs parametres de la relation de comportement <elas> pour le materiau constitutif de la coque interne
+ absence d'un ou de plusieurs paramètres de la relation de comportement <ELAS>
+ pour le matériau constitutif de la coque interne
 """),
 
 94: _("""
valeur du module d young nulle pour le materiau constitutif de la coque interne
La valeur du module d'Young est nulle pour le matériau constitutif de la coque interne
 """),
 
 95: _("""
- absence de relation de comportement de type <elas> pour le materiau constitutif de la coque externe
+ absence de relation de comportement de type <ELAS>
+ pour le materiau constitutif de la coque externe
 """),
 
 96: _("""
- absence d un ou de plusieurs parametres de la relation de comportement <elas> pour le materiau constitutif de la coque externe
+ absence d'un ou de plusieurs parametres de la relation de comportement <ELAS>
+ pour le matériau constitutif de la coque externe
 """),
 
 97: _("""
valeur du module d young nulle pour le materiau constitutif de la coque externe
La valeur du module d'Young est nulle pour le matériau constitutif de la coque externe
 """),
 
 98: _("""
les deux coques interne et externe sont en mouvement pour le  %(k1)s ieme mode.
Les deux coques (interne et externe) sont en mouvement pour le  %(k1)s ième mode.
 """),
 
 99: _("""
index ff9a7794f1d0b944aa15219c5ee88ced4aab1b43..4072fac3aa679af4bab134bb7f1c946a74c2a88f 100644 (file)
-#@ MODIF algeline2 Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF algeline2 Messages  DATE 19/05/2008   AUTEUR ABBAS M.ABBAS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  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.        
+# COPYRIGHT (C) 1991 - 2007  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.
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-2: _("""
- l une des valeurs propres de la matrice du probleme modal generalise en eau au repos n est pas reelle
+1 : _("""
+ L'argument de "BLOC_DEBUT" doit être strictement positif,
+ il est pris à 1
 """),
 
-3: _("""
- calcul des modes en eau au repos : une des valeurs propres obtenues est nulle
+2 : _("""
+ Calcul des modes en eau au repos :
+ une des valeurs propres de la matrice n'est pas réelle
 """),
 
-4: _("""
- erreur sur la recherche des lagranges.
+3 : _("""
+ Calcul des modes en eau au repos :
+ une des valeurs propres obtenues est nulle
 """),
 
-5: _("""
- mot cle facteur incorrect.
+: _("""
+ Erreur sur la recherche des lagranges
 """),
 
-6: _("""
- type de matrice " %(k1)s " inconnu.
+: _("""
+ mot cle facteur incorrect
 """),
 
-7: _("""
on ne traite pas cette option.
+: _("""
Type de matrice " %(k1)s " inconnu.
 """),
 
-8: _("""
- on ne peut pas combiner une matrice non symetrique dans une matrice symetrique.
+: _("""
+ On ne traite pas cette option
 """),
 
-9: _("""
- les matrices a combiner ne sont pas construites sur le meme maillage
+8 : _("""
+ L'argument de "BLOC_FIN" est plus grand que le nombre de blocs de la matrice,
+ il est ramené à cette valeur
 """),
 
-10: _("""
charges cinematiques differentes.
+: _("""
Les matrices à combiner ne sont pas construites sur le meme maillage.
 """),
 
-11: _("""
- les "matass" " %(k1)s "  et  " %(k2)s "  n'ont le meme domaine de definition.
+10 : _("""
+ Erreur de programmation :
+ On cherche à combiner 2 matrices qui n'ont pas les memes charges cinématiques.
+ Noms des 2 matrices :
+    %(k1)s
+    %(k2)s
+
+ Solution :
+    1) émettre une fiche d'anomalie / évolution
+    2) En attendant : ne pas utiliser de charges cinématiques :
+       remplacer AFFE_CHAR_CINE par AFFE_CHAR_MECA
+"""),
+
+11 : _("""
+ Les matrices "%(k1)s"  et  "%(k2)s"  n'ont pas la meme structure.
 """),
 
-12: _("""
- attention: une dimesion nulle  ou nmax.lt.dmax(1,n) 
+12 : _("""
+ Résolution système linéaire méthode de CROUT
+ Attention: une dimension nulle ou nmax.lt.dmax(1,n)
 """),
 
-13: _("""
- attention: une dimension negative ou nulle 
+13 : _("""
+ Résolution système linéaire méthode de CROUT
+ Attention: une dimension negative ou nulle
 """),
 
-14: _("""
- attention: les dimensions des  tableaux ne sont pas correctes
+14 : _("""
+ Résolution système linéaire méthode de CROUT
+ Attention: les dimensions des tableaux ne sont pas correctes
 """),
 
-15: _("""
- pas de charge critique  dans l intervalle demande
+15 : _("""
+ Pas de charge critique  dans l'intervalle demandé
 """),
 
-16: _("""
-  %(k1)s charges critiques  dans l intervalle demande
+16 : _("""
+  %(k1)s charges critiques  dans l'intervalle demandé
 """),
 
-17: _("""
au moins une frequence calculee exterieure a la bande demandee
+17 : _("""
Au moins une fréquence calculée extérieure à la bande demandée
 """),
 
-18: _("""
les matrices " %(k1)s " et " %(k2)s " n'ont pas le meme domaine de definition
+18 : _("""
Les matrices " %(k1)s " et " %(k2)s " n'ont pas le meme domaine de définition
 """),
 
-19: _("""
- problemes a l'allocation des descripteurs de la matrice " %(k1)s " 
+19 : _("""
+ Problèmes a l'allocation des descripteurs de la matrice " %(k1)s "
 """),
 
-20: _("""
l'argument de "bloc_debut" est plus grand que le nombre de bloc de la matrice
+20 : _("""
L'argument de "BLOC_DEBUT" est plus grand que le nombre de blocs de la matrice
 """),
 
-21: _("""
l'argument de "bloc_fin" doit etre strictement positif
+21 : _("""
L'argument de "BLOC_FIN" doit etre strictement positif
 """),
 
-22: _("""
la numerotation des inconnues est incoherente entre la matrice et le second membre.
+22 : _("""
La numérotation des inconnues est incohérente entre la matrice et le second membre.
 """),
 
-23: _("""
-  %(k1)s  et  %(k2)s  n'ont pas le meme domaine de definition.
+23 : _("""
+  %(k1)s  et  %(k2)s  n'ont pas le meme domaine de définition.
 """),
 
-24: _("""
la matrice a des ddls elimines. il faut utiliser le mot cle cham_cine.
+24 : _("""
La matrice a des ddls eliminés. il faut utiliser le mot clé CHAM_CINE.
 """),
 
-25: _("""
la matrice et le second membre sont de type different.
+25 : _("""
La matrice et le second membre sont de type différent.
 """),
 
-26: _("""
- le second membre et le champ cinematiquesont de type different.
+26 : _("""
+ le second membre et le champ cinématique sont de type différent.
 """),
 
-27: _("""
- la matrice est d'un type inconnu de l'operateur.
+27 : _("""
+ la matrice est d'un type inconnu de l'opérateur.
 """),
 
-28: _("""
err_31a: les "matr_asse" %(k1)s "  et  " %(k2)s "  ne sont pas combinables.
+28 : _("""
les "MATR_ASSE" %(k1)s "  et  " %(k2)s "  ne sont pas combinables.
 """),
 
-29: _("""
- la valeur d'entree min et superieure ou egale a la valeur d'entree sup
+29 : _("""
+ la valeur d'entrée 'min' est supérieure ou égale à la valeur d'entrée 'sup'
 """),
 
-30: _("""
- les  matrices  " %(k1)s "  et  " %(k2)s "  n'ont pas le meme domaine de definition.
+30 : _("""
+ les matrices  " %(k1)s "  et  " %(k2)s "  n'ont pas le meme domaine de définition.
 """),
 
-31: _("""
- trop de re-ajustement de la borne minimale.
+31 : _("""
+ trop de ré-ajustement de la borne minimale.
 """),
 
-32: _("""
- trop de re-ajustement de la borne maximale.
+32 : _("""
+ trop de ré-ajustement de la borne maximale.
 """),
 
-33: _("""
- type de mode inconnu:  %(k1)s 
+33 : _("""
+ type de mode inconnu:  %(k1)s
 """),
 
-34: _("""
- il n'est pas permis de modifier un objet pere
+34 : _("""
+ il n'est pas permis de modifier un objet père
 """),
 
-35: _("""
- mode non calcule a partir de matrices assemblees
+35 : _("""
+ mode non calculé à partir de matrices assemblées
 """),
 
-36: _("""
- normalisation impossible, le point n'est pas present dans le modele.
+36 : _("""
+ normalisation impossible, le point n'est pas present dans le modèle.
 """),
 
-37: _("""
- normalisation impossible, la composante n'est pas presente dans le modele.
+37 : _("""
+ normalisation impossible, la composante n'est pas présente dans le modèle.
 """),
 
-38: _("""
manque des parametres entiers
+38 : _("""
il manque des paramètres entiers
 """),
 
-39: _("""
manque des parametres reels
+39 : _("""
il manque des paramètres réels
 """),
 
-40: _("""
+40 : _("""
  manque des parametres caracteres
 """),
 
-41: _("""
- normalisation impossible,  aucune composante n'est presente dans le modele.
+41 : _("""
+ normalisation impossible,  aucune composante n'est présente dans le modèle.
 """),
 
-42: _("""
- normalisation impossible, le noeud n'est pas present dans le modele.
+42 : _("""
+ normalisation impossible, le noeud n'est pas présent dans le modèle.
 """),
 
-43: _("""
- on ne tient pas compte du mot cle facteur "mode_signe" pour des "mode_meca_c"
+43 : _("""
+ on ne tient pas compte du mot cle facteur "MODE_SIGNE" pour des "MODE_MECA_C"
 """),
 
-44: _("""
- " %(k1)s "  type de mode non traite
+44 : _("""
+ " %(k1)s "  type de mode non traité
 """),
 
-45: _("""
+45 : _("""
  calcul de flambement et absence du mot cle char_crit ne sont pas compatibles
 """),
 
-46: _("""
+46 : _("""
  calcul de flambement et matrice d'amortissement ne sont pas compatibles
 """),
 
-47: _("""
+47 : _("""
  le nombre de frequences demandees est incorrect.
 """),
 
-48: _("""
+48 : _("""
  nmax_iter_ ajuste ou separe est negatif
 """),
 
-49: _("""
+49 : _("""
  nmax_iter est negatif
 """),
 
-50: _("""
- prec_ ajuste ou separe est irrealiste 
+50 : _("""
+ prec_ ajuste ou separe est irrealiste
 """),
 
-51: _("""
+51 : _("""
  prec est irrealiste (inferieure a 1.e-70)
 """),
 
-52: _("""
+52 : _("""
  pas de valeur donnee, separation impossible
 """),
 
-53: _("""
+53 : _("""
  une seule valeur donnee, separation impossible
 """),
 
-54: _("""
- la suite des valeurs donnees n'est pas croissante 
+54 : _("""
+ la suite des valeurs donnees n'est pas croissante
 """),
 
-55: _("""
- mot cle amor_reduit impossible pour cas generalise 
+55 : _("""
+ mot cle AMOR_REDUIT impossible pour cas generalise
 """),
 
-56: _("""
- mot cle amor_reduit impossible si option differente               de proche
+56 : _("""
+ mot cle AMOR_REDUIT impossible si option differente de PROCHE
 """),
 
-57: _("""
+57 : _("""
  nombre different d'arguments entre les mots cles amor_reduit et freq
 """),
 
-58: _("""
+58 : _("""
  les matrices " %(k1)s " et  " %(k2)s "  sont incompatibles entre elles
 """),
 
-59: _("""
+59 : _("""
  presence de frequences negatives dans les donnees.
 """),
 
-60: _("""
+60 : _("""
   trop de reajustement d'une borne de l'intervalle de recherche.
 """),
 
-61: _("""
- erreur trop de reajustementd'une borne de l'intervalle de recherche.
+61 : _("""
+ erreur trop de reajustement d'une borne de l'intervalle de recherche.
 """),
 
-62: _("""
+62 : _("""
  pas de valeurs propres dans la bande de calcul,  le concept ne peut etre cree dans ces conditions.
 """),
 
-63: _("""
+63 : _("""
  " %(k1)s "   option inconnue.
 """),
 
-64: _("""
- le nombre param_ortho_soren n'est pas valide. 
+64 : _("""
+ le nombre PARAM_ORTHO_SOREN n'est pas valide.
 """),
 
-65: _("""
+65 : _("""
  detection des modes de corps rigide n'est utilisee qu'avec tri_diag
 """),
 
-66: _("""
+66 : _("""
  option bande non autorisee pour un probleme avec amortissement
 """),
 
-67: _("""
+67 : _("""
  approche imaginaire ou complexe et frequence nulle incompatible
 """),
 
-68: _("""
+68 : _("""
   option modes de corps rigide non utilisee avec amortissement
 """),
 
-69: _("""
- pour le probleme generalise ou quadratique complexe on utilise seulement l'algorithme de sorensen
+69 : _("""
+ pour le probleme generalise ou quadratique complexe on utilise seulement
+ METHODE='SORENSEN' ou 'QZ'
 """),
 
-70: _("""
+70 : _("""
  probleme complexe et frequence nulle incompatible
 """),
 
-71: _("""
+71 : _("""
  calcul quadratique par la methode de sorensen et frequence nulle incompatible
 """),
 
-72: _("""
+72 : _("""
  la dimension du sous espace de travail est inferieure au nombre de modes rigides
 """),
 
-73: _("""
- pas de verification par sturm pour le probleme quadratique
+73 : _("""
+ !! ATTENTION !!, POUR L''INSTANT, PAS DE POST-VERIFICATION DE TYPE STURM
+ (COMPTAGE DU BON NOMBRE DES VALEURS PROPRES CALCULEES) LORSQU'ON EST
+ DANS LE PLAN COMPLEXE:
+            MODAL GENERALISE AVEC K COMPLEXE OU MODAL QUADRATIQUE.
 """),
 
-74: _("""
-  erreur de verification 
+74 : _("""
+  erreur de vérification
 """),
 
-75: _("""
- conclusion du utmess-e precedent
+75 : _("""
+  le problème traité étant quadratique, on double l'espace de recherche
 """),
 
-76: _("""
- 3 ou 6 valeurs pour le mot cle "direction"
+76 : _("""
+ 3 ou 6 valeurs pour le mot cle "DIRECTION"
 """),
 
-77: _("""
- pour le mot cle facteur  "pseudo_mode", il faut donner la matrice de masse.
+77 : _("""
+ pour le mot cle facteur  "PSEUDO_MODE", il faut donner la matrice de masse.
 """),
 
-78: _("""
+78 : _("""
  la direction est nulle.
 """),
 
-79: _("""
+79 : _("""
  base modale 1 et 2 avec numerotations de taille incompatible
 """),
 
-80: _("""
+80 : _("""
  base modale 1 et 2 avec numerotations incompatibles
 """),
 
-81: _("""
+81 : _("""
  base modale et matrice avec numerotations incompatibles
 """),
 
-82: _("""
+82 : _("""
  nombre de modes et d amortissements differents
 """),
 
-83: _("""
+83 : _("""
  nombre de modes et d amortissements de connors differents
 """),
 
-84: _("""
- nombre d amortissements different du nombre de modes calcules
-"""),
-
-85: _("""
+85 : _("""
  inversion vmin <=> vmax
 """),
 
-86: _("""
- type de matrice inconnu 
+86 : _("""
+ type de matrice inconnu
 """),
 
-87: _("""
+87 : _("""
   pas de produit car le cham_no  %(k1)s  existe deja.
 """),
 
+88 : _("""
+  Problème de programmation :
+    La matrice globale %(k1)s n'existe pas.
+    Elle est nécessaire pour déterminer les ddls bloqués par AFFE_CHAR_CINE.
 
+  Solution (pour l'utilisateur) :
+    1) Ne pas utiliser de charges cinématiques (AFFE_CHAR_CINE)
+    2) Emettre une fiche d'anomalie.
 
+  Solution (pour le programmeur) :
+    La matrice globale a été détruite abusivement.
+    Instrumenter la routine jedetr.f pour déterminer la routine coupable.
+"""),
 
-
-
-
-
-89: _("""
- le mot-cle maillage est obligatoire avec le mot-cle crea_fiss. 
+89 : _("""
+ le mot-cle MAILLAGE est obligatoire avec le mot-cle CREA_FISS.
 """),
 
-90: _("""
- le mot-cle maillage est obligatoire avec le mot-cle line_quad. 
+90 : _("""
+ le mot-cle MAILLAGE est obligatoire avec le mot-cle LINE_QUAD.
 """),
 
-91: _("""
crea_maillage : l'option line_quad ne traite pas les macros mailles
+91 : _("""
CREA_MAILLAGE : l'option line_quad ne traite pas les macros mailles
 """),
 
-92: _("""
- crea_maillage : l'option line_quad ne traite pas les absc_curv
+92 : _("""
+ CREA_MAILLAGE : l'option LINE_QUAD ne traite pas les ABSC_CURV
 """),
 
-93: _("""
- le mot-cle maillage est obligatoire avec le mot-cle quad_line. 
+93 : _("""
+ le mot-cle MAILLAGE est obligatoire avec le mot-cle QUAD_LINE.
 """),
 
-94: _("""
crea_maillage : l'option quad_line ne traite pas les macros mailles
+94 : _("""
CREA_MAILLAGE : l'option QUAD_LINE ne traite pas les macros mailles
 """),
 
-95: _("""
- crea_maillage : l'option quad_line ne traite pas les absc_curv
+95 : _("""
+ CREA_MAILLAGE : l'option QUAD_LINE ne traite pas les ABSC_CURV
 """),
 
-96: _("""
- le mot-cle maillage est obligatoire avec le mot-cle modi_maille. 
+96 : _("""
+ le mot-cle MAILLAGE est obligatoire avec le mot-cle MODI_MAILLE.
 """),
 
-97: _("""
- une seule occurrence de "quad_tria3"
+97 : _("""
+ une seule occurrence de "QUAD_TRIA3"
 """),
 
-98: _("""
- le mot-cle maillage est obligatoire avec le mot-cle coqu_volu. 
+98 : _("""
+ le mot-cle MAILLAGE est obligatoire avec le mot-cle COQU_VOLU.
 """),
 
-99: _("""
+99 : _("""
  pas de maille a modifier
 """),
+
 }
index da88ae5a46de546d1231343186db2bcac2e5e592..26246ffe731044f2c74312eb444f3a49c791200b 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF algeline3 Messages  DATE 23/01/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF algeline3 Messages  DATE 02/06/2008   AUTEUR MEUNIER S.MEUNIER 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -23,35 +23,36 @@ def _(x) : return x
 cata_msg={
 
 1: _("""
- le mot-cle maillage est obligatoire avec le mot-cle crea_maille
+ le mot-clé MAILLAGE est obligatoire avec le mot-cle CREA_MAILLE
 """),
 
 2: _("""
- le mot-cle maillage est obligatoire avec le mot-cle crea_group_ma
+ le mot-clé MAILLAGE est obligatoire avec le mot-cle CREA_GROUP_MA
 """),
 
 3: _("""
- le mot-cle maillage est obligatoire avec le mot-cle crea_poi1. 
+ le mot-clé MAILLAGE est obligatoire avec le mot-cle CREA_POI1. 
 """),
 
 4: _("""
- le mot-cle maillage est obligatoire avec le mot-cle repere
+ le mot-clé MAILLAGE est obligatoire avec le mot-cle REPERE
 """),
 
 5: _("""
- sous le mot-cle "nom_orig" du mot-facteur "repere", on ne peut donner que les mots "cdg" ou "torsion".
+ sous le mot-cle "NOM_ORIG" du mot-clé facteur "REPERE",
+ on ne peut donner que les mots "CDG" ou "TORSION".
 """),
 
 6: _("""
- maille non creee  %(k1)s 
+ maille non créée  %(k1)s 
 """),
 
 7: _("""
-  le group_ma :  %(k1)s  existe deja.
+  le GROUP_MA :  %(k1)s  existe déjà.
 """),
 
 8: _("""
- le mot-cle maillage est obligatoire avec le mot-cle detr_group_ma
+ le mot-cle MAILLAGE est obligatoire avec le mot-clé DETR_GROUP_MA
 """),
 
 9: _("""
@@ -59,79 +60,86 @@ cata_msg={
 """),
 
 10: _("""
- masses effectives unitaires non calculees par norm_mode
+ masses effectives unitaires non calculées par NORM_MODE
 """),
 
 11: _("""
- structure resultat vide
+ structure résultat vide
 """),
 
 12: _("""
- nombre de noeuds sur le contour insuffisant pour determiner correctement les ordres de coque
+ nombre de noeuds sur le contour insuffisant pour déterminer correctement
+ les ordres de coque
 """),
 
 13: _("""
- azimut indefini pour un des noeuds de la coque
+ azimut indéfini pour un des noeuds de la coque
 """),
 
 14: _("""
- ordre de coque nul pour l un des modes pris en compte pour le couplage. le modele de resolution ne supporte pas une telle valeur.
+ ordre de coque nul pour l'un des modes pris en compte pour le couplage.
+ le modèle de résolution ne supporte pas une telle valeur.
 """),
 
 15: _("""
- determination du drmax et du dephasage pour le mode  %(k1)s  : le determinant du systeme issu du moindre carre est nul
+ détermination du DRMAX et du déphasage pour le mode  %(k1)s  :
+ le déterminant du système issu du moindre carré est nul
 """),
 
 16: _("""
- determination du dephasage pour le  mode  %(k1)s  : theta0 indefini
+ détermination du déphasage pour le mode  %(k1)s  :
+ THETA0 indéfini
 """),
 
 17: _("""
- pivot nul dans la resolution du systeme complexe
+ pivot nul dans la résolution du système complexe
 """),
 
 18: _("""
- annulation du numerateur dans l expression d un coefficient donnant la solution du probleme fluide instationnaire pour umoy = 0
+ annulation du numérateur dans l'expression d un coefficient donnant
+ la solution du problème fluide instationnaire pour UMOY = 0
 """),
 
 19: _("""
- determination des valeurs propres de l operateur differentiel : existence d une racine double
+ détermination des valeurs propres de l'opérateur différentiel :
+ existence d'une racine double
 """),
 
 20: _("""
- la  %(k1)s eme valeur propre est trop petite
+ la  %(k1)s ème valeur propre est trop petite
 """),
 
 21: _("""
- la matr_asse  %(k1)s  n"est pas stockee "morse" le gcpc est donc impossible.
+ la MATR_ASSE  %(k1)s  n'est pas stockée "morse" :
+ le GCPC est donc impossible.
 """),
 
 22: _("""
- conflit une matrice stockee morse ne peut avoir qu"un bloc
+ conflit : une matrice stockée morse ne peut avoir qu'un bloc
 """),
 
 23: _("""
-  le preconditionnement ldlt_inc d"une matrice complexe n"est pas implemente
+  le préconditionnement LDLT_INC d'une matrice complexe n'est pas implémenté
 """),
 
 24: _("""
stop 1:erreur programation.
Résolution LDLT : erreur de programmation.
 """),
 
 25: _("""
-  erreur a l'appel de metis 
+  erreur a l'appel de METIS 
 """),
 
 26: _("""
- pb affichage feti dans preml1 !
+ pb d'affichage FETI dans PREML1
 """),
 
 27: _("""
- solveur interne ldlt pour l'instant proscrit  avec feti
+ solveur interne LDLT interdit pour l'instant avec FETI
 """),
 
 28: _("""
- solveur interne mumps pour l'instant proscrit  avec feti
+ solveur interne MUMPS interdit pour l'instant avec FETI
 """),
 
 29: _("""
@@ -139,7 +147,7 @@ cata_msg={
 """),
 
 30: _("""
- matrices a et b incompatibles pour l operation * 
+ matrices A et B incompatibles pour l'opération * 
 """),
 
 31: _("""
@@ -151,43 +159,36 @@ cata_msg={
 """),
 
 33: _("""
- on ne traite pas ce type de cham_elem, icoef different de 1
+ on ne traite pas ce type de CHAM_ELEM, ICOEF différent de 1
 """),
 
 34: _("""
- le cham_no :  %(k1)s  n"existe pas
-"""),
-
-35: _("""
- la matr_asse  %(k1)s  n"est pas stockee "morse"
-"""),
-
-36: _("""
- conflit une matrice stockee morse ne peut avoir q'un seul bloc
+ le CHAM_NO :  %(k1)s  n'existe pas
 """),
 
 37: _("""
-  gcpc n"est pas prevu pour une matrice complexe
+  GCPC n"est pas prevu pour une matrice complexe
 """),
 
 38: _("""
- pas de matrice de preconditionnement : on s'arrete
+ pas de matrice de préconditionnement : on s'arrete
 """),
 
 39: _("""
-  le cham_no : %(k1)s  n"existe pas ==> reprise impossible ==> initialisation par le vecteur nul
+  le CHAM_NO : %(k1)s  n'existe pas
+  Reprise impossible ==> initialisation par le vecteur nul
 """),
 
 40: _("""
- erreur : lmat est nul
+ erreur : LMAT est nul
 """),
 
 41: _("""
- la matrice possede des ddls imposes elimines: il faut un vcine
+ la matrice possède des ddls imposés éliminés: il faut un VCINE
 """),
 
 42: _("""
-  la matrice et le vecteur cinematique ne contiennent pas des valeurs de meme type
+  la matrice et le vecteur cinématique ne contiennent pas des valeurs de meme type
 """),
 
 43: _("""
@@ -203,19 +204,19 @@ cata_msg={
 """),
 
 46: _("""
- recherche de corps rigide pour l'instant proscrite  avec matrice non-symetrique
+ recherche de corps rigide : pour l'instant proscrite avec matrice non-symetrique
 """),
 
 47: _("""
- recherche de corps rigide pour l'instant proscrite  avec matrice complexe
+ recherche de corps rigide : pour l'instant proscrite avec matrice complexe
 """),
 
 48: _("""
- nom_nume_ddl  %(k1)s  non trouve
+ NOM_NUME_DDL  %(k1)s  non trouvé
 """),
 
 49: _("""
- attention plus de six modes de corps rigides detectes
+ attention : plus de six modes de corps rigides detectés
 """),
 
 50: _("""
@@ -223,63 +224,63 @@ cata_msg={
 """),
 
 51: _("""
- le tableau b est insuffisamment dimensionne pour l operation * 
-"""),
-
-52: _("""
- augmenter la taille de la pile
+ le tableau B est insuffisamment dimensionné pour l'opération * 
 """),
 
 53: _("""
- toutes les frequencessont des frequences de corps rigide
+ toutes les fréquences sont des fréquences de corps rigide
 """),
 
 54: _("""
- calcul des nume_modematrice non inversible pour la frequence consideree
+ calcul des NUME_MODE : matrice non inversible pour la fréquence considérée
 """),
 
 55: _("""
- probleme a la resolution du systeme reduit.
+ problème à la résolution du système réduit.
 """),
 
 56: _("""
- valeur propre infinie trouvee
+ valeur propre infinie trouvée
 """),
 
 57: _("""
- methode qr : probleme de convergence 
+ methode QR : problème de convergence 
 """),
 
 58: _("""
- il y a des valeurs propres tres proches
-"""),
-
-59: _("""
- il y a des vp tres proches
+ il y a des valeurs propres très proches
 """),
 
 60: _("""
- la matrice    :  %(k1)s  a une numerotation incoherente avec le nume_ddl.
+ la matrice : %(k1)s a une numérotation incohérente avec le NUME_DDL.
 """),
 
 61: _("""
- le concept mode " %(k1)s " a ete cree avec les matrices    matr_a:  %(k2)s , matr_b:  %(k3)s , matr_c:  %(k4)s  et non avec celles  passees en arguments.
+ le concept MODE " %(k1)s " a été créé avec les matrices
+ MATR_A:  %(k2)s
+ MATR_B:  %(k3)s
+ MATR_C:  %(k4)s
+ et non avec celles passées en arguments.
 """),
 
 62: _("""
- le concept mode " %(k1)s " a ete cree avec les matrices    matr_a:  %(k2)s , matr_b:  %(k3)s  et non avec celles  passees en arguments.
+ le concept MODE " %(k1)s " a été créé avec les matrices
+ MATR_A:  %(k2)s
+ MATR_B:  %(k3)s
+ et non avec celles passées en arguments.
 """),
 
 63: _("""
- le systeme a resoudre n'a pas de ddl actif.
+ le système à résoudre n'a pas de DDL actif.
 """),
 
 64: _("""
- on trouve plus de 9999valeurs propres dans la bande demandee
+ on trouve plus de 9999 valeurs propres dans la bande demandée
 """),
 
 65: _("""
- la matrice de raideur est numeriquement singuliere (malgre la strategie de decalage) la valeur de decalage est une valeur propre ou la matrice est non inversible.
+ la matrice de raideur est numériquement singulière (malgré la stratégie de décalage) :
+ la valeur de décalage est une valeur propre ou la matrice est non inversible.
 """),
 
 66: _("""
@@ -292,11 +293,14 @@ cata_msg={
 """),
 
 67: _("""
- la matrice de raideur est numeriquement singuliere (malgre la strategie de decalage) la borne maximale de la bande est une valeur propre. on poursuit tout de meme
+ la matrice de raideur est numeriquement singulière (malgré la stratégie de decalage) :
+ la borne maximale de la bande est une valeur propre.
+ n poursuit tout de meme.
 """),
 
 68: _("""
- la matrice de raideur est singuliere malgre la strategie de decalage (ie structure avec des modes de corps solide). 
+ la matrice de raideur est singulière malgre la strategie de décalage
+ (structure avec des modes de corps solide). 
 """),
 
 69: _("""
@@ -304,23 +308,23 @@ cata_msg={
 """),
 
 70: _("""
- type des valeurs  variable d'un mode a l'autre,  recuperation impossible.
+ type des valeurs variable d'un mode à l'autre, récuperation impossible.
 """),
 
 71: _("""
- nombre d'equations variable d'un mode a l'autre,  recuperation impossible.
+ nombre d'équations variable d'un mode à l'autre, récuperation impossible.
 """),
 
 72: _("""
- probleme interne arpack
+ probleme interne ARPACK
 """),
 
 73: _("""
- probleme taille workd/l -> augmenter dim_sous_espace
+ problème taille WORKD/L -> augmenter DIM_SOUS_ESPACE
 """),
 
 74: _("""
- probleme interne lapack
+ problème interne LAPACK
 """),
 
 75: _("""
@@ -328,47 +332,50 @@ cata_msg={
 """),
 
 76: _("""
- probleme interne lapack, routine flahqr (forme de schur)
+ probleme interne LAPACK, routine FLAHQR (forme de SCHUR)
 """),
 
 77: _("""
- probleme interne lapack, routine ftrevc (vecteurs propres)
+ probleme interne LAPACK, routine FTREVC (vecteurs propres)
 """),
 
 78: _("""
- aucune valeur propre a la precision requise --> augmenter prec_soren ou nmax_iter_soren ou augmenter dim_sous_espace
+ aucune valeur propre à la précision requise
+ --> augmenter PREC_SOREN ou NMAX_ITER_SOREN ou augmenter DIM_SOUS_ESPACE
 """),
 
 79: _("""
- la position modale d'une des frequences est negative ou nulle, votre systeme matriciel est surement fortement singulier (ceci correspond generalement a un probleme dans la modelisation).
+ la position modale d'une des fréquences est négative ou nulle
+ votre système matriciel est surement fortement singulier
+ (ceci correspond généralement à un problème dans la modélisation).
 """),
 
 80: _("""
- mode a creer avant appel a vpstor
+ MODE à créer avant appel à VPSTOR
 """),
 
 81: _("""
- " %(k1)s "  argument du mot cle "option" pour le calcul des frequences est invalide.
+ " %(k1)s "  argument du mot cle "OPTION" pour le calcul des fréquences est invalide.
 """),
 
 82: _("""
- pour l'option  "bande" il faut exactement 2 frequences.
+ pour l'option "BANDE" il faut exactement 2 fréquences.
 """),
 
 83: _("""
- frequence min. plus grande ou egale a la frequence max.
+ fréquence min. supérieure ou égale à la fréquence max.
 """),
 
 84: _("""
- pour l'option  "centre" il faut exactement 1 frequence.
+ pour l'option "CENTRE" il faut exactement une fréquence.
 """),
 
 85: _("""
- pour l'option  "plus_petite" les frequences de "freq" sont ignorees.
+ pour les options  "PLUS_PETITE" et "TOUT" les frequences de "FREQ" sont ignorées.
 """),
 
 86: _("""
- pour l'option  "bande" il faut exactement 2 charges critiques.
+ pour l'option  "BANDE" il faut exactement 2 charges critiques.
 """),
 
 87: _("""
@@ -376,39 +383,39 @@ cata_msg={
 """),
 
 88: _("""
- pour l'option  "centre" il faut exactement 1 charge critique.
+ pour l'option  "CENTRE" il faut exactement une charge critique.
 """),
 
 89: _("""
- pour l'option  "plus_petite" les charges critiques de "char_crit" sont ignorees.
+ pour l'option  "PLUS_PETITE" et "TOUT" les charges critiques de "CHAR_CRIT" sont ignorées.
 """),
 
 90: _("""
- objet .refe/.refa/.celk inexistant.
+ objet .REFE/.REFA/.CELK inexistant.
 """),
 
 91: _("""
- cham_no non feti !
+ CHAM_NO non FETI
 """),
 
 92: _("""
- liste de cham_no a concatener heterogene
+ liste de CHAM_NO à concaténer hétérogène
 """),
 
 93: _("""
- les cham_nos  %(k1)s  et  %(k2)s  sont de type inconnu  %(k3)s 
+ les CHAM_NO  %(k1)s  et  %(k2)s  sont de type inconnu  %(k3)s 
 """),
 
 94: _("""
- le cham_no  %(k1)s  de type  %(k2)s  ne peut etre copie dans le cham_no  %(k3)s  de type  %(k4)s 
+ le CHAM_NO  %(k1)s  de type  %(k2)s  ne peut etre copié dans le CHAM_NO  %(k3)s  de type  %(k4)s 
 """),
 
 95: _("""
- champ a representation constante non traite.
+ champ à représentation constante : cas non traité.
 """),
 
 96: _("""
- chout non feti !
+ CHOUT non feti
 """),
 
 97: _("""
@@ -416,10 +423,10 @@ cata_msg={
 """),
 
 98: _("""
- probleme interne lapack, routine dlahqr (forme de schur)
+ probleme interne LAPACK, routine DLAHQR (forme de SCHUR)
 """),
 
 99: _("""
- probleme interne lapack, routine dtrevc (vecteurs propres)
+ probleme interne LAPACK, routine DTREVC (vecteurs propres)
 """),
 }
index 5d63100d603e343165cb3d883ea5ad56d52016f2..75f0e40b1283711c222c76623e17c427f13b0790 100644 (file)
-#@ MODIF algeline4 Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF algeline4 Messages  DATE 02/06/2008   AUTEUR MEUNIER S.MEUNIER 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  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.
+# COPYRIGHT (C) 1991 - 2007  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.        
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
+1 : _("""
  Seules les méthodes de résolution LDLT et MULT_FRONT sont autorisées.
 """),
 
+3 : _("""
+ Erreur lors de la résolution d'un système linéaire (GCPC) :
+ Non convergence  avec le nombre d'iterations autorisé :  %(i1)d
+   norme du residu (absolu)  :  %(r1)f
+   norme du residu (relatif) :  %(r2)f
 
-3: _("""
- non convergence  nombre d'iterations:  %(i1)d
-   norme du residu abs:  %(r1)f
-   norme du residu rel:  %(r2)f
+ Conseils :
+  * Vous pouvez augmenter le nombre d'itérations autorisées (SOLVEUR/NMAX_ITER).
+  * Vous pouvez aussi augmenter le niveau de remplissage pour la factorisation
+    incomplète (SOLVEUR/NIVE_REMPLISSAGE).
+  * Dans une commande non-linéaire (STAT_NON_LINE par exemple) vous pouvez aussi essayer de
+    diminuer la précision demandée pour la convergence (SOLVEUR/RESI_RELA), mais c'est plus
+    risqué car cela peut empecher la convergence de l'algorithme non-linéaire.
 """),
 
-4: _("""
-  manque de memoire memoire disponible %(i1)d et memoire necessaire %(i2)d
+4 : _("""
+  Manque de mémoire :
+     Mémoire disponible = %(i1)d
+     Mémoire nécessaire = %(i2)d
 """),
 
-5: _("""
erreur donnees noeud deja existant :  %(k1)s
+5 : _("""
Erreur données : noeud déjà existant :  %(k1)s
 """),
 
-
-
-
-
-
-7: _("""
- erreur donnees maille deja existante :  %(k1)s
+7 : _("""
+ Erreur données : maille déjà existante :  %(k1)s
 """),
 
-
-
-
-
-
-9: _("""
- erreur donnees group_ma deja existant :  %(k1)s
+9 : _("""
+ Erreur données GROUP_MA déjà existant :  %(k1)s
 """),
 
-
-
-
-
-
-
-
-11: _("""
- erreur donnees group_no deja existant :  %(k1)s
+11 : _("""
+ erreur données GROUP_NO déjà existant :  %(k1)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-17: _("""
-  inigpc %(i1)d
-"""),
-
-
-
-
-
-
-
-
-19: _("""
+19 : _("""
  Matrice masse non définie, il faudrait essayer l'autre algorithme de résolution.
 """),
 
-
-
-
-
-
-
-
-21: _("""
+21 : _("""
  manque de place memoire longueur de bloc insuffisante:  %(i1)d
  le super-noeud  %(i2)d
   neccessite un bloc de  %(i3)d
 """),
 
-
-
-
-
-
-
-
-23: _("""
- par nueq n'est pas l'identite.indice %(i1)d nueq  %(i2)d
-"""),
-
-24: _("""
+24 : _("""
  %(k1)s   pour le mot cle :  %(k2)s    noeud :  %(k3)s composante :  %(k4)s
 """),
 
-25: _("""
+25 : _("""
  combinaison non prevue   type resultat :  %(k1)s    type matrice  :  %(k2)s
     type constante:  %(k3)s
 """),
 
-
-
-
-
-
-27: _("""
- combinaison non prevue   type resultat :  %(k1)s    type matrice  :  %(k2)s
+27 : _("""
+ combinaison non prevue
+ type résultat :  %(k1)s
+ type matrice  :  %(k2)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-31: _("""
- combinaison non prevue   type resultat :  %(k1)s
+31 : _("""
+ combinaison non prevue
+ type résultat :  %(k1)s
 """),
 
-32: _("""
- charge critique retenue :  %(r1)f  numero de mode stocke  %(i1)d
+33 : _("""
+ la normalisation doit se faire en place
+ il est impossible d'avoir comme concept produit  %(k1)s et %(k2)s comme concept d'entrée.
 """),
 
-33: _("""
- la normalisation doit se  faire en place et donc il est impossible d'avoir comme concept produit  %(k1)s
- et  %(k2)s
- comme concept d'entree. %(k3)s
- comme le dit la sagesse populaire, on  ne peut avoir le beurre et l'argent du  beurre (de charente poitou). %(k4)s
+36 : _("""
+ l'option de normalisation  %(k1)s  n'est pas implantée. %(i1)d
 """),
 
-34: _("""
erreur dans les donnees la masse n existe pas dans la table  %(k1)s
+3: _("""
problème(s) rencontré(s) lors de la factorisation de la matrice : %(k1)s
 """),
 
-
-
-
-
-
-
-
-36: _("""
- l'option de normalisation  %(k1)s  n'est pas implantee. %(i1)d
+38 : _("""
+ appel erroné :
+ code retour de rsexch : %(i1)d
+ pb CHAM_NO %(k1)s
 """),
 
-37: _("""
- probleme(s) rencontre(s) lors de la factorisation de la matrice : %(k1)s
+42 : _("""
+ pas de produit car les valeurs de la MATRICE sont  %(k1)s
+ et celles du CHAM_NO sont  %(k2)s
 """),
 
-38: _("""
appel errone :   code retour de rsexch : %(i1)d    pb cham_no %(k1)s
+43 : _("""
la maille de nom  %(k1)s  existe déjà %(k2)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-42: _("""
- pas de produit car les valeurs de la matrice sont  %(k1)s
- et celles du cham_no sont  %(k2)s
+55 : _("""
+ pas d'extraction pour  %(k1)s
+ pour le numéro d'ordre  %(i1)d
 """),
 
-43: _("""
la maille de nom  %(k1)s  existe deja %(k2)s
+56 : _("""
pas de mode extrait pour  %(k1)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-55: _("""
- ***** alarme *****pas d'extraction pour  %(k1)s
-  pour le numero d'ordre  %(i1)d
+57 : _("""
+ NUME_MODE identique pour le %(i1)d
+ mode d'ordre  %(i2)d
 """),
 
-56: _("""
- ***** alarme *****pas de mode extrait pour  %(k1)s
+58 : _("""
+  problème dans le préconditionnement de la matrice MATAS par LDLT imcomplet
+  pivot nul à la ligne :  %(i1)d
 """),
 
-57: _("""
- ***** alarme *****nume_mode identique pour le %(i1)d
-  mode d'ordre  %(i2)d
-"""),
-
-58: _("""
-
-  probleme dans le preconditionnement  de la matrice  matas par ldlt imcomplet
-  pivot nul a la ligne :  %(i1)d
-"""),
-
-
-
-
-
-
-
-
-60: _("""
-  incoherence n2 nbddl sans lagranges %(i1)d nbddl reconstitues %(i2)d
+60 : _("""
+  incoherence n2 NBDDL sans lagranges %(i1)d NBDDL reconstitués %(i2)d
 """),
 
-61: _("""
+61 : _("""
  pas de mode statique pour le noeud :  %(k1)s  et sa composante :  %(k2)s
 """),
 
-62: _("""
- pour les modes statiques. on attend un :  %(k1)s    noeud :  %(k2)s
-      cmp :  %(k3)s
+62 : _("""
+ pour les modes statiques, on attend un :  %(k1)s
+ noeud :  %(k2)s
+ cmp   :  %(k3)s
 """),
 
-63: _("""
- champ inexistant.pb champ :  %(k1)s    noeud :  %(k2)s      cmp :  %(k3)s
+63 : _("""
+ champ inexistant.
+ champ    :  %(k1)s
+ noeud    :  %(k2)s
+ cmp      :  %(k3)s
 """),
 
-64: _("""
- detection d'un terme nul sur la sur diagonale valeur de beta   %(r1)f
- valeur de alpha  %(r2)f
+64 : _("""
+ détection d'un terme nul sur la sur diagonale
+ valeur de BETA   %(r1)f
+ valeur de ALPHA  %(r2)f
 """),
 
-65: _("""
- on a la  %(i1)d -ieme frequence du systeme reduit  est complexe =  %(r1)f
-  et partie_imaginaire/reelle =  %(r2)f
+65 : _("""
+ on a la  %(i1)d -ème fréquence du système réduit  est complexe =  %(r1)f
+  et partie_imaginaire/réelle =  %(r2)f
 """),
 
-66: _("""
- la val. pro. est:   %(r1)f
+66 : _("""
+ la valeur propre est :   %(r1)f
 """),
 
-
-
-
-
-
-
-
 68: _("""
- la vp est:   %(r1)f
+ la valeur propre est :   %(r1)f
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-74: _("""
- calcul d' erreur modale une valeur propre reelle est detectee %(k1)s
- a partir du couple (frequence, amortissement reduit) on ne peut plus  l'a reconstruire %(k2)s
- par convention l'erreur modale est  fixee a :  %(r1)f
+74 : _("""
+ calcul d'erreur modale :
+ une valeur propre réelle est detectee %(k1)s à partir du couple (fréquence, amortissement réduit)
+ on ne peut plus la reconstruire %(k2)s
+ par convention l'erreur modale est fixée à : %(r1)f
 """),
 
-75: _("""
- probleme generalise complexe
- amortissement (reduit) de decalage  superieur en valeur absolu a  %(r1)f
- on le ramene a la valeur :  %(r2)f
+75 : _("""
+ problème généralisé complexe
+ amortissement (reduit) de décalage supérieur en valeur absolue à  %(r1)f
+ on le ramène à la valeur :  %(r2)f
 """),
 
-76: _("""
- la reorthogonalisation diverge apres  %(i1)d  iteration(s)   %(i2)d
+76 : _("""
+ la réorthogonalisation diverge après  %(i1)d  itération(s)   %(i2)d
 """),
 
-77: _("""
- l'option de normalisation  %(k1)s  n'est pas implantee.
+77 : _("""
+ l'option de normalisation  %(k1)s  n'est pas implantée.
 """),
 
-
-
-
-
-
-
-
-79: _("""
- champ inexistant  %(k1)s impossible de recuperer neq %(k2)s
+79 : _("""
+ champ inexistant  %(k1)s impossible de récupérer NEQ %(k2)s
 """),
 
-80: _("""
+80 : _("""
  type de valeurs inconnu   %(k1)s
 """),
 
-81: _("""
- champ inexistant pb champ   %(k1)s
+81 : _("""
+ champ inexistant  %(k1)s
 """),
 
-82: _("""
- incoherence de cer tains parametres modaux propres a arpack
 numero d'erreur  %(i1)d
+82 : _("""
+ incohérence de certains paramètres modaux propres à ARPACK
numéro d'erreur  %(i1)d
 """),
 
-83: _("""
- nombre de valeurs propres convergees  %(i1)d
- < nombre de frequences demandees  %(i2)d
- erreur arpack numero :  %(i3)d
- --> le calcul continue, la prochaine fois %(i4)d
- -->   augmenter dim_sous_espace =  %(i5)d
- -->   ou nmax_iter_soren =  %(i6)d
- -->   ou prec_soren =  %(r1)f
+83 : _("""
+ nombre de valeurs propres convergées  %(i1)d < nombre de fréquences demandées  %(i2)d
+ erreur ARPACK numéro :  %(i3)d
+ --> le calcul continue, la prochaine fois
+ -->   augmenter DIM_SOUS_ESPACE =  %(i4)d
+ -->   ou NMAX_ITER_SOREN =  %(i5)d
+ -->   ou PREC_SOREN =  %(r1)f
 """),
 
-
-
-
-
-
-
-
-85: _("""
- appel errone mode numero %(i1)d position modale %(i2)d
- code retour de rsexch : %(i3)d
- pb cham_no %(k1)s
+85 : _("""
+ appel erroné mode numéro %(i1)d position modale %(i2)d
+ code retour de RSEXCH : %(i3)d
+ pb CHAM_NO %(k1)s
 """),
 
-86: _("""
- la reorthogonalisation diverge apres  %(i1)d  iteration(s) %(i2)d
-       vecteur traite :  %(i3)d
-       vecteur teste  :  %(i4)d
- arret de la reorthogonalisation %(k1)s
+86 : _("""
+ la réorthogonalisation diverge après  %(i1)d  itération(s) %(i2)d
+       vecteur traité :  %(i3)d
+       vecteur testé  :  %(i4)d
+ arret de la réorthogonalisation %(k1)s
 """),
 
-87: _("""
- pour le probleme reduitvaleur(s) propre(s) reelle(s)                   :  %(i1)d
- valeur(s) propre(s) complexe(s) avec  conjuguee :  %(i2)d
- valeur(s) propre(s) complexe(s) sans  conjuguee :  %(i3)d
+87 : _("""
+ pour le probleme réduit
+ valeur(s) propre(s) réelle(s)                  :  %(i1)d
+ valeur(s) propre(s) complexe(s) avec conjuguée :  %(i2)d
+ valeur(s) propre(s) complexe(s) sans conjuguée :  %(i3)d
 """),
 
-88: _("""
- votre probleme est fortement amorti.
- valeur(s) propre(s) reelle(s)                   :  %(i1)d
- valeur(s) propre(s) complexe(s) avec  conjuguee :  %(i2)d
- valeur(s) propre(s) complexe(s) sans  conjuguee :  %(i3)d
+88 : _("""
+ votre problème est fortement amorti.
+ valeur(s) propre(s) réelle(s)                  :  %(i1)d
+ valeur(s) propre(s) complexe(s) avec conjuguée :  %(i2)d
+ valeur(s) propre(s) complexe(s) sans conjuguée :  %(i3)d
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-94: _("""
- probleme quadratique complexe
- amortissement (reduit) de decalage  superieur en valeur absolu a  %(r1)f
- on le ramene a la valeur :  %(r2)f
+94 : _("""
+ problème quadratique complexe
+ amortissement (réduit) de décalage supérieur en valeur absolue à  %(r1)f
+ on le ramène à la valeur :  %(r2)f
 """),
 
-95: _("""
- probleme quadratique
- amortissement (reduit) de decalage  superieur en valeur absolu a  %(r1)f
- on le ramene a la valeur :  %(r2)f
+95 : _("""
+ problème quadratique
+ amortissement (réduit) de décalage supérieur en valeur absolue à  %(r1)f
+ on le ramène à la valeur :  %(r2)f
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-98: _("""
- nombre de valeurs propres convergees  %(i1)d
- < nombre de frequences demandees  %(i2)d
- erreur arpack numero :  %(i3)d
- --> le calcul continue, la prochaine fois %(i4)d
- -->   augmenter dim_sous_espace =  %(i5)d
- -->   ou nmax_iter_soren =  %(i6)d
- -->   ou prec_soren =  %(r1)f
- si votre probleme est fortement amorti  %(i7)d
- il est possible que des modes propres  %(i8)d
- non calcules soient sur-amortis  %(i9)d
- --> diminuez le nombre de frequences  %(i10)d
- demandees %(i11)d
+98 : _("""
+ nombre de valeurs propres convergées  %(i1)d < nombre de fréquences demandées  %(i2)d
+ erreur ARPACK numéro :  %(i3)d
+ --> le calcul continue, la prochaine fois
+ -->   augmenter DIM_SOUS_ESPACE =  %(i4)d
+ -->   ou NMAX_ITER_SOREN =  %(i5)d
+ -->   ou PREC_SOREN =  %(r1)f
+ si votre problème est fortement amorti, il est possible que
+ des modes propres non calculés soient sur-amortis
+ --> diminuez le nombre de fréquences demandées
 """),
 
-
-
-
-
-
-
-
 }
index 431d7e370689a5392d132f163b7b5bb1adeb9af4..cd9b4074d372ba6289a7240e27ef61d73994d3dc 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF algeline5 Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF algeline5 Messages  DATE 26/05/2008   AUTEUR BOITEAU O.BOITEAU 
 # -*- coding: iso-8859-1 -*-
 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
@@ -23,40 +23,336 @@ def _(x) : return x
 
 cata_msg={
 
+4: _("""
+ erreur LAPACK (ou BLAS) au niveau de la routine  %(k1)s
+  le paramètre numéro  %(i1)d
+  n'a pas une valeur cohérente %(i2)d
+"""),
 
+5: _("""
+ !! Attention, vous utilisez l'option de test FETI de l'interface.
+ On va donc simuler la résolution d'un système diagonal canonique,
+ pour provoquer un test d'ensemble de l'algorithme qui doit trouver
+ la solution U=1 sur tous les noeuds.
+ Vos résultats sont donc articiellement faussés pour les besoins de
+ ce test. Pour réaliser effectivement votre calcul, désactiver cette
+ option (INFO_FETI(12:12)='F' au lieu de 'T') !!
+"""),
 
+6: _("""
+ Résolution MULTI_FRONTALE :
+ problème dans le traitement des résultats de AMDBAR
+ tous les NDS du SN %(i1)d ont NV nul
+"""),
 
+10: _("""
+ ! le nb de noeuds de la structure   :  %(i1)d
+ ! la base utilisée est              :  %(k1)s
+ ! les caractéristiques élémentaires :  %(k2)s
+ ! diamètre de la structure          :  %(r1)f
+ ! type de pas                       :  %(i2)d
+ ----------------------------------------------
+"""),
 
+11: _("""
+ ! le profil de vitesse de la zone:  %(k1)s
+ !   type de réseau de la zone    :  %(i1)d
+ ----------------------------------------------
+"""),
 
+12: _("""
 
+"""),
 
+13: _("""
+ ! le noeud d'application           :  %(k1)s
+ ! la base utilisée est             :  %(k2)s
+ ! les caractéristiques élémentaires:  %(k3)s
+ ! diamètre de la structure         :  %(r1)f
+ ! type de configuration            :  %(k4)s
+ ! le coefficient de masse ajoutée  :  %(r2)f
+ ! le profil de masse volumique     :  %(r3)f
+ ----------------------------------------------
 
+"""),
 
+14: _("""
+    pas de couplage pris en compte
+ ----------------------------------------------
+"""),
 
+15: _("""
+   pour le concept  %(k1)s  le mode numéro  %(i1)d
+"""),
 
+16: _("""
+  de frequence  %(r1)f
+"""),
 
+17: _("""
+  de charge critique  %(r1)f
+"""),
 
+18: _("""
+  a une norme d'erreur de  %(r1)f  supérieure au seuil admis  %(r2)f
+"""),
 
+19: _("""
+   pour le concept  %(k1)s  le mode numéro  %(i1)d
+"""),
 
+20: _("""
+  de fréquence  %(r1)f
+  est en dehors de l'intervalle de recherche : %(r2)f
+  ,  %(r3)f
+"""),
 
+21: _("""
+  de charge critique  %(r1)f
+  est en dehors de l'intervalle de recherche : %(r2)f
+  ,  %(r3)f
+"""),
 
+22: _("""
 
+"""),
 
+23: _("""
+   pour le concept  %(k1)s
+"""),
 
-4: _("""
- erreur lapack (ou blas) au niveau de la routine  %(k1)s
-  le parametre numero  %(i1)d
-  n'a pas une valeur coherente %(i2)d
+24: _("""
+  dans l'intervalle  ( %(r1)f  ,  %(r2)f )
+  il y a théoriquement  %(i1)d frequence(s)
+  et on en a calculé  %(i2)d
 """),
 
-5: _("""
- !! Attention, vous utilisez l'option de test FETI de l'interface.
- On va donc simuler la résolution d'un système diagonal canonique,
- pour provoquer un test d'ensemble de l'algorithme qui doit trouver
- la solution U=1 sur tous les noeuds. 
- Vos résultats sont donc articiellement faussés pour les besoins de
- ce test. Pour réaliser effectivement votre calcul, désactiver cette
- option (INFO_FETI(12:12)='F' au lieu de 'T') !!
+25: _("""
+  dans l'intervalle  ( %(r1)f  ,  %(r2)f )
+  il y a théoriquement  %(i1)d charge(s) critique(s)
+  et on en a calculé  %(i2)d
+"""),
+
+26: _("""
+
+"""),
+
+27: _("""
+ la valeur du shift %(r1)f  est une fréquence propre
+"""),
+
+28: _("""
+ les nombres de termes des matrices RIGI et MASSE différent
+ celui de la matrice MASSE vaut :  %(i1)d
+ celui de la matrice RIGI  vaut :  %(i2)d
+
+"""),
+
+29: _("""
+ le nombre d'amortissements reduits est trop grand
+ le nombre de modes propres vaut  %(i1)d
+ et le nombre de coefficients :   %(i2)d
+ on ne garde donc que les %(i3)d premiers coefficients
+
+"""),
+
+30: _("""
+ le nombre d'amortissements réduits est insuffisant, il en manque :  %(i1)d,
+ car le nombre de modes vaut :  %(i2)d
+ on rajoute  %(i3)d amortissements réduits avec la valeur du dernier mode propre.
+"""),
+
+31: _("""
+  incoherence :
+   DEEQ I      =  %(i1)d
+   DEEQ(2*I-1) =  %(i2)d
+   DEEQ(2*I)   =  %(i3)d
+
+"""),
+
+32: _("""
+  erreur de type DELG(IDDL) différent de -1 ou -2  %(i1)d
+"""),
+
+33: _("""
+ un ddl bloqué a au moins 2 LAMBDA1 ou 2 LAMBDA2
+ le ddl bloqué est  %(i1)d
+
 """),
 
+34: _("""
+ incohérence des lagranges
+ DDL %(i1)d
+ LAMBDA1 %(i2)d
+ LAMBDA1 %(i3)d
+"""),
+
+35: _("""
+ erreur programmeur
+ le LAMBDA2  %(i1)d a moins de 2 voisins
+ il faut le LAMBDA1 et au moins un DDL
+
+"""),
+
+36: _("""
+ Problème dans le calcul des DDL :
+ NUM devrait etre égal à n1 :
+ num = %(i1)d , n1 = %(i2)d
+ impression des lagranges
+"""),
+
+37: _("""
+ NUME_DDL incohérence des lagranges
+  ddl     %(i1)d
+  lambda1 %(i2)d
+  lambda1 %(i3)d
+"""),
+
+38: _("""
+ nombre de relations linéaires %(i1)d
+"""),
+
+39: _("""
+ LAMBDA1 de R linéaire : %(i1)d
+ LAMBDA2 de R linéaire : %(i2)d
+"""),
+
+40: _("""
+ Données erronées
+"""),
+
+41: _("""
+ pas de mode statique pour  le noeud :  %(k1)s  et sa composante :  %(k2)s
+
+"""),
+
+42: _("""
+ pour les modes statiques :
+ on attend un :  %(k1)s
+ noeud :  %(k2)s
+ cmp   :  %(k3)s
+
+"""),
+
+43: _("""
+ champ inexistant.
+ champ :  %(k1)s
+ noeud :  %(k2)s
+ cmp   :  %(k3)s
+
+"""),
+
+48: _("""
+ incohérence de certains paramètres modaux propres à ARPACK
+  numéro d'erreur  %(i1)d
+
+"""),
+
+49: _("""
+ nombre de valeurs propres convergées  %(i1)d < nombre de fréquences demandées  %(i2)d
+ erreur ARPACK numéro :  %(i3)d
+ --> le calcul continue, la prochaine fois
+ -->   augmenter DIM_SOUS_ESPACE =  %(i4)d
+ -->   ou NMAX_ITER_SOREN =  %(i5)d
+ -->   ou PREC_SOREN =  %(r1)f
+
+"""),
+
+51: _("""
+ la valeur propre numéro  %(i1)d a une partie imaginaire non nulle
+ re(vp) = %(r1)f
+ im(vp) = %(r2)f
+ --> ce phénomène numérique est fréquent
+ --> sur les premières valeurs propres
+ --> lorsque le spectre recherche est
+ --> tres étendu (en pulsation)
+
+"""),
+
+52: _("""
+ LAIGLE: Erreur
+   - Non convergence à l'itération maxi : %(i1)d
+   - Convergence irrégulière & erreur >   %(r1)f
+   - Diminuer la taille d'incrément.
+"""),
+
+53: _("""
+ Erreur de programmation MULT_FRONT (NUME_DDL / PREML0) :
+   * Sur-connexion des Lagranges Lambda1
+"""),
+
+54: _("""
+     ==== Type de maille Aster / Type de maille GMSH ====
+"""),
+
+55: _("""
+    %(i1)d  éléments %(k1)s découpés en %(i2)d  éléments %(k2)s a %(i3)d noeuds
+"""),
+
+56: _("""
+    La matrice factorisée produit par l'opérateur FACTOR ne peut faire l'objet
+    d'un concept réentrant car la méthode de résolution définie dans NUME_DDL
+    est 'GCPC'.
+"""),
+
+57: _("""
+    Le préconditionnement d'une matrice assemblée complexe n'est pas permis.
+"""),
+
+58: _("""
+    La masse du modele est nulle. On ne peut normer par rapport a la masse.
+"""),
+
+59: _("""
+ MULT_FRONT: Erreur dans la renumerotation
+   - Le Super-Noeud : %(i1)d
+   - devrait etre le fils de   %(i2)d
+
+ Risques & conseils :
+   - Vous devriez rencontrer des problèmes lors de la factorisation.
+   - Essayez un autre algorithme pour la renumérotation : 'MD', 'MDA', ...
+"""),
+
+60: _("""
+    Méthode QZ dans MODE_ITER_SIMULT: La variante QR ne fonctionne qu'avec une
+    matrice B symétrique définie positive ! Donc elle n'accepte pas le flambement,
+    les Lagranges d'AFFE_CHAR_MECA, une matrice de rigidité complexe ou les
+    problèmes modaux quadratiques.
+"""),
+61: _("""
+    Méthode QZ dans MODE_ITER_SIMULT: propriété spectrale non respectée sur la
+    valeur propre n %(i1)d !. On a pas |alpha| < ||A|| et |béta| < ||B|| 
+                     |alpha|=%(r1)f, ||A||=%(r2)f
+                     | béta|=%(r3)f, ||B||=%(r4)f
+"""),
+62: _("""
+    Méthode QZ dans MODE_ITER_SIMULT: On trouve un nombre de valeurs propres 
+    %(i1)d différent du nombre de ddls physiques actifs %(i2)d ! 
+"""),
+63: _("""
+    Méthode QZ dans MODE_ITER_SIMULT + OPTION='BANDE': On trouve un nombre de 
+    valeurs propres %(i1)d différent du nombre de valeurs propres détectées
+    dans la bande %(i2)d ! 
+"""),
+64: _("""
+    Problème modal quadratique et méthode de JACOBI sont incompatible !
+    Essayer plutôt la méthode de SORENSEN (METHODE='SORENSEN'). 
+"""),
+65: _("""
+    L'option de calcul 'TOUT' n'est licite qu'avec METHODE='QZ'! 
+"""),
+66: _("""
+    Méthode QZ dans MODE_ITER_SIMULT : On souhaite un nombre de valeurs
+    propres %(i1)d supérieur au nombre de valeurs propres détectées %(i2)d ! 
+"""),
+67: _("""
+    Attention on souhaite un nombre de valeurs propres NMAX_FREQ=%(i1)d supérieur
+    au nombre de valeurs propres détectées NCONV=%(i2)d !
+    Pour poursuivre le calcul on impose NMAX_FREQ=NCONV.
+    Sans doute est-ce du à un mauvais tri dans les valeurs propres complexes
+     conjuguées. Contacter l'équipe de développement.
+"""),
+68: _("""
+    Méthode QZ dans MODE_ITER_SIMULT: erreur LAPACK %(i1)d !
+"""),
 }
index fc8e0b7cfa55e0b15dbf5975e2eb77a156ccf328..a41b5819c25d51e2d408c321bf24346e434e6405 100644 (file)
-#@ MODIF algorith Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF algorith Messages  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  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.
+# COPYRIGHT (C) 1991 - 2007  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.        
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-
-
-
-
-
-
-3: _("""
- type de matrice inconnu.
-"""),
-
-4: _("""
- points confondus
+1 : _("""
+ La modélisation C_PLAN n'est pas compatible avec la loi de comportement ELAS_VMIS_PUIS.
 """),
 
-5: _("""
- gradients confondus
+: _("""
+ type de matrice inconnu.
 """),
 
-
-
-
-
-10: _("""
+10 : _("""
  impossible de diagonaliser la matrice de raideur en choc
 """),
 
-11: _("""
- puls(i) = 0. initialisation a puls0(i).
+11 : _("""
+ PULS(I) = 0.
+ initialisation à PULS0(I).
 """),
 
-12: _("""
-  -> L'option 'ACCE_ABSOLU' est incorrectement traitée en multi appuis.
-     Sauf si les mouvements sont corrélés.
-  -> Risque & Conseil :
-     Assurez-vous que les mouvements sont décorrélés et indépendants.
-
+13 : _("""
+ le VECT_ELEM n'existe pas :  %(k1)s
 """),
 
-13: _("""
- le vect_elem n'existe pas :  %(k1)s
+1: _("""
+ les charges cinématiques sont pour l'instant proscrites avec FETI
 """),
 
-14: _("""
- champ non renseigne. il faut avoir utilise corich('e',...) sur:  %(k1)s
-"""),
-
-15: _("""
- impossible
-"""),
-
-16: _("""
- les charges cinematiques sont pour l'instant proscrites avec feti
-"""),
-
-19: _("""
- stop 3
-"""),
-
-20: _("""
- on n'a pas pu extraire le premier champ des modes mecaniques.
-"""),
-
-21: _("""
+21 : _("""
  le noeud  %(k1)s  n'appartient pas au maillage :  %(k2)s
 """),
 
-22: _("""
- le groupe  %(k1)s  n'appartient pas au maillage :  %(k2)s
-"""),
-
-23: _("""
- le noeud  %(k1)s  n'est pas un noeud support.
+25 : _("""
+ données incompatibles.
 """),
 
-24: _("""
- le nombre de cas  doit etre superieur a deux pour etre  combine
+32 : _("""
+  la numérotation n'est pas cohérente avec le modèle généralisé
+  si vous avez activé l'option INITIAL dans NUME_DDL_GENE faites de meme ici !
 """),
 
-25: _("""
- donnees incompatibles.
+33 : _("""
+ calcul des options RIGI_MECA_TANG, RAPH_MECA et FULL_MECA
+ en mécanique des milieux poreux avec couplage THM
+ ---> erreur de dimensionnement
 """),
 
-26: _("""
- le vecteur directeur du spectre est nul.
+34 : _("""
+ il y a incohérence entre :
+    la loi de couplage de DEFI_MATERIAU : %(k1)s
+ et la loi de couplage de STAT_NON_LINE : %(k2)s
 """),
 
-27: _("""
cas du mono_appui : vous avez deja donne un spectre pour cette direction.
+35 : _("""
les champs " %(k1)s " et " %(k2)s " n'ont pas le meme domaine de définition.
 """),
 
-28: _("""
-  erreur(s) rencontree(s) lors de la lecture des supports.
+36 : _("""
+ BARSOUM, erreur dans le traitement des mailles %(k1)s
 """),
 
-29: _("""
-  vous avez deja donne un spectre pour le support  %(k1)s
+42 : _("""
+ BETON_DOUBLE_DP: incrément de déformation plastique en traction négatif
+ --> redécoupage automatique du pas de temps
 """),
 
-30: _("""
- on ne peut pas traiter du mono-appui et du multi-appui simultanement.
+43 : _("""
+ BETON_DOUBLE_DP: incrément de déformation plastique en compression négatif
+ --> redécoupage automatique du pas de temps
 """),
 
-31: _("""
- le noeud  %(k1)s  ne fait pas parti du maillage :  %(k2)s
+44 : _("""
+ intégration élastoplastique de la loi BETON_DOUBLE_DP :
+ la condition d'applicabilité sur la taille des éléments
+ n'est pas respectée en compression.
 """),
 
-32: _("""
-  la numerotation n'est pas coherente avec le  modele generalise  si vous avez active l'option initial dans  nume_ddl_gene faite de meme ici !  on arrete tout
+45 : _("""
+ intégration élastoplastique de la loi BETON_DOUBLE_DP :
+ la condition d'applicabilité sur la taille des elements
+ n'est pas respectée en compression pour la maille:  %(k1)s
 """),
 
-33: _("""
- dimensionement
+46 : _("""
+ intégration élastoplastique de la loi BETON_DOUBLE_DP :
+ la condition d'applicabilité sur la taille des éléments
+ n est pas respectée en traction.
 """),
 
-34: _("""
- il y a incohrence entre la loi de couplage de defi_materiau  %(k1)s  et la loi de couplage dans stat_non_line  %(k2)s
+47 : _("""
+ integration élastoplastique de la loi BETON_DOUBLE_DP :
+ la condition d'applicabilite sur la taille des éléments
+ n'est pas respectée en traction pour la maille:  %(k1)s
 """),
 
-35: _("""
- les champs " %(k1)s " et " %(k2)s " n'ont pas le meme domaine de definition.
-"""),
-
-36: _("""
- barsoum, hexa : bug !
-"""),
-
-37: _("""
- barsoum, penta : bug !
-"""),
-
-38: _("""
- barsoum, pyram : bug !
-"""),
-
-39: _("""
- barsoum, quad : bug !
-"""),
-
-40: _("""
- barsoum, tetra : bug !
-"""),
-
-41: _("""
- barsoum, tria : bug !
-"""),
-
-42: _("""
- beton_double_dp: increment de deformation plastique en traction negatif --> redecoupage auto du pas de temps
-"""),
-
-43: _("""
- beton_double_dp: increment de deformation plastique en compression negatif --> redecoupage auto du pas de temps
-"""),
-
-44: _("""
- integration elastoplastique de loi beton_double_dp : la condition d applicabilite sur la taille des elements n est pas respectee en compression.
-"""),
-
-45: _("""
- integration elastoplastique de loi beton_double_dp : la condition d applicabilite sur la taille des elements n est pas respectee en compression pour la maille:  %(k1)s
-"""),
-
-46: _("""
- integration elastoplastique de loi beton_double_dp : la condition d applicabilite sur la taille des elements n est pas respectee en traction.
-"""),
-
-47: _("""
- integration elastoplastique de loi beton_double_dp : la condition d applicabilite sur la taille des elements n est pas respectee en traction pour la maille:  %(k1)s
-"""),
-
-48: _("""
-  -> Intégration élastoplastique de loi multi-critères beton_double_dp :
-     la contrainte équivalente est nulle pour la maille %(k1)s: le calcul
-     de la matrice tangente est impossible.
+48 : _("""
+  -> Intégration élastoplastique de loi multi-critères BETON_DOUBLE_DP :
+     la contrainte équivalente est nulle pour la maille %(k1)s
+     le calcul de la matrice tangente est impossible.
   -> Risque & Conseil :
-
-"""),
-
-49: _("""
- pour la loi beton_double_dp le parametre coef_elas_comp doit etre compris entre 0. et 100.
-"""),
-
-50: _("""
- pour la loi beton_double_dp le parametre long_cara doit etre strictement positif
-"""),
-
-51: _("""
- beton_double_dp: le cas des contraintes planes n esp pas traite pour ce modele.
 """),
 
-52: _("""
- resultat n'est pas en evol_noli
+51 : _("""
+ BETON_DOUBLE_DP:
+ le cas des contraintes planes n'est pas traité pour ce modèle.
 """),
 
-53: _("""
- champ sief_elga non trouve
+57 : _("""
+ le matériau dépend de la température 
+ il n'y a pas de champ de température
+ le calcul est impossible
 """),
 
-54: _("""
- champ epsp_elno non trouve
+60 : _("""
+ certains coefficients de masse ajoutée sont négatifs.
+ verifiez l'orientation des normales des éléments d'interface.
+ convention adoptée : structure vers fluide
 """),
 
-55: _("""
- champ vari_elno_elga non trouve
+61 : _("""
+ certains coefficients d'amortissement ajouté sont négatifs.
+ possibilité d'instabilité de flottement
 """),
 
-56: _("""
- aucun champ initial trouve
-"""),
-
-57: _("""
- le materiau depend de la temperature! il n'y a pas de champ de temperature ! le calcul est impossible
-"""),
-
-
-
-
-
-
-59: _("""
- thlag-gleg pas possible
-"""),
-
-60: _("""
- certains coefficients de masse ajoutee sont negatifs. verifiez l' orientation des normales des elements d' interface.convention adoptee : structure vers fluide
-"""),
-
-61: _("""
- certains coefficients d amortissement ajoute sont negatifs. possibilited instabilitede flottement
-"""),
-
-62: _("""
+62 : _("""
  erreur dans le calcul des valeurs propres de la matrice de raideur
 """),
 
-63: _("""
- valeurs propres de la matrice de raideur non reelles
+63 : _("""
+ valeurs propres de la matrice de raideur non réelles
 """),
 
-64: _("""
- valeurs propres de la matrice de raideur reelles negatives
+64 : _("""
+ valeurs propres de la matrice de raideur réelles négatives
 """),
 
-65: _("""
- erreur dans la selection des valeurs propres de la matrice de raideur
+65 : _("""
+ erreur dans la sélection des valeurs propres de la matrice de raideur
 """),
 
-66: _("""
+66 : _("""
  tailles des matrices incompatibles pour calcul matrice diagonale
 """),
 
-67: _("""
- option secante non valide
+67 : _("""
+ option SECANTE non valide
 """),
 
-68: _("""
- trop de familles de systemes de glissement. augmenter la limite actuelle (5)
+68 : _("""
+ trop de familles de systèmes de glissement.
+ augmenter la limite actuelle (5)
 """),
 
-69: _("""
- trop de familles de systemes de glissement. modifier gerpas
+69 : _("""
+ trop de familles de systèmes de glissement.
+ modifier GERPAS
 """),
 
-70: _("""
nbsys=0
+70 : _("""
Le nombre de système de glissement est égal à 0
 """),
 
-71: _("""
+71 : _("""
  tailles incompatibles pour le produit matrice * vecteur
 """),
 
-72: _("""
- traitement non prevu pour le type d'obstacle demande
+72 : _("""
+ traitement non prévu pour le type d'obstacle demandé
 """),
 
-73: _("""
- obstacle de type discret mal defini (un angle > pi).
+73 : _("""
+ obstacle de type discret mal défini (un angle est supérieur à pi).
 """),
 
-
-
-
-
-
-77: _("""
- pb a la resolution du systeme
+77 : _("""
+ problème à la résolution du système
 """),
 
-78: _("""
- cas 2d impossible
+78 : _("""
+ cas 2D impossible
 """),
 
-79: _("""
+79 : _("""
  liaison de frottement incongrue
 """),
 
-
-
-
-
-
-81: _("""
- erreur contact - trop de reac. geom.
-"""),
-
-82: _("""
- erreur pgmeur 1
-"""),
-
-
-
-
-
-
-
-
-89: _("""
- vecteur diagnostic absent (dvlp)
-"""),
-
-90: _("""
- operation inconnue sur le vecteur diagnostic (dvlp)
-"""),
-
-91: _("""
- acces incorrect au vecteur diagnostic (dvlp)
-"""),
-
-92: _("""
- cas impossible
-"""),
-
-
-
-94: _("""
- pas possible
+81 : _("""
+ erreur contact - trop de réactualisations géométriques
 """),
 
-
-
-
-
-
-96: _("""
- ce mot cle de modi_maillage attend un vecteur de norme non nulle.
+96 : _("""
+ ce mot cle de MODI_MAILLAGE attend un vecteur de norme non nulle.
 """),
 
-97: _("""
- le mot cle repere de modi_maillage attend deux vecteurs non nuls orthogonaux.
+97 : _("""
+ le mot cle REPERE de MODI_MAILLAGE attend deux vecteurs non nuls orthogonaux.
 """),
 
-
-
-
-
-
-
-
-
-
 }
index d8a49ab67ab161a958032c9d3dd61b1bac437d05..da5950fe6e3cd063eabcb6934070f3384d9164ac 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF algorith10 Messages  DATE 30/04/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF algorith10 Messages  DATE 11/03/2008   AUTEUR MAHFOUZ D.MAHFOUZ 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- la variable  %(k1)s  n existe pas dans la loi  %(k2)s 
+1 : _("""
+ la variable  %(k1)s  n'existe pas dans la loi  %(k2)s 
 """),
 
-2: _("""
- tailles matrices incompatibles
+2 : _("""
+ tailles de matrices incompatibles
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-10: _("""
+10 : _("""
  taille produit matrice-vecteur incompatible
 """),
 
-11: _("""
- le champ de deplacement n'a pas ete calcule.
+11 : _("""
+ le champ de déplacement n'a pas été calculé
 """),
 
-12: _("""
- le champ de vitesse n'a pas ete calcule.
+12 : _("""
+ le champ de vitesse n'a pas été calculé
 """),
 
-13: _("""
- le champ d'acceleration n'a pas ete calcule.
+13 : _("""
+ le champ d'accélération n'a pas ete calcule.
 """),
 
-14: _("""
- developpement non prevu pour le mult_appui ou corr_stat.
+14 : _("""
+ développement non prévu pour le MULT_APPUI ou CORR_STAT.
 """),
 
-15: _("""
- developpement non prevu pour la sous-structuration.
+15 : _("""
+ développement non prévu pour la sous-structuration.
 """),
 
-16: _("""
- le champ  %(k1)s  n'a pas ete calcule dans le mode_meca  %(k2)s 
+16 : _("""
+ le champ  %(k1)s  n'a pas été calculé dans le MODE_MECA  %(k2)s 
 """),
 
-17: _("""
- l'option  %(k1)s  s'aplique sur toute la structure
+17 : _("""
+ l'option  %(k1)s  s'applique sur toute la structure
 """),
 
-
-
-
-
-
-
-
-
-
-
-20: _("""
+20 : _("""
   le comportement :  %(k1)s  n'a pas etet defini
 """),
 
-21: _("""
- dist_refe est obligatoire a la premiere occurence de reco_global
+21 : _("""
+ DIST_REFE est obligatoire à la première occurence de RECO_GLOBAL
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-31: _("""
- la bande de frequence retenue ne comporte pas de modes propres
+31 : _("""
+ la bande de fréquence retenue ne comporte pas de modes propres
 """),
 
-32: _("""
- vous avez demande des modes qui ne sont pas calcules
+32 : _("""
+ vous avez demandé des modes qui ne sont pas calculés
 """),
 
-33: _("""
- il n y a pas de mode statique         calcule pour le couple noeud-cmp ci dessus
+33 : _("""
+ il n y a pas de mode statique calculé pour le couple noeud-cmp ci dessus
 """),
 
-34: _("""
- redecoupage demande apres non convergence locale. redecoupage global
+34 : _("""
+ redécoupage demandé après non convergence locale
+ redécoupage global
 """),
 
-35: _("""
- redecoupage excessif du pas de temps interne : reduisez votre pas de temps ou augmenter abs(iter_inte_pas). redecoupage global.
+35 : _("""
+ redécoupage excessif du pas de temps interne
+ réduisez votre pas de temps ou augmenter abs(ITER_INTE_PAS)
+ redecoupage global.
 """),
 
-36: _("""
- il manque sigm_refe
+36 : _("""
+ il manque SIGM_REFE
 """),
 
-37: _("""
- il manque resi_hyd1_refe
+37 : _("""
+ il manque RESI_HYD1_REFE
 """),
 
-38: _("""
- il manque resi_hyd2_refe
+38 : _("""
+ il manque RESI_HYD2_REFE
 """),
 
-39: _("""
- il manque resi_ther_refe
+39 : _("""
+ il manque RESI_THER_REFE
 """),
 
-40: _("""
- vecteur nul entrainant une division par zero dans nmconv
+40 : _("""
+ vecteur nul entrainant une division par zéro dans NMCONV
 """),
 
-41: _("""
- incoherence de a ou h
+41 : _("""
+ incohérence de A ou H
 """),
 
-42: _("""
- incoherence de donnees
+42 : _("""
+ incohérence de données
 """),
 
-43: _("""
- incoherence de c, phi ou a
+43 : _("""
+ incohérence de C, PHI ou A
 """),
 
-44: _("""
- champ 'depl' non calcule
+44 : _("""
+ champ 'DEPL' non calculé
 """),
 
-45: _("""
- champ 'vite' non calcule
+45 : _("""
+ champ 'VITE' non calculé
 """),
 
-46: _("""
- champ 'acce' non calcule
+46 : _("""
+ champ 'ACCE' non calculé
 """),
 
-47: _("""
- lecture des instants erronee
+47 : _("""
+ lecture des instants erronée
 """),
 
-48: _("""
- axe de rotation indefini.
+48 : _("""
+ axe de rotation indéfini.
 """),
 
-49: _("""
- la porosite initiale f0 ne peut etre nulle ou negative
+49 : _("""
+ la porosité initiale F0 ne peut etre nulle ou négative
 """),
 
-50: _("""
- la porosite initiale f0 ne peut etre egal ou plus grand que un
+50 : _("""
+ la porosité initiale F0 ne peut etre supérieure ou égale à 1.
 """),
 
-51: _("""
- comportement de rousselier version petit_reac non implante en contraintes planes
+51 : _("""
+ comportement de Rousselier version PETIT_REAC non implanté en contraintes planes
 """),
 
-52: _("""
- la porosite initiale f0 ne peut etre negative
+52 : _("""
+ la porosité initiale F0 ne peut etre négative
 """),
 
-53: _("""
+53 : _("""
  pb2, variables de pilotages
 """),
 
-54: _("""
- rk41. erreur d integration dans runge-kutta. trop d iteration.
+54 : _("""
+ erreur d'intégration dans Runge-Kutta
+ trop d'itération.
 """),
 
-55: _("""
- rk42. erreur d integration dans. runge-kutta.
+55 : _("""
+ erreur d integration dans Runge-Kutta
 """),
 
-56: _("""
+56 : _("""
  on ne sait pas post-traiter le champ de type:  %(k1)s 
 """),
 
-57: _("""
- choix incorrect du schema d'integration numerique pour le contact
-"""),
-
-58: _("""
- choix incorrect de l'algorithme de restriction de l'espace des multiplicateurs
-"""),
-
-60: _("""
+60 : _("""
  taille vecteurs incompatible
 """),
 
-61: _("""
- il faut definir une bande ou un nume_ordre
+61 : _("""
+ il faut definir une BANDE ou un NUME_ORDRE
 """),
 
-62: _("""
- il faut definir une "bande" ou une liste de "nume_ordre"
+62 : _("""
+ il faut definir une "BANDE" ou une liste de "NUME_ORDRE"
 """),
 
-63: _("""
+63 : _("""
  dimension spectrale fausse
 """),
 
-64: _("""
- l'interspectre modal est de type "acce", on ne peut que restitituer une acceleration
+64 : _("""
+ l'interspectre modal est de type "ACCE"
+ on ne peut que restituer une accélération
 """),
 
-65: _("""
- l'interspectre modal est de type "vite", on ne peut que restitituer une vitesse
+65 : _("""
+ l'interspectre modal est de type "VITE"
+ on ne peut que restituer une vitesse
 """),
 
-66: _("""
- l'interspectre modal est de type "depl", on ne peut pas restitituer une acceleration
+66 : _("""
+ l'interspectre modal est de type "DEPL"
+ on ne peut pas restituer une accélération
 """),
 
-67: _("""
- l'interspectre modal est de type "depl", on ne peut pas restitituer une vitesse
+67 : _("""
+ l'interspectre modal est de type "DEPL"
+ on ne peut pas restituer une vitesse
 """),
 
-68: _("""
- il faut autant de "noeud"  que de "nom_cmp"
+68 : _("""
+ il faut autant de "NOEUD" que de "NOM_CMP"
 """),
 
-69: _("""
- il faut autant de "maille"  que de "noeud"
+69 : _("""
+ il faut autant de "MAILLE" que de "NOEUD"
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-72: _("""
- il faut definir une liste de mailles pour post-traiter un cham_elem
+72 : _("""
+ il faut définir une liste de mailles pour post-traiter un CHAM_ELEM
 """),
 
-73: _("""
+73 : _("""
  la composante  %(k1)s  du noeud  %(k2)s  pour la maille  %(k3)s  n'existe pas.
 """),
 
-74: _("""
- on ne traite pas le "poi1"
-"""),
-
-75: _("""
- type de maille non traitee
-"""),
-
-76: _("""
- mot-cle nb_bloc inoperant on prend 1 bloc
+74 : _("""
+ on ne traite pas la maille "POI1"
 """),
 
-77: _("""
element degenere
+7: _("""
type de maille non traitée
 """),
 
-
-
-
-
-
-79: _("""
- ddl inconnu sur le noeud ou  la maille specifiee pour le suivi
-"""),
-
-80: _("""
- option indisponible pourle suivi
+76 : _("""
+ mot-clé nb_bloc inopérant on prend 1 bloc
 """),
 
-81: _("""
- trop de suivis (limite a 4)
+77 : _("""
+ élément dégénéré
 """),
 
-82: _("""
- pas de suivi attache a la demande d affichage
+82 : _("""
+ pas de suivi attaché à la demande d'affichage
 """),
 
-83: _("""
+83 : _("""
  trop de lignes dans le titre
 """),
 
-84: _("""
- erreur dvt dans le type d extrema
-"""),
-
-85: _("""
- le nombre de suivi ddl est limite a 4 !
+84 : _("""
+ erreur dvt dans le type d'extrema
 """),
 
-86: _("""
- melange de champs de nature differente dans le meme mot-clef facteur suivi
-"""),
-
-87: _("""
+87 : _("""
  vecteur de norme trop petite
 """),
 
-88: _("""
- comp_elas non implante
+88 : _("""
+ COMP_ELAS non implanté
 """),
 
-89: _("""
- z negatif
+89 : _("""
+ Z est négatif (phase métallurgique)
 """),
 
-90: _("""
- la definition de la temperature est obligatoire pour une loi de couplage de type  %(k1)s 
+90 : _("""
+ la définition de la température est obligatoire
+ pour une loi de couplage de type  %(k1)s 
 """),
 
-91: _("""
- probleme dans la definition de la saturation
+91 : _("""
+ problème dans la définition de la saturation
 """),
 
-92: _("""
echec dans elimination temps
+92 : _("""
échec dans élimination temps
 """),
 
-93: _("""
+93 : _("""
  il faut un nom de champ
 """),
 
-94: _("""
- pas de champ autre que depl ou vite ou acce
+94 : _("""
+ pas de champ autre que DEPL ou VITE ou ACCE
 """),
 
-95: _("""
- pour interpoler il faut fournir une liste de frequences ou instants.
+95 : _("""
+ pour interpoler il faut fournir une liste de fréquences ou instants.
 """),
 
-96: _("""
- calcul du transitoire: pas de solution trouvee. utiliser l'option etat_stat = non.
+96 : _("""
+ calcul du transitoire: pas de solution trouvée
+ utiliser l'option ETAT_STAT = NON
 """),
 
-97: _("""
- duree de l'excitation trop courte pour le calcul du transitoire.
+97 : _("""
+ durée de l'excitation trop courte pour le calcul du transitoire.
 """),
 
-98: _("""
+98 : _("""
  pivot nul
 """),
 
-99: _("""
- on ne sait pas encore traiterla sous structuration en axisymetrique
+99 : _("""
+ on ne sait pas encore traiter la sous structuration en axisymétrique
 """),
+
 }
index b6b04a7b58685038859e9bc05bca3a409b7de7eb..4cefddcb5d4ccf9469b3deafaf7e8cdca7d6f7b5 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF algorith11 Messages  DATE 30/04/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF algorith11 Messages  DATE 18/03/2008   AUTEUR CNGUYEN C.NGUYEN 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- le sup de kmod0 est nul. on prend le sup de kmod.
+1 : _("""
+ le sup de KMOD0 est nul
+ on prend le sup de KMOD
 """),
 
-2: _("""
- le sup de kmod est nul.
+2 : _("""
+ le sup de KMOD est nul.
 """),
 
-3: _("""
- la variable amor est nulle
+3 : _("""
+ la variable AMOR est nulle
 """),
 
-4: _("""
+4 : _("""
  erreur de dimension (dvlp)
 """),
 
-5: _("""
+5 : _("""
  force normale nulle.
 """),
 
-6: _("""
+6 : _("""
  somme des "impacts-ecrouissage" < somme des "glissement"
 """),
 
-7: _("""
- "nom_cas" n'est pas une variable d'acces d'un resultat de type "evol_ther".
+7 : _("""
+ "NOM_CAS" n'est pas une variable d'accès d'un résultat de type "EVOL_THER".
 """),
 
-8: _("""
- "nume_mode" n'est pas une variable d'acces d'un resultat de type "evol_ther".
+8 : _("""
+ "NUME_MODE" n'est pas une variable d'accès d'un résultat de type "EVOL_THER".
 """),
 
-9: _("""
- "nume_mode" n'est pas une variable d'acces d'un resultat de type "mult_elas".
+9 : _("""
+ "NUME_MODE" n'est pas une variable d'accès d'un résultat de type "MULT_ELAS".
 """),
 
-10: _("""
- "inst" n'est pas une variable d'acces d'un resultat de type "mult_elas".
+10 : _("""
+ "INST" n'est pas une variable d'accès d'un resultat de type "MULT_ELAS".
 """),
 
-11: _("""
- "nom_cas" n'est pas une variable d'acces d'un resultat de type "fourier_elas".
+11 : _("""
+ "NOM_CAS" n'est pas une variable d'accès d'un resultat de type "FOURIER_ELAS".
 """),
 
-12: _("""
- "inst" n'est pas une variable d'acces d'un resultat de type "fourier_elas".
+12 : _("""
+ "INST" n'est pas une variable d'accès d'un resultat de type "FOURIER_ELAS".
 """),
 
-13: _("""
- "nom_cas" n'est pas une variable d'acces d'un resultat de type "fourier_ther".
+13 : _("""
+ "NOM_CAS" n'est pas une variable d'accès d'un resultat de type "FOURIER_THER".
 """),
 
-14: _("""
- "inst" n'est pas une variable d'acces d'un resultat de type "fourier_ther".
+14 : _("""
+ "INST" n'est pas une variable d'accès d'un resultat de type "FOURIER_THER".
 """),
 
-15: _("""
- "resu_init" est obligatoire
+15 : _("""
+ "RESU_INIT" est obligatoire
 """),
 
-16: _("""
- "maillage_init" est obligatoire
+16 : _("""
+ "MAILLAGE_INIT" est obligatoire
 """),
 
-17: _("""
+17 : _("""
  "resu_final" est obligatoire
 """),
 
-18: _("""
+18 : _("""
  "maillage_final" est obligatoire
 """),
 
-19: _("""
- 3 valeurs pour "tran"
+20 : _("""
+ TYPCAL invalide :  %(k1)s 
 """),
 
-20: _("""
- typcal invalide :  %(k1)s 
+2: _("""
+ absence de potentiel permanent
 """),
 
-24: _("""
- absence de potentiel permanent. on  arrete tout.
+2: _("""
+ le modele fluide n'est pas thermique
 """),
 
-25: _("""
- le modele fluide n est pas thermique!!!. on  arrete tout.
+2: _("""
+ le modele interface n'est pas thermique
 """),
 
-26: _("""
- le modele interface n est pas thermique!!!. on  arrete tout.
+27 : _("""
+ modèle fluide incompatible avec le calcul de masse ajoutée
+ seules les modelisations PLAN ou 3D ou AXIS sont utilisées
 """),
 
-27: _("""
- modele fluide incompatible avec le calcul de masse ajoutee. seules les modelisations plan ou 3d ou axis sont utilisees.
-"""),
-
-28: _("""
- on ne trouve pas de champ de temperature chtn
-"""),
-
-29: _("""
- le nombre d'amortissement modaux est different du nombre de modes dynamiques
-"""),
-
-30: _("""
- il n y a pas le meme nombre de modes retenus dans l'excitation modale et dans la base modale
-"""),
-
-31: _("""
- il faut autant d'indices en i et j
-"""),
 
-32: _("""
- avec sour_press et sour_force il faut deux points/ddls d'application
-"""),
-
-33: _("""
- mauvais accord entre nombre d'appuis et nombre de valeur dans le mot-clef: nume_ordre_i
-"""),
-
-34: _("""
- il faut autant de nom de composante que de nom de noeud
-"""),
-
-35: _("""
-  vous avez oublie de preciser le mode statique
-"""),
-
-36: _("""
-  mode statique non- necessaire
-"""),
 
-37: _("""
- la frequence mini doit etre etre plus faible que la frequence max
-"""),
-
-38: _("""
- trop de points dans la liste.
-"""),
-
-39: _("""
- segment nul
-"""),
-
-40: _("""
- la base locale semble fausse
-"""),
-
-41: _("""
- la discretisation du fond de fissure est grossiere par rapport a la courbure du fond de fissure. possibilite de resultats faux. il faudrait raffiner le maillage autour du fond de fissure.
-"""),
-
-42: _("""
- nombre de points d'intersection impossible.
-"""),
-
-43: _("""
- probleme de dimension :ni 2d, ni 3d
-"""),
-
-
-45: _("""
- inter douteuse
-"""),
-
-46: _("""
- trop de points d intersection
-"""),
 
-47: _("""
probleme de decoupage a 3 pts
+29 : _("""
le nombre d'amortissement modaux est différent du nombre de modes dynamiques
 """),
 
-48: _("""
- probleme de decoupage a 4 pts
+30 : _("""
+ il n y a pas le meme nombre de modes retenus
+ dans l'excitation modale et dans la base modale
 """),
 
-49: _("""
- uniquement c_plan/d_plan disponible  en xfem
-"""),
-
-51: _("""
- mailles manquantes
-"""),
-
-52: _("""
- point de fond_fiss sans maille de surfface rattachee.
-"""),
-
-53: _("""
- pb dans orientation des normales a fond_fiss. verifier la continuite des mailles de fond_fiss
-"""),
-
-54: _("""
- segment de fond_fiss sans maille de surface rattachee.
-"""),
-
-55: _("""
- augmenter nxmafi
-"""),
-
-56: _("""
-  -> Lors de l'enregistrement du champ d'archivage du contact, il s'est avéré
-     que les valeurs de contact au noeud %(k1)s différents selon la maille sur
-     laquelle se trouve ce noeud.
-  -> Risque & Conseil :
-     Ce message est normal si le contact est activé sur la fissure.
-"""),
-
-
-
-
-
-
-
-61: _("""
-  -> Lors de l'orientation des points du fond de fissure, le point du fond de
-     fissure initial (PFON_INI) est trop loin du fond de fissure.
-  -> Risque & Conseil :
-     Le point initial qui en résulte amène surement à une orientation du fond
-     de fissure erronée.
-     Veuillez redéfinir le point du fond de fissure initial (mot clé PFON_INI).
-
-"""),
-
-62: _("""
- pfon_ini = pt_origine
-"""),
-
-63: _("""
- probleme dans l orientation du fond de fissure : pt_origin mal choisi.
-"""),
-
-64: _("""
- tous les points du fond de fissure sont des points de bord. assurez-vous du bon choix des parametres d'orientation de fissure et de pfon_ini.
-"""),
-
-65: _("""
- pfon_ini semble etre un point de fin de fissure selon l'orientation choisie. assurez-vous du bon choix de pfon_ini.
+31 : _("""
+ il faut autant d'indices en i et j
 """),
 
-66: _("""
- la methode "upwind" est en cours d'implementation.
+32 : _("""
+ avec SOUR_PRESS et SOUR_FORCE, il faut deux points/ddls d'application
 """),
 
-67: _("""
- les aretes de la maille  %(k1)s  ( %(k2)s ) ont  %(k3)s  points d'intersection avec l'isozero de  %(k4)s  !!!
+33 : _("""
+ mauvais accord entre le nombre d'appuis et le nombre de valeur dans le mot-clé: NUME_ORDRE_I
 """),
 
-68: _("""
- probleme pour  recuperer ar_min dans la table "cara_geom"
+34 : _("""
+ il faut autant de noms de composante que de noms de noeud
 """),
 
-69: _("""
- armin negatif ou nul
+35 : _("""
+  vous avez oublié de préciser le mode statique
 """),
 
-70: _("""
- augmenter nxptff
+36 : _("""
+  mode statique non- nécessaire
 """),
 
-71: _("""
- le critere de modification de l'enrichissement heaviside servant a eviter les pivots nuls a abouti a un cas de figure qui semble bizarre. normalement, on doit avoir un hexaedre coupe dans un coin (3 points d'intersection), or la, on a un  %(k1)s avec  %(k2)s  points d'intersetion.
+37 : _("""
+ la fréquence min doit etre plus faible que la fréquence max
 """),
 
-72: _("""
- aucune arete sur laquelle lsn s annule
+7: _("""
+ le parametre materiau taille limite d10 n'est pas defini
 """),
 
-73: _("""
- taille limite d10 non defini
+7: _("""
+ échec de la recherche de zéro (NITER)
 """),
 
-74: _("""
echec de la recherche de zero (niter)
+7: _("""
échec de la recherche de zéro (bornes)
 """),
 
-75: _("""
- echec de la recherche de zero (bornes)
+7: _("""
+ La valeur de F(XMIN) doit être négative.
 """),
 
-76: _("""
- f(xmin) non negative
+7: _("""
+ f=0 : augmenter ITER_INTE_MAXI
 """),
 
-77: _("""
- f=0 : augmenter iter_inte_maxi
+7: _("""
+ pas d'interpolation possible
 """),
 
-78: _("""
- polynome non resolu
+81 : _("""
+ STOP_SINGULIER=DECOUPE nécessite la subdivision automatique du pas de temps (SUBD_PAS).
 """),
 
-79: _("""
- pas d'interpolation possible.
+82 : _("""
+ NMVPIR erreur direction grandissement
+ Angle ALPHA %(k1)s
+ Angle BETA  %(k2)s
 """),
 
-81: _("""
- STOP_SINGULIER=DECOUPE nécessite la subdivision automatique du pas de temps (SUBD_PAS).
-"""),
-82: _("""
- nmvpir erreur dir grandissement. Angle ALPHA %(k1)s. Angle BETA %(k2)s.
-"""),
-83: _("""
+83 : _("""
  Arret par manque de temps CPU.
 """),
 
-85: _("""
- On veut affecter un comportement %(k1)s avec la relation %(k2)s sur une maille deja affectee par un autre comportement %(k3)s %(k4)s
+85 : _("""
+ On veut affecter un comportement %(k1)s avec la relation %(k2)s
+ sur une maille deja affectée par un autre comportement %(k3)s %(k4)s
 """),
-86: _("""
+
+86 : _("""
  Perturbation trop petite, calcul impossible
 """),
-87: _("""
- *** Champ déjà existant ***
+
+87 : _("""
+ Champ déjà existant
  Le champ %(k1)s à l'instant %(r1)g est remplacé par le champ %(k2)s à l'instant %(r2)g avec la précision %(r3)g.
 """),
 
-88: _("""
&arret debordement assemblage:ligne 
+88 : _("""
arret débordement assemblage : ligne 
 """),
 
-90: _("""
&arret debordement assemblage:colonne 
+90 : _("""
arret débordement assemblage : colonne 
 """),
 
-92: _("""
- arret nombre de sous-structure invalide il en faut au minimum: %(i1)d 
- vous en avez defini: %(i2)d 
+92 : _("""
+ arret nombre de sous-structures invalide : 
+ il en faut au minimum : %(i1)d 
+ vous en avez défini   : %(i2)d 
 """),
 
-93: _("""
- arret nombre de nom de sous-structure invalide il en faut exactement: %(i1)d 
- vous en avez defini: %(i2)d 
+93 : _("""
+ arret nombre de nom de sous-structures invalide :
+ il en faut exactement : %(i1)d 
+ vous en avez défini   : %(i2)d 
 """),
 
-94: _("""
- nombre de macr_elem invalide sous_structure %(k1)s vous en avez defini: %(i1)d 
- il en faut exactement: %(i2)d 
+94 : _("""
+ nombre de MACR_ELEM invalide :
+ sous_structure %(k1)s
+ il en faut exactement : %(i2)d 
+ vous en avez défini   : %(i1)d 
 """),
 
-95: _("""
- nombre d'angles nautiques invalide sous_structure %(k1)s 
- vous en avez defini: %(i1)d 
- il en faut exactement:  %(i2)d 
+95 : _("""
+ nombre d'angles nautiques invalide
+ sous_structure %(k1)s 
+ il en faut exactement :  %(i2)d 
+ vous en avez défini   : %(i1)d 
 """),
 
-96: _("""
- nombre de translation invalide sous_structure %(k1)s vous en avez defini: %(i1)d 
- il en faut exactement:  %(i2)d 
+96 : _("""
+ nombre de translations invalide
+ sous_structure %(k1)s
+ il en faut exactement :  %(i2)d 
+ vous en avez defini   : %(i1)d 
 """),
 
-97: _("""
- nombre de liaison definies invalide vous en avez defini: %(i1)d 
- il en faut au minimum: %(i2)d 
+97 : _("""
+ nombre de liaison definies invalide
+ il en faut au minimum : %(i2)d 
+ vous en avez defini   : %(i1)d 
 """),
 
-98: _("""
- nombre de mot-cle invalide numero liaison: %(i1)d mot-cle: %(k1)s 
- vous en avez defini: %(i2)d 
- il en faut exactement: %(i3)d 
+98 : _("""
+ nombre de mot-clés invalide
+ numéro liaison: %(i1)d
+ mot-clé       : %(k1)s 
+ il en faut exactement : %(i3)d 
+ vous en avez defini   : %(i2)d 
 """),
 
-99: _("""
- sous-structure indefinie numero liaison: %(i1)d nom sous-structure: %(k1)s 
+99 : _("""
+ sous-structure indéfinie
+ numéro liaison: %(i1)d
+ nom sous-structure: %(k1)s 
 """),
 
 }
index 87c55ab4750cd088f88f41c1131cd8bd447dce87..292b466786825697b4d303d38cc4c5bd96bc9dc8 100644 (file)
-#@ MODIF algorith12 Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF algorith12 Messages  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.
+# 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.        
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-
-
-
-
-2: _("""
- interface inexistante numero liaison: %(i1)d nom sous-structure: %(k1)s
- nom macr_elem: %(k2)s
- nom interface inexistante: %(k3)s
+2 : _("""
+ interface inexistante
+ numéro liaison            : %(i1)d
+ nom sous-structure        : %(k1)s
+ nom MACR_ELEM             : %(k2)s
+ nom interface inexistante : %(k3)s
 """),
 
-3: _("""
+3 : _("""
  une sous-structure est sans connexion sous-structure -->  %(k1)s
 """),
 
-4: _("""
-  probleme stockage :   option de calcul :  %(k1)s    occurence : %(k2)s
-    nom du champ :  %(k3)s
+7 : _("""
+ données incompatibles :
+ pour les modes mecaniques :  %(k1)s
+ il manque l'option        :  %(k2)s
 """),
 
-5: _("""
-  probleme stockage :   option de calcul :  %(k1)s    nom du champ cumul :  %(k2)s
+12 : _("""
+ données incompatibles :
+ pour les MODE_CORR :  %(k1)s
+ il manque le champ :  %(k2)s
 """),
 
-6: _("""
- donnees incompatibles :   pour la direction  %(k1)s
-    nombre de blocage :  %(i1)d
-    nombre d'excitations :  %(i2)d
+13 : _("""
+ données incompatibles :
+ pour les mode_corr :  %(k1)s
+ pour le champ      :  %(k2)s
+ le type n'est pas  %(k3)s
 """),
 
-7: _("""
- donnees incompatibles :   pour les modes mecaniques :  %(k1)s
-    il manque l'option :  %(k2)s
+14 : _("""
+ donnees incompatibles :
+ pour les statiques :  %(k1)s
+ il manque le champ :  %(k2)s
 """),
 
-
-
-
-
-
-9: _("""
-  probleme stockage :   option de calcul :  %(k1)s    direction :  %(k2)s
-    nom du champ :  %(k3)s
+15 : _("""
+ données incompatibles :
+ pour les statiques :  %(k1)s
+ pour le champ      :  %(k2)s
+ le type n'est pas  %(k3)s
 """),
 
-
-
-
-
-
-
-
-11: _("""
- correction statique non prise en compte   pour l'option :  %(k1)s
+18 : _("""
+ on ne sait pas bien traiter l'option de calcul demandée :  %(k1)s
 """),
 
-12: _("""
- donnees incompatibles :   pour les mode_corr :  %(k1)s
-    il manque le champ :  %(k2)s
+20 : _("""
+ données incompatibles :
+ pour les modes mécaniques :  %(k1)s
+ pour l'option             :  %(k2)s
+ il manque le champ d'ordre  %(i1)d
 """),
 
-13: _("""
- donnees incompatibles :   pour les mode_corr :  %(k1)s    pour le champ :  %(k2)s
-    le type n'est pas  %(k3)s
+21 : _("""
+ données incompatibles :
+ pour les mode_corr :  %(k1)s
+ il manque l'option :  %(k2)s
 """),
 
-14: _("""
- donnees incompatibles :   pour les statiques :  %(k1)s
-    il manque le champ :  %(k2)s
+22 : _("""
+ données incompatibles :
+ pour les modes statiques :  %(k1)s
+ il manque l'option       :  %(k2)s
 """),
 
-15: _("""
- donnees incompatibles :   pour les statiques :  %(k1)s    pour le champ :  %(k2)s
-    le type n'est pas  %(k3)s
+23 : _("""
+ arret sur question illicite pour le type de base
+ type de base -->  %(k1)s
+ question     -->  %(k2)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-18: _("""
- on ne sait pas bien traiter l'option de calcul demandee :  %(k1)s
+26 : _("""
+ arret sur manque argument
+ base modale donnée -->  %(k1)s
+ interf_dyna donnée -->  %(k2)s
 """),
 
-
-
-
-
-
-
-
-20: _("""
- donnees incompatibles :   pour les modes mecaniques :  %(k1)s
-    pour l'option :  %(k2)s
-    il manque le champ d'ordre  %(i1)d
+27 : _("""
+ arret sur type de base incorrecte
+ base modale donnée -->  %(k1)s
+ type  base modale  -->  %(k2)s
+ type attendu       -->  %(k3)s
 """),
 
-21: _("""
- donnees incompatibles :   pour les mode_corr :  %(k1)s
-    il manque l'option :  %(k2)s
+28 : _("""
+ arret sur incohérence données
+ base modale donnée         -->  %(k1)s
+ INTERF_DYNA correspondante -->  %(k2)s
+ INTERF_DYNA donnée         -->  %(k3)s
 """),
 
-22: _("""
- donnees incompatibles :   pour les modes statiques :  %(k1)s
-    il manque l'option :  %(k2)s
+29 : _("""
+ problème arguments de définition interface
+ nom interface donné    %(k1)s
+ numero interface donné %(i1)d
 """),
 
-23: _("""
- arret sur question illicite pour le type de base type de base -->  %(k1)s
 question -->  %(k2)s
+30 : _("""
+ arret sur base modale sans INTERF_DYNA
base modale donnée -->  %(k1)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-26: _("""
- arret sur manque argument base modale donnee -->  %(k1)s
-  interf_dyna donnee -->  %(k2)s
-"""),
-
-27: _("""
- arret sur type de base incorrecte base modale donnee -->  %(k1)s
-  type  base modale -->  %(k2)s
-  type attendu -->  %(k3)s
-"""),
-
-28: _("""
- arret su incoherence donnees base modale donnee -->  %(k1)s
-  interf_dyna correspondante -->  %(k2)s
-  interf_dyna donnee -->  %(k3)s
+31 : _("""
+ arret sur manque arguments
+ base modale donnée -->  %(k1)s
+ INTERF_DYNA donnée -->  %(k2)s
 """),
 
-29: _("""
- probleme arguments de definition interface nom interface donne %(k1)s
-  numero interface donne %(i1)d
+38 : _("""
+ arret sur problème cohérence interface
 """),
 
-30: _("""
- arret sur base modale sans interf_dyna base modale  donnee -->  %(k1)s
+39 : _("""
+ arret sur matrice inexistante
+ matrice %(k1)s
 """),
 
-31: _("""
- arret sur manque arguments base modale  donnee -->  %(k1)s
-  interf_dyna  donnee -->  %(k2)s
+40 : _("""
+  arret problème de factorisation:
+  présence probable de modes de corps rigide
+  la methode de Mac-Neal ne fonctionne pas en présence de modes de corps rigide
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-38: _("""
- arret sur probleme coherence interface
-"""),
-
-39: _("""
- arret sur matrice inexistante matrice %(k1)s
-"""),
-
-40: _("""
-
-  arret probleme de factorisation: presence probable de modes de corps rigide  la methode de mac-neal ne fonctionne pas en presence  de modes de corps rigide
-"""),
-
-41: _("""
- --- la taille bloc  : %(i1)d est < hauteur_max : %(i2)d
+41 : _("""
+  la taille bloc  : %(i1)d est < HAUTEUR_MAX : %(i2)d
   changez la taille_bloc des profils: %(k1)s
   prenez au moins : %(i3)d
 """),
 
-42: _("""
- le mot-cle  %(k1)s est incompatible avec le champ %(k2)s
- . utiliser 'group_ma' ou 'maille'  pour restreindre le changement de repere a certaines  mailles. %(k3)s
+42 : _("""
+ le mot-clé  %(k1)s est incompatible avec le champ %(k2)s
+ utilisez 'GROUP_MA' ou 'MAILLE'  pour restreindre le changement de repere
+ à certaines mailles. %(k3)s
 """),
 
-43: _("""
- etude 2d angle nautique unique :  %(r1)f
+43 : _("""
+ étude 2D
+ angle nautique unique :  %(r1)f
 """),
 
-44: _("""
- noeud sur l axe_z noeud :  %(k1)s
+44 : _("""
+ noeud sur l'AXE_Z noeud :  %(k1)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-49: _("""
- probleme: sous-structure inconnue sous-structure -->  %(k1)s
+49 : _("""
+ problème: sous-structure inconnue
+ sous-structure -->  %(k1)s
 """),
 
-50: _("""
+50 : _("""
  pas de sous-structure dans le squelette
 """),
 
-51: _("""
- nom de sous-structure non trouve la sous-structure :  %(k1)s n existe pas  %(k2)s
+51 : _("""
+ nom de sous-structure non trouvé 
+ la sous-structure :  %(k1)s n existe pas  %(k2)s
 """),
 
-
-
-
-
-
-53: _("""
- arret sur pivot nul ligne -->  %(i1)d
+53 : _("""
+ arret sur pivot nul
+ ligne -->  %(i1)d
 """),
 
-
-
-
-
-
-
-
-55: _("""
- le maillage mail ne contient pas de group_ma mail=  %(k1)s
+55 : _("""
+ le MAILLAGE : %(k1)s ne contient pas de GROUP_MA
 """),
 
-56: _("""
- le group_ma gp n'existe pas dans le maillage mail mail= %(k1)s gp= %(k2)s
+56 : _("""
+ le GROUP_MA : %(k2)s n'existe pas dans le MAILLAGE : %(k1)s
 """),
 
-57: _("""
- le maillage ne contient pas de group_nomaillage=  %(k1)s
+57 : _("""
+ le MAILLAGE : %(k1)s ne contient pas de GROUP_NO  
 """),
 
-58: _("""
- le group_no n'existe pas dansle maillage maillage= %(k1)s
- group_no= %(k2)s
+58 : _("""
+ le GROUP_NO : %(k2)s n'existe pas dans le MAILLAGE : %(k1)s
 """),
 
-59: _("""
- nombre noeuds communs nbnoco =  %(i1)d
+59 : _("""
+ nombre de noeuds communs NBNOCO =  %(i1)d
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-62: _("""
- les deux numerotations n'ont pas meme maillage d'origine
-  numerotation 1: %(k1)s
- maillage 1: %(k2)s
-  numerotation 2: %(k3)s
- maillage 2: %(k4)s
+62 : _("""
+ les deux numérotations n'ont pas meme maillage d'origine
+  numérotation 1: %(k1)s
+  maillage     1: %(k2)s
+  numérotation 2: %(k3)s
+  maillage     2: %(k4)s
 """),
 
-63: _("""
- perte information sur ddl physique a la conversion de numerotation
- noeud numero:  %(i1)d
- type ddl numero:  %(i2)d
+63 : _("""
+ perte d'information sur DDL physique à la conversion de numérotation
+ noeud numéro    :  %(i1)d
+ type DDL numéro :  %(i2)d
 """),
 
-64: _("""
- arret sur perte information ddl physique
+64 : _("""
+ arret sur perte d'information DDL physique
 """),
 
-
-
-
-
-
-
-
-66: _("""
- champ inexistant champ:  %(k1)s , nume_ordre:  %(i1)d , mode_meca:  %(k2)s
+66 : _("""
+ champ inexistant
+ CHAMP      :  %(k1)s
+ NUME_ORDRE :  %(i1)d
+ MODE_MECA  :  %(k2)s
 """),
 
-67: _("""
- arret sur probleme conditions interface
+67 : _("""
+ arret sur problème de conditions d'interface
 """),
 
-68: _("""
- le maillage final n'est pas 3d maillage :  %(k1)s
+68 : _("""
+ le maillage final n'est pas 3D
+ maillage : %(k1)s
 """),
 
-69: _("""
- l origine du maillage 1d  n est pas 0
+69 : _("""
+ l'origine du maillage 1D n'est pas 0
 """),
 
-70: _("""
- les noeuds du maillage sont  confondus
+70 : _("""
+ les noeuds du maillage sont confondus
 """),
 
-71: _("""
+71 : _("""
 
- le noeud se trouve en  dehors du domaine de definition avec  un profil gauche de type exclu
 noeud :  %(k1)s
+ le noeud se trouve en dehors du domaine de définition avec un profil gauche de type EXCLU
+ noeud :  %(k1)s
 """),
 
-72: _("""
-
- le noeud se trouve en  dehors du domaine de definition avec  un profil droit de type exclu
-  noeud :  %(k1)s
-"""),
+72 : _("""
 
-73: _("""
- probleme pour stoker le champ dans le resultat :  %(k1)s
- , pour le nume_ordre :  %(i1)d
+ le noeud se trouve en dehors du domaine de definition avec un profil droit de type EXCLU
+ noeud :  %(k1)s
 """),
 
-74: _("""
*** champ deja existant ***il sera remplace par le champ %(k1)s
 pour le nume_ordre  %(i1)d
+7: _("""
problème pour stocker le champ dans le résultat :  %(k1)s
pour le NUME_ORDRE :  %(i1)d
 """),
 
-75: _("""
-  composante inexistante sur  le noeud:  %(k1)s  composante:  %(k2)s
+74 : _("""
+ champ déjà existant
+ il sera remplacé par le champ %(k1)s
+ pour le NUME_ORDRE  %(i1)d
 """),
 
-76: _("""
-  probleme recuperation chamno concept resultat:  %(k1)s numero ordre:  %(i1)d
+76 : _("""
+  problème de récuperation CHAMNO
+  concept résultat:  %(k1)s
+  numéro d'ordre  :  %(i1)d
 """),
 
-77: _("""
- &pas d' interface definie --> un gage!
+77 : _("""
+ pas d'interface définie
 """),
 
-78: _("""
- &arret sur interface deja definie mot-cle interface numero  -->  %(i1)d
-  interface  -->  %(k1)s
+78 : _("""
+ arret sur interface déjà définie
+ mot-clé interface numero  -->  %(i1)d
+ interface                 -->  %(k1)s
 """),
 
-79: _("""
&les deux interfaces ont pas meme nombre de noeuds
+79 : _("""
les deux interfaces n'ont pas le meme nombre de noeuds
  nombre noeuds interface droite -->  %(i1)d
  nombre noeuds interface gauche -->  %(i2)d
 """),
 
-80: _("""
- &les deux interfaces ont pas meme nombre de degres de liberte
+80 : _("""
+ les deux interfaces n'ont pas le meme nombre de degrés de liberté
  nombre ddl interface droite -->  %(i1)d
  nombre ddl interface gauche -->  %(i2)d
 """),
 
-81: _("""
&arret sur base modale ne comportant pas de modes propres
+81 : _("""
+ arret sur base modale ne comportant pas de modes propres
 """),
 
-82: _("""
+82 : _("""
 
- nombre de modes propres demande superieur au nombre de modes dynamiques de la base
- nombre de modes demandes --> %(i1)d
- nombre de modes de la base --> %(i2)d
- nombre de frequences douteuses --> %(i3)d
+ nombre de modes propres demandé supérieur au nombre de modes dynamiques de la base
+ nombre de modes demandés       --> %(i1)d
+ nombre de modes de la base     --> %(i2)d
+ nombre de fréquences douteuses --> %(i3)d
 """),
 
-83: _("""
- plusieurs champs  correspondant a l'acces demande.resultat  %(k1)s
- , acces "inst":  %(r1)f
- , nombre : %(i1)d
+83 : _("""
+ plusieurs champs correspondant à l'acces demandé
+ resultat     : %(k1)s
+ acces "INST" : %(r1)f
+ nombre       : %(i1)d
 """),
 
-84: _("""
- pas de champ  correspondant a un acces demande.resultat  %(k1)s
- , acces "inst":  %(r1)f
+84 : _("""
+ pas de champ correspondant à un accès demandé
+ résultat     :  %(k1)s
+ acces "INST" :  %(r1)f
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-89: _("""
- instant de reprise superieur a la liste des instants   instant de reprise:  %(r1)f
-    instant max:  %(r2)f
-"""),
-
-90: _("""
- on n'a pas trouve l'instant   instant de reprise:  %(r1)f
-    pas de temps:  %(r2)f
-    borne min:  %(r3)f
-    borne max:  %(r4)f
-"""),
-
-91: _("""
- instant final inferieur a la liste des instants   instant final:  %(r1)f
-    instant min  :  %(r2)f
+89 : _("""
+ instant de reprise supérieur à la liste des instants
+ instant de reprise :  %(r1)f
+ instant max        :  %(r2)f
 """),
 
-92: _("""
- on n'a pas trouve l'instant   instant final:  %(r1)f
-    pas de temps:  %(r2)f
-    borne min:  %(r3)f
-    borne max:  %(r4)f
+90 : _("""
+ on n'a pas trouvé l'instant
+ instant de reprise:  %(r1)f
+ pas de temps      :  %(r2)f
+ borne min         :  %(r3)f
+ borne max         :  %(r4)f
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-96: _("""
- mauvaise valeur de typcum:  %(i1)d
+91 : _("""
+ instant final inférieur à la liste des instants
+ instant final:  %(r1)f
+ instant min  :  %(r2)f
 """),
 
-97: _("""
- donnees erronees
- pas d'instant de calcul pour  l'instant d'archivage:  %(r1)f
+92 : _("""
+ on n'a pas trouvé l'instant
+ instant final:  %(r1)f
+ pas de temps :  %(r2)f
+ borne min    :  %(r3)f
+ borne max    :  %(r4)f
 """),
 
-98: _("""
- donnees erronees
- plusieurs instants de calcul pour  l'instant d'archivage:  %(r1)f
+9: _("""
+ données erronées
+ pas d'instant de calcul pour l'instant d'archivage :  %(r1)f
 """),
 
-99: _("""
- erreur fatalele champ %(k1)s est incompatible avec  la commande  %(k2)s
+98 : _("""
+ données erronées
+ plusieurs instants de calcul pour l'instant d'archivage:  %(r1)f
 """),
 
 }
index 3b77a0cf9ff2222c270250f22e18d098cf6a2f39..15dd4c56454fc454dd6592ade290ec564b95b3c1 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF algorith13 Messages  DATE 30/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF algorith13 Messages  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
-1: _("""
- erreur fatale l'entite  %(k1)s  n'est pas possible  %(k2)s 
-"""),
-
-2: _("""
- erreur dans les donnees  d'observation le noeud  %(k1)s n'existe pas dans  %(k2)s 
-"""),
-
-3: _("""
- erreur dans les donnees d'observation le group_no  %(k1)s n'existe pas dans  %(k2)s 
-"""),
-
-4: _("""
- erreur dans les donnees  d'observation la maille  %(k1)s n'existe pas dans  %(k2)s 
-"""),
+cata_msg = {
 
-5: _("""
- erreur dans les donnees d'observation le group_ma  %(k1)s n'existe pas dans  %(k2)s 
+: _("""
+ arret sur maillage non squelette
 """),
 
-6: _("""
erreur dans les donnees  d'observation pour "nom_cham"  %(k1)s il faut renseigner  %(k2)s ou  %(k3)s 
+10 : _("""
problème de duplication de la matrice :  %(k1)s 
 """),
 
-7: _("""
- erreur dans les donnees  d'observation pour "nom_cham"  %(k1)s  il faut renseigner  %(k2)s et  %(k3)s 
-"""),
-
-8: _("""
- arret sur maillage non skelette
-"""),
-
-
-
-
-
-
-
-
-10: _("""
- probleme de duplication de matrice matrice:  %(k1)s 
-"""),
-
-11: _("""
-  arret probleme de factorisation: presence de modes de corps rigide
-"""),
-
-
-
-
-
-
-
-
-13: _("""
- icmp dans le desordre pour noeud=  %(i1)d  et sous-domaine=  %(i2)d 
+11 : _("""
+  arret problème de factorisation
+  présence de modes de corps rigide
 """),
 
-14: _("""
- systeme (gi)t*gi probablement  non inversible:  %(i1)d pb lapack dgetrf:  %(i2)d 
+17 : _("""
+ arret sur problème base modale sans INTERF_DYNA
+ base modale -->  %(k1)s 
 """),
 
-15: _("""
- systeme (gi)t*gi probablement  non inversible:  %(i1)d pb lapack dgetrs:  %(i2)d 
+18 : _("""
+  GAMDEV(ALPHA) < 0
+  GAMDEV(ALPHA) =  %(r1)f 
 """),
 
-
-
-
-
-
-
-
-17: _("""
- arret sur probleme base modale sans interf_dyna base modale -->  %(k1)s 
-"""),
-
-18: _("""
-  gamdev(alpha) < 0    gamdev(alpha) =  %(r1)f 
-"""),
-
-
-
-
-
-
-
-26: _("""
- conflit de nom de groupe de  maille dans le squelette le nom de groupe :  %(k1)s 
+26 : _("""
+ conflit de nom de groupe de maille dans le squelette
+ le nom de groupe               :  %(k1)s 
  provenant de la sous-structure :  %(k2)s 
- et du groupe de maille :  %(k3)s 
- existe deja.  %(k4)s 
+ et du groupe de maille         :  %(k3)s 
+ existe déjà.
+ %(k4)s 
 """),
 
-27: _("""
- nom de groupe non trouvele groupe :  %(k1)s n existe pas  %(k2)s dans la sous-structure :  %(k3)s 
+27 : _("""
+ nom de groupe non trouvé
+ le groupe :  %(k1)s n'existe pas  %(k2)s dans la sous-structure :  %(k3)s 
 """),
 
-28: _("""
&aucun axe defini
+28 : _("""
aucun axe de rotation défini
 """),
 
-29: _("""
- methode non supportee en  sous-structuration   methode demandee :  %(k1)s 
-    methodes supportees: %(k2)s 
+29 : _("""
+ méthode non supportée en  sous-structuration
+ méthode demandée   :  %(k1)s 
+ méthodes supportées:  %(k2)s 
 """),
 
-30: _("""
- conditions initiales non supportees  en sous-structuration transitoire
+30 : _("""
+ conditions initiales non supportées en sous-structuration transitoire
 """),
 
-31: _("""
- calcul non lineaire non supporte en  sous-structuration transitoire
+31 : _("""
+ calcul non linéaire non supporté en sous-structuration transitoire
 """),
 
-32: _("""
rela_effo_dep non supporte en  sous-structuration transitoire
+32 : _("""
RELA_EFFO_DEP non supporté en sous-structuration transitoire
 """),
 
-33: _("""
rela_effo_vite non supporte en  sous-structuration transitoire
+33 : _("""
RELA_EFFO_VITE non supporté en sous-structuration transitoire
 """),
 
-34: _("""
- la liste des amortissements modaux est  definie au niveau de l'operateur macr_elem_dyna
+34 : _("""
+ la liste des amortissements modaux est définie au niveau de l'operateur MACR_ELEM_DYNA
 """),
 
-35: _("""
- numero de mode de votre liste inexistant dans les modes utilises:
- numero ds votre liste : %(i1)d 
+35 : _("""
+ numéro de mode de votre liste inexistant dans les modes utilisés:
+ numéro ds votre liste : %(i1)d 
 """),
 
-36: _("""
- appel errone
+39 : _("""
+ choc mal defini
+ la maille définissant le choc  %(k1)s doit etre de type  %(k2)s 
 """),
 
-
-
-
-
-39: _("""
- choc mal definila maille definissant le choc  %(k1)s  doit etre de type  %(k2)s 
+41 : _("""
+ trop de noeuds dans le GROUP_NO  %(k1)s
+ noeud utilisé:  %(k2)s 
 """),
 
-
-
-
-
-41: _("""
- trop de noeuds dans le group_no  %(k1)s   noeud utilise:  %(k2)s 
+44 : _("""
+ incompatibilité avec multi APPUI : %(k1)s 
 """),
 
-
-
-
-
-
-44: _("""
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!incompatibilite avec multi appui : %(k1)s 
-"""),
-
-
-
-
-
-
-46: _("""
+46 : _("""
  il manque les modes statiques
 """),
 
-47: _("""
- il manque les modes corriges
+47 : _("""
+ il manque les modes corrigés
 """),
 
-48: _("""
+48 : _("""
  Nombre de modes propres calcules insuffisant.
- Nombre de modes propres de la base limite a : %(i1)d 
+ Nombre de modes propres de la base limite à : %(i1)d 
 """),
 
-49: _("""
- &sous-structure inexistante dans le modele-generalise modele generalise -->  %(k1)s 
- sous-structure demandee -->  %(k2)s 
+49 : _("""
+ sous-structure inexistante dans le modèle généralisé
+ modèle généralisé       -->  %(k1)s 
+ sous-structure demandée -->  %(k2)s 
 """),
 
-50: _("""
- &sous-structure inexistante dans le modele-generalise modele generalise -->  %(k1)s 
- numero sous-structure demandee -->  %(i1)d 
+50 : _("""
+ sous-structure inexistante dans le modèle-généralisé
+ modèle généralisé              -->  %(k1)s 
+ numéro sous-structure demandée -->  %(i1)d 
 """),
 
-
-
-
-
-53: _("""
-  champ inexistant  mesure  %(k1)s  nom_cham  %(k2)s 
+53 : _("""
+  champ inexistant
+  mesure    %(k1)s
+  nom_cham  %(k2)s 
 """),
 
-
-
-
-56: _("""
- pb.interpolation volumique 3d:evol_char  : %(k1)s instant    : %(r1)f 
+56 : _("""
+ problème interpolation volumique 3d:
+ evol_char  : %(k1)s
+ instant    : %(r1)f 
  code_retour: %(i1)d 
 """),
 
-57: _("""
- pb.interpolation volumique 2d:evol_char  : %(k1)s instant    : %(r1)f 
+57 : _("""
+ problème interpolation volumique 2d:
+ evol_char  : %(k1)s
+ instant    : %(r1)f 
  code_retour: %(i1)d 
 """),
 
-58: _("""
- pb.charge vol2d puis surf3d:evol_char: %(k1)s instant  : %(r1)f 
+58 : _("""
+ problème charge vol2d puis surf3d:
+ evol_char: %(k1)s
+ instant  : %(r1)f 
 """),
 
-59: _("""
- pb.interpolation surfacique 3d:evol_char  : %(k1)s instant    : %(r1)f 
+59 : _("""
+ problème interpolation surfacique 3d:
+ evol_char  : %(k1)s
+ instant    : %(r1)f 
  code_retour: %(i1)d 
 """),
 
-60: _("""
- pb.charge vol3d puis surf2d:evol_char: %(k1)s instant  : %(r1)f 
+60 : _("""
+ problème charge vol3d puis surf2d:
+ evol_char: %(k1)s
+ instant  : %(r1)f 
 """),
 
-61: _("""
- pb.interpolation surfacique 2d:evol_char  : %(k1)s instant    : %(r1)f 
+61 : _("""
+ problème interpolation surfacique 2d:
+ evol_char  : %(k1)s
+ instant    : %(r1)f 
  code_retour: %(i1)d 
 """),
 
-62: _("""
- pb. interpolation pression:evol_char  : %(k1)s instant    : %(r1)f 
+62 : _("""
+ problème interpolation pression:
+ evol_char  : %(k1)s
+ instant    : %(r1)f 
  on ne sait pas extrapoler le champ  %(k2)s 
  de pression par rapport au temps %(k3)s 
  mais seulement l'interpoler %(k4)s 
 """),
 
-63: _("""
- pb. interpolation pression:evol_char  : %(k1)s instant    : %(r1)f 
+63 : _("""
+ problème interpolation pression:
+ evol_char  : %(k1)s
+ instant    : %(r1)f 
  code_retour: %(i1)d 
- contacter les developpeurs %(k2)s 
-"""),
-
-64: _("""
- interpolation temperature:evol_ther: %(k1)s instant: %(r1)f icoret: %(i1)d 
-"""),
-
-
-
-
-
-
-66: _("""
- Force fluide, grappe bloquee   
-  - iteration  %(i1)d , z =  %(r1)f    iteration  %(i2)d  , z =  %(r2)f 
-    temps de chute compris entre  %(r3)f et  %(r4)f 
+ contacter le support %(k2)s 
 """),
 
-
-
-68: _("""
pb.interpolation vitesse:evol_char  : %(k1)s instant    : %(r1)f 
+68 : _("""
+ problème interpolation vitesse:
+ evol_char  : %(k1)s
+ instant    : %(r1)f 
  code_retour: %(i1)d 
 """),
 
-69: _("""
- le noeud: nomnoe ne peut pas etre  typl  et  typbnomnoe %(k1)s 
-"""),
-
-70: _("""
- impossible de coder le nombre :  %(i1)d  sur :  %(k1)s 
-"""),
-
-71: _("""
- choix impossiblepour initpr :  %(i1)d 
+69 : _("""
+ le noeud: %(k1)s  ne peut pas etre TYPL et TYPB
 """),
 
-
-
-
-
-
-74: _("""
- composante non definie  dans la numerotation :  %(k1)s 
+74 : _("""
+ composante non définie  dans la numérotation :  %(k1)s 
 """),
 
-75: _("""
- & detection d'une sous-structure non connectesous-structure de nom: %(k1)s 
+75 : _("""
+ détection d'une sous-structure non connectée
+ sous-structure de nom: %(k1)s 
 """),
 
-76: _("""
& arret sur probleme de connexion sous-structure
+76 : _("""
arret sur problème de connexion sous-structure
 """),
 
-
-
-
-78: _("""
- les intervalles doivent etre croissants.   valeur de la borne precedente :  %(i1)d 
-    valeur de la borne :  %(i2)d 
+78 : _("""
+ les intervalles doivent etre croissants
+ valeur de la borne precedente :  %(i1)d 
+ valeur de la borne            :  %(i2)d 
 """),
 
-79: _("""
- l'intervalle entre les  deux derniers instants ne sera pas egal
-  au pas courant :  %(i1)d 
- , pour l'intervalle  %(i2)d 
+79 : _("""
+ l'intervalle entre les  deux derniers instants ne sera pas égal au pas courant :  %(i1)d 
+ pour l'intervalle  %(i2)d 
 """),
 
-80: _("""
+80 : _("""
  le nombre de pas est trop grand :  %(i1)d , pour l'intervalle  %(i2)d 
 """),
 
-81: _("""
- les valeurs doivent etre croissantes.  valeur precedente :  %(i1)d 
-   valeur :  %(i2)d 
+81 : _("""
+ les valeurs doivent etre croissantes
+ valeur précédente :  %(i1)d 
+ valeur            :  %(i2)d 
 """),
 
-82: _("""
- la distance entre les  deux derniers reels ne sera pas egal
+82 : _("""
+ la distance entre les deux derniers réels ne sera pas égale
  au pas courant :  %(r1)f,
  pour l'intervalle  %(i1)d 
 """),
 
-
-
-
-84: _("""
- modele amont non defini
-"""),
-
-85: _("""
- champ inexistant resultat  %(k1)s  nom_cham  %(k2)s  nume_ordre  %(i1)d 
-"""),
-
-86: _("""
- type de matrice inconnuetype: %(k1)s 
+85 : _("""
+ champ inexistant
+ résultat   : %(k1)s 
+ nom_cham   : %(k2)s 
+ nume_ordre : %(i1)d 
 """),
 
-
-
-
-
-
-91: _("""
- &probleme de dimension matrice a mutiplier
+91 : _("""
+ problème de dimension de la matrice à mutiplier
 """),
 
-92: _("""
&probleme de dimension matrice resultat
+92 : _("""
problème de dimension de la matrice résultat
 """),
 
-
-
-
-
-
-99: _("""
- matrice d'amortissement non creeedans le macro-element :  %(k1)s 
+99 : _("""
+ matrice d'amortissement non créée dans le macro-élément :  %(k1)s 
 """),
 
 }
index b5c7fc7a64cfc7dc075db59c6bf9f09d28d65d51..abc37019c7a6b08de753136df6d0daa964e9188b 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF algorith14 Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF algorith14 Messages  DATE 18/03/2008   AUTEUR CNGUYEN C.NGUYEN 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-3: _("""
- &type interface non supportee en cyclique type interface -->  %(k1)s 
+3 : _("""
+ type d'interface non supportée en cyclique
+ type interface -->  %(k1)s 
 """),
 
-4: _("""
- arret sur type de resultat non supporte type donne -->  %(k1)s 
-  types supportes -->  %(k2)s %(k3)s
+4 : _("""
+ arrêt sur type de résultat non supporté
+ type donné      -->  %(k1)s 
+ types supportés -->  %(k2)s %(k3)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-8: _("""
- manque la deformee modale pour le mode  %(i1)d 
+8 : _("""
+ il manque la déformée modale pour le mode  %(i1)d 
 """),
 
-
-
-
-
-
-10: _("""
- le maille noe n'existe pas dans le maillage mail mail= %(k1)s noe= %(k2)s 
+10 : _("""
+ la maille %(k2)s n'existe pas dans le maillage %(k1)s 
 """),
 
-11: _("""
- le noeud n'existe pas dans le maillage maillage= %(k1)s noeud= %(k2)s 
+11 : _("""
+ le noeud %(k2)s n'existe pas dans le maillage %(k1)s
 """),
 
-
-
-
-
-
-
-
-13: _("""
- & arret sur base modale de type illicitebase modale -->  %(k1)s type -->  %(k2)s 
- type  attendu -->  %(k3)s 
+13 : _("""
+ arrêt sur base modale de type illicite
+ base modale  -->  %(k1)s
+ type         -->  %(k2)s 
+ type attendu -->  %(k3)s 
 """),
 
-14: _("""
- arret sur matrice raideur non unique
+14 : _("""
+ arrêt sur matrice de raideur non unique
 """),
 
-15: _("""
- arret sur matrice masse non unique
+15 : _("""
+ arrêt sur matrice de masse non unique
 """),
 
-16: _("""
- arret sur matrice amortissement non unique en argument
+16 : _("""
+ arrêt sur matrice d'amortissement non unique en argument
 """),
 
+17 : _("""
+ Le type de matrice %(k1)s est inconnu. Erreur développeur
+"""),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-21: _("""
- les matrices assemblees n'ont pas la meme numerotation masse= %(k1)s 
- raideur= %(k2)s 
+21 : _("""
+ les matrices assemblées n'ont pas la même numérotation
+ masse   = %(k1)s 
+ raideur = %(k2)s 
 """),
 
-22: _("""
- les matrices assemblees n'ont pas la meme numerotation amortissement= %(k1)s 
- raideur= %(k2)s 
+22 : _("""
+ les matrices assemblées n'ont pas la même numérotation
+ amortissement = %(k1)s 
+ raideur       = %(k2)s 
 """),
 
-23: _("""
+23 : _("""
  
- les matrices assemblees et la base modalen'ont pas le meme maillage initial
- maillage matrice: %(k1)s 
- maillage base modale: %(k2)s 
+ les matrices assemblées et la base modale n'ont pas le même maillage initial
+ maillage matrice     : %(k1)s 
+ maillage base modale : %(k2)s 
 """),
 
-24: _("""
- arret sur probleme coherence mode_meca donne -->  %(k1)s 
-  numerotation associee -->  %(k2)s 
-  interf_dyna donnee -->  %(k3)s 
-  numerotation associee -->  %(k4)s 
+24 : _("""
+ arrêt sur problème de cohérence
+ MODE_MECA donné       -->  %(k1)s 
+ numerotation associée -->  %(k2)s 
+ INTERF_DYNA donnée    -->  %(k3)s 
+ numérotation associée -->  %(k4)s 
 """),
 
-25: _("""
- sous-structure inexistante dans le modele generalise modele generalisee %(k1)s 
- sous-structure %(k2)s 
+25 : _("""
+ sous-structure inexistante dans le modele généralisé
+ modèle generalisé : %(k1)s 
+ sous-structure    : %(k2)s 
 """),
 
-26: _("""
- probleme coherence nombre de champs base modale base modale %(k1)s 
- nombre de champs de la base %(i1)d 
- nombre de dgres generalises %(i2)d 
+26 : _("""
+ problème de cohérence du nombre de champs de la base modale
+ base modale                  : %(k1)s 
+ nombre de champs de la base  : %(i1)d 
+ nombre de degrés généralisés : %(i2)d 
 """),
 
-27: _("""
- le maillage n'est pas un maillage squelette maillage %(k1)s 
+27 : _("""
+ le maillage %(k1)s n'est pas un maillage SQUELETTE 
 """),
 
-28: _("""
-  aucun type d'interface defini pour la sous structure :  %(i1)d 
-  pas de mode rigide d'interface  le calcul de masses effectives risque d'etre  imprecis %(i2)d 
+28 : _("""
+  aucun type d'interface défini pour la sous-structure :  %(i1)d 
+  pas de mode rigide d'interface
+  le calcul de masses effectives risque d'être imprécis %(i2)d 
 """),
 
-
-
-
-
-
-
-
-30: _("""
- incoherence detectee dans squelette objet non trouve :  %(k1)s 
+30 : _("""
+ incoherence détectée dans le squelette
+ objet non trouvé :  %(k1)s 
 """),
 
-
-
-
-
-
-32: _("""
- sd resultat  resultle champ n'existe pas  %(k1)s 
+32 : _("""
+ sd resultat  %(k1)s, le champ %(k2)s n'existe pas   
  pour le nume_ordre  %(i1)d 
 """),
 
-33: _("""
- sd resultat  nomresle champ n'a pas ete duplique  %(k1)s 
+33 : _("""
+ sd resultat  %(k1)s, le champ %(k2)s n'a pas ete duplique   
  pour le nume_ordre  %(i1)d 
 """),
 
-
-
-
-
-
-35: _("""
- aucun champ n'est calculedans la structure de donnees  %(k1)s 
+35 : _("""
+ aucun champ n'est calculé dans la structure de donnees  %(k1)s 
 """),
 
-36: _("""
+36 : _("""
  les numerotations des champs ne coincident pas celui de  %(k1)s  est :  %(k2)s 
  et celui de  %(k3)s 
   est :  %(k4)s 
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-50: _("""
+50 : _("""
  il faut au moins 1 mode !
 """),
 
-51: _("""
+51 : _("""
  il faut un mode_meca a la 1ere occurence de ritz
 """),
 
-
-
-
-
-
-
-
-
-55: _("""
- le champ de "temp" n'existe pas pour le numero d'ordre  %(i1)d 
+55 : _("""
+ le champ de "TEMP" n'existe pas pour le numéro d'ordre  %(i1)d 
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-59: _("""
- le champ de "meta_elno_temp"  n'existe pas
-  pour le numero d'ordre  %(i1)d 
+59 : _("""
+ le champ de "META_ELNO_TEMP"  n'existe pas pour le numéro d'ordre  %(i1)d 
 """),
 
+61 : _("""
+ le pas de temps du calcul métallurgique ne correspond pas
+ au pas de temps du calcul thermique
+ - numero d'ordre              : %(i1)d 
+ - pas de temps thermique      : %(r1)f 
+ - pas de temps métallurgique  : %(r2)f 
+"""),
 
+62 : _("""
+ il manque la déformée modale nom_cham  %(k1)s  pour le mode  %(i1)d 
+"""),
 
-
-
-
-
-
-61: _("""
- le pas de temps du calcul  metallurgique ne correspond pas au pas  de temps du calcul thermique
-  numero d'ordre  %(i1)d 
-     pas de temps thermique  %(r1)f 
-     pas de temps metallurgique  %(r2)f 
+63 : _("""
+ données incompatibles :
+ pour le mode_stat  :  %(k1)s 
+ il manque le champ :  %(k2)s 
 """),
 
-62: _("""
manque la deformee modale nom_cham  %(k1)s  pour le mode  %(i1)d 
+6: _("""
il manque le mode statique nom_cham  %(k1)s  pour le mode  %(i1)d 
 """),
 
-63: _("""
- donnees incompatibles : pour le mode_stat  :  %(k1)s 
-  il manque le champ :  %(k2)s 
+66 : _("""
+ Taille de bloc insuffisante
+ taille de bloc demandée (kr8): %(r1)f 
+ taille de bloc utilisée (kr8): %(r2)f 
 """),
 
-64: _("""
- manque le mode statique nom_cham  %(k1)s  pour le mode  %(i1)d 
+68 : _("""
+  Estimation de la durée du régime transitoire :
+  valeur minimale conseillée :  %(r1)f 
 """),
 
+69 : _("""
+ non-linearité incompatible avec la définition du modèle généralisé
+ noeud_1      :  %(k1)s 
+ sous_struc_1 :  %(k2)s 
+ noeud_2      :  %(k3)s 
+ sous_struc_2 :  %(k4)s 
+"""),
 
+70 : _("""
+ problème de cohérence du nombre de noeuds d'interface
+ sous-structure1            : %(k1)s 
+ interface1                 : %(k2)s 
+ nombre de noeuds interface1: %(i1)d 
+ sous-structure2            : %(k3)s 
+ interface2                 : %(k4)s 
+ nombre de noeuds interface2: %(i2)d 
+"""),
 
+71 : _("""
+ problème de cohérence des interfaces orientées
+ sous-structure1           : %(k1)s 
+ interface1                : %(k2)s 
+ presence composante sur 1 : %(k3)s 
+ sous-structure2           : %(k4)s 
+ interface2                : %(k5)s 
+ composante inexistante sur 2 %(k6)s 
+"""),
 
+72 : _("""
+ problème de cohérence des interfaces orientées
+ sous-structure2           : %(k1)s 
+ interface2                : %(k2)s 
+ presence composante sur 2 : %(k3)s 
+ sous-structure1           : %(k4)s 
+ interface1                : %(k5)s 
+ composante inexistante sur 1 %(k6)s 
+"""),
 
+73 : _("""
+ Sous-structures incompatibles
+ sous-structure 1             : %(k1)s
+ MACR_ELEM associé            : %(k2)s 
+ numéro grandeur sous-jacente : %(i1)d 
+ sous-structure 2             : %(k3)s 
+ MACR_ELEM associé            : %(k4)s 
+ numéro grandeur sous-jacente : %(i2)d 
+"""),
 
+74 : _("""
+ arret sur incompatibilité de sous-structures
+"""),
 
+75 : _("""
+  Erreur développement : code retour 1 dans nmcomp en calculant la matrice tangente
+ """),
 
-66: _("""
- &taille de bloc insuffisante taille de bloc demandee (kr8): %(r1)f 
- taille de bloc utilisee (kr8): %(r2)f 
+77 : _("""
+ les types des deux matrices sont différents
+ type de la matrice de raideur :  %(k1)s 
+ type de la matrice de masse   :  %(k2)s 
 """),
 
+78 : _("""
+ les numérotations des deux matrices sont différentes
+ numérotation matrice de raideur :  %(k1)s 
+ numérotation matrice de masse   :  %(k2)s 
+"""),
 
+79 : _("""
+ coefficient de conditionnement des lagranges :  %(r1)f 
+"""),
 
+80 : _("""
+ affichage des coefficients d'amortissement :
+ premier coefficient d'amortissement : %(r1)f 
+ second  coefficient d'amortissement : %(r2)f 
+"""),
 
+82 : _("""
+ calcul du nombre de diamètres modaux demandé impossible
+ nombre de diamètres demandé --> %(i1)d 
+"""),
 
+83 : _("""
+ calcul des modes propres limité au nombre de diamètres maximum --> %(i1)d 
+"""),
 
+84 : _("""
+ calcul cyclique :
+ aucun nombre de diamètres nodaux licite
+"""),
 
-
-68: _("""
-  valeur minimale conseillee :  %(r1)f 
+85 : _("""
+ liste de fréquences incompatible avec l'option
+ nombre de fréquences --> %(i1)d 
+ option               --> %(k1)s 
 """),
 
-69: _("""
- non-linearite incompatible avec  la definition du modele generalise
- noeud_1      :  %(k1)s 
- sous_struc_1 :  %(k2)s 
- noeud_2      :  %(k3)s 
- sous_struc_2 :  %(k4)s 
+87 : _("""
+  résolution du problème généralisé complexe
+  nombre de modes dynamiques:  %(i1)d 
+  nombre de ddl droite      :  %(i2)d 
 """),
 
-70: _("""
- &probleme de coherence de nombre de noeuds d'interface
- sous-structure1: %(k1)s 
- interface1: %(k2)s 
- nombre de noeuds interface1: %(i1)d 
- sous-structure2: %(k3)s 
- interface2: %(k4)s 
- nombre de noeuds interface2: %(i2)d 
+88 : _("""
+  nombre de ddl axe         :  %(i1)d
+         dont cycliques     :  %(i2)d 
+         dont non cycliques :  %(i3)d 
 """),
 
-71: _("""
- &probleme de coherence des interfaces orientees sous-structure1: %(k1)s 
- interface1: %(k2)s 
- presence composante sur 1: %(k3)s 
- sous-structure2: %(k4)s 
- interface2: %(k5)s 
- composante inexistante sur 2 %(k6)s 
+89 : _("""
+  dimension max du problème :  %(i1)d 
 """),
 
-72: _("""
- &probleme de coherence des interfaces orientees sous-structure2: %(k1)s 
- interface2: %(k2)s 
- presence composante sur 2: %(k3)s 
- sous-structure1: %(k4)s 
- interface1: %(k5)s 
- composante inexistante sur 1 %(k6)s 
+91 : _("""
+ noeud sur l'axe_z
+ noeud :  %(k1)s 
 """),
 
-73: _("""
- &sous-structure incompatibles sous-structure 1:: %(k1)s macr_elem associe: %(k2)s 
- numero grandeur sous-jacente: %(i1)d 
- sous-structure 2:: %(k3)s 
- macr_elem associe: %(k4)s 
- numero grandeur sous-jacente: %(i2)d 
+93 : _("""
+ arrêt sur dimension matrice TETA incorrecte
+ dimension effective   :  %(i1)d 
+ dimension en argument :  %(i2)d 
 """),
 
-74: _("""
- &arret sur incompatibilite de sous-structure 
+94: _("""
+ erreur  de repetitivite cyclique
 """),
 
-75: _("""
-  Erreur développement : code retour 1 dans nmcomp en calculant la matrice tangente
- """),
+95: _("""
+ il manque un ddl sur un noeud  axe type du ddl -->  %(k1)s 
+ nom du noeud -->  %(k2)s 
+"""),
 
-76: _("""
-  Objet &FETI.MONITORING.MPI inexistant !
- """),
+99 : _("""
+ arrêt sur nombres de noeuds interface non identiques 
+ nombre de noeuds interface droite:  %(i1)d 
+ nombre de noeuds interface gauche:  %(i2)d 
+"""),
 
 }
diff --git a/Aster/Cata/cataSTA9/Messages/algorith15.py b/Aster/Cata/cataSTA9/Messages/algorith15.py
new file mode 100644 (file)
index 0000000..6d5fd97
--- /dev/null
@@ -0,0 +1,420 @@
+#@ MODIF algorith15 Messages  DATE 08/02/2008   AUTEUR MACOCCO K.MACOCCO 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg = {
+
+1 : _("""
+ arret sur nombres de DDL interface non identiques 
+ nombre de ddl interface droite:  %(i1)d 
+ nombre de ddl interface gauche:  %(i2)d 
+"""),
+
+2 : _("""
+ arret sur dimension matrice TETA incorrecte
+ dimension effective :  %(i1)d 
+ dimension en argument:  %(i2)d 
+"""),
+
+3 : _("""
+  erreur de répétitivité cyclique
+"""),
+
+4 : _("""
+  il manque un DDL sur un noeud gauche
+  type du DDL  -->  %(k1)s 
+  nom du noeud -->  %(k2)s 
+"""),
+
+
+
+6 : _("""
+  il manque un DDL sur un noeud droite
+  type du ddl  -->  %(k1)s 
+  nom du noeud -->  %(k2)s 
+"""),
+
+7 : _("""
+ arret sur problème de répétitivité cyclique
+"""),
+
+8 : _("""
+ la composante : %(k1)s  est une composante indefinie
+"""),
+
+
+
+
+10 : _("""
+ arret sur type de DDL non défini
+"""),
+
+11 : _("""
+ "NB_POIN" est inférieur au nombre de points de l'interspectre.
+ le spectre est tronqué à la fréquence :  %(r1)f 
+"""),
+
+12 : _("""
+ le "NB_POIN" donné est modifié
+ (en une puissance de 2 compatible avec l'interspectre)
+ le "NB_POIN" retenu est :   %(i1)d 
+"""),
+
+13 : _("""
+ la durée est trop grande ou NB_POIN et trop petit par rapport
+ à la fréquence max (théorème de Shannon).
+ on choisit NBPOIN =  %(i1)d 
+"""),
+
+14 : _("""
+ la durée est petite par rapport au pas de discrétisation de l'interspectre.
+ choisir plutot : durée >  %(r1)f 
+"""),
+
+15 : _("""
+ "NB_POIN" est petit par rapport au pas de discrétisation de l'interspectre.
+ NB_POIN =  %(i1)d 
+ il faudrait un nombre supérieur à :  %(r1)f 
+"""),
+
+16 : _("""
+ on n'a pas trouve le DDL pour le noeud :  %(k1)s 
+"""),
+
+17 : _("""
+    de la sous-structure :  %(k1)s 
+"""),
+
+18 : _("""
+    et sa composante :  %(k1)s 
+"""),
+
+19 : _("""
+  il manque le seuil  pour la fonction interprétée  %(k1)s 
+"""),
+
+20 : _("""
+ l'abscisse lineaire est nulle pour la courbe :  %(k1)s 
+ abscisse :  %(r1)f 
+"""),
+
+
+
+
+
+
+
+24 : _("""
+ au moins un terme de ALPHA est négatif à l'abscisse :  %(i1)d 
+"""),
+
+25 : _("""
+ ALPHA est nul et le nombre de mesures est strictement inférieur au nombre de modes
+ risque de matrice singulière
+"""),
+
+26 : _("""
+ calcul moindre norme 
+"""),
+
+27 : _("""
+  problème calcul valeurs singulieres
+  pas      =   %(i1)d
+  abscisse =    %(r1)f 
+"""),
+
+28 : _("""
+  la matrice (PHI)T*PHI + ALPHA n'est pas inversible
+  pas      =   %(i1)d 
+  abscisse =    %(r1)f 
+"""),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+45 : _("""
+  on ne trouve pas DPMAX 
+"""),
+
+46 : _("""
+  nombre d'itérations insuffisant 
+"""),
+
+47 : _("""
+  F(XMIN) > 0 
+"""),
+
+48 : _("""
+  maille :  %(k1)s
+  nombre d iterations =  %(i1)d
+  ITER_INTE_MAXI =  %(i2)d 
+"""),
+
+49 : _("""
+  DP    actuel =  %(r1)f
+  F(DP) actuel =  %(r2)f 
+"""),
+
+50 : _("""
+  DP    initial   =  %(r1)f
+  F(DP) initial   =  %(r2)f 
+"""),
+
+51 : _("""
+  DP    maximum   =  %(r1)f
+  F(DP) maximum   =  %(r2)f 
+"""),
+
+52 : _("""
+  allure de la fonction
+  nb points :  %(i1)d 
+"""),
+
+53 : _("""
+  DP     =  %(r1)f
+  F(DP)  =  %(r2)f 
+"""),
+
+
+
+
+55 : _("""
+  incohérence détectée 
+"""),
+
+56 : _("""
+  le noeud :  %(k1)s  de l'interface dynamique :  %(k2)s 
+  n'appartient pas la sous-structure:  %(k3)s 
+"""),
+
+
+
+
+
+58 : _("""
+  le noeud :  %(k1)s  de l interface dynamique :  %(k2)s 
+  n'est pas correctement référencé dans le squelette :  %(k3)s 
+"""),
+
+59: _("""
+  Le nombre de secteur doit etre supérieur ou égal à 2 (mot clé NB_SECTEUR)
+"""),
+
+60 : _("""
+  le noeud :  %(k1)s  de l'interface dynamique :  %(k2)s 
+  n'appartient pas la sous-structure:  %(k3)s 
+"""),
+
+
+
+
+62 : _("""
+  le noeud :  %(k1)s  de l'interface dynamique :  %(k2)s 
+  n'est pas correctement référencé dans le squelette :  %(k3)s 
+"""),
+
+63 : _("""
+  conflit mot clés TOUT et GROUP_NO dans RECO_GLOBAL 
+"""),
+
+64 : _("""
+  erreur de nom
+  la sous-structure :  %(k1)s  n a pas ete trouvée 
+"""),
+
+65 : _("""
+  incohérence de nom
+  l interface dynamique  :  %(k1)s 
+  de la sous-structure   :  %(k2)s 
+  a pour groupe de noeud :  %(k3)s 
+  or group_no_1 =  %(k4)s 
+"""),
+
+66 : _("""
+  erreur de nom
+  la sous-structure :  %(k1)s  n'a pas ete trouvée 
+"""),
+
+67 : _("""
+  incohérence de nom
+  l interface dynamique  :  %(k1)s 
+  de la sous-structure   :  %(k2)s 
+  a pour groupe de noeud :  %(k3)s 
+  or group_no_2 =  %(k4)s 
+"""),
+
+68 : _("""
+ nombre de points pas période             :  %(i1)d 
+ coefficient de remontee du pas de temps  :  %(r1)f 
+ coefficient de division du pas de temps  :  %(r2)f 
+ coeff déterminant DT MIN (=DT INIT*COEFF):  %(r3)f 
+ nombre maximal de réductions du pas      :  %(i2)d 
+ vitesse minimale variable                :  %(k1)s 
+"""),
+
+69 : _("""
+ nombre incorrect de sous-structures
+ il vaut :  %(i1)d 
+ alors que le nombre total de sous-structures vaut :  %(i2)d 
+"""),
+
+70 : _("""
+ nombre incorrect de sous-structures
+ pour le chargement numero : %(i1)d 
+ il en faut exactement :  %(i2)d 
+ vous en avez          :  %(i3)d 
+"""),
+
+71 : _("""
+ nombre incorrect de vecteurs chargements
+ pour le chargement numero : %(i1)d 
+ il en faut exactement :  %(i2)d 
+ vous en avez          :  %(i3)d 
+"""),
+
+72 : _("""
+ un PROF_CHNO n'est pas défini
+ il manque pour le chargement : %(k1)s 
+"""),
+
+73 : _("""
+ on doit avoir le meme type de forces pour un meme chargement global
+ or, la grandeur vaut   :  %(i1)d 
+ pour la sous-structure    %(k1)s 
+ et elle vaut           :  %(i2)d 
+ pour la sous-structure    %(k2)s 
+"""),
+
+74 : _("""
+ une des bases modales a un type incorrect
+ elle est associée à la sous-structure  %(k1)s 
+"""),
+
+75 : _("""
+ les numérotations ne coincident pas pour la sous-structure : %(k1)s 
+ le PROF_CHNO pour la base modale est :  %(k2)s 
+ et celui pour le second membre       :  %(k3)s 
+"""),
+
+85 : _("""
+  l''interface de droite n'existe pas
+  interface de nom %(k1)s 
+"""),
+
+86 : _("""
+  l''interface de gauche n'existe pas
+  interface de nom %(k1)s 
+"""),
+
+87 : _("""
+  l'interface axe n'existe pas
+  interface de nom %(k1)s 
+"""),
+
+88 : _("""
+ arret sur problème interfaces de type différents
+"""),
+
+89 : _("""
+ arret sur problème de type interface non supporté
+ type interface -->  %(k1)s 
+"""),
+
+90 : _("""
+ le nombre d'amortissements réduits est trop grand
+ le nombre de modes propres vaut  %(i1)d 
+ et le nombre de coefficients  :  %(i2)d 
+ on ne garde donc que les  %(i3)d premiers coefficients
+"""),
+
+91 : _("""
+ le nombre d'amortissements réduits est insuffisant
+ il en manque :  %(i1)d 
+ car le nombre de modes vaut :  %(i2)d 
+ on rajoute %(i3)d coefficients avec la valeur du dernier coefficient.
+"""),
+
+92 : _("""
+ Nombre de modes propres calculés insuffisant.
+"""),
+
+93 : _("""
+ MODE_MECA : %(k1)s 
+"""),
+
+94 : _("""
+ Nombre de modes propres limités à : %(i1)d 
+"""),
+
+95 : _("""
+ l'entrée d'amortissements réduits est incompatible 
+ avec des matrices de type  %(k1)s 
+ Il faut des matrices de type MATR_ASSE_GENE_*
+"""),
+
+96 : _("""
+ le nombre d'amortissements réduits est trop grand
+ le nombre de modes propres vaut  %(i1)d 
+ et le nombre de coefficients :  %(i2)d 
+ on ne garde donc que les  %(i3)d premiers coefficients 
+"""),
+
+97 : _("""
+ le nombre d'amortissements réduits est insuffisant
+ il en manque :  %(i1)d 
+ car le nombre de modes vaut :  %(i2)d
+ on rajoute  %(i3)d amortissement reduits avec la valeur du dernier mode propre.
+"""),
+
+98 : _("""
+ incohérence dans le DATASET 58
+ le nombre de valeurs fournies ne correspond pas au nombre de valeurs attendues
+ mesure concernée :  %(i1)d 
+"""),
+
+99 : _("""
+ le nombre maximum d'itérations  %(i1)d  est atteint sans converger 
+ le résidu relatif final est  : %(r1)f 
+ l instant de calcul vaut     : %(r2)f 
+"""),
+
+}
diff --git a/Aster/Cata/cataSTA9/Messages/algorith16.py b/Aster/Cata/cataSTA9/Messages/algorith16.py
new file mode 100644 (file)
index 0000000..ace805a
--- /dev/null
@@ -0,0 +1,521 @@
+#@ MODIF algorith16 Messages  DATE 02/06/2008   AUTEUR BOYERE E.BOYERE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg = {
+
+1 : _("""
+ nombre de pas de calcul       :  %(i1)d
+ nombre d'itérations           :  %(i2)d
+ ----------------------------------------------
+
+"""),
+
+2 : _("""
+  infos noeuds de choc
+  lieu de choc   :  %(i1)d
+  noeud de choc  :  %(k1)s
+"""),
+
+3 : _("""
+ sous-structure : %(k1)s
+"""),
+
+4 : _("""
+ coordonnees    : x :  %(r1)f
+                  y :  %(r2)f
+                  z :  %(r3)f
+"""),
+
+5 : _("""
+ noeud de choc  : %(k1)s
+"""),
+
+8 : _("""
+ amortissement tangent utilise :  %(r1)f
+
+ origine choc x : %(r2)f
+              y : %(r3)f
+              z : %(r4)f
+
+ norm_obst sin(alpha) : %(r5)f
+           cos(alpha) : %(r6)f
+           sin(beta)  : %(r7)f
+           cos(beta)  : %(r8)f
+
+ angl_vrille : sin(gamma) : %(r9)f
+               cos(gamma) : %(r10)f
+"""),
+
+9 : _("""
+ jeu initial :  %(r1)f
+"""),
+
+11 : _("""
+ le nb max d'iterations  %(i1)d  est atteint sans converger
+ le résidu relatif final est  : %(r1)f
+
+"""),
+
+12 : _("""
+ le nombre d'amortissements réduits est trop grand
+ le nombre de modes retenus vaut  %(i1)d
+ et le nombre de coefficients :  %(i2)d
+ on ne garde donc que les  %(i3)d
+   %(k1)s
+"""),
+
+13 : _("""
+ le nombre d'amortissements reduits est insuffisant
+ il en manque :  %(i1)d
+ car le nombre de modes vaut :  %(i2)d
+ on rajoute  %(i3)d
+   %(k1)s
+   %(k2)s
+"""),
+
+14 : _("""
+ pas de temps utilisateur trop grand :   %(r1)f
+ pas de temps necessaire pour le calcul: %(r2)f
+ risques de problemes de precision
+
+"""),
+
+15 : _("""
+ pas de temps utilisateur trop grand :   %(r1)f
+ pas de temps necessaire pour le calcul: %(r2)f
+ parametres de calcul dans ce cas
+ nb de pas de calcul :  %(i1)d
+
+"""),
+
+16 : _("""
+ pas de temps utilisateur trop grand   : %(r1)f
+ pas de temps necessaire pour le calcul: %(r2)f
+"""),
+
+17 : _("""
+ parametres de calcul dans ce cas
+ nb de pas de calcul :  %(i1)d
+
+"""),
+
+18 : _("""
+ le nombre d'amortissements reduits est trop grand
+ le nombre de modes propres vaut  %(i1)d
+ et le nombre de coefficients :  %(i2)d
+ on ne garde donc que les  %(i3)d
+   %(k1)s
+
+"""),
+
+19 : _("""
+ le nombre d'amortissements reduits est insuffisantil en manque :  %(i1)d
+ car le nombre de modes vaut :  %(i2)d
+ on rajoute  %(i3)d
+   %(k1)s
+   %(k2)s
+
+"""),
+
+20 : _("""
+ mode dynamique           :  %(i1)d
+ amortissement trop grand :  %(r1)f
+ amortissement critique   :  %(r2)f
+ problemes de convergence possibles %(k1)s
+
+"""),
+
+21 : _("""
+ taux de souplesse negligée : %(r1)f
+"""),
+
+22 : _("""
+ calcul par superposition modale :
+ la base de projection est un %(k1)s
+ le nb d'équations est          : %(i1)d
+ la methode utilisée est        : %(k2)s
+ la base utilisée est           : %(k3)s
+ le nb de vecteurs de base est  :  %(i2)d
+"""),
+
+23 : _("""
+ le pas de temps initial est  : %(r1)f
+ le nb de pas d'archive est     :  %(i1)d
+"""),
+
+24 : _("""
+ NUME_VITE_FLUI                 :  %(i1)d
+ vitesse gap                    :  %(r1)f
+ le nb de modes de BASE_FLUI    :  %(i2)d
+ le nb total de modes de la base:  %(i3)d
+ le pas de temps initial est    :  %(r2)f
+ durée de l'excitation          :  %(r3)f
+"""),
+
+25 : _("""
+ le nb de pas d'archive est     :  %(i1)d
+"""),
+
+26 : _("""
+ le pas de temps du calcul est  : %(r1)f
+ le nb de pas de calcul est     :  %(i1)d
+ le nb de pas d'archive est     :  %(i2)d
+"""),
+
+38 : _("""
+ mode dynamique           :  %(i1)d
+ amortissement trop grand :  %(r1)f
+ amortissement critique   :  %(r2)f
+ probleme de convergence possible %(k1)s
+"""),
+
+39 : _("""
+ sous-structuration dynamique
+ calcul par superposition modale
+ ----------------------------------------------
+ ! la numerotation utilisee est   :  %(k1)s
+ ! le nb d'equations est          :  %(i1)d
+ ! la methode utilisee est        :  %(k2)s
+ !    - nb de vecteurs dynamiques :  %(i2)d
+ !    - nb de deformees statiques :  %(i3)d
+"""),
+
+40 : _("""
+ ! le pas de temps initial est  : %(r1)f
+"""),
+
+41 : _("""
+ ! le pas de temps du calcul est  : %(r1)f
+ ! le nb de pas de calcul est     :  %(i1)d
+"""),
+
+42 : _("""
+ ! le nb de pas d'archive est     :  %(i1)d
+"""),
+
+44 : _("""
+ les interfaces de la liaison n'ont pas la meme longueur
+  sous-structure 1 -->  %(k1)s
+  interface 1      -->  %(k2)s
+  sous-structure 2 -->  %(k3)s
+  interface 2      -->  %(k4)s
+
+"""),
+
+45 : _("""
+ conflit dans les vis_a_vis des noeudsle noeud  %(k1)s
+ est le vis-a-vis des noeuds  %(k2)s
+ et  %(k3)s
+
+"""),
+
+46 : _("""
+ Le critère de vérification ne peut etre relatif dans votre cas,
+ la longueur caracteristique de l'interface de la sous-structure etant nulle.
+  sous-structure 1 -->  %(k1)s
+  interface 1      -->  %(k2)s
+  sous-structure 2 -->  %(k3)s
+  interface 2      -->  %(k4)s
+
+"""),
+
+47 : _("""
+ les interfaces ne sont pas compatibles sous-structure 1 -->  %(k1)s
+  interface 1      -->  %(k2)s
+  sous-structure 2 -->  %(k3)s
+  interface 2      -->  %(k4)s
+
+"""),
+
+48 : _("""
+ les interfaces ne sont pas compatibles sous-structure 1 -->  %(k1)s
+  interface 1      -->  %(k2)s
+  sous-structure 2 -->  %(k3)s
+  interface 2      -->  %(k4)s
+
+"""),
+
+
+50 : _("""
+ les deux interfaces ont pas meme nombre de noeuds
+ nombre noeuds interface droite -->  %(i1)d
+ nombre noeuds interface gauche -->  %(i2)d
+
+"""),
+
+51 : _("""
+ conflit dans les vis_a_vis des noeuds
+ le noeud  %(k1)s
+ est le vis-a-vis des noeuds  %(k2)s et  %(k3)s
+
+"""),
+
+52 : _("""
+ axe de symétrie cyclique différent de Oz
+ numéro du couple de noeuds :  %(i1)d
+ noeud droite -->  %(k1)s
+ noeud gauche -->  %(k2)s
+
+"""),
+
+53 : _("""
+  probleme de rayon droite-gauche differents
+  numero du couple de noeuds :  %(i1)d
+ noeud droite -->  %(k1)s
+ noeud gauche -->  %(k2)s
+
+"""),
+
+54 : _("""
+ probleme signe angle entre droite et gauche
+ numero du couple de noeuds:  %(i1)d
+ noeud droite -->  %(k1)s
+ noeud gauche -->  %(k2)s
+
+"""),
+
+55 : _("""
+ probleme valeur angle répétitivité cyclique
+ numero du couple de noeuds:  %(i1)d
+ noeud droite -->  %(k1)s
+ noeud gauche -->  %(k2)s
+
+"""),
+
+56 : _("""
+  vérification répétitivité : aucune erreur détectée
+"""),
+
+57 : _("""
+ les noeuds des interfaces ne sont pas alignés en vis-a-vis
+ les noeuds ont ete réordonnés
+
+"""),
+
+58 : _("""
+  arret sur probleme répétitivité cyclique
+  tentative de diagnostic:  %(k1)s
+"""),
+
+60 : _("""
+ VISCOCHABOCHE : erreur d'intégration
+  - Essai d'intégration numéro :  %(i1)d
+  - Convergence vers une solution non conforme,
+  - Incrément de déformation cumulée négative = %(r1)f,
+  - Changer la taille d'incrément.
+"""),
+
+64 : _("""
+    NADAI_B, erreur d'intégration
+     - Essai d'intégration numéro : %(i1)d
+     - Convergence vers une solution non conforme,
+     - Incrément de déformation cumulée négative = %(r1)f
+     - Changer la taille d'incrément
+"""),
+
+65 : _("""
+    NADAI_B : ERREUR
+     - Non convergence a itération maxi : %(i1)d
+     - Convergence régulière mais trop lente
+     - ERREUR > %(r1)f
+     - Diminuer la taille d'incrément
+ """),
+
+66 : _("""
+    NADAI_B : ERREUR
+     - Non convergence à itération maxi : %(i1)d
+     - Convergence irrégulière & erreur > %(r1)f
+     - Diminuer la taille d'incrément
+ """),
+
+67 : _("""
+   NADAI_B : ERREUR
+     - Non convergence à itération maxi : %(i1)d
+     - ERREUR > %(r1)f
+     - Diminuer la taille d'incrément
+ """),
+
+68 : _("""
+ Arret par manque de temps CPU au numéro d'ordre %(i1)d
+
+   - Temps moyen par incrément de temps : %(r1)f
+   - Temps CPU restant :                  %(r2)f
+
+ La base globale est sauvegardée, elle contient les pas archivés avant l'arret
+
+ """),
+
+69 : _("""
+    %(k1)s: ERREUR
+      - Non convergence a itération maxi : %(i1)d
+      - Convergence régulière mais trop lente
+      - ERREUR > %(r1)f
+      - Diminuer la taille d'incrément
+ """),
+
+70 : _("""
+    %(k1)s: ERREUR
+     - Non convergence à itération maxi : %(i1)d
+     - Convergence irrégulière & erreur > %(r1)f
+     - Diminuer la taille d'incrément
+ """),
+
+71 : _("""
+    %(k1)s: ERREUR
+     - Non convergence à itération maxi : %(i1)d
+     - ERREUR > %(r1)f
+     - Diminuer la taille d'incrément
+
+ """),
+
+72 : _("""
+   LMARC : erreur d'intégration
+     - Essai d'intégration numéro : %(i1)d
+     - Divergence de l'intégration locale
+     - Diminuer la taille d'incrément
+ """),
+
+73 : _("""
+   LMARC : erreur d'intégration
+     - Essai d'intégration numéro : %(i1)d
+     - Convergence vers une solution non conforme
+     - Incrément de déformation cumulée négative : %(r1)f
+     - Changer la taille d'incrément
+ """),
+
+74 : _("""
+   LMARC : erreur
+     - Non convergence a itération maxi :  %(i1)d
+     - Convergence régulière mais trop lente
+     - Diminuer la taille d'incrément
+ """),
+
+75 : _("""
+   LMARC : erreur
+     - Non convergence a itération maxi :  %(i1)d
+     - Convergence irrégulière & erreur >  %(r1)f
+     - Diminuer la taille d'incrément
+ """),
+
+76 : _("""
+   LMARC : erreur
+     - Non convergence a itération maxi :  %(i1)d
+     - erreur > %(r1)f
+     - Diminuer la taille d'incrément
+ """),
+
+77 : _("""
+   Arret par manque de temps CPU au numéro d'ordre : %(i1)d
+     - Dernier instant archivé :      %(r1)f
+     - Numéro d'ordre correspondant : %(i2)d
+     - Temps moyen par pas de temps : %(r2)f
+     - Temps CPU restant :            %(r3)f
+  """),
+
+78 : _("""
+  Précision du transitoire : %(r1)f
+  """),
+
+79 : _("""
+ Couplage temporel avec NB modes : %(i1)d
+  """),
+
+80 : _("""
+ Le nombre de lieu(x) de choc est : %(i1)d
+  """),
+
+81 : _("""
+ Le nombre de dispositifs anti-sismique est : %(i1)d
+  """),
+
+82 : _("""
+ le nombre de lieu(x) de choc avec flambement est : %(i1)d
+  """),
+
+83 : _("""
+ Le nombre de RELA_EFFO_DEPL est : %(i1)d
+  """),
+
+84 : _("""
+ Le nombre de RELA_EFFO_VITE est : %(i1)d
+  """),
+
+87 : _("""
+   Arret par manque de temps CPU
+     - Instant courant :              %(r1)f
+     - Nombre d'appels à ALITMI :     %(i1)d
+     - Temps moyen par pas de temps : %(r2)f
+     - Temps CPU restant :            %(r3)f
+  """),
+
+88 : _("""
+   Arret par manque de temps CPU au pas de temps : %(i1)d
+     - A l'instant  :                %(r1)f
+     - Temps moyen par pas :         %(r2)f
+     - Temps CPU restant :           %(r3)f
+  """),
+
+89 : _("""
+   On passe outre car VERI_PAS = NON
+  """),
+
+92 : _("""
+   Au noeud de choc %(k1)s
+  """),
+
+93 : _("""
+   Pour le noeud n0 : %(i1)d
+    - Raideur locale DEPX : %(r1)f
+    - Raideur locale DEPY : %(r2)f
+    - Raideur locale DEPZ : %(r3)f
+  """),
+
+94 : _("""
+  il manque les paramètres de Van_Genuchten
+ """),
+
+95 : _("""
+  Van_Genuchten non autorisé pour ce modèle de couplage
+ """),
+
+96 : _("""
+ le solveur linéaire MUMPS en mode parallèle distribué 'DISTSD' requiert un concept
+ produit de type SD_FETI en entrée du mot-clé PARTITION. Voir les commandes
+  DEFI_PART_FETI et DEFI_PART_OPS.
+ """),
+
+97 : _("""
+ Attention, vous utilisez le solveur linéaire MUMPS en mode parallèle distribué,
+ mais vous n'avez alloué qu'un processeur MPI. Vous aurez bien les résultats
+ attendus mais sans doute pas les performances. Il s'agit sans doute d'un run
+ de test !
+ """),
+
+99 : _("""
+ Valeur du parametre SOLVEUR/DIST_PROC0 incorrecte, routine CRESOL.
+ Si le solveur est MUMPS distribue DISTSD, cette valeur doit laisser au moins
+ un SD par processeur restant (hors proc 0) !
+ Si le solveur est MUMPS distribue DISTMC, cette valeur doit laisser au moins
+ une maille physique du modele par processeur restant (hors proc 0)!
+"""),
+
+}
diff --git a/Aster/Cata/cataSTA9/Messages/algorith17.py b/Aster/Cata/cataSTA9/Messages/algorith17.py
new file mode 100644 (file)
index 0000000..8cfe79e
--- /dev/null
@@ -0,0 +1,28 @@
+#@ MODIF algorith17 Messages  DATE 23/10/2007   AUTEUR BOITEAU O.BOITEAU 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+def _(x) : return x
+
+cata_msg={
+1: _("""
+ Solveur linéaire MUMPS distribué, routine CRESOL.
+ Le processeur de rang %(i1)d ne s'est vu attribuer aucune maille physique
+ du modèle!
+"""),
+}
index 1d15e628f5aa8ad6fa8ef63e75eeef0f7490b1ad..181f173df657e73e09a5cdec128f9b75d1900e69 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF algorith2 Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF algorith2 Messages  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-
-
-
-
-
-3: _("""
- la liste des cham_no n'existe pas
+3 : _("""
+ la liste des CHAM_NO n'existe pas
 """),
 
-4: _("""
- il n'y a aucun cham_no dans la liste
+4 : _("""
+ il n'y a aucun CHAM_NO dans la liste
 """),
 
-5: _("""
- les cham_no n'ont pas tous la meme longueur
+5 : _("""
+ les CHAM_NO n'ont pas tous la meme longueur
 """),
 
-6: _("""
- il faut definir nom_cmp
+6 : _("""
+ il faut définir NOM_CMP
 """),
 
-7: _("""
- il faut definir 3 angles nautiques.
+7 : _("""
+ il faut définir 3 angles nautiques.
 """),
 
-8: _("""
- l origine doit etre definie par 3 coordonnees.
+8 : _("""
+ l'origine doit etre définie par 3 coordonnées.
 """),
 
-9: _("""
+9 : _("""
  l axe z est obligatoire en 3d.
 """),
 
-10: _("""
- pour le 2d on ne prend que 2 coordonnees pour l origine.
+10 : _("""
+ pour le 2d, on ne prend que 2 coordonnées pour l'origine.
 """),
 
-11: _("""
- l axe z est n a pas de sens en 2d.
+11 : _("""
+ l axe z est n'a pas de sens en 2d.
 """),
 
-12: _("""
- le noeud se trouve sur l axe du repere cylindrique. on prend le noeud moyen des centres geometriques.
+12 : _("""
+ le noeud se trouve sur l'axe du repère cylindrique.
+ on prend le noeud moyen des centres géometriques.
 """),
 
-13: _("""
+13 : _("""
   -> Lors du passage au repère cylindrique, un noeud a été localisé sur l'axe
      du repère cylindrique. Code_Aster utilise dans ce cas le centre de gravité de
      l'élément pour le calcul de la matrice de passage en repère cylindrique.
@@ -76,356 +72,207 @@ cata_msg={
      s'arrete en erreur fatale.
 """),
 
-14: _("""
- charge non traitee:  %(k1)s 
-"""),
-
-15: _("""
- les modelisations autorisees sont 3d et d_plan et axis
-"""),
-
-16: _("""
- le choix des parametres ne correspond pas a l un des modeles cjs
+15 : _("""
+ les modélisations autorisées sont 3D et D_PLAN et AXIS
 """),
 
-17: _("""
- non converg.: essai normales
+1: _("""
+ le choix des paramètres ne correspond pas à l'un des modèles CJS
 """),
 
-18: _("""
- non converg.: nb iter max atteint
+1: _("""
+ la loi CJS ne converge pas
 """),
 
-19: _("""
- les modelisations autorisees sont 3d et d-plan et axis
+1: _("""
+ la loi CJS ne converge pas avec le nombre maximal d'itérations (intégration locale)
 """),
 
-20: _("""
- modelisation inconnue
+20 : _("""
+ modélisation inconnue
 """),
 
-21: _("""
-  nvi > nvimax
+2: _("""
+ vecteur de norme nulle
 """),
 
-22: _("""
- vecteur  de norme nulle  
+23 : _("""
+ la maille doit etre de type TETRA4, TETRA10, PENTA6, PENTA15, HEXA8 ou HEXA20.
+ or la maille est de type :  %(k1)s .
 """),
 
-23: _("""
- la maille doit etre de type tetra4, tetra10, penta6, penta15, hexa8 ou hexa20. or la maille est de type :  %(k1)s .
+24 : _("""
+ la maille doit etre de type TETRA4, TETRA10, PENTA6, PENTA15, HEXA8 ou HEXA20.
+ ou TRIA3-6 ou QUAD4-8
+ or la maille est de type :  %(k1)s .
 """),
 
-24: _("""
- la maille doit etre de type tetra4, tetra10, penta6, penta15, hexa8 ou hexa20. ou tria3-6 ou quad4-8 or la maille est de type :  %(k1)s .
-"""),
-
-25: _("""
- mauvaise face
-"""),
-
-26: _("""
+26 : _("""
   %(k1)s  groupe inexistant
 """),
 
-27: _("""
+27 : _("""
  maille  %(k1)s  de type  %(k2)s  invalide pour le contact
 """),
 
-28: _("""
+28 : _("""
  groupe de mailles de contact invalide
 """),
 
-29: _("""
+29 : _("""
  mailles de contact 2d et 3d
 """),
 
-30: _("""
- trois elements
-"""),
-
-31: _("""
- deux elements sur la meme face
+30 : _("""
+ trois éléments
 """),
 
-32: _("""
- une reorientation a eu lieu pour le deuxieme appui
+3: _("""
+ deux éléments sur la meme face
 """),
 
-33: _("""
- pas de maille de reference trouvee
+33 : _("""
+ pas de maille de référence trouvée
 """),
 
-34: _("""
stop_singulier=decoupe necessite la subdivision automatique du pas de temps (subd_pas)
+34 : _("""
STOP_SINGULIER = DECOUPE nécessite la subdivision automatique du pas de temps (SUBD_PAS)
 """),
 
-35: _("""
- la methode  %(k1)s  est inadequate pour une resolution de type "ldlt"
+35 : _("""
+ la méthode  %(k1)s  est inadéquate pour une résolution de type "LDLT"
 """),
 
-36: _("""
- la methode  %(k1)s  est inadequate pour une resolution de type "gcpc"
+36 : _("""
+ la méthode  %(k1)s  est inadéquate pour une résolution de type "GCPC"
 """),
 
-37: _("""
- la methode  %(k1)s  etant inadequate pour une resolution de type "mult_front"
+37 : _("""
+ la methode  %(k1)s  est inadéquate pour une résolution de type "MULT_FRONT"
 """),
 
-38: _("""
- la methode  %(k1)s  etant inadequate pour une resolution de type "feti"
+38 : _("""
+ la méthode  %(k1)s  est inadéquate pour une résolution de type "FETI"
 """),
 
-39: _("""
- le solveur feti requiert un concept produit de type sd_feti en entree du mot-cle partition
+39 : _("""
+ le solveur FETI requiert un concept produit de type SD_FETI en entrée du mot-clé PARTITION
 """),
 
-40: _("""
+40 : _("""
  ! nombre de sous-domaines illicite !
 """),
 
-41: _("""
- en parallele il faut au moins un sous-domaine par processeur !
-"""),
-
-42: _("""
- en parallele stogi=oui obligatoire pour limiter les msgs !
-"""),
-
-43: _("""
- pas de calcul sur le critere de rice disponible
-"""),
-
-44: _("""
- cette commande doit necessairement avoir le type evol_ther.
-"""),
-
-45: _("""
- seuls les champs de fonctions aux noeuds sont evaluables:  %(k1)s 
+41 : _("""
+ en parallèle, il faut au moins un sous-domaine par processeur !
 """),
 
-46: _("""
- nous traitons les champs de reels et de fonctions: . %(k1)s 
+4: _("""
+ en parallèle, STOGI = OUI obligatoire pour limiter les messages !
 """),
 
-47: _("""
- le nom symbolique du champ chercher n est pas licite. %(k1)s 
+4: _("""
+ pas de calcul sur le critère de Rice disponible
 """),
 
-48: _("""
- plusieurs instants correspondent a celui specifie sous affe 
+4: _("""
+ cette commande doit nécessairement avoir le type EVOL_THER.
 """),
 
-49: _("""
- nume_fin inferieur a nume_init
+4: _("""
+ seuls les champs de fonctions aux noeuds sont évaluables:  %(k1)s
 """),
 
-50: _("""
- cmp non traitee
+46 : _("""
+ nous traitons les champs de réels et de fonctions: . %(k1)s
 """),
 
-51: _("""
- il y a plusieurs charges contenant des liaisons unilaterales 
+47 : _("""
+ le nom symbolique du champ à chercher n'est pas licite. %(k1)s
 """),
 
-52: _("""
- debordement tableau (dvlp)
+48 : _("""
+ plusieurs instants correspondent à celui specifié sous AFFE
 """),
 
-53: _("""
- erreur code dans affichage (dvlp)
+49 : _("""
+ NUME_FIN inférieur à NUME_INIT
 """),
 
-54: _("""
-  increment de deformation cumulee (dp) = - %(k1)s 
+5: _("""
+ CMP non traitée
 """),
 
-55: _("""
erreur d integration- essai d integration  numero  %(k1)s - convergence vers  une solution non conforme - increment de deformation cumulee negative = - %(k2)s - redecoupage du pas de temps
+5: _("""
 increment de déformation cumulée (dp) = - %(k1)s
 """),
 
-56: _("""
-  erreur - non convergence a iteration maxi  %(k1)s  - convergence reguliere mais trop lente - erreur >  %(k2)s - redecoupage du pas de temps
+55 : _("""
+ erreur d'intégration
+ - essai d(integration  numero  %(k1)s 
+ - convergence vers une solution non conforme
+ - incrément de déformation cumulée négative = - %(k2)s
+ - redécoupage du pas de temps
 """),
 
-57: _("""
-  erreur - non convergence a iteration maxi  %(k1)s  - convergence irreguliere & erreur >  %(k2)s  - redecoupage du pas de temps
+56 : _("""
+  erreur 
+  - non convergence à l'itération maxi  %(k1)s  
+  - convergence régulière mais trop lente 
+  - erreur >  %(k2)s 
+  - redécoupage du pas de temps
 """),
 
-58: _("""
-  erreur - non convergence a iteration maxi  %(k1)s  - erreur >  %(k2)s  - redecoupage du pas de temps
+57 : _("""
+  erreur
+  - non convergence à l'itération maxi  %(k1)s 
+  - convergence irrégulière & erreur >  %(k2)s 
+  - redécoupage du pas de temps
 """),
 
-59: _("""
-  la transformation geometrique est singuliere pour la maille : %(k1)s  (jacobien = 0.)
+58 : _("""
+  erreur
+  - non convergence à l'itération maxi  %(k1)s 
+  - erreur >  %(k2)s 
+  - redécoupage du pas de temps
 """),
 
-60: _("""
-  derivees secondes non etendues au 3d
+59 : _("""
+  la transformation géométrique est singulière pour la maille : %(k1)s
+  (jacobien = 0.)
 """),
 
-61: _("""
- les listes des groupes de noeuds  a fournir doivent contenir le meme nombre de groupes de noeuds
+6: _("""
+  dérivées secondes non étendues au 3d
 """),
 
-62: _("""
 les listes des groupes de noeuds  doivent contenir le meme nombre de  noeuds
+6: _("""
les listes des groupes de noeuds à fournir doivent contenir le meme nombre de groupes de noeuds
 """),
 
-63: _("""
on imprime que des champs reels
+6: _("""
 les listes des groupes de noeuds doivent contenir le meme nombre de noeuds
 """),
 
-64: _("""
-  %(k1)s cham_no deja existant
+6: _("""
+ on n'imprime que des champs réels
 """),
 
-65: _("""
- appel errone a rsexch
+6: _("""
+  %(k1)s cham_no déjà existant
 """),
 
-66: _("""
- calcul du transitoire : choc en phase transitoire - pas de solution trouvee. utiliser l'option etat_stat = non.
+6: _("""
+ appel erroné a RSEXCH
 """),
 
-67: _("""
- modele non local : projecteur singulier
+66 : _("""
+ calcul du transitoire : choc en phase transitoire - pas de solution trouvée.
+ utiliser l'option ETAT_STAT = NON
 """),
 
-68: _("""
- iter_dual_maxi trop eleve (<10000)
+79 : _("""
+ pas de valeurs propres trouvées
 """),
 
-69: _("""
- fonction duale non convexe
-"""),
-
-70: _("""
- probleme recherche lineaire
-"""),
-
-71: _("""
- pas de geometrie associee au modele delocalise
-"""),
-
-72: _("""
- erreur transfo cham_elem_s
-"""),
-
-73: _("""
- mauvaise direction de descente
-"""),
-
-74: _("""
- pas de borne sup
-"""),
-
-75: _("""
- probleme recherche lineaire primal
-"""),
-
-76: _("""
- iterations primales insuffisantes
-"""),
-
-77: _("""
- mauvais dimensionnement de geomi
-"""),
-
-78: _("""
- dvp : energie non convexe
-"""),
-
-79: _("""
- pas de valeurs propres trouvees
-"""),
-
-
-
-
-
-
-
-
-
-
-
-82: _("""
- nombre maximal de niveau de subdivision atteint
-"""),
-
-83: _("""
- detection divergence, force la subdivision.
-"""),
-
-84: _("""
- force la subdivision
-"""),
-
-85: _("""
- pas minimal de la subdivision atteint.
-"""),
-
-86: _("""
- il n'y a aucun instant de calcul ('list_inst')
-"""),
-
-87: _("""
- liste d'instants non croissante
-"""),
-
-88: _("""
- acces par instant sans evolution ordonnee interdit (increment)
-"""),
-
-89: _("""
- instant initial introuvable dans la liste d'instants (list_inst)
-"""),
-
-90: _("""
- instant final introuvable dans la liste d'instants (list_inst)
-"""),
-
-91: _("""
- nume_inst_init plus petit que nume_fin avec evolution: 'retrograde'
-"""),
-
-92: _("""
- nume_init plus grand que nume_fin
-"""),
-
-93: _("""
- nume_inst_init n'appartient pas a la liste d'instants
-"""),
-
-94: _("""
-  -> Le numéro d'ordre correspondant à l'instant final de calcul NUME_INST_FIN
-     n'appartient pas à la liste des numéros d'ordre.
-     Dans ce cas, Aster considère pour numéro d'ordre final, le dernier de
-     la liste fournie.
-  -> Risque & Conseil :
-     Afin d'éviter des pertes de résultats, assurez-vous que le numéro d'ordre
-     associé à l'instant NUME_INST_FIN appartienne bien à la liste des numéros
-     d'ordre.
-"""),
-
-95: _("""
- acces par instant sans evolution ordonnee interdit (archivage)
-"""),
-
-96: _("""
- impossible d'archiver l'etat initial : le concept est reentrant (archivage)
-"""),
-
-97: _("""
- l'archivage va ecraser des instants deja calcules (archivage)
-"""),
-
-98: _("""
- l'archivage va laisser des trous dans la sd evol_noli (archivage, nume_init)
-"""),
-
-99: _("""
- le nombre de niveau de subdivisions doit etre plus grand que 1 (subd_niveau)
-"""),
 }
index 24531cb4727455cad0b0e119a8c808dd44a34ab1..c4e325b6d66023af699b94219c86171e392465ca 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF algorith3 Messages  DATE 15/05/2007   AUTEUR GNICOLAS G.NICOLAS 
+#@ MODIF algorith3 Messages  DATE 21/04/2008   AUTEUR GREFFET N.GREFFET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- certains pas de temps de la liste (liste_inst) sont plus petits que le pas de temps minimal renseigne (subd_pas_mini)
+7 : _("""
+ Etant donné la présence du mot clé AMOR_ALPHA et / ou AMOR_BETA, 
+ on va assembler la matrice d'amortissement globale de Rayleigh, 
+ même si ces coefficients sont tous les deux nuls.
+ Cette opération engendre un surcoût de calcul.
 """),
 
-2: _("""
- il faut donner subd_niveau et/ou subd_pas_mini
+: _("""
+ élément non traité
 """),
 
-3: _("""
- le nombre de subdivisions du pas de temps doit etre plus grand que 1 (subd_pas)
+9 : _("""
+ utiliser la formulation en déplacement avec un schéma NEWMARK, HHT ou THETA_METHODE,
+ ou la formulation en accéleration avec un schéma DIFF_CENT ou TCHAMWA.
 """),
 
-4: _("""
- option inconnue < %(k1)s > incoherence catalogue
-"""),
-
-5: _("""
- methode de subdivision inconnue < %(k1)s > incoherence catalogue
-"""),
-
-6: _("""
- valeur de subd_iter_igno incoherent avec iter_glob_maxi. augmentez iter_glob_maxi
-"""),
-
-7: _("""
- valeur de subd_iter_fin incoherent avec iter_glob_maxi. augmentez iter_glob_maxi
-"""),
-
-8: _("""
- element non traite
-"""),
-
-9: _("""
- utiliser la formulation en deplacement avec un schema newmark, hht ou theta_methode,
- ou la formulation en acceleration avec un schema diff_cent ou tchamwa.
-"""),
-
-10: _("""
+10 : _("""
   -> Contact avec DYNA_TRAN_MODAL : Il y a interpénétration d'une valeur supérieure à (DIST_MAIT + DIST_ESCL).
   -> Risque & Conseil :
      DIST_MAIT et DIST_ESCL permettent de tenir compte d'une épaisseur de matériau non représentée dans le maillage
@@ -69,342 +48,256 @@ cata_msg={
      générer des erreurs dans l'orientation des forces de contact.
 """),
 
-11: _("""
- methode a pas adaptatif  la donnee du pas est obligatoire 
+11 : _("""
+ méthode à pas adaptatif : la donnée du pas est obligatoire 
 """),
 
-12: _("""
- methode a pas adaptatif le pas ne peut pas etre nul  
+12 : _("""
+ méthode à pas adaptatif : le pas ne peut pas etre nul  
 """),
 
-13: _("""
- les matrices de masse elementaires doivent obligatoirement avoir ete calculees avec l'option mass_meca_diag
+13 : _("""
+ les matrices de masse élémentaires doivent obligatoirement avoir été calculées
+ avec l'option MASS_MECA_DIAG
 """),
 
-14: _("""
+14 : _("""
  on archive au moins un champ.
 """),
 
-15: _("""
- champ " %(k1)s " deja existant
-"""),
-
-16: _("""
+16 : _("""
 A l'instant %(r1)f, l'erreur vaut %(r2)f
 Cette erreur est supérieure à 1.
 Le pas de temps vaut %(r3)f
 On arrete de le réduire, car le nombre de réductions a atteint %(i1)d, qui est le maximum possible.
 """),
 
-17: _("""
- methode adapt pas de temps minimal atteint
+17 : _("""
+ méthode à pas adaptatif : pas de temps minimal atteint
 """),
 
-18: _("""
- methode des differences centrees:  la donnee du pas est obligatoire 
+18 : _("""
+ methode des différences centrees:  la donnee du pas est obligatoire 
 """),
 
-19: _("""
- methode des differences centrees:  le pas ne peut pas etre nul  
+19 : _("""
+ methode des différences centrees:  le pas ne peut pas etre nul  
 """),
 
-20: _("""
- le chargement de type dirichlet necessite la resolution par le schema de newmark
+20 : _("""
+ le chargement de type dirichlet nécessite la résolution par le schema de NEWMARK
 """),
 
-21: _("""
+21 : _("""
 Nombre de pas de calcul : %(i1)d
 Nombre d'itérations     : %(i2)d
 """),
 
-23: _("""
- vous calculez une impedance absorbante
+23 : _("""
+ vous calculez une impédance absorbante
 """),
 
-24: _("""
- on n'a pas pu trouve le dernier instant sauve.
+24 : _("""
+ on n'a pas pu trouver le dernier instant sauvé.
 """),
 
-25: _("""
- le champ "depl" n'est pas trouve dans le concept dyna_trans  %(k1)s 
+25 : _("""
+ le champ "DEPL" n'est pas trouvé dans le concept DYNA_TRANS  %(k1)s 
 """),
 
-26: _("""
- le champ "vite" n'est pas trouve dans le concept dyna_trans  %(k1)s 
+26 : _("""
+ le champ "VITE" n'est pas trouvé dans le concept DYNA_TRANS  %(k1)s 
 """),
 
-27: _("""
+27 : _("""
  le champ "acce" n'est pas trouve dans le concept dyna_trans  %(k1)s 
 """),
 
-28: _("""
- deplacements initiaux nuls.
+28 : _("""
+ déplacements initiaux nuls.
 """),
 
-29: _("""
+29 : _("""
  vitesses initiales nulles.
 """),
 
-30: _("""
- nume_init: on n'a pas trouver le nume_init dans le resultat  %(k1)s 
-"""),
-
-31: _("""
- methode de newmark ou wilson: la donnee de list_inst ou fonc_inst est obligatoire 
-"""),
-
-32: _("""
- fonc_inst: on attend une fonction.
-"""),
-
-33: _("""
- fonc_inst: il faut une fonction a pas constant.
-"""),
-
-34: _("""
- fonc_inst: temps de reprise superieur a la fonction.
-"""),
-
-35: _("""
- on n'a pas pu trouver le dernier instant sauve.
-"""),
-
-36: _("""
- nume_init: on n'a pas trouve le nume_init dans le resultat  %(k1)s 
-"""),
-
-37: _("""
- incoherence sur h, alpha, elas
-"""),
-
-40: _("""
- le nom_cham  %(k1)s n'appartient pas a la sd
+30 : _("""
+ NUME_INIT: on n'a pas trouvé le NUME_INIT dans le résultat  %(k1)s 
 """),
 
-41: _("""
- erreur(s) dans les donnees
+31 : _("""
+ methode de NEWMARK ou WILSON: la donnée de LIST_INST ou FONC_INST est obligatoire 
 """),
 
-42: _("""
- critere inconnu :  %(k1)s 
+32 : _("""
+ FONC_INST: on attend une fonction.
 """),
 
-45: _("""
- le champ absolu n'est accessible qu'en presence de modes statiques
+33 : _("""
+ fonc_inst: il faut une fonction à pas constant.
 """),
 
-
-
-
-
-
-
-
-47: _("""
- debordement tableau
+34 : _("""
+ fonc_inst: temps de reprise supérieur à la fonction.
 """),
 
-48: _("""
- pas de list_inst dans increment !?!?!
+36 : _("""
+ NUME_INIT: on n'a pas trouvé le NUME_INIT dans le résultat  %(k1)s 
 """),
 
-49: _("""
- il faut definir "list_arch" ou "list_inst" ou "inst" ou "pas_obse" au premier mot cle facteur "observation"
+37 : _("""
+ incohérence sur H, ALPHA, ELAS
 """),
 
-50: _("""
- seule la valeur de "list_arch" ou "list_inst" ou "inst" ou "pas_obse" du premier mot cle facteur "observation" est prise en compte
+40 : _("""
+ le nom_cham  %(k1)s n'appartient pas à la sd
 """),
 
-51: _("""
- pas de modeilisation c_plan pour la plasticite a gradient
+41 : _("""
+ erreur(s) dans les données
 """),
 
-52: _("""
- pas de modelisation c_plan pour rousselier a gradient
+42 : _("""
+ critère inconnu :  %(k1)s 
 """),
 
-53: _("""
- comportement non prevu pour un algo de lagrangien augmente
+43 :_("""
+ <DPMAT2> PLAS=2
 """),
 
-54: _("""
- le modele explose - decouper votre pas de temps
+5: _("""
+ ITER_INTE_MAXI insuffisant
 """),
 
-55: _("""
- iter_inte_maxi insuffisant
+5: _("""
+ la durée du transitoire est limitée par les possibilités de la transformée de Fourier rapide 
 """),
 
-56: _("""
- duree du transitoire limitee par les possibilites de la transformee de fourier rapide 
+5: _("""
+ la durée de la simulation temporelle est insuffisante pour le passage du transitoire
 """),
 
-57: _("""
- duree de la simulation temporelle insuffisante pour passage du transitoire
+5: _("""
+ changement de signe de la vitesse --> on prend VITG0(I)
 """),
 
-58: _("""
- changement de signe de la vitesse --> on prend vitg0(i)
-"""),
-
-59: _("""
+59 : _("""
  la matrice est triangulaire superieur-inversion indice
 """),
 
-60: _("""
- pivot nul.
-"""),
-
-61: _("""
- option non prevue !
-"""),
-
-62: _("""
- pb 1 test spectre fi par arpack !
-"""),
-
-63: _("""
- pb 2 test spectre fi par arpack !
+60 : _("""
+ la matrice interspectrale possède un pivot nul.
 """),
 
-64: _("""
valeur de stogi incoherente !
+6: _("""
option non prévue !
 """),
 
-65: _("""
- en parallele stogi=oui obligatoire pour l'instant !
+6: _("""
+ pb 1 test spectre fi par ARPACK
 """),
 
-66: _("""
- option de calcul incoherente !
+6: _("""
+ pb 2 test spectre fi par ARPACK
 """),
 
-67: _("""
- pb division par zerodans la construction du beta !
+6: _("""
+ valeur de STOGI incoherente
 """),
 
-68: _("""
- incoherence 1 .lili et .flin !
+6: _("""
+ en parallèle STOGI=OUI obligatoire pour l'instant
 """),
 
-69: _("""
- incoherence 2 .lili et .flin !
+6: _("""
+ option de calcul incohérente
 """),
 
-70: _("""
- incoherence 3 .lili et .flin !
+67 : _("""
+ pb division par zéro dans la construction du BETA
 """),
 
-71: _("""
- incoherence .lili et .fel3 !
+7: _("""
+ donnée erronnée, multiplicité nulle
 """),
 
-72: _("""
- donnee erronnee, multiplicite nulle !
+7: _("""
+ le type de concept: TABLE_SDASTER doit etre associé au mot clé NUME_VITE_FLUI
 """),
 
-73: _("""
- erreur log negatif ou nul
+7: _("""
+ pas de discrétisation de l'interspectre non constant.
 """),
 
-74: _("""
- erreur_gamdev : alpha < 1
+7: _("""
+ discrétisations differentes selon les fonctions de l'interspectre
 """),
 
-75: _("""
-  unif < 0 
+80 : _("""
+ "NB_POIN" n est pas une puissance de 2
+ on prend la puissance de 2 supérieure
 """),
 
-76: _("""
- le type de concept: table_sdaster doit etre associe au mot cle nume_vite_flui
+81 : _("""
+ coefficient de dispersion trop grand
+ consulter la documentation d'utilisation
 """),
 
-77: _("""
- y a un bug 4
+82 : _("""
+ matrice moyenne non définie positive
 """),
 
-78: _("""
- pas de discretisation de l'interspectre non constant.
-"""),
-
-79: _("""
- discretisations differentesselon les fonctions de l'interspectre
-"""),
-
-80: _("""
- "nb_poin" n est pas une puissance de 2,on prend la puissance de 2 superieure
-"""),
-
-81: _("""
- coefficient de dispersion trop grand, cf. doc. u
-"""),
-
-82: _("""
- matrice moyenne non definie positive
-"""),
-
-83: _("""
+83 : _("""
  le pas tend vers 0 ...
 """),
 
-84: _("""
- erreur dans la recuperation du nume.prno .
-"""),
-
-86: _("""
- pas d'interpolation possible pour  les frequences.
+86 : _("""
+ pas d'interpolation possible pour les fréquences.
 """),
 
-87: _("""
- derivee de f nulle
+87 : _("""
+ derivée de F nulle
 """),
 
-88: _("""
gm negatif
+88 : _("""
GM négatif
 """),
 
-89: _("""
- valeurs propres non//                              ordonnees %(k1)s  %(k2)s  %(k3)s 
+89 : _("""
+ valeurs propres non ordonnées :
+ %(k1)s  %(k2)s  %(k3)s 
 """),
 
-90: _("""
- coef paraboliques pas compatibles
+90 : _("""
+ coefficients paraboliques pas compatibles
 """),
 
-91: _("""
- coef paraboliques pas compatibles 2
+9: _("""
+ modelisations C_PLAN et 1D pas autorisées
 """),
 
-92: _("""
- modelisations c_plan et 1d pas autorisees
-"""),
-
-93: _("""
+93 : _("""
  zero elongation for hyperelastic material
 """),
 
-94: _("""
t1*c33-t3*c33 is zero for hyperelastic material
+94 : _("""
T1*C33-T3*C33 is zero for hyperelastic material
 """),
 
-95: _("""
+95 : _("""
  error of elongation for hyperelastic material
 """),
 
-96: _("""
+96 : _("""
  no material data for hyperelastic
 """),
 
-97: _("""
+97 : _("""
  model not supported for hyperelastic material
 """),
 
-98: _("""
+98 : _("""
  check your poisson ratio
 """),
 
-99: _("""
- erreur numero colonne (dvlp)
-"""),
 }
index 31537782b9c3cf34f7c607312f1eb6d1d05e7f83..ccc2c96b57ae4fb6e582bc1d1e884bb6c446fb9f 100644 (file)
-#@ MODIF algorith4 Messages  DATE 23/04/2007   AUTEUR FLEJOU J-L.FLEJOU 
+#@ MODIF algorith4 Messages  DATE 11/03/2008   AUTEUR MAHFOUZ D.MAHFOUZ 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  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.
+# COPYRIGHT (C) 1991 - 2007  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.        
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- code-colonne inconnu (dvlp)
-"""),
-
-2: _("""
- trop de colonnes affichees (dvlp)
-"""),
-
-3: _("""
- trop de colonnes de suivi (limite a quatre)
-"""),
-
-4: _("""
- mode incorrect (dvlp)
-"""),
-
-5: _("""
- fichier doit etre defini dans la premiere occurrence
-"""),
-
-6: _("""
- fichier sans unite
-"""),
-
-7: _("""
- format d'affichage trop grand
-"""),
-
-8: _("""
- longueur format excessif (dvlp)
-"""),
-
-9: _("""
- depassement de capacite affichage (dvlp)
-"""),
-
-10: _("""
- unite logique invalide (dvlp)
-"""),
-
-11: _("""
- sd affichage inexistante
-"""),
-
-12: _("""
- nombre incorrrect de colonnes (erreur interne)
-"""),
-
-13: _("""
- option inconnue pour info_residu
-"""),
-
-14: _("""
- trop de colonnes d'affichage (limite a quinze)
-"""),
-
-15: _("""
- ligne trop large (dvlp)
-"""),
-
-16: _("""
- info_residu ne correspond pas a un residu
-"""),
-
-17: _("""
- nombre lignes titre incorrecte (dvlp)
-"""),
-
-18: _("""
- nombre colonnes incorrecte (dvlp)
-"""),
-
-19: _("""
- code colonne incorrect (dvlp)
-"""),
-
-20: _("""
- erreur operation sur sd impression colonnes (dvlp)
-"""),
-
-21: _("""
- format trop grand pour la largeur max. d'une colonne
-"""),
-
-22: _("""
- erreur ajou sur sd impression colonnes (dvlp)
-"""),
-
-23: _("""
- erreur sd impression colonnes pleines (dvlp)
-"""),
-
-24: _("""
- erreur supp sur sd impression colonnes (dvlp)
-"""),
-
-25: _("""
- erreur lire sur sd impression colonnes (dvlp)
-"""),
-
-26: _("""
- erreur ecri sur sd impression colonnes (dvlp)
-"""),
-
-27: _("""
- ne correspond a aucun type de colonne
-"""),
-
-28: _("""
- marquage interdit pour des colonnes de type texte
-"""),
-
-29: _("""
- ne correspond a aucun format de colonne
-"""),
-
-30: _("""
- ne correspond a aucune colonne
-"""),
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-35: _("""
+35 : _("""
  rang superieur a dimension vecteur
 """),
 
-36: _("""
- erreurresistance f_c < 0  ou = 0 !
-"""),
-
-37: _("""
- erreurf_t < 0 !
-"""),
-
-38: _("""
- erreur - valeur de crit_e_c superieure  a  1
-"""),
-
-39: _("""
- erreur - valeur de crit_e_c negative !!!!
-"""),
-
-40: _("""
- erreur - valeur de epsp_p_c negative !!!!
-"""),
-
-41: _("""
- erreur - valeur de epsp_r_c negative !!!!
-"""),
-
-42: _("""
- erreur - valeur de epsi_r_t negative !!!!
-"""),
-
-43: _("""
- erreur - valeur de fac_t_c negative ou > 1   !!!!
+36 : _("""
+ <LCDPPA> il faut redecouper
 """),
 
-
-
-
-
-45: _("""
- la modelisation 1d n est pas autorisee
+45 : _("""
+ la modelisation 1d n'est pas autorisée
 """),
 
-46: _("""
element: %(k1)s non implante
+4: _("""
élément à discontinuité avec une loi CZM_EXP : la matrice H est non inversible
 """),
 
-47: _("""
- probleme sur le type d option
+4: _("""
+ modélisation  %(k1)s imcompatible avec la loi BETON_DOUBLE_DP.
 """),
 
-48: _("""
- matrice h non inversible
-"""),
-
-49: _("""
- modelisation  %(k1)s imcompatible avec la loi beton_double_dp .
-"""),
-
-50: _("""
+50 : _("""
   comportement inattendu :  %(k1)s
 """),
 
-51: _("""
-  syt et d_sigm_epsi doivent                        etre specifies sous l operande beton_ecro_line                    dans defi_materiau pour utiliser                                  la loi endo_isot_beton
-"""),
-
-52: _("""
-  syc ne doit pas etre                valorise pour nu nul dans defi_materiau
-"""),
-
-53: _("""
-  syc doit etre                      superieur a sqrt((1+nu-2*nu*nu)/(2.d0*nu*nu))*syt                 dans defi_materiau pour prendre en compte le                      confinement
+51 : _("""
+  SYT et D_SIGM_EPSI doivent être specifiés sous l'operande BETON_ECRO_LINE dans DEFI_MATERIAU pour utiliser la loi ENDO_ISOT_BETON
 """),
 
-54: _("""
- ksi non inversible
+5: _("""
+  SYC ne doit pas être valorisé pour NU nul dans DEFI_MATERIAU
 """),
 
-55: _("""
- cv approche 0 impossible
+53 : _("""
+  SYC doit etre supérieur à SQRT((1+NU-2*NU*NU)/(2.D0*NU*NU))*SYT 
+  dans DEFI_MATERIAU pour prendre en compte le confinement
 """),
 
-56: _("""
dvp : option  %(k1)s  non prevue
+5: _("""
loi ENDO_ORTH_BETON : le paramètre KSI n'est pas inversible
 """),
 
-57: _("""
erreur:                                       pb de convergence (dgp neg)
+57 : _("""
+ pb de convergence (dgp neg)
 """),
 
-58: _("""
erreur:                                      pas de solution
+58 : _("""
+ pas de solution
 """),
 
-59: _("""
+59 : _("""
  erreur: pb de convergence
 """),
 
-60: _("""
erreur:                                         pb de convergence 2 (dgp neg)
+60 : _("""
+ pb de convergence 2 (dgp neg)
 """),
 
-61: _("""
+61 : _("""
  erreur: pb de conv 2
 """),
 
-62: _("""
- loi beton_reglement utilisable uniquement en modelisation c_plan ou d_plan
+62 : _("""
+ loi BETON_REGLEMENT utilisable uniquement en modélisation C_PLAN ou D_PLAN
 """),
 
-63: _("""
- la methode de localisation  %(k1)s  est indisponible actuellement
+63 : _("""
+ la méthode de localisation  %(k1)s  est indisponible actuellement
 """),
 
-64: _("""
- interaction non disponible
-"""),
-
-65: _("""
+65 : _("""
   %(k1)s  impossible actuellement
 """),
 
-66: _("""
- augmenter nmat
-"""),
-
-67: _("""
- ecou_plas1 non disponible
-"""),
-
-68: _("""
- pyramidal1 pas encore disponible
-"""),
-
-69: _("""
- pyramidal2 pas encore disponible
+68 : _("""
+ PYRAMIDAL1 pas encore disponible
 """),
 
-70: _("""
joint_grain pas encore disponible
+69 : _("""
PYRAMIDAL2 pas encore disponible
 """),
 
-71: _("""
rl pas encore disponible
+7: _("""
JOINT_GRAIN pas encore disponible
 """),
 
-72: _("""
-  erreur - jacobien du systeme non lineaire a resoudre nul lors de la projection au sommet du cone de traction - les parametres materiaux sont sans doute mal definis.
+7: _("""
+ RL pas encore disponible
 """),
 
-73: _("""
-  non convergence a iteration maxi  %(k1)s  - erreur calculee  %(k2)s  >  %(k3)s mais tres faibles increments de newton pour la loi beton_double_dp - on accepte la convergence.
+72 : _("""
+  jacobien du systeme non lineaire à résoudre nul
+  lors de la projection au sommet du cone de traction
+  les parametres matériaux sont sans doute mal définis
 """),
 
-74: _("""
-  erreur - non convergence a iteration maxi  %(k1)s  - erreur calculee  %(k2)s  >  %(k3)s  - pour la loi beton_double_dp  - redecoupage du pas de temps
+73 : _("""
+  non convergence à itération maxi  %(k1)s  
+  - erreur calculee  %(k2)s  >  %(k3)s
+  mais tres faibles incréments de newton pour la loi BETON_DOUBLE_DP
+  - on accepte la convergence.
 """),
 
-75: _("""
- etat converge non conforme lors de la projection au sommet du cone de traction
+74 : _("""
+  non convergence à itération maxi  %(k1)s 
+  - erreur calculée  %(k2)s  >  %(k3)s 
+  - pour la loi BETON_DOUBLE_DP 
+  - redécoupage du pas de temps
 """),
 
-76: _("""
- etat converge non conforme en compression lors de la projection au sommet du cone de traction
+75 : _("""
+ etat converge non conforme
+ lors de la projection au sommet du cone de traction
 """),
 
-77: _("""
-  erreur - jacobien du systeme non lineaire a resoudre nul lors de la projection au sommet des cones de compression et traction - les parametres materiaux sont sans doute mal definis.
-"""),
-
-78: _("""
- etat converge non conforme en traction lors de la projection au sommet des deux cones
-"""),
-
-79: _("""
- etat converge non conforme en compression lors de la projection au sommet des deux cones
+76 : _("""
+ etat converge non conforme en compression
+ lors de la projection au sommet du cone de traction
 """),
 
-80: _("""
-  erreur - jacobien du systeme non lineaire a resoudre nul lors de la projection au sommet du cone de compression - les parametres materiaux sont sans doute mal definis.
+77 : _("""
+ jacobien du systeme non linéaire à résoudre nul
+ lors de la projection au sommet des cones de compression et traction
+ - les parametres matériaux sont sans doute mal définis.
 """),
 
-81: _("""
- etat converge non conforme lors de la projection au sommet du cone de compression
+78 : _("""
+ état convergé non conforme en traction
+ lors de la projection au sommet des deux cones
 """),
 
-82: _("""
- etat converge non conforme en traction lors de la projection au sommet du cone de compression
+79 : _("""
+ état convergé non conforme en compression
+ lors de la projection au sommet des deux cones
 """),
 
-83: _("""
-  erreur - jacobien du systeme non lineaire a resoudre nul - les parametres materiaux sont sans doute mal definis.
+80 : _("""
+  jacobien du systeme non linéaire à résoudre nul
+  lors de la projection au sommet du cone de compression
+  - les parametres matériaux sont sans doute mal définis.
 """),
 
-84: _("""
- integration elastoplastique de loi multi-critere : erreur de programmation
+81 : _("""
+ état convergé non conforme
+ lors de la projection au sommet du cone de compression
 """),
 
-85: _("""
-  erreur de programmation : valeur de nseuil incorrecte.
+82 : _("""
+ état convergé non conforme en traction
+ lors de la projection au sommet du cone de compression
 """),
 
-86: _("""
-  erreur : etat converge non conforme en traction et en compression pour la loi de comportement beton_double_dp pour les deux criteres en meme temps. il faut un saut elastique plus petit, ou redecouper le pas de temps
+83 : _("""
+  jacobien du système non linéaire a resoudre nul
+  - les parametres matériaux sont sans doute mal définis.
 """),
 
-87: _("""
-  erreur : etat converge non conforme en compression pour la loi de comportement beton_double_dp pour les deux criteres en meme temps. il faut un saut elastique plus petit, ou redecouper le pas de temps
+8: _("""
+ intégration élastoplastique de loi multi-critere : erreur de programmation
 """),
 
-88: _("""
-  erreur : etat converge non conforme en traction pour la loi de comportement beton_double_dp pour les deux criteres en meme temps. il faut un saut elastique plus petit, ou redecouper le pas de temps
+8: _("""
+  erreur de programmation : valeur de NSEUIL incorrecte.
 """),
 
-89: _("""
- etat converge non conforme en traction
+86 : _("""
+  état convergé non conforme en traction et en compression
+  pour la loi de comportement BETON_DOUBLE_DP
+  pour les deux critères en meme temps.
+  il faut un saut élastique plus petit, ou redécouper le pas de temps
 """),
 
-90: _("""
- etat converge non conforme en compression
+87 : _("""
+  état converge non conforme en compression
+  pour la loi de comportement BETON_DOUBLE_DP
+  pour les deux critères en meme temps.
+  il faut un saut élastique plus petit, ou redécouper le pas de temps
 """),
 
-91: _("""
- option  %(k1)s  non prevue (dvlp)
+88 : _("""
+  état convergé non conforme en traction
+  pour la loi de comportement BETON_DOUBLE_DP
+  pour les deux critères en meme temps.
+  il faut un saut élastique plus petit, ou redécouper le pas de temps
 """),
 
-92: _("""
valeurs initiales non conformes : il y a probablement une erreur dans la programmation
+89 : _("""
état convergé non conforme en traction
 """),
 
-93: _("""
- cet algorithme ne traite pas encore les options rigi_meca_tang et full_meca
+9: _("""
+ état convergé non conforme en compression
 """),
 
-94: _("""
- il faut declarer fonc_desorp                                       sous elas_fo pour le fluage propre                                avec sech comme parametre
+92 : _("""
+ valeurs initiales non conformes :
+ il y a probablement une erreur dans la programmation
 """),
 
-95: _("""
- division par zero dans lcumfs
+9: _("""
+ il faut déclarer FONC_DESORP sous ELAS_FO pour le fluage propre                                avec sech comme parametre
 """),
 
-96: _("""
- erreur dans lcumme : pb de dimension
+97 : _("""
+ on ne traite pas actuellement plusieurs NOM_CHAM simultanément,
+ on ne considère que le premier argument
 """),
 
-97: _("""
- on ne traite pas actuellement plusieurs nom_cham simultanement, on ne considere que le premier argument
+9: _("""
+ nombre de valeurs dans le fichier UNV DATASET 58 non identique
 """),
 
-98: _("""
- nombre de valeurs dans le fichier unv dataset 58 non identique
+9: _("""
+ nature du champ dans le fichier UNV DATASET 58 non identique
 """),
 
-99: _("""
- nature du champ dans le fichier unv dataset 58 non identique
-"""),
 }
index 84abd437e418a334c1554934e698b136381d1497..df98697b9c4fc71a2ae6dd0daea775721edbcd68 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF algorith5 Messages  DATE 30/04/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF algorith5 Messages  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- le type de resultat dyna_trans ne supporte pas les donnees complexes
+1 : _("""
+ le type de résultat DYNA_TRANS ne supporte pas les données complexes
 """),
 
-2: _("""
- le type de resultat dyna_harmo ne supporte pas les donnees reelles
+2 : _("""
+ le type de résultat DYNA_HARMO ne supporte pas les données reelles
 """),
 
-3: _("""
- on ne traite pas actuellement les deformations complexes
+3 : _("""
+ on ne traite pas actuellement les déformations complexes
 """),
 
-4: _("""
- nombre de dataset 58 superieur a nbnoeud * nbcmp 
+4 : _("""
+ nombre de dataset 58 supérieur à NBNOEUD * NBCMP 
 """),
 
-5: _("""
- erreur dans la lecture du fichier ideas
+5 : _("""
+ erreur dans la lecture du fichier IDEAS
 """),
 
-6: _("""
- seules les donnees de type deplacement, vitesse, acceleration, deformation ou contrainte sont actuellement traitees 
+6 : _("""
+ seules les données de type déplacement, vitesse, accélération, déformation
+ ou contrainte sont actuellement traitées 
 """),
 
-7: _("""
- donnees : complexes, incompatibles avec dyna_trans
+7 : _("""
+ données : complexes, incompatibles avec DYNA_TRANS
 """),
 
-8: _("""
- donnees : reelles, incompatibles avec dyna_harmo ou harm_gene
+8 : _("""
+ données : réelles, incompatibles avec DYNA_HARMO ou HARM_GENE
 """),
 
-9: _("""
- on ne traite pas actuellement la redefinition des orientations pour les champs de contrainte 
+9 : _("""
+ on ne traite pas actuellement la redéfinition des orientations
+ pour les champs de contrainte 
 """),
 
-10: _("""
- on ne traite pas actuellement la redefinition des orientations pour les champs de deformation 
+10 : _("""
+ on ne traite pas actuellement la redéfinition des orientations
+ pour les champs de déformation 
 """),
 
-11: _("""
- la condition gamma/ksi <= 1 n est pas respectee
+11 : _("""
+ la condition GAMMA/KSI <= 1 n'est pas respectée
 """),
 
-12: _("""
- incoherence des relations sigma_c sigma_p1 m_pic a_pic a_e et m_e
+12 : _("""
+ incohérence des relations SIGMA_C SIGMA_P1 M_PIC A_PIC A_E et M_E
 """),
 
-13: _("""
- erreur d integration - essai d integration  numero  %(k1)s - divergence de l integration locale - redecoupage du pas de temps
+13 : _("""
+ erreur d'intégration
+ - essai d'intégration numéro  %(k1)s
+ - divergence de l'intégration locale
+ - redécoupage du pas de temps
 """),
 
-14: _("""
-  increment de deformation cumulee (dv) = - %(k1)s 
+14 : _("""
+  incrément de deformation cumulée (dv) = - %(k1)s 
 """),
 
-15: _("""
- type d'element fini pas traite
+16 : _("""
+ le profil de la matrice n est surement pas plein.
+ on continue mais s'il vous arrive des problèmes plus loin...
 """),
 
-16: _("""
- le profil de la matrice n est surement pas plein. on  continue mais s'il vous arrive des problemes plus loin...
+17 : _("""
+ le profil de la matrice n'est surement pas plein.
+ on continue mais attention ....
 """),
 
-17: _("""
- le profil de la matrice n est surement pas plein. on  continue mais attention ....
+18 : _("""
+ le profil de la matrice n'est pas plein.
+ on arrete tout ....
 """),
 
-18: _("""
- le profil de la matrice n est  pas plein. on arrete tout ....
+1: _("""
+ matrice singulière
 """),
 
-19: _("""
- matrice singuliere
-"""),
-
-20: _("""
+20 : _("""
  inversion seulement en dimension 3
 """),
 
-21: _("""
- type de maille inconnu (dvlp)
+2: _("""
+ la matrice masse est singulière.
 """),
 
-22: _("""
- la matrice masse est singuliere.
-"""),
-
-23: _("""
+23 : _("""
  pas de temps minimal atteint
 """),
 
-24: _("""
- donnees erronees.
+24 : _("""
+ données erroneés.
 """),
 
-25: _("""
-  gamma = 0 : valeur par defaut 
+25 : _("""
+  GAMMA = 0 : valeur par défaut 
 """),
 
-26: _("""
+26 : _("""
   dispositif anti-sismique :  la distance des noeuds 1 et 2 est nulle
 """),
 
-27: _("""
+27 : _("""
  le noeud  %(k1)s  n'est pas un noeud du maillage  %(k2)s 
 """),
 
-28: _("""
- on n'a pas trouve le ddl "dx" pour le noeud  %(k1)s 
-"""),
-
-29: _("""
- on n'a pas trouve le ddl "dy" pour le noeud  %(k1)s 
+28 : _("""
+ on n'a pas trouvé le ddl "DX" pour le noeud  %(k1)s 
 """),
 
-30: _("""
- on n'a pas trouve le ddl "dz" pour le noeud  %(k1)s 
+29 : _("""
+ on n'a pas trouvé le ddl "DY" pour le noeud  %(k1)s 
 """),
 
-31: _("""
- calcul non-lineaire par sous-structuration, le mot-cle sous_struc_1 est obligatoire
+3: _("""
+ on n'a pas trouvé le ddl "DZ" pour le noeud  %(k1)s 
 """),
 
-32: _("""
- argument du mot-cle "sous_struc_1" n'est pas un nom de sous-structure
+31 : _("""
+ calcul non-linéaire par sous-structuration :
+ le mot-cle SOUS_STRUC_1 est obligatoire
 """),
 
-33: _("""
calcul non-lineaire par sous-structuration entre 2 structures mobiles, le mot-cle sous_struc_2 est obligatoire
+3: _("""
argument du mot-cle "SOUS_STRUC_1" n'est pas un nom de sous-structure
 """),
 
-34: _("""
- argument du mot-cle "sous_struc_2" n'est pas un nom de sous-structure
+33 : _("""
+ calcul non-linéaire par sous-structuration entre 2 structures mobiles :
+ le mot-clé SOUS_STRUC_2 est obligatoire
 """),
 
-35: _("""
-  obstacle bi_cerc_int : dist_2 doit etre superieure ou egale a dist_1
+3: _("""
+ l'argument du mot-clé "SOUS_STRUC_2" n'est pas un nom de sous-structure
 """),
 
-36: _("""
- calcul non-lineaire par sous-structuration, pas de dispositif anti-sismique ou de flambage possible 
+3: _("""
+  obstacle BI_CERC_INT : DIST_2 doit etre supérieur ou égal a DIST_1
 """),
 
-37: _("""
- le multi-appui + sous-structuration n'est pas developpe - bon courage
+36 : _("""
+ calcul non-linéaire par sous-structuration :
+ pas de dispositif anti-sismique ou de flambage possible 
 """),
 
-38: _("""
conflit entre choc et flambage au meme lieu de choc : le calcul sera de type flambage
+3: _("""
le multi-appui + sous-structuration n'est pas developpé - bon courage
 """),
 
-39: _("""
- argument du mot-cle "repere" inconnu
+38 : _("""
+ conflit entre choc et flambage au meme lieu de choc :
+ le calcul sera de type flambage
 """),
 
-40: _("""
- les rigidites de chocs doivent etre strictement positives
+39 : _("""
+ argument du mot-cle "REPERE" inconnu
 """),
 
-41: _("""
- incoherence dans les donnees de la loi de flambage : les caracteristiques introduites peuvent induire a un ecrasement residuel negatif 
+4: _("""
+ les rigidités de chocs doivent etre strictement positives
 """),
 
-42: _("""
- les bases utilisees pour la projection sont differentes.
+41 : _("""
+ incohérence dans les données de la loi de flambage :
+ les caractéristiques introduites peuvent conduire à
+ un ecrasement résiduel négatif 
 """),
 
-43: _("""
- les bases utilisees n'ont pas le meme nombre de vecteurs.
+4: _("""
+ les bases utilisées pour la projection sont différentes.
 """),
 
-44: _("""
- les numerotations des matrices sont differentes.
+4: _("""
+ les bases utilisées n'ont pas le meme nombre de vecteurs.
 """),
 
-45: _("""
- les numerotations des vecteurs d'excitation sont differentes.
+4: _("""
+ les numérotations des matrices sont différentes.
 """),
 
-46: _("""
- on n'a pas pu trouve les deplacements initiaux 
+4: _("""
+ les numérotations des vecteurs d'excitation sont différentes.
 """),
 
-47: _("""
- on n'a pas pu trouve les vitesses initiales 
+4: _("""
+ on n'a pas pu trouver les déplacements initiaux 
 """),
 
-48: _("""
- on n'a pas pu trouve les variables internes initiales : reprise  choc avec flambage 
+4: _("""
+ on n'a pas pu trouver les vitesses initiales 
 """),
 
-49: _("""
- abscence de terme de forcage externe. l'algorithme itmi n'est pas prevu pour calculer la reponse libre d'une structure.
+48 : _("""
+ on n'a pas pu trouver les variables internes initiales :
+ reprise choc avec flambage 
 """),
 
-50: _("""
- abscence de non-linearites de choc. pour traiter le regime lineaire, preciser une non-linearites de choc avec un jeu important.
+49 : _("""
+ absence de terme de forcage externe.
+ l'algorithme ITMI n'est pas prévu pour calculer la réponse libre
+ d'une structure.
 """),
 
-51: _("""
- impossible de traiter le type d obstacle choisi avec methode itmi, (obstacle de type  %(k1)s  au noeud  %(k2)s ).
+50 : _("""
+ abscence de non-linéarites de choc.
+ pour traiter le régime linéaire, préciser une non-linéarité de choc
+ avec un jeu important.
 """),
 
-52: _("""
- duree de la simulation temporelle apres transitoire inferieure a la duree demandee (excitation temporelle trop courte)
+51 : _("""
+ impossible de traiter le type d'obstacle choisi avec methode ITMI
+ (obstacle de type  %(k1)s  au noeud  %(k2)s ).
 """),
 
-53: _("""
- variation du deplacement entre deux instants successifs superieure a la valeur de tolerance proposee
+52 : _("""
+ durée de la simulation temporelle après transitoire inférieure à
+ la durée demandée (excitation temporelle trop courte)
 """),
 
-54: _("""
- le calcul de la reponse temporelle n'est pas possible pour le type de structure etudiee.
+53 : _("""
+ variation du déplacement entre deux instants successifs supérieure à
+ la valeur de tolérance proposée
 """),
 
-55: _("""
- le couplage fluide-structure n'a pas ete pris en compte en amont.
+54 : _("""
+ le calcul de la réponse temporelle n'est pas possible pour le type
+ de structure etudiée.
 """),
 
-56: _("""
nb_mode est superieur au nombre de modes du concept  %(k1)s . on impose donc nb_mode =  %(k2)s , i.e. egal au nombre de modes du concept  %(k3)s .
+5: _("""
le couplage fluide-structure n'a pas été pris en compte en amont.
 """),
 
-57: _("""
- nb_mode_diag est different de nb_mode nombre de modes de la base modale . complete l'option base reduite n'est plus disponible.
+56 : _("""
+ NB_MODE est superieur au nombre de modes du concept  %(k1)s .
+ on impose donc NB_MODE =  %(k2)s ,
+ i.e. égal au nombre de modes du concept  %(k3)s .
 """),
 
-58: _("""
- le calcul des parametres du mode no %(k1)s  par l'operateur <calc_flui_stru> n'a pas converge pour la vitesse no %(k2)s . le calcul de la reponse dynamique de la sructure n'est donc pas possible.
+58 : _("""
+ le calcul des paramètres du mode no %(k1)s  par l'opérateur <CALC_FLUI_STRU>
+ n'a pas convergé pour la vitesse no %(k2)s .
+ le calcul de la réponse dynamique de la sructure n'est donc pas possible.
 """),
 
-59: _("""
- pas de mot-cle <nb_mode_flui>. les  %(k1)s  modes du concept  %(k2)s  sont pris en compte pour le calcul du saut de force fluidelastique d'amortissement au cours des phases de choc.
+59 : _("""
+ pas de mot-cle <NB_MODE_FLUI>.
+ les  %(k1)s  modes du concept  %(k2)s  sont pris en compte pour le calcul
+ du saut de force fluidelastique d'amortissement au cours des phases de choc.
 """),
 
-60: _("""
- nb_mode_flui est plus grand que le nombre de modes du concept  %(k1)s .  %(k2)s  modes sont pris en compte pour le calcul du saut de force fluidelastique d'amortissement au cours des phases de choc.
+60 : _("""
+ NB_MODE_FLUI est plus grand que le nombre de modes du concept  %(k1)s .
+ %(k2)s  modes sont pris en compte pour le calcul du saut de force fluidelastique
+ d'amortissement au cours des phases de choc.
 """),
 
-61: _("""
- la matrice ktilda est singuliere.
+61 : _("""
+ la matrice KTILDA est singulière.
 """),
 
-62: _("""
-  instant initial non trouve  valeur prise : 0 
+62 : _("""
+  instant initial non trouvé
+  valeur prise : 0 
 """),
 
-63: _("""
rela_effo_depl par sous-structuration, le mot-cle sous_struc est obligatoire
+63 : _("""
RELA_EFFO_DEPL par sous-structuration, le mot-cle SOUS_STRUC est obligatoire
 """),
 
-64: _("""
argument du mot-cle "sous_struc" n'est pas un nom de sous-structure
+64 : _("""
l'argument du mot-cle "SOUS_STRUC" n'est pas un nom de sous-structure
 """),
 
-65: _("""
+65 : _("""
  type de base inconnu.
 """),
 
-66: _("""
- le taux de souplesse negligee est superieur au seuil.
+66 : _("""
+ le taux de souplesse negligée est supérieur au seuil.
 """),
 
-67: _("""
- algorithme de devoge: developpement "amor_gene" non implante.
+67 : _("""
+ algorithme de DEVOGE: développement "AMOR_GENE" non implanté.
 """),
 
-68: _("""
- algorithme itmi : il faut renseigner obligatoirement l'un ou l'autre des mots cles <amor_reduit>, <amor_gene>
+68 : _("""
+ algorithme ITMI :
+ il faut renseigner obligatoirement l'un ou l'autre des mots cles :
+ AMOR_REDUIT, AMOR_GENE
 """),
 
-69: _("""
- algorithme itmi : il faut renseigner obligatoirement les mots-cles <base_elas_flui> et <nume_vite_flui> pour definir une base modale sous ecoulement
+69 : _("""
+ algorithme ITMI :
+ il faut renseigner obligatoirement les mots-cles
+ BASE_ELAS_FLUI et NUME_VITE_FLUI
+ pour définir une base modale sous écoulement
 """),
 
-70: _("""
- algorithme itmi : il faut renseigner obligatoirement le mot cle <pas> , i.e. donner la valeur du pas de temps initial
+70 : _("""
+ algorithme ITMI :
+ il faut renseigner obligatoirement le mot cle PAS ,
+ i.e. donner la valeur du pas de temps initial
 """),
 
-71: _("""
- algorithme itmi : lorsque l on affecte "oui" a <etat_stat>, il faut renseigner <ts_reg_etab>
+71 : _("""
+ algorithme ITMI : lorsque l'on affecte "OUI" à ETAT_STAT,
+ il faut renseigner TS_REG_ETAB
 """),
 
-72: _("""
- calcul non-lineaire par sous-structuration, option <sous_struc_1>, non implante dans la methode itmi.
+72 : _("""
+ calcul non-linéaire par sous-structuration :
+ option SOUS_STRUC_1 non implantée dans la methode ITMI.
 """),
 
-73: _("""
-  l'option <noeud_2> n'est pas implantee dans la la methode itmi.
+73 : _("""
+  l'option NOEUD_2 n'est pas implantée dans la methode ITMI.
 """),
 
-74: _("""
- calcul non-lineaire par sous-structuration, option <sous_struc_2>, non implante dans la methode itmi.
+74 : _("""
+ calcul non-linéaire par sous-structuration :
+ option SOUS_STRUC_2 non implantée dans la methode ITMI.
 """),
 
-75: _("""
- algorithme de NEWMARK: developpement %(k1)s non implante.
+75 : _("""
+ algorithme de NEWMARK: développement %(k1)s non implanté.
 """),
 
-76: _("""
+76 : _("""
  NUME_ORDRE plus grand que le nombre de modes de la base
 """),
 
-78: _("""
- mauvaise definition de l excitation  mot cle : vect_gene non autorise pour itmi .
-"""),
-
-79: _("""
- ksib non inversible
-"""),
-
-
-
-
-
-
-
-
-82: _("""
- projection nulle sur la boule unite (dvlp)
-"""),
-
-83: _("""
- etat de contact inconnu
-"""),
-
-84: _("""
- champ de geometrie introuvable (dvlp)
-"""),
-
-85: _("""
- echec dans le traitement du contact, augmenter iter_cont_max
-"""),
-
-86: _("""
-  -> Il y a convergence forcée sur boucle contraintes actives lors du traitement
-     du contact.
-  -> Risque & Conseil :
-     La convergence forcée se déclenche lorsque le problème a du mal à converger. Il y a des risques que le problème 
-     soit un peu moins bien traité. Vérifiez bien que vous n'avez pas d'interpénétration entre les mailles. S'il y des 
-     interpénétrations intempestives, tentez de découper plus finement en temps votre problème.
-"""),
-
-87: _("""
-  -> Il y a convergence forcée sur boucle seuil frottement lors du traitement du
-     contact.
-  -> Risque & Conseil :
-     La convergence forcée se déclenche lorsque le problème a du mal à converger. Il y a des risques que le problème 
-     soit un peu moins bien traité. La condition de frottement de Coulomb est peut etre mal prise en compte. Risque de 
-     résultats faux sur les forces d'adhérence. Essayez de découper plus finement en temps votre problème.
-"""),
-
-88: _("""
-  -> Il y a convergence forcée sur boucle de géométrie lors du traitement du
-     contact.
-  -> Risque & Conseil :
-     La convergence forcée se déclenche lorsque le problème a du mal à converger
-     lors de grands glissements relatifs entre deux surfaces de contact.
-     Il y a des risques que le problème soit un peu moins bien traité.
-     Vérifiez bien que vous n'avez pas d'interpénétration entre les mailles.
-      S'il y des interpénétrations intempestives, tentez de découper plus finement en temps votre problème.
-"""),
-
-89: _("""
- element de contact inconnu (dvlp)
-"""),
-
-90: _("""
- nom de l'element inconnu
-"""),
-
-91: _("""
- schema integration non conforme
+78 : _("""
+ mauvaise définition de l'excitation
+ mot clé VECT_GENE non autorisé pour ITMI
 """),
 
-92: _("""
- element de contact non conforme (dvlp)
+79 : _("""
+ KSIB non inversible
 """),
 
-93: _("""
dimension de l'espace incorrecte (dvlp)
+82 : _("""
projection nulle sur la boule unité (dvlp)
 """),
 
-
-
-
-
-
 }
index f4cf7ca6139c9da4736815199e136616d41f0925..5b724abfe0b73cabc3d2c710700bf5be9e6d3fbb 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF algorith6 Messages  DATE 30/05/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF algorith6 Messages  DATE 08/04/2008   AUTEUR MEUNIER S.MEUNIER 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-
-
-8: _("""
- erreur point integration (dvlp)
-"""),
-
-9: _("""
- question inconnue (dvlp)
-"""),
-
-10: _("""
- element de contact incorrect (dvlp)
-"""),
-
-11: _("""
- pas d'elements tardifs ! (dvlp)
-"""),
-
-12: _("""
- la  methode d integration est gauss, le champ vale_cont n est pas cree
-"""),
-
-13: _("""
- dimension du probleme inconnu
+8 : _("""
+ erreur point intégration (dvlp)
 """),
 
-14: _("""
- erreur dans la programmation, cette routine ne doit etre appele que dans le cas de la methode continue du contact
+1: _("""
+ dimension du problème inconnue
 """),
 
-15: _("""
- le vecteur dire_appa est nul !
+1: _("""
+ le fond de fissure d'un maillage 2d ne peut être défini par des mailles
 """),
 
-16: _("""
- le fond de fissure d'un maillage 2d ne peut etre defini par des mailles
+1: _("""
+ les mailles à modifier doivent être de type "SEG3" ou "POI1"
 """),
 
-17: _("""
- les mailles a modifier doivent etre de type "seg3" ou "poi1"
+1: _("""
+ le fond de fissure d'un maillage 2d est défini par un noeud unique
 """),
 
-18: _("""
- le fond de fissure d'un maillage 2d est defini par un noeud unique
-"""),
-
-19: _("""
+19 : _("""
   -> Code Aster a détecté des mailles de type différent lors de la
      correspondance entre les maillages des deux modèles (mesuré/numérique).
      Ce cas n'est pas prévu, Code Aster initialise la correspondance au noeud
      le plus proche.
   -> Risque & Conseil :
      ???
-
 """),
 
-20: _("""
- nb noeuds mesure superieur nb noeuds calcul
+20 : _("""
+ nombre noeuds mesuré supérieur au nombre de noeuds calculé
 """),
 
-21: _("""
- noeu_calcul non trouve
+21 : _("""
+ NOEU_CALCUL non trouvé
 """),
 
-22: _("""
- noeu_mesure non trouve
+22 : _("""
+ NOEU_MESURE non trouvé
 """),
 
-23: _("""
- nombre de noeuds different
+23 : _("""
+ nombre de noeuds différent
 """),
 
-24: _("""
- traitement manuel correspondance : un couple a la fois
+24 : _("""
+ traitement manuel correspondance : un couple à la fois
 """),
 
-25: _("""
echec projection
+25 : _("""
échec projection
 """),
 
-26: _("""
+26 : _("""
  norme vecteur dir. nulle
 """),
 
-27: _("""
- le nombre des coefficients de ponderation est superieur au nombre de vecteurs de base
-"""),
-
-28: _("""
- le nombre des coefficients de ponderation est inferieur au nombre de vecteurs de base , le dernier coefficient est affecte aux autres
-"""),
-
-29: _("""
- le nombre des fonctions de ponderation est superieur au nombre de vecteurs de base
-"""),
-
-30: _("""
- le nombre des fonctions de ponderation est inferieur au nombre de vecteurs de base la derniere fonction est affectee aux autres
-"""),
-
-31: _("""
- le nombre d abscisses d une des fonctions d interpolation n est pas identique au nombre d abscisses du premier point de mesure experimental 
-"""),
-
-32: _("""
-  le critere d egalite de la liste d abscisses du premier  dataset 58 et de la liste d abscisses d une des fonctions  de ponderation n est pas verifie 
-"""),
-
-33: _("""
- incompatibilite nom_para et donnees mesurees 
+27 : _("""
+ le nombre des coefficients de pondération est supérieur
+ au nombre de vecteurs de base
 """),
 
-34: _("""
- erreur
+28 : _("""
+ le nombre des coefficients de pondération est inférieur
+ au nombre de vecteurs de base
+ le dernier coefficient est affecté aux autres
 """),
 
-35: _("""
- surcharge d'un resultat sans definir d'etat initial : on prend un etat initial nul
+29 : _("""
+ le nombre des fonctions de pondération est supérieur
+ au nombre de vecteurs de base
 """),
 
-
-
-
-
-
-
-
-37: _("""
- pas de numero d'ordre pour le concept  %(k1)s 
+30 : _("""
+ le nombre des fonctions de pondération est inférieur
+ au nombre de vecteurs de base
+ la dernière fonction est affectée aux autres
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-41: _("""
- le champ de depl_r (ou derive) n'est pas trouve dans le concept  %(k1)s 
+31 : _("""
+ le nombre dabscisses d'une des fonctions d'interpolation
+ n'est pas identique au nombre d'abscisses du premier point
+ de mesure expérimental 
 """),
 
-42: _("""
- le champ de sief_r (ou derive) n'est pas trouve dans le concept  %(k1)s 
+32 : _("""
+  le critère d'égalite de la liste d'abscisses du premier dataset 58
+  et de la liste d'abscisses d une des fonctions de pondération
+  n'est pas verifié 
 """),
 
-43: _("""
- le champ de vite n'est pas trouve dans le concept  %(k1)s  on cree un champ de vitesses nulles
+33 : _("""
+ incompatibilité NOM_PARA et données mesurées 
 """),
 
-44: _("""
- le champ d'acce n'est pas trouve dans le concept  %(k1)s  on calcule un champ d'accelerations, ce qui est possible puisque les vitesses sont nulles
+37 : _("""
+ pas de numéro d'ordre pour le concept  %(k1)s 
 """),
 
-45: _("""
- le champ d'acce n'est pas trouve dans le concept  %(k1)s  on ne peut pas, pour l'instant, calculer le champ des accelerations car les vitesses ne sont pas nulles
+52 : _("""
+ itérations cycliques :
+ changement de configuration ou variation trop importante
+ du deplacement physique à l'issue de la dernière itération
 """),
 
-46: _("""
- le champ de vari_r (ou derive) n'est pas trouve dans le concept  %(k1)s 
+53 : _("""
+ pas de convergence de l'algorithme de NEWTON :
+ - en  %(k1)s  iterations
+ - à l'instant  %(k2)s
+ il faut réduire la rigidité normale, ou le jeu.
 """),
 
-47: _("""
- le champ de vari_non_local (ou derive) n'est pas trouve dansle concept %(k1)s 
-"""),
-
-48: _("""
- le champ de lanl_elga n'est pas trouve dans le concept  %(k1)s 
-"""),
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-52: _("""
- iterations cycliques : changement de configuration ou variation trop importante du deplacement physique a l'issue de la derniere iteration
-"""),
-
-53: _("""
- pas de convergence de l'algorithme de newton en  %(k1)s  iterations a l'instant  %(k2)s . il faut reduire la rigidite normale, ou le jeu.
-"""),
-
-54: _("""
+54 : _("""
  dvp : trop de noeuds
 """),
 
-55: _("""
theta = 1 ou 0.5 
+55 : _("""
THETA = 1 ou 0.5 
 """),
 
-56: _("""
- fluence commandee et flux_phi different de 1
+56 : _("""
+ fluence commandée et FLUX_PHI différent de 1
 """),
 
-57: _("""
- fluence decroissante (phi<0)
+57 : _("""
+ fluence décroissante (PHI<0)
 """),
 
-58: _("""
- relation asse_combu 1d sans loi de fluence appropriee
+58 : _("""
+ relation ASSE_COMBU 1d sans loi de fluence appropriée
 """),
 
-59: _("""
+59 : _("""
  erreur dir. grandissement
 """),
 
-60: _("""
- cam_clay : la porosite donnee dans cam_clay doit etre la meme que dans thm_init
-"""),
-
-61: _("""
- barcelone : il faut que la contrainte hydrostatique soit superieure a la  pression de cohesion -kc*pc 
+60 : _("""
+ CAM_CLAY :
+ la porosité donnee dans CAM_CLAY doit etre la meme que dans THM_INIT
 """),
 
-62: _("""
- iter_inte_maxi insuffisant lors du calcul de la borne
+61 : _("""
+ BARCELONE :
+ il faut que la contrainte hydrostatique soit supérieure
+ à la  pression de cohesion -KC*PC 
 """),
 
-63: _("""
- cam_clay : le cas des contraintes planes n est pas traite pour ce modele.
+6: _("""
+ ITER_INTE_MAXI insuffisant lors du calcul de la borne
 """),
 
-64: _("""
- cam_clay : il faut que la contrainte hydrostatique soit superieure a la  pression initiale pa 
+63 : _("""
+ CAM_CLAY :
+ le cas des contraintes planes n'est pas traité pour ce modèle.
 """),
 
-65: _("""
- type de selection inconnue
+64 : _("""
+ CAM_CLAY :
+ il faut que la contrainte hydrostatique soit supérieure
+ a la pression initiale PA 
 """),
 
-66: _("""
- pour l'instant on ne traite pas le cas des contraintes planes dans le modele de chaboche a une variable cinematique.
+66 : _("""
+ pour l'instant, on ne traite pas le cas des contraintes planes
+ dans le modele de CHABOCHE à une variable cinématique.
 """),
 
-67: _("""
n doit etre strictementpositif.
+67 : _("""
N doit etre strictementpositif.
 """),
 
-68: _("""
- parametre un_sur_k egal a zero cas incompatible avec visc_cinx_chab
+68 : _("""
+ paramètre UN_SUR_K égal à zéro cas incompatible avec VISC_CINX_CHAB
 """),
 
-69: _("""
- loi visc_cinx_chab on doit obligatoirement avoir un_sur_m = zero
+69 : _("""
+ loi VISC_CINX_CHAB
+ on doit obligatoirement avoir UN_SUR_M = zéro
 """),
 
-70: _("""
- macro_element statique et feti incompatibles !
+7: _("""
+ F reste toujours négative.
 """),
 
-71: _("""
- chargement onde plane et feti incompatibles !
+7: _("""
+ F reste toujours positive.
 """),
 
-72: _("""
- forces fluides sur les grappes et feti incompatibles !
-"""),
-
-73: _("""
- forces d'inertie et feti incompatibles !
-"""),
-
-74: _("""
- forces explicites et feti incompatibles !
-"""),
-
-75: _("""
- forces d'inertie derivees et feti incompatibles !
-"""),
-
-76: _("""
- mode  %(k1)s  non reconnu (dvlp)
-"""),
-
-77: _("""
- coeff vic_cin1_chab tous nuls ?
-"""),
-
-78: _("""
- f reste toujours negative.
-"""),
-
-79: _("""
- f reste toujours positive.
-"""),
-
-80: _("""
+80 : _("""
  pb interp vari entiere ?? 
 """),
 
-81: _("""
- utiliser algo_1d="deborst" sous comp_incr pour le comportement  %(k1)s 
-"""),
-
-82: _("""
- integration explicite du comportement non programmee
+81 : _("""
+ utiliser ALGO_1D="DEBORST" sous COMP_INCR pour le comportement  %(k1)s 
 """),
 
-83: _("""
- rousselier à gradient sans simo miehe non programmé : utilisez la modélisation **_INCO
+8: _("""
+ integration explicite du comportement non programmée
 """),
 
-84: _("""
- loi non traitee pour les elemjoin : %(k1)s 
+84 : _("""
+ loi non traitée pour les éléments de joint : %(k1)s 
 """),
 
-85: _("""
- integration explicite impossible
+85 : _("""
+ intégration explicite impossible
 """),
 
-86: _("""
+86 : _("""
  erreur de programmation 1
 """),
 
-87: _("""
+87 : _("""
  loi de comportement inexistante
 """),
 
-88: _("""
- erreur dans le type de comportment
+88 : _("""
+ erreur dans le type de comportement
 """),
 
-89: _("""
+89 : _("""
  erreur de programmation 2
 """),
 
-90: _("""
- pas de c_plan pour vmis_cineutiliser c_plan_deborst
+90 : _("""
+ pas de C_PLAN pour VMIS_CINE
+ utiliser C_PLAN_DEBORST
 """),
 
-91: _("""
- pas de c_plan pour vmis_cin1utiliser c_plan_deborst
+91 : _("""
+ pas de c_plan pour VMIS_CIN1
+ utiliser C_PLAN_DEBORST
 """),
 
-92: _("""
+92 : _("""
  pas de contraintes planes
 """),
 
-93: _("""
- integration du comportement           poly_cfc uniquement explicite
+93 : _("""
+ integration du comportement POLY_CFC uniquement explicite
 """),
 
-94: _("""
- pas de c_plan pour bazant_fd  utiliser c_plan_deborst
+9: _("""
+ intégration implicite du comportement non programmée
 """),
 
-95: _("""
- integration implicite du comportement non programmee
+9: _("""
+ GREEN deformation required for ELAS_HYPER material
 """),
 
-96: _("""
- green deformation required for elas_hyper material
-"""),
-
-
-
-
 }
index 2db979e25eb5619adf1010d6e3637f33d8f225d6..2577a10fc7e3f36254202ff5cd1270c9cb71d814 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF algorith7 Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF algorith7 Messages  DATE 19/05/2008   AUTEUR ABBAS M.ABBAS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- couplage fluage/fissuration : il faut definir deux lois de comportement exactement. 
+1 : _("""
+ couplage fluage/fissuration :
+ il faut définir deux lois de comportement exactement. 
 """),
 
-2: _("""
- granger et endo_isot_betonou mazars non encore developpe
+2 : _("""
+ GRANGER et ENDO_ISOT_BETON ou MAZARS non encore développé
 """),
 
-3: _("""
- loi de comportement non autorisee dans le couplage fluage/fissuration
+3 : _("""
+ loi de comportement non autorisée dans le couplage fluage/fissuration
 """),
 
-4: _("""
- umlv_fp et mazars non encore developpe
+4 : _("""
+ UMLV_FP et MAZARS non encore developpé
 """),
 
-5: _("""
- pas de c_plan pour eib utiliser c_plan_deborst
+5 : _("""
+ pas de C_PLAN pour ENDO_ISOT_BETON
+ utiliser C_PLAN_DEBORST
 """),
 
-6: _("""
+6 : _("""
  loi de fluage non autorisee dans le couplage fluage/fissuration
 """),
 
-7: _("""
- pas d'orthotropie non line
+7 : _("""
+ pas d'orthotropie non linéaire
 """),
 
-8: _("""
- loi de comportement hyper-elastique non prevue
+8 : _("""
+ loi de comportement hyper-élastique non prevue
 """),
 
-9: _("""
c_plan methode de borstet simo_miehe incompatibles
+9 : _("""
C_PLAN méthode DEBORST et SIMO_MIEHE incompatibles
 """),
 
-10: _("""
comp1det simo_miehe incompatibles
+10 : _("""
COMP1D et SIMO_MIEHE incompatibles
 """),
 
-11: _("""
- couplage fluage/fissuration : la premiere loi doit etre une loi de fluage de type granger_fp ou granger_fp_v.
+11 : _("""
+ couplage fluage/fissuration :
+ la première loi doit etre une loi de fluage de type GRANGER_FP ou GRANGER_FP_V.
 """),
 
-12: _("""
- couplage fluage/fissuration : nombre total de variables internes incoherent <--> erreur de programmation. 
+12 : _("""
+ couplage fluage/fissuration :
+ nombre total de variables internes incohérent <--> erreur de programmation. 
 """),
 
-13: _("""
- f(0)=  %(k1)s  > 0 
+1: _("""
+  le concept EVOL_CHAR :  %(k1)s  n'en est pas un !
 """),
 
-
-
-
-
-
-15: _("""
-  le concept evol_char :  %(k1)s  n'en est pas un !
-"""),
-
-16: _("""
-  le concept evol_char :  %(k1)s  ne contient aucun champ de type evol_char.
-"""),
-
-17: _("""
-  on ne trouve pas le resultat derive associe a  %(k1)s  et  %(k2)s 
-"""),
-
-18: _("""
-  le concept evol_ther :  %(k1)s  ne contient aucun champ.
+16 : _("""
+  le concept EVOL_CHAR :  %(k1)s  ne contient aucun champ de type EVOL_CHAR.
 """),
 
-19: _("""
erreur de type sur la charge thermique  %(k1)s 
+20 : _("""
le champ de déplacement DIDI n'est pas trouvé dans le concept  %(k1)s 
 """),
 
-20: _("""
- le champ de deplacement didi n'est pas trouve dans le concept  %(k1)s 
+2: _("""
+ la charge  %(k1)s  n'est pas mécanique
 """),
 
-21: _("""
-  -> Critère de convergence est lache !
-  -> Risque & Conseil : La valeur de RESI_GLOB_RELA est supérieure a 10-4.
-     Cela peut nuire à la qualité de la solution. Vous ne vérifiez pas l'équilibre de manière rigoureuse.
-
-
-
-"""),
-
-22: _("""
- la charge  %(k1)s  n'est pas mecanique
-"""),
-
-23: _("""
+23 : _("""
  la charge  %(k1)s  ne peut etre suiveuse
 """),
 
-24: _("""
- la charge  %(k1)s  ne peut etre differentielle
+24 : _("""
+ la charge  %(k1)s  ne peut etre différentielle
 """),
 
-25: _("""
+25 : _("""
  il y a plusieurs charges thermiques 
 """),
 
-26: _("""
- le modele contient des elements de structure il faut renseigner le mot-cle cara_elem pour les options forc_noda et reac_noda.
+2: _("""
+ la charge  %(k1)s  ne peut etre pilotée
 """),
 
-27: _("""
- la charge  %(k1)s  ne peut etre pilotee
-"""),
-
-28: _("""
+28 : _("""
  on ne peut piloter une charge fonction du temps
 """),
 
-29: _("""
- la charge thermique  %(k1)s  ne peut etre pilotee
+29 : _("""
+ la charge thermique  %(k1)s  ne peut etre pilotée
 """),
 
-30: _("""
- il y a plusieurs charges sechage 
+30 : _("""
+ il y a plusieurs charges de séchage 
 """),
 
-31: _("""
- la charge de sechage  %(k1)s  ne peut etre pilotee
+31 : _("""
+ la charge de séchage  %(k1)s  ne peut etre pilotée
 """),
 
-32: _("""
- il y a plusieurs charges defo.anelastiques 
+32 : _("""
+ il y a plusieurs charges de déformations anélastiques 
 """),
 
-33: _("""
- la charge defo.anelastiques  %(k1)s  ne peut etre pilotee
+33 : _("""
+ la charge de déformations anélastiques  %(k1)s  ne peut etre pilotée
 """),
 
-34: _("""
- la charge de type evol_char  %(k1)s  ne peut etre pilotee
+34 : _("""
+ la charge de type EVOL_CHAR  %(k1)s  ne peut etre pilotée
 """),
 
-35: _("""
- une meme charge ne peut contenir a la fois le mot-cle "liaison_unil" et le mot-cle "contact"
+35 : _("""
+ une meme charge ne peut contenir à la fois
+ le mot-cle "LIAISON_UNIL" et le mot-cle "CONTACT"
 """),
 
-36: _("""
- la charge de type liaison_unilaterale  %(k1)s  ne peut etre pilotee
+36 : _("""
+ la charge de type liaison_unilatérale  %(k1)s  ne peut etre pilotée
 """),
 
-37: _("""
- la charge de type contact  %(k1)s  ne peut etre pilotee
+37 : _("""
+ la charge de type contact  %(k1)s  ne peut etre pilotée
 """),
 
-38: _("""
- la charge  %(k1)s  ne peut pas utiliser de fonction multiplicative fonc_mult car elle est pilotee
+38 : _("""
+ la charge  %(k1)s  ne peut pas utiliser de fonction multiplicative FONC_MULT
+ car elle est pilotée
 """),
 
-39: _("""
- on ne peut pas faire de pilotage en l'absence de forces de type "fixe_pilo"
+39 : _("""
+ on ne peut pas faire de pilotage en l'absence de forces de type "FIXE_PILO"
 """),
 
-40: _("""
+40 : _("""
  il ne peut pas y avoir de contact (mot-cle "contact") dans plus d'une charge
 """),
 
-41: _("""
- il y a au moins une charge non mecanique : verifier le fichier de commandes
-"""),
-
-42: _("""
-  reac_incr negatif
-"""),
-
-43: _("""
-  reac_iter negatif
-"""),
-
-44: _("""
-  reac_iter_elas negatif
-"""),
-
-45: _("""
- il faut preciser un concept evol_noli en prediction 'depl_calcule'
-"""),
-
-46: _("""
-  -> La définition des paramètres rho_min et rho_excl est contradictoire.
-     On choisit de prendre rho_min à rho_excl.
-  -> Risque & Conseil :
-     RHO_MIN ne doit pas etre compris entre -RHO_EXCL et RHO_EXCL
-
+41 : _("""
+ il y a au moins une charge non mécanique : vérifier le fichier de commandes
 """),
 
-47: _("""
- les valeurs des parametres rho_max et rho_excl sont contradictoires, on prend rho_max a -rho_excl
+4: _("""
+ ETA_PILO_MAX doit etre inférieur a ETA_PILO_R_MAX
 """),
 
-48: _("""
- eta_pilo_max doit etre inferieur a eta_pilo_r_max
+4: _("""
+ ETA_PILO_MIN doit etre supérieur à ETA_PILO_R_MIN
 """),
 
-49: _("""
- eta_pilo_min doit etre superieur a eta_pilo_r_min
+50 : _("""
+ il faut au plus 1 noeud pour le pilotage DDL_IMPO
 """),
 
-50: _("""
- il faut au plus 1 noeud pour le pilotage ddl_impo
+5: _("""
+ il faut au plus 1 groupe de noeud pour le pilotage DDL_IMPO
 """),
 
-51: _("""
- il faut au plus 1 groupe de noeud pour le pilotage ddl_impo
+5: _("""
+ il faut au plus un noeud dans le groupe pour le pilotage DDL_IMPO
 """),
 
-52: _("""
- il faut au plus un noeud dans le groupe pour le pilotage ddl_impo
+5: _("""
+ il faut préciser un groupe de noeuds dans la méthode LONG_ARC
 """),
 
-53: _("""
- il faut preciser un groupe de noeuds dans la methode long_arc
-"""),
-
-54: _("""
+54 : _("""
  groupe de noeud  %(k1)s  vide
 """),
 
-55: _("""
- liste de composantes vide pour la methode long_arc
+55 : _("""
+ liste de composantes vide pour la methode LONG_ARC
 """),
 
-56: _("""
- liste relation_kit vide
+56 : _("""
+ liste RELATION_KIT vide
 """),
 
-57: _("""
- liste relation_kit trop longue
+57 : _("""
+ liste RELATION_KIT trop longue
 """),
 
-58: _("""
- 1d ou c_plan ?
+58 : _("""
+ 1D ou C_PLAN ?
 """),
 
-59: _("""
- liste relation_kit trop
+59 : _("""
+ liste RELATION_KIT trop
+### trop quoi ?
 """),
 
-60: _("""
+60 : _("""
   -> Le critère de convergence pour intégrer le comportement 'RESI_INTE_RELA'
      est lache (très supérieur à la valeur par défaut).
   -> Risque & Conseil :
      Cela peut nuire à la qualité de la solution et à la convergence.
-
-
 """),
 
-61: _("""
+61 : _("""
  option  %(k1)s  non traitee
 """),
 
-62: _("""
- matrice non inversible
-"""),
-
-63: _("""
- pas existance de solution                                                     pour le saut
+63 : _("""
+ pas existence de solution pour le saut
 """),
 
-64: _("""
- existance d'un element a                                         discontinuite trop grand                                          non unicite du saut
+64 : _("""
+ existence d'un élément à discontinuité trop grand
+ non unicité du saut
 """),
 
-65: _("""
- non convergence du newton                                         pour le calcul du saut no1
+65 : _("""
+ non convergence du NEWTON pour le calcul du saut numéro 1
 """),
 
-66: _("""
- non convergence du newton                                         pour le calcul du saut no2
+66 : _("""
+ non convergence du NEWTON pour le calcul du saut numéro 2
 """),
 
-67: _("""
- non convergence du newton                                         pour le calcul du saut no3
+67 : _("""
+ non convergence du NEWTON pour le calcul du saut numéro 3
 """),
 
-68: _("""
+68 : _("""
  erreur dans le calcul du saut
 """),
 
-69: _("""
+69 : _("""
  loi %(k1)s  non implantee pour les elemdisc 
 """),
 
-70: _("""
- elements isoparametriques 2d non disponibles en grandes rotations
-"""),
-
-71: _("""
- elements isoparametriques 3d non disponibles en grandes rotations
-"""),
-
-72: _("""
- seule une loi de comportement elastique isotrope est valide pour le calcul de dg !
+70 : _("""
+ elements isoparamétriques 2D non disponibles en grandes rotations
 """),
 
-73: _("""
- le tenseur epseq=0 on a donc une derivee depseq tres grande !
+7: _("""
+ elements isoparamétriques 3D non disponibles en grandes rotations
 """),
 
-74: _("""
-  valeur de d_sigm_epsi non trouvee
+7: _("""
+ le tenseur EPSEQ vaut  0 on a donc une derivée lagrangienne DEPSEQ très grande !
 """),
 
-75: _("""
-  valeur de sy non trouvee
+7: _("""
+  valeur de D_SIGM_EPSI non trouvée
 """),
 
-76: _("""
dvp : non implante
+7: _("""
 valeur de SY non trouvée
 """),
 
-
-
-
-
-
-
-
-78: _("""
- feti et frottement incompatibles !
-"""),
-
-79: _("""
- n doit etre > 0
-"""),
-
-80: _("""
- phi_zero < ou = a zero
-"""),
-
-81: _("""
- 1/k et l doivent etre >=0
-"""),
-
-82: _("""
- phi/kphi0+l=0 et beta<0
-"""),
-
-83: _("""
- f(0) > 0 : erreur de conception
-"""),
-
-84: _("""
- calcul flambement non lineaire hpp
-"""),
-
-85: _("""
- flambement non lineaire green
+76 : _("""
+ développement non implanté
 """),
 
-86: _("""
- fonctionnalite modifiee (dvlp)
+79 : _("""
+ loi de comportement avec irradiation, le paramètre N doit etre supérieur à 0
 """),
 
-87: _("""
-  -> Pour le traitement du contact avec X-FEM, le solveur mumps est vivement
-     recommandé.
-  -> Risque & Conseil :
-     Pour XFEM, la matrice produite est parfois non définie positive. Seul un solveur qui pivote peut alors résoudre 
-     le problème. Il est donc préférable d'utiliser MUMPS (mot-clef SOLVEUR) pour ne pas finir en erreur du type 
-     "PIVOT NUL" avec le solveur MULT_FRONT ou LDLT.
+80 : _("""
+ loi de comportement avec irradiation, le paramètre PHI_ZERO doit etre supérieur à 0
 """),
 
-
-
-
-
-
-
-
-89: _("""
- contact et rech. lin. peuvent poser des problemes de convergence
+81 : _("""
+ loi de comportement avec irradiation, le paramètre phi/K.PHI_ZERO+L doit etre supérieur ou égal à 0
 """),
 
-90: _("""
- la combinaison: contact-frottement et solveur gcpc n'est pas disponible.
+82 : _("""
+ loi de comportement avec irradiation, le paramètre phi/K.PHI_ZERO+L vaut 0. Dans ces conditions le paramètre BETA doit être positif ou nul
 """),
 
-91: _("""
- contact continue et rech. lin. sont incompatibles
+9: _("""
+ comportement ZMAT obligatoire
 """),
 
-92: _("""
- contact continue et pilotage sont incompatibles
+98 : _("""
+ il faut déclarer FONC_DESORP sous ELAS_FO pour le fluage de dessication
+ intrinseque avec SECH comme paramètre
 """),
 
-93: _("""
- la combinaison: methode continue en contact et solveur gcpc n'est pas disponible.
-"""),
-
-94: _("""
- liaison_unilater et pilotage sont des fonctionnalites incompatibles
-"""),
-
-95: _("""
- liaison_unilater et rech. lin. peuvent poser des problemes de convergence
-"""),
-
-96: _("""
- comportement zmat obligatoire
-"""),
-
-97: _("""
- il faut declarer lam_visc                           pour le fluage de dessication intrinseque
-"""),
-
-98: _("""
- il faut declarer fonc_desorp           sous elas_fo pour le fluage de dessication intrinseque            avec sech comme parametre
-"""),
-
-99: _("""
- mauvais dimensionnementde geomm et geomp
-"""),
 }
index 2b914c7bbfaaf360b4bc2a940f4ef72438e618a7..499dc1a8ebcb3d673b3673a45e2f08a122ebb8ca 100644 (file)
-#@ MODIF algorith8 Messages  DATE 16/05/2007   AUTEUR BOYERE E.BOYERE 
+#@ MODIF algorith8 Messages  DATE 18/03/2008   AUTEUR CNGUYEN C.NGUYEN 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  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.
+# COPYRIGHT (C) 1991 - 2007  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.        
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- contraintes planes en grandes deformations non implantees
+1 : _("""
+ contraintes planes en grandes déformations non implantées
 """),
 
-2: _("""
- caracteristique fluage                             incomplet
+2 : _("""
+ caractéristique fluage incomplet
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-6: _("""
- message d'erreur inconnu (dvlp)
-"""),
-
-7: _("""
- incoherence de taille (dvlp)
-"""),
-
-8: _("""
+8 : _("""
  format de colonne inconnu (dvlp)
 """),
 
-
-
-12: _("""
- f reste toujours negative
-"""),
-
-13: _("""
- f  reste toujours positive
+12 : _("""
+ F reste toujours négative
 """),
 
-14: _("""
signe de sigma indetermine
+1: _("""
F  reste toujours positive
 """),
 
-15: _("""
- changement de signe de sigma
+1: _("""
+ signe de SIGMA indeterminé
 """),
 
-16: _("""
- f=0 : pas converge
+1: _("""
+ changement de signe de SIGMA
 """),
 
-17: _("""
- dvp : non coherent
+1: _("""
+ F=0 : pas converge
 """),
 
-18: _("""
- phase inconnue (dvlp)
-"""),
-
-19: _("""
+19 : _("""
  trop d'amortissements modaux
 """),
 
-20: _("""
+20 : _("""
  La définition du repère d'orthotropie a été mal faite.
  Utilisez soit ANGL_REP  soit ANGL_AXE de la commande AFFE_CARA_ELEM mot clé facteur MASSIF
 """),
 
-22: _("""
- type d element incompatible avec une loi elastique anisotrope
+22 : _("""
+ type d'élément incompatible avec une loi élastique anisotrope
 """),
 
-23: _("""
- denominateur nul dans le calcul de eta_pilotage
+23 : _("""
+ dénominateur nul dans le calcul de ETA_PILOTAGE
 """),
 
-24: _("""
- cisaillement suiveur non implante
+24 : _("""
+ cisaillement suiveur non implanté
 """),
 
-25: _("""
- pression imposee sur l'axe des coordonnees cylindriques
+25 : _("""
+ pression imposée sur l'axe des coordonnées cylindriques
 """),
 
-26: _("""
+26 : _("""
  mode non defini
 """),
 
-27: _("""
- lecture du champ depl_calcule impossible
-"""),
-
-28: _("""
- prediction par extrapolation impossible : pas de temps nul
-"""),
-
-29: _("""
- iter_line_maxi doit etre inferieur a 1000
-"""),
-
-30: _("""
- mauvaise estimation de f
+28 : _("""
+ prédiction par extrapolation impossible : pas de temps nul
 """),
 
-31: _("""
- borne superieure pmax incorrecte
+29 : _("""
+ ITER_LINE_MAXI doit etre inférieur à 1000
 """),
 
-32: _("""
- viscosite n egale a zero
+3: _("""
+ borne superieure PMAX incorrecte
 """),
 
-33: _("""
viscosite un_sur_k egale a zero
+3: _("""
la viscosité N doit être différente de zéro
 """),
 
-34: _("""
- g=0 : pas converge
+3: _("""
+ la viscosité UN_SUR_K doit être différente de zéro
 """),
 
-35: _("""
- incompatibilite entre la loi de couplage  %(k1)s  et la modelisation choisi  %(k2)s
+35 : _("""
+ incompatibilité entre la loi de couplage  %(k1)s  et la modélisation choisie  %(k2)s
 """),
 
-36: _("""
+36 : _("""
  il y a deja une loi de couplage
 """),
 
-37: _("""
+37 : _("""
  il y a deja une loi hydraulique
 """),
 
-38: _("""
- il y a deja une loi de mecanique
+38 : _("""
+ il y a deja une loi de mécanique
 """),
 
-39: _("""
+39 : _("""
  il n y a pas de loi de couplage
 """),
 
-40: _("""
+40 : _("""
  il n y a pas de loi hydraulique
 """),
 
-41: _("""
- il n y a pas de loi de mecanique
-"""),
-
-42: _("""
- la loi de couplage est incorrecte pour une modelisation hm
-"""),
-
-43: _("""
- incompatibilite des comportements mecanique et hydraulique
+41 : _("""
+ il n y a pas de loi de mécanique
 """),
 
-44: _("""
- loi de mecanique incompatible avec une modelisation hm
+4: _("""
+ la loi de couplage est incorrecte pour une modélisation HM
 """),
 
-45: _("""
- la loi de couplage est incorrecte pour une modelisation hhm
+4: _("""
+ incompatibilite des comportements mécanique et hydraulique
 """),
 
-46: _("""
- loi de mecanique incompatible avec une loi hhm
+4: _("""
+ loi de mécanique incompatible avec une modelisation HM
 """),
 
-47: _("""
- loi de mecanique incompatible avec une modelisation hhm
+4: _("""
+ la loi de couplage est incorrecte pour une modélisation HHM
 """),
 
-48: _("""
- il y a une loi de mecanique dans la relation thh
+4: _("""
+ loi de mécanique incompatible avec une modélisation HHM
 """),
 
-49: _("""
- la loi de couplage est incorrecte pour une modelisation thh
+4: _("""
+ il y a une loi de mécanique dans la relation THH
 """),
 
-50: _("""
- loi de mecanique incompatible avec une loi thh
+49 : _("""
+ la loi de couplage est incorrecte pour une modélisation THH
 """),
 
-51: _("""
- il y a une loi de mecanique dans la relation thv
+5: _("""
+ loi de mécanique incompatible avec une loi THH
 """),
 
-52: _("""
- la loi de couplage est incorrecte pour une modelisation thv
+5: _("""
+ il y a une loi de mecanique dans la relation THV
 """),
 
-53: _("""
- loi de mecanique incompatible avec une loi thv
+5: _("""
+ la loi de couplage est incorrecte pour une modélisation THV
 """),
 
-54: _("""
- la loi de couplage est incorrecte pour une modelisation thm
+5: _("""
+ loi de mécanique incompatible avec une loi THV
 """),
 
-55: _("""
- loi de mecanique incompatible avec une modelisation thm
+5: _("""
+ la loi de couplage est incorrecte pour une modélisation THM
 """),
 
-56: _("""
- la loi de couplage est incorrecte pour une modelisation thhm
+5: _("""
+ loi de mécanique incompatible avec une modélisation THM
 """),
 
-57: _("""
Loi de mecanique incompatible avec une modelisation THHM
+5: _("""
la loi de couplage est incorrecte pour une modélisation THHM
 """),
 
-58: _("""
- Methode non implantee
+5: _("""
+ Loi de mécanique incompatible avec une modélisation THHM
 """),
 
-59: _("""
- Champ 'IN' inexistant
+5: _("""
+ Méthode de condition unilatéral non implantée
 """),
 
-
-
-
-
-
-61: _("""
+61 : _("""
  Il manque le séchage de référence (AFFE_MATERIAU/AFFE_VARC/VALE_REF)
 """),
 
-
-
-
-65: _("""
- echec loi de comp dans zerofo
+65 : _("""
+ echec loi de comportement dans ZEROFO
 """),
 
-66: _("""
-  convergence atteinte surapproximation lineaire tangente de l'evolution plastique- risque d'imprecision
+66 : _("""
+  convergence atteinte sur approximation linéaire tangente de l'évolution plastique
+  risque d'imprecision
 """),
 
-67: _("""
+67 : _("""
   endommagement maximal atteint au cours des resolutions internes
 """),
 
-68: _("""
-  erreur recuperation parametres materiau
-"""),
-
-69: _("""
-  type de matrice demande non disponible
-"""),
-
-70: _("""
-  erreur dans nmvecd
-"""),
-
-71: _("""
- valo >0
-"""),
-
-72: _("""
- dr negatif
-"""),
-
-73: _("""
- pb2 seq
-"""),
-
-74: _("""
- pb4 seq
-"""),
-
-75: _("""
- pb1 seq
+77 : _("""
+ le nombre de composantes dans le champ de vent est incorrect. on doit avoir : DX, DY, DZ
 """),
 
-76: _("""
- pb3 seq
+80 : _("""
+Pour le comportement %(k3)s, matériau %(k4)s. Incohérence dans les données matériau.
+   %(k1)s est >= %(k2)s cela n'est pas possible.
+   valeur de %(k1)s : %(r1)E
+   valeur de %(k2)s : %(r2)E
 """),
 
-77: _("""
- le nombre de composante dans le champ de vent est incorrect. on doit avoir : dx, dy, dz
+81 : _("""
+L'association comportement vs matériau est incorrecte.
+Les combinaisons possibles sont :
+   comportement %(k1)s et matériau %(k2)s et %(k5)s
+   comportement %(k3)s et matériau %(k4)s et %(k5)s
 """),
 
-78: _("""
- f(0)=0
-"""),
-
-
-
-
-
-
-
-
-80: _("""
- sy >= su. impossible.
-"""),
-
-81: _("""
- ep >= e. impossible.
-"""),
-
-82: _("""
- incoherence dans les donnees materiau : mey > mpy impossible.
-"""),
-
-83: _("""
- incoherence dans les donnees materiau : mez > mpz impossible.
-"""),
-
-84: _("""
+84 : _("""
  comportement de fluage sous irradiation inconnu
 """),
 
-85: _("""
- definition multiple du comportement pour un element de poutre
+85 : _("""
+ definition multiple du comportement pour un élément de poutre
 """),
 
-86: _("""
- porosite strictement nulle( cas non traite)
+86 : _("""
+ porosité strictement nulle( cas non traité)
 """),
 
-87: _("""
- l'increment de temps vaut zero, verifier votre decoupage
+87 : _("""
+ l'incrément de temps vaut zéro, vérifiez votre découpage
 """),
 
-88: _("""
- fluence decroissante (flux<0)
+88 : _("""
+ fluence décroissante (flux<0)
 """),
 
-89: _("""
- le parametre a doit etre >=0
+89 : _("""
+ le parametre A doit etre >=0
 """),
 
-90: _("""
- la loi lmarc_irran'est compatible qu'avec une modelisation poutre
+90 : _("""
+ la loi LMARC_IRRA n'est compatible qu'avec une modélisation poutre
 """),
 
-91: _("""
- stop, rigi_meca_tang non                         disponible
+91 : _("""
+ stop, RIGI_MECA_TANG non disponible
 """),
 
-92: _("""
- la maille doit etre de type tetra10,penta15,hexa20,quad8 ou tria6. or la maille est de type :  %(k1)s .
+92 : _("""
+ la maille doit etre de type TETRA10,PENTA15,HEXA20,QUAD8 ou TRIA6.
+ or la maille est de type :  %(k1)s .
 """),
 
-93: _("""
- une maille maitre est de longueur nulle
+9: _("""
+ le champ issu du concept %(k1)s n'est pas calculé à l'instant %(i3)i
 """),
 
-96: _("""
- le sechage ne peut pas etre melange a un autre comportement
+96 : _("""
+ le séchage ne peut pas etre mélangé à un autre comportement
 """),
 
-97: _("""
- evol_ther_sech est un mot-cle obligatoire pour le sechage de type sech_granger et sech_nappe
+97 : _("""
+ EVOL_THER_SECH est un mot-clé obligatoire pour le séchage de type SECH_GRANGER et SECH_NAPPE
 """),
 
-98: _("""
-  le concept :  %(k1)s  n'est pas un champ de temperature
+98 : _("""
+  le concept :  %(k1)s  n'est pas un champ de température
 """),
 
-99: _("""
-  le concept evol_ther :  %(k1)s  ne contient aucun champ de temperature
+99 : _("""
+  le concept EVOL_THER :  %(k1)s  ne contient aucun champ de température
 """),
+
 }
index 08d7e1b8ffc0988d8d92cd1b7704684516b836a5..fd6f0309b4224bc895c66bc3aea543102dc8f288 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF algorith9 Messages  DATE 30/04/2007   AUTEUR ABBAS M.ABBA
+#@ MODIF algorith9 Messages  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOI
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- le champ de temperature : temp_init(num_init) n'existe pas.
+1 : _("""
+ le champ de température : TEMP_INIT(NUM_INIT) n'existe pas.
 """),
 
-2: _("""
cham_no invalide
+2 : _("""
CHAM_NO invalide
 """),
 
-3: _("""
- le mot cle "nume_init" est obligatoire dans ce cas.
+: _("""
+ valeur de THETA illicite
 """),
 
-4: _("""
- valeur de theta illicite
-"""),
-
-5: _("""
+5 : _("""
  la charge  %(k1)s  n'est pas thermique
 """),
 
-6: _("""
- la charge cine  %(k1)s  n"a pas de .defi
-"""),
-
-7: _("""
- la charge  %(k1)s  n'est pas compatible avec fonc_mult
-"""),
-
-9: _("""
- composante non trouvee dans la numerotation
+7 : _("""
+ la charge  %(k1)s  n'est pas compatible avec FONC_MULT
 """),
 
-10: _("""
- nombre de vecteurs demande trop grand on prend tous les modes du concept mode_meca 
+: _("""
+ composante non trouvée dans la numérotation
 """),
 
-12: _("""
- borne inf incorrect
+10 : _("""
+ nombre de vecteurs demandé trop grand
+ on prend tous les modes du concept MODE_MECA 
 """),
 
-13: _("""
- probleme avec courbe de traction
+1: _("""
+ borne inférieure incorrecte
 """),
 
-14: _("""
- pente non trouvee
-"""),
-
-15: _("""
- la norme du vecteur vect_orie est nulle
-"""),
-
-16: _("""
+16 : _("""
  le pas est nul
 """),
 
-17: _("""
- le nombre de pas est negatif
-"""),
-
-18: _("""
- les matrices assemblees generalisees doivent avoir un stockage plein (cf. nume_ddl_gene)
+17 : _("""
+ le nombre de pas est négatif
 """),
 
-19: _("""
- coeff_var_amor non nul et amortissement non present
+1: _("""
+ les matrices assemblées généralisées doivent avoir un stockage plein (cf. NUME_DDL_GENE)
 """),
 
-
-
-
-
-24: _("""
- charge de contact non traitee
+19 : _("""
+ COEFF_VAR_AMOR non nul et amortissement non présent
 """),
 
-25: _("""
votre chargement contient plus d'une charge repartie. le calcul n'est paspossible pour les modeles de poutre
+2: _("""
charge de contact non traitée
 """),
 
-26: _("""
- le modele est obligatoire
+25 : _("""
+ votre chargement contient plus d'une charge répartie
+ le calcul n'est pas possible pour les modèles de poutre
 """),
 
-27: _("""
- impossible de combiner les mots cles charge et vect_asse en dehors des ondes planes
+2: _("""
+ le modèle est obligatoire
 """),
 
-28: _("""
- concept reentrant : "resultat" doit porter le meme nom que la sortie
+2: _("""
+ impossible de combiner les mots cles CHARGE et VECT_ASSE en dehors des ondes planes
 """),
 
-29: _("""
- concept reentrant : "resultat" est d'un type different
+2: _("""
+ concept réentrant : "RESULTAT" doit porter le meme nom que la sortie
 """),
 
-30: _("""
- argument en double pour "nom_cham"
+29 : _("""
+ concept réentrant : "RESULTAT" est d'un type différent
 """),
 
-31: _("""
- pour l'instant, on ne peut pas deriver sur base modale dans dyna_line_harm 
+3: _("""
+ argument en double pour "NOM_CHAM"
 """),
 
-34: _("""
- les matrices ne possedent pas toutes la meme numerotation 
+3: _("""
+ pour l'instant, on ne peut pas dériver sur base modale dans DYNA_LINE_HARM 
 """),
 
-35: _("""
-  un vect_asse n'est ni a valeurs reelles, ni a valeurs complexes.
+3: _("""
+ les matrices ne possèdent pas toutes la meme numérotation 
 """),
 
-36: _("""
- erreur dans decoupe initiale des pas
+3: _("""
+  un VECT_ASSE n'est ni à valeurs réelles, ni à valeurs complexes.
 """),
 
-37: _("""
- attention, arret=non donc poursuite du calcul sans avoir eu convergence
+3: _("""
+ base modale et MATR_ASSE avec numérotations différentes
 """),
 
-39: _("""
- base modale et matr_asse avec numerotations differentes
-"""),
-
-40: _("""
+40 : _("""
   type de matrice inconnu:  %(k1)s 
 """),
 
-41: _("""
- base modale et vect_asse avec  numerotations differentes
+41 : _("""
+ base modale et VECT_ASSE avec  numérotations différentes
 """),
 
-42: _("""
- la base constituee ne forme pas une famille libre 
+42 : _("""
+ la base constituée ne forme pas une famille libre 
 """),
 
-43: _("""
+43 : _("""
  le nombre de valeurs doit etre pair.
 """),
 
-44: _("""
- trop d'arguments pour "nom_cham"
+44 : _("""
+ trop d'arguments pour "NOM_CHAM"
 """),
 
-45: _("""
- pour calculer une acce_absolu, il faut "acce_mono_appui"
+45 : _("""
+ pour calculer une ACCE_ABSOLU, il faut "ACCE_MONO_APPUI"
 """),
 
-46: _("""
- pour restituer sur un squelette, il faut "mode_meca"
+46 : _("""
+ pour restituer sur un squelette, il faut "MODE_MECA"
 """),
 
-47: _("""
- mots-cles'sous_struc' et'squelette'interdits
+47 : _("""
+ mots-cles'SOUS_STRUC' et'SQUELETTE'interdits
 """),
 
-48: _("""
mots-cle'mode_meca' doit etre present
+48 : _("""
le mot-clé 'MODE_MECA' doit etre présent
 """),
 
-49: _("""
- l'instant de recuperation est en dehors du domaine de calcul.
+49 : _("""
+ l'instant de récuperation est en dehors du domaine de calcul.
 """),
 
-50: _("""
+50 : _("""
  pas de mailles fournies
 """),
 
-51: _("""
- aucune maille enrichie
-"""),
-
-55: _("""
- mauvaise definition de l'interspectre.
-"""),
-
-56: _("""
- le "nomb_pts" doit etre une puissance de 2.
+55 : _("""
+ mauvaise définition de l'interspectre.
 """),
 
-57: _("""
- si les mots-cles <nume_ordre> et <amor_reduit> sont utilises, il faut autant d arguments pour l un et l autre
+5: _("""
+ le "NOMB_PTS" doit etre une puissance de 2.
 """),
 
-58: _("""
- le concept mode_meca d entree doit etre celui correspondant a la base modale initiale pour le calcul de couplage fluide-structure
+57 : _("""
+ si les mots-cles NUME_ORDRE et AMOR_REDUIT sont utilisés,
+ il faut autant d'arguments pour l'un et l'autre
 """),
 
-59: _("""
- numero de vitesse d ecoulement du fluide non valide
+58 : _("""
+ le concept MODE_MECA d'entrée doit etre celui correspondant à la base modale initiale
+ pour le calcul de couplage fluide-structure
 """),
 
-60: _("""
- tous les modes non couples etant retenus, le nombre d arguments valide pour le mot-cle <amor_reduit> est la difference entre le nombre de modes de la base modale initiale et le nombre de modes pris en compte pour le couplage fluide-structure
+60 : _("""
+ tous les modes non couplés étant retenus, le nombre d'arguments valide
+ pour le mot-clé AMOR_REDUIT est la différence entre le nombre de modes
+ de la base modale initiale et le nombre de modes pris en compte pour
+ le couplage fluide-structure
 """),
 
-61: _("""
- les numeros d ordre fournis ne correspondent pas a des modes non perturbes
+61 : _("""
+ les numéros d'ordre fournis ne correspondent pas à des modes non perturbés
 """),
 
-62: _("""
- option symetrie : la dimension de point et axe_1 doit etre identique.
+62 : _("""
+ option symétrie : la dimension de POINT et AXE_1 doit etre identique.
 """),
 
-63: _("""
- option symetrie : axe_2 est inutile en 2d, il est ignore.
+63 : _("""
+ option symétrie : AXE_2 est inutile en 2D, il est ignoré.
 """),
 
-64: _("""
- option symetrie : la dimension de point et axe_2 doit etre identique.
+64 : _("""
+ option symétrie : la dimension de POINT et AXE_2 doit etre identique.
 """),
 
-65: _("""
- methode: elem autorisee seulement pour les resultats evol_xxx.
+65 : _("""
+ méthode: ELEM autorisée seulement pour les résultats EVOL_XXX.
 """),
 
-66: _("""
- methode: nuage_deg__* autorisee seulement pour les champs.
+66 : _("""
+ methode: NUAGE_DEG__* autorisée seulement pour les champs.
 """),
 
-69: _("""
- on ne sait pas traiter le champ de type:  %(k1)s  champ :  %(k2)s 
+69 : _("""
+ on ne sait pas traiter le champ de type:  %(k1)s
+ champ :  %(k2)s 
 """),
 
-70: _("""
- le nom du champ         de la variable de commande  pour decoupage obligatoire
+7: _("""
+ attention, mode sur-amorti
 """),
 
-71: _("""
- le nom du cmp           de la variable de commande  pour decoupage obligatoire
-"""),
-
-72: _("""
- critere pour            decoupage obligatoire
-"""),
-
-73: _("""
- erreur : itran = 0 ou 1
-"""),
-
-74: _("""
- attention, mode suramorti
-"""),
-
-75: _("""
+75 : _("""
  attention, mode instable
 """),
 
-
-
-
-
-
-
-
-
-
-80: _("""
- pour utiliser le comportement "hydr" il faut surcharger le code en "mode developpement" avec les routines "permea" et "satura".
+80 : _("""
+ pour utiliser le comportement "HYDR", il faut surcharger le code
+ en "mode devéloppement" avec les routines "PERMEA" et "SATURA".
 """),
 
-81: _("""
+81 : _("""
  le vecteur directeur est nul.
 """),
 
-82: _("""
- erreur dvp
-"""),
-
-83: _("""
- nombre max iterations atteint
+83 : _("""
+ nombre maximum d'itérations atteint
 """),
 
-84: _("""
- precision machine depassee
+84 : _("""
+ précision machine depassée
 """),
 
-85: _("""
- probleme pilo : 3 solutions ou plus
+85 : _("""
+ problème pilo : 3 solutions ou plus
 """),
 
-86: _("""
+86 : _("""
  matrice mat non inversible
 """),
 
-87: _("""
- probleme pilo
+87 : _("""
+ problème pilo
 """),
 
-88: _("""
- ldc non dispo pour pilotage
+88 : _("""
+ loi de comportement non disponible pour le pilotage
 """),
 
-89: _("""
- le pilotage pred_elas necessite eta_pilo_min et eta_pilo_max pour la loi endo_isot_beton
+89 : _("""
+ le pilotage PRED_ELAS nécessite ETA_PILO_MIN et ETA_PILO_MAX
+ pour la loi ENDO_ISOT_BETON
 """),
 
-90: _("""
- le pilotage pred_elas necessite eta_pilo_min et eta_pilo_max pour la loi endo_orth_beton
+90 : _("""
+ le pilotage PRED_ELAS nécessite ETA_PILO_MIN et ETA_PILO_MAX
+ pour la loi ENDO_ORTH_BETON
 """),
 
-91: _("""
nb noeuds mesure doit etre inf a nb noeuds modele
+91 : _("""
le nombre de noeuds mesuré doit etre inférieur au nombre de noeuds du modèle
 """),
 
-92: _("""
- maille seg2 non trouvee
+92 : _("""
+ maille SEG2 non trouvée
 """),
 
-93: _("""
- integration elastoplastique de loi beton_double_dp : pas de convergence lors de la projection au sommet des cones de traction et de compression --> utiliser le redecoupage automatique du pas de temps.
+93 : _("""
+ intégration élastoplastique de loi BETON_DOUBLE_DP :
+ pas de convergence lors de la projection au sommet des cones de traction et de compression
+ --> utiliser le redécoupage automatique du pas de temps.
 """),
 
-94: _("""
- integration elastoplastique de loi beton_double_dp : pas de convergence lors de la resolution pour nseuil =  %(k1)s  --> utiliser le redecoupage automatique du pas de temps.
+94 : _("""
+ intégration élastoplastique de loi BETON_DOUBLE_DP :
+ pas de convergence lors de la resolution pour NSEUIL =  %(k1)s
+ --> utiliser le redécoupage automatique du pas de temps.
 """),
 
-95: _("""
- non convergence a la maille:  %(k1)s 
+95 : _("""
+ non convergence à la maille:  %(k1)s 
 """),
 
-96: _("""
+96 : _("""
  la saturation n'est pas une variable interne pour la loi de couplage  %(k1)s 
 """),
 
-97: _("""
- la pression de vapeur n est pas une variable interne pour la loi de couplage  %(k1)s 
+97 : _("""
+ la pression de vapeur n'est pas une variable interne pour la loi de couplage  %(k1)s 
 """),
 
-
-99: _("""
- la variable  %(k1)s  n existe pas dans la loi cjs en 2d
+99 : _("""
+ la variable  %(k1)s  n'existe pas dans la loi CJS en 2D
 """),
+
 }
index 8c1bca71f263a0d2c0f8acf3f46972a218731b56..e6bde501ba5ded876607099d1b41f229718e3d59 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF appelmpi Messages  DATE 04/04/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF appelmpi Messages  DATE 12/11/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 def _(x) : return x
@@ -23,22 +23,29 @@ def _(x) : return x
 cata_msg={
 
 1: _("""
- &feti.liste.sd.mpi existe deja !
-"""),
-
-2: _("""
- &feti.liste.sd.mpib existe deja !
+ l'option est non prévue en non compilation MPI
 """),
 
 3: _("""
- En parallèle, il faut au moins un sous-domaine par processeur !
+ En parallèle, il faut au moins un sous-domaine par processeur
 """),
 
 4: _("""
- Processeur %(i1)d : option FETAM %(i2)d non prevue en compile MPI !
+ Processeur %(i1)d :
+ l'option FETAM %(i2)d est non prévue en compilation MPI
 """),
 
 5: _("""
- Erreur MPI: %(k1)s !
+ Erreur MPI: %(k1)s
+"""),
+
+6: _("""
+ Processeur %(i1)d : option MUMMPI %(i2)d non prevue avec MUMPS !
 """),
+7: _("""
+ &mumps.liste.sd.mpi existe deja !
+"""),
+
+
+
 }
diff --git a/Aster/Cata/cataSTA9/Messages/archivage.py b/Aster/Cata/cataSTA9/Messages/archivage.py
new file mode 100644 (file)
index 0000000..44a4245
--- /dev/null
@@ -0,0 +1,37 @@
+#@ MODIF archivage Messages  DATE 11/03/2008   AUTEUR CNGUYEN C.NGUYEN 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg = {
+
+95 : _("""
+Accès par instant sans évolution ordonnée interdit (ARCHIVAGE)
+"""),
+
+97 : _("""
+L'archivage va écraser des instants déjà calculés (ARCHIVAGE)
+"""),
+
+98 : _("""
+L'archivage va laisser des trous dans la sd EVOL_NOLI (ARCHIVAGE, NUME_INIT)
+"""),
+
+}
index 667898cbde98e7afc97c6ee6caa706ce3d5460ef..5576ba6059173658a1115c840d00db23d92bbca6 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF arlequin Messages  DATE 28/03/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF arlequin Messages  DATE 02/06/2008   AUTEUR MEUNIER S.MEUNIER 
 # -*- coding: iso-8859-1 -*-
 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
@@ -24,7 +24,7 @@ cata_msg={
 
 
 1: _("""
- Pour Arlequin, la dimension topologique des modelisations de GROUP_MA_1 et GROUP_MA_2 doivent etre les memes:
+ Pour Arlequin, la dimension topologique des modélisations de GROUP_MA_1 et GROUP_MA_2 doivent être les mêmes:
   - C_PLAN (2D)
   - ou D_PLAN (2D)
   - ou AXIS (2D)
@@ -36,60 +36,94 @@ cata_msg={
 """),
 
 3: _("""
- Il y a plusieurs modelisations dans le meme groupe de maille
+ Il y a plusieurs modélisations dans le même groupe de maille
 """),
 
 4: _("""
- Il y a plusieurs cinematiques (melange elements de structures/elements de milieu continu) dans le meme groupe de maille
+ Il y a plusieurs cinématiques dans le même groupe de maille
+ (mélange éléments de structures/éléments de milieu continu)
 """),
 
 5: _("""
  Aucune maille du groupe n'est utilisable dans Arlequin, on rappelle ce qui est utilisable:
-  - elements de deformations planes (D_PLAN)
-  - elements de contraintes planes (C_PLAN)
-  - elements axisymetriques (AXIS)
-  - elements 3D
-  - elements de structure de type coques et plaques (DKT/DST/COQUE_3D/Q4G)
+  - éléments de déformations planes (D_PLAN)
+  - éléments de contraintes planes (C_PLAN)
+  - éléments axisymétriques (AXIS)
+  - éléments 3D
+  - éléments de structure de type coques et plaques (DKT/DST/COQUE_3D/Q4G)
 """),
 
 6: _("""
  La normale au noeud <%(k1)s> de la maille <%(k2)s> est nulle.
- Verifiez votre maillage (pas de mailles aplaties par exemple)
+ Vérifiez votre maillage (pas de mailles aplaties par exemple)
 """),
 
 7: _("""
  La normale moyenne sur la maille <%(k1)s> est nulle.
- Verifiez votre maillage (orientations des mailles par exemple)
+ Vérifiez votre maillage (orientations des mailles par exemple)
 """),
 
 8: _("""
- Il faut renseigner le mot-clef CARA_ELEM lorsqu'on utilise des elements coques
+ Il faut renseigner le mot-clef CARA_ELEM lorsqu'on utilise des éléments coques
 """),
 
 9: _("""
- Les deux domaines ne se recouvrent pas. Verifiez vos groupes.
+ Les deux domaines ne se recouvrent pas. Vérifiez vos groupes.
  """),
 
 10: _("""
- Le groupe de mailles de collage (GROUP_MA_COLL) doit etre un sous ensemble d'un des deux
- sous domaines GROUP_MA_1 ou GROUP_MA_2
+ Le groupe de mailles de collage (GROUP_MA_COLL) doit être un sous ensemble
d'un des deux sous domaines GROUP_MA_1 ou GROUP_MA_2
  """),
 
 11: _("""
- La maille <%(k1)s> est de type %(k2)s: elle ne peut etre mise en boite.
+ La maille <%(k1)s> est de type %(k2)s : elle ne peut être mise en boîte.
  Ce type de maille n'est pas pris en compte.
 """),
 
 12: _("""
- Aucune maille de la zone de collage n'est appariee
+ Aucune maille de la zone de collage n'est appariée
 """),
 
 13: _("""
- Nombre de couples apparies sous-estime - Erreur avancee: contacter le support
+ Nombre de couples appariés sous-estimé
+ - Erreur avancée : contacter le support
 """),
 
 14: _("""
- La gestion des conditions limites redondantes a ete deconnectee dans Arlequin
+ La zone de superposition des modèles dans Arlequin ne contient aucune maille !
+"""),
+
+16: _("""
+ Pb d'assemblage pour le couple de mailles %(i1)d et %(i2)d
+"""),
+
+17: _("""
+ Le noeud <%(i1)d> est redondant
+"""),
+
+18: _("""
+ intégration par sous-mailles - 2d : le découpage en tria6 ne marche pas encore
+"""),
+
+19: _("""
+ élément de type <%(k1)s> interdit
+"""),
+
+20: _("""
+ Mise en boîtes : il est impossible de traiter le type de maille <%(k1)s>
+"""),
+
+21: _("""
+ Pb lors de mise en boîtes. La SD boîte concernée est <%(k1)s>. Informations :
+ dimension de l'espace : %(i1)d
+ nombre de mailles     : %(i2)d
+ nombre de pans        : %(i3)d
+ nombre de sommets     : %(i4)d
+"""),
+
+22: _("""
+  Maille inconnue : %(k1)s
 """),
 
 23: _("""
@@ -97,11 +131,54 @@ cata_msg={
 """),
 
 24: _("""
- Nombre de composantes connexes maximal prevu insuffisant
+ Nombre de composantes connexes maximal prévu insuffisant
 """),
 
 25: _("""
- Polyedre non etoile au centre de gravite
+ L'intersection de la maille <%(k1)s> avec la maille <%(k2)s> a donné un polyèdre
+ non étoilé dont la tétraédrisation a été difficile. Il y a une erreur sur le volume obtenu après tétraédrisation.
+  Volume initial du polyèdre de l'intersection: <%(r1)s>
+  Volume après découpe en tétraèdres du polyèdre de l'intersection: <%(r2)s>
+  Soit un écart de <%(r3)s> %%
+--> Risques & conseils :
+Si cet écart est trop important sur trop de mailles de l'intersection, les termes de couplage Arlequin seront faux et
+pourront entraîner un résultat faux.
+Vous pouvez réduire ce risque en raffinant le maillage ou en utilisant des mailles plus simples (tétraèdres)
+
+"""),
+
+26: _("""
+ Dimension incorrecte : %(i1)d
+"""),
+
+27: _("""
+ Le nombre de noeuds est incohérent : %(i1)d
+"""),
+
+
+
+
+34: _("""
+ La famille d'intégration %(i1)d n'existe pas pour les mailles de type %(k1)s.
+"""),
+
+
+
+
+40: _("""
+ La carte d'information %(k1)s de la charge Arlequin courante n'existe pas.
+"""),
+
+41: _("""
+ On ne sait pas traiter les mailles de type %(k1)s avec la méthode Arlequin.
+"""),
+
+
+
+
+99 : _("""
+ On a rencontré un problème dans la routine <%(k1)s>. 
+ - Erreur avancée : contacter le support
 """),
 
 }
diff --git a/Aster/Cata/cataSTA9/Messages/ascouf0.py b/Aster/Cata/cataSTA9/Messages/ascouf0.py
new file mode 100644 (file)
index 0000000..117c1bb
--- /dev/null
@@ -0,0 +1,337 @@
+#@ MODIF ascouf0 Messages  DATE 14/04/2008   AUTEUR GALENNE E.GALENNE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+La condition aux limites sur bol à section conique 
+est ignorée pour un coude avec sous-épaisseurs.
+"""),
+
+2: _("""
+Mot-clé AZIMUT non autorisé dans le cas d'un coude sain"
+"""),
+
+3: _("""
+POSI_ANGUL POSI_CURV_LONGI est obligatoire.
+"""),
+
+4: _("""
+Il faut renseigner : ANGLE, R_CINTR et POSI_ANGUL ou ANGLE, R_CINTR et POSI_CURV_LONGI.
+"""),
+
+5: _("""
+ANGL_COUDE et ANGL_SOUS_EPAI sont inutiles dans ce cas.
+"""),
+
+6: _("""
+ ASCSEP valeur hors domaine
+ sous-epaisseur numero : %(i1)d
+ taille axe circonferentiel : %(r1)f
+ bord plaque : %(r2)f
+"""),
+
+7: _("""
+ ASCSEP cas de symetrie :
+ la sous-epaisseur doit etre dans la section mediane du coude !
+"""),
+
+
+9: _("""
+ Valeur hors domaine :
+ sous-epaisseur numero :%(i1)d
+ absc. curv. circonf. :%(r1)f
+ bord plaque :%(r2)f
+"""),
+
+10: _("""
+ Valeur hors domaine :
+ sous-epaisseur numero :%(i1)d
+ absc. curv. longit.  :%(r1)f
+ bord plaque :%(r2)f
+"""),
+
+11: _("""
+ valeur hors domaine :
+ sous-epaisseur numero :%(i1)d
+ bord inferieur  :%(r1)f
+ bord plaque :%(r2)f
+"""),
+
+
+13: _("""
+ Les quart et demi structure ne peuvent etre réalisees 
+ sur un modèle comportant une transition d'épaisseur.
+"""),
+
+14: _("""
+ Les deux embouts doivent etre de meme longueur pour les cas de symétrie.
+"""),
+
+15: _("""
+ Longueur d'embout P1 inférieure a la longueur d'amortissement = %(r1)f
+"""),
+
+16: _("""
+ Longueur d'embout P2 inférieure à la longueur d'amortissement = %(r1)f
+"""),
+
+17: _("""
+ La condition aux limites raccord 3d-poutre appliquée avec la macro de calcul
+ ascouf n'est pas licite avec un embout de type conique.
+"""),
+
+18: _("""
+ Le nombre d'elements dans l'epaisseur du coude n'est pas parametrable pour
+ un coude avec fissure.
+ Le mot-cle NB_ELEM_EPAIS est ignoré.
+"""),
+
+19: _("""
+ Pour les fissures non axisymetriques, la longueur doit etre spécifiée.
+"""),
+
+20: _("""
+ La fissure est axisymetrique : on ne tient pas compte de la longueur spécifiée.
+"""),
+
+21: _("""
+ Avec une transition d'épaisseur,la fissure doit obligatoirement etre transverse.
+"""),
+
+23: _("""
+ L'orientation de la fissure doit etre transverse (orien : 90.) pour modéliser
+ un quart ou une demi structure.
+"""),
+
+24: _("""
+ La fissure est axisymetrique : son orientation doit etre transverse (ORIEN : 90.)
+"""),
+
+25: _("""
+ Il ne peut pas y avoir plusieurs sous-épaisseurs en meme temps
+ qu'une transition d'épaisseur: 
+ si une seule sous-épaisseur, alors utiliser SOUS_EPAIS_COUDE.
+"""),
+
+26: _("""
+ Avec une transition d'épaisseur,il doit obligatoirement y avoir un défaut,
+ soit une fissure  soit une sous-épaisseur.
+"""),
+
+27: _("""
+ Ne modéliser qu'une seule sous-épaisseur pour un quart ou demi-coude.
+"""),
+
+28: _("""
+ Vous ne pouvez déclarer la sous-epaisseur comme axisymetrique et donner
+ une taille d'axe circonferentiel.
+"""),
+
+29: _("""
+ Vous devez donner une taille d'axe circonférentiel pour une sous-épaisseur
+ de type elliptique.
+"""),
+
+30: _("""
+ Valeur hors domaine de validité :
+ sous-épaisseur numéro :%(i1)d
+ abscisse curv. longit. :%(r1)f
+ valeur maximale autorisée :%(r2)f
+"""),
+
+31: _("""
+ Valeur hors domaine de validité :
+ sous-épaisseur numéro :%(i1)d
+ position angulaire centre sous-ep :%(r1)f
+ valeur limite autorisée :%(r2)f
+"""),
+
+32: _("""
+ Valeur hors domaine de validité : 
+ sous-épaisseur numero :%(i1)d
+ abscisse curv. circonf. :%(r1)f
+ valeur limite autorisée :%(r2)f
+"""),
+
+33: _("""
+ Le centre d'une sous-épaisseur axisymétrique est imposé en intrados (pi*RM).
+"""),
+
+34: _("""
+ Le centre d'une sous-épaisseur axisymétrique est imposé en intrados.
+ L'azimut est fixé à 180 degrés.
+"""),
+
+35: _("""
+ Le nombre d'élements dans l'épaisseur du coude n'est pas parametrable pour
+ la version 2 de la procedure de plaque avec sous-épaisseur : 
+ mot-cle NB_ELEM_EPAIS ignoré.
+"""),
+
+36: _("""
+ Valeur hors domaine de validité :
+ surépaisseur :%(i1)d
+ valeur limite autorisée (RM-EP1/2) :%(r1)f
+"""),
+
+37: _("""
+ Valeur hors domaine de validité :
+ le rayon de cintrage : %(r1)f
+ doit etre supérieur a (RM+EP1/2) :%(r2)f
+"""),
+
+38: _("""
+ Valeur hors domaine de validité (5,50)
+ rapport RM/EP1 : %(r1)f
+"""),
+
+39: _("""
+ Valeur hors domaine de validité :
+ abscisse curviligne centre fissure :%(r1)f
+ valeur limite autorisée :%(r2)f
+"""),
+
+40: _("""
+ Valeur hors domaine de validité : 
+ nombre de tranches :%(i1)d
+"""),
+
+41: _("""
+ Valeur hors domaine de validité :
+ position angulaire  centre fissure : %(r1)f
+ posi_angul doit etre >= 0 et <= %(r2)f 
+"""),
+
+42: _("""
+ Valeur hors domaine de validité : 
+ début transition d'épaisseur :%(r1)f
+ valeur minimale autorisée :%(r2)f
+ valeur maximale autorisée :%(r3)f
+"""),
+
+43: _("""
+ Valeur hors domaine de validité :
+ angle de transition TETA1 : %(r1)f
+ valeur minimale autorisée : 0.
+ valeur maximale autorisée : 30.
+"""),
+
+44: _("""
+ Valeur hors domaine de validité :
+ épaisseur avant la transition :%(r1)f
+ valeur minimale autorisée : 12
+ valeur maximale autorisée : 80
+"""),
+
+45: _("""
+ Valeur hors domaine de validité : 
+ épaisseur apres la transition :%(r1)f
+ valeur minimale autorisée : 20
+ valeur maximale autorisée : 110
+"""),
+
+46: _("""
+ L'épaisseur avant la transition doit etre inférieure
+ à celle apres la transition.
+"""),
+
+47: _("""
+ Valeur hors domaine de validité :
+ fin transition d'épaisseur :%(r1)f
+ valeur limite autorisée :%(r2)f
+"""),
+
+48: _("""
+ Valeur hors domaine de validité :
+ diam ext du tube avant transition:%(r1)f
+ valeur minimum autorisée : 112.
+ valeur maximum autorisée : 880.
+"""),
+
+49: _("""
+ Valeur hors domaine de validité :
+ angle de transition TETA2: %(r1)f
+ valeur minimum autorisée : 0.
+ valeur maximum autorisée : 45.
+"""),
+
+50: _("""
+ Valeur hors domaine de validité :
+ epaisseur avant 1ere transition:%(r1)f
+ valeur minimum autorisee : 7.
+ valeur maximum autorisee : 35.
+"""),
+
+51: _("""
+ Valeur hors domaine de validité :
+ epaisseur avant 2eme transition:%(r1)f
+ valeur minimum autorisee : 15.
+ valeur maximum autorisee : 40.
+"""),
+
+52: _("""
+ Valeur hors domaine de validité :
+ épaisseur intermediaire:%(r1)f
+ valeur minimum autorisée : 15.
+ valeur maximum autorisée : 40.
+"""),
+
+53: _("""
+ Valeur hors domaine de validité.
+ L'épaisseur avant la transition doit etre inférieure
+ à l'épaisseur intermediaire.
+"""),
+
+54: _("""
+ Valeur hors domaine de validité.
+ L'épaisseur après la transition doit etre inférieure
+ à l'épaisseur intermediaire.
+"""),
+
+55: _("""
+ Valeur hors domaine de validité :
+ fin transition d'épaisseur:%(r1)f
+ valeur limite autorisée :%(r2)f
+"""),
+
+56: _("""
+ Valeur hors domaine de validité :
+ diam ext du tube avant transition:%(r1)f
+ valeur minimum autorisée : 77.
+ valeur maximum autorisée : 355.
+"""),
+
+57: _("""
+Seuls gibi98 et gibi2000 sont appelables.
+"""),
+
+58: _("""
+Une interpénétration des lèvres est détectée pour le numéro d'ordre %(i1)d : sur les
+%(i2)d noeuds de chaque lèvre, %(i3)d noeuds s'interpénètrent.
+-> Risque et Conseil :
+Le contact n'est pas pris en compte dans le calcul. Le taux de restitution de l'énergie G
+est donc positif y compris là où la fissure tend à se refermer, ce qui peut conduire à
+des résultats trop pénalisants.
+Pour prendre en compte le contact entre les lèvres, il faut lancer le calcul hors macro.
+"""),
+
+}
diff --git a/Aster/Cata/cataSTA9/Messages/aspic0.py b/Aster/Cata/cataSTA9/Messages/aspic0.py
new file mode 100644 (file)
index 0000000..bf00e6e
--- /dev/null
@@ -0,0 +1,139 @@
+#@ MODIF aspic0 Messages  DATE 14/04/2008   AUTEUR GALENNE E.GALENNE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+Vous affectez plus d'un materiau contenant l'option rccm.
+"""),
+
+2: _("""
+Pour les piquages sains, TUBULURE doit etre renseigné.
+"""),
+
+3: _("""
+EQUILIBRE[NOEUD] : on attend P1_CORP ou P2_CORP.
+"""),
+
+4: _("""
+Il faut préciser un noeud pour EFFE_FOND.
+"""),
+
+5: _("""
+PRES_REP[NOEUD] : on attend P1_CORP ou P2_CORP.
+"""),
+
+6: _("""
+On ne peut appliquer un EFFE_FOND sur PRES_REP[NOEUD] car ce noeud est bloqué"
+"""),
+
+7: _("""
+TORS_CORP[NOEUD] : on attend P1_CORP ou P2_CORP.
+"""),
+
+8: _("""
+On ne peut appliquer un torseur sur TORS_CORP[NOEUD] car ce noeud est bloqué.
+"""),
+
+9: _("""
+Si TYPE_MAILLAGE sain : mécanique de la rupture impossible.
+"""),
+
+10: _("""
+Mot-clef <BORNES> obligatoire avec cette option.
+"""),
+
+11: _("""
+Impression de résultats demandée sans préciser le nom des champs cf. la documentation utilisateur : U4.PC.20.
+"""),
+
+12: _("""
+Les piquages pénetrants sont autorisés uniquement avec les soudures de type 1.
+"""),
+
+13: _("""
+ La valeur de Z_MAX (cote maximale de la tubulure) est inférieure à la longueur 
+ d'amortissement calculée :
+ Z_MAX fournie   : %(r1)f
+ Z_MAX calculee  : %(r2)f
+-> Risque et Conseil :
+ La longueur d'amortissement est liée à l'onde de flexion se propageant depuis le piquage.
+ Si la longueur de la tubulure est inférieure à cette longueur, le calcul des contraintes 
+ dans le piquage ne sera pas indépendant du mode d'application des conditions aux limites.
+"""),
+
+14: _("""
+ Erreur donnees
+ Dans le cas de fissures inclinees debouchant en peau interne avec
+ piquage penetrant, le jeu doit etre nul.
+"""),
+
+15: _("""
+ Erreur donnees
+ Dans le cas de fissures internes (NON_DEB) le ligament inférieur est obligatoire.
+"""),
+
+16: _("""
+Dans le cas de fissures internes (NON_DEB) le ligament est trop petit.
+"""),
+
+17: _("""
+Dans le cas de fissures internes (NON_DEB) le ligament est trop grand.
+"""),
+
+18: _("""
+Dans le cas de fissures courte il faut préciser la longueur.
+"""),
+
+19: _("""
+Dans le cas de la fissure longue il faut préciser la longueur ou axis=oui.
+"""),
+
+20: _("""
+Fissure axisymetrique : le mot clef <LONGUEUR> ne doit pas etre renseigné.
+"""),
+
+21: _("""
+Seuls gibi98 et gibi2000 sont appelables.
+"""),
+
+22: _("""
+Une interpénétration des lèvres est détectée pour le numéro d'ordre %(i1)d : sur les
+%(i2)d noeuds de chaque lèvre, %(i3)d noeuds s'interpénètrent.
+-> Risque et Conseil :
+Le contact n'est pas pris en compte dans le calcul. Le taux de restitution de l'énergie G
+est donc positif y compris là où la fissure tend à se refermer, ce qui peut conduire à
+des résultats trop pénalisants.
+Pour prendre en compte le contact entre les lèvres, il faut lancer le calcul hors macro.
+"""),
+
+23: _("""
+ La valeur de X_MAX (cote maximale du corps) est inférieure à la longueur d'amortissement 
+ calculée :
+ X_MAX fournie   : %(r1)f
+ X_MAX calculee  : %(r2)f
+-> Risque et Conseil :
+ La longueur d'amortissement est liée à l'onde de flexion se propageant depuis le piquage.
+ Si la longueur ddu corps est inférieure à cette longueur, le calcul des contraintes 
+ dans le piquage ne sera pas indépendant du mode d'application des conditions aux limites.
+"""),
+
+}
index 73327d4bdddfb7b9ff9aec84cdf5e36f924bb2b4..4bc9c0cc20b0562600404a3f6d5e993db0bf4204 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF assembla Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF assembla Messages  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
-  le type  :  %(k1)s   de la matrice est incorrect. on attend : "s"pour une resolution par methode iterative
-"""),
-
-2: _("""
- matrice non symetrique pour l'instant proscrite  avec feti
-"""),
+1 : _("""
+  Erreur d'utilisation :
+    Pour les méthodes itératives GCPC et FETI, on ne peut pas encore utiliser
+    de matrice non-symétrique.
 
-3: _("""
-  le parametre :  %(k1)s  est incorrect. on attend : "cumu" ou "zero" 
+  Conseil : Changer de solveur
 """),
 
-4: _("""
-  on ne peut assembler que des matrices reelles ou complexes
+4 : _("""
+  on ne peut assembler que des matrices réelles ou complexes
 """),
 
-5: _("""
- modeles discordants
+5 : _("""
+ modèles discordants
 """),
 
-6: _("""
feti: maille positive avec ligrel de charge !
+6 : _("""
FETI : maille positive avec LIGREL de charge !
 """),
 
-7: _("""
feti: maille negative avec ligrel de modele !
+7 : _("""
FETI : maille négative avec LIGREL de modele !
 """),
 
-8: _("""
- le motcle :  %(k1)s  est incorrect. on attend : "cumu" ou "zero" 
+8 : _("""
+ le motcle :  %(k1)s  est incorrect.
+ on attend : "CUMU" ou "ZERO"
 """),
 
-9: _("""
- on ne trouve pas le cmp "lagr" dans la grandeur
+9 : _("""
+ on ne trouve pas la composante "LAGR" dans la grandeur
 """),
 
-10: _("""
+10 : _("""
  il est imprevu d avoir le cmp "lagr" au dela de 30
 """),
 
-11: _("""
- on ne peut assembler que des vecteurs reels ou complexes
-"""),
-
-12: _("""
- le maillage  %(k1)s  contient des super-mailles pour l'instant, elles sont proscrites avec feti
+11 : _("""
+ on ne peut assembler que des vecteurs réels ou complexes
 """),
 
-13: _("""
- ichin = 0 
+12 : _("""
+ le maillage  %(k1)s  contient des super-mailles
+ pour l'instant, elles sont proscrites avec FETI
 """),
 
-14: _("""
- ichin < -2 
+1: _("""
+ ICHIN = 0
 """),
 
-15: _("""
- s => ichin=/0 
+1: _("""
+ ICHIN < -2
 """),
 
-16: _("""
- action:e/l/s 
+1: _("""
+ S => ICHIN=/0
 """),
 
-17: _("""
- message vide    
+1: _("""
+ action : E/L/S
 """),
 
-18: _("""
- incoherence des matr_elem
+18 : _("""
+ incohérence des MATR_ELEM
 """),
 
-19: _("""
- matr_elem sans sss et sans liste_resu
+19 : _("""
+ MATR_ELEM sans SSS et sans LISTE_RESU
 """),
 
-20: _("""
-  -  aucun ligrel dans les resuelem 
+20 : _("""
+  -  aucun LIGREL dans les RESUELEM
 """),
 
-21: _("""
- modeles diff.
+21 : _("""
+ modèles différents
 """),
 
-22: _("""
- les valeurs de la matrice  %(k1)s  doivent etre reelles, on ne traite pas encore les matrices non-symetriques complexes.
+2: _("""
+ le nombre maximum de composante de la grandeur est nul
 """),
 
-23: _("""
- la matrice  %(k1)s  a transformer en matrice non-symetrique doit etre symetrique.
+2: _("""
+ le nombre d'entiers codes est nul
 """),
 
-24: _("""
- le nombre maxi de composante de la grandeur est nul
+2: _("""
+ le noeud:  %(k1)s composante:  %(k2)s  est bloqué plusieurs fois.
 """),
 
-25: _("""
- le nombre d"entiers codes est nul
+2: _("""
+ l'entier décrivant la position du premier lagrange ne peut etre égal qu'à +1 ou -1 .
 """),
 
-26: _("""
- le noeud:  %(k1)s composante:  %(k2)s  est bloque plusieurs fois.
+28 : _("""
+ le nombre de noeuds effectivement numerotés ne correspond pas au nombre
+ de noeuds à numéroter
 """),
 
-27: _("""
- l'entier decrivant la postion du premier lagrange ne peut etre egal qu'a  +1  ou  -1 .
+2: _("""
+  -  aucun LIGREL
 """),
 
-28: _("""
- le nombre de noeuds effectivement numerotes ne correspond pas  au nombre de noeuds a numeroter
+30 : _("""
+  plusieurs phénomènes
 """),
 
-29: _("""
-  -  aucun ligrel  
+31 : _("""
+ les DDL du NUME_DDL ont bougé
 """),
 
-30: _("""
-  plusieurs "phenomenes" stop 
+3: _("""
+ phénomène non prévu dans le MOLOC de NUMER2 pour DD
 """),
 
-31: _("""
- les ddls du nume_ddl ont bouge.
+3: _("""
+ le .PRNO est construit sur plus que le maillage
 """),
 
-32: _("""
- phenomene non prevu dans le moloc de numer2 pour dd
+3: _("""
+ le .PRNO est de dimension nulle
 """),
 
-33: _("""
- le .prno est construit sur plus que le maillage
+3: _("""
+ il n y a pas de modèle dans la liste  %(k1)s .NUME.LILI
 """),
 
-34: _("""
- le .prno est de dimension nulle
-"""),
-
-35: _("""
- il n y a pas de modele dans la liste  %(k1)s .nume.lili
-"""),
-
-36: _("""
+36 : _("""
  noeud inexistant
 """),
 
-37: _("""
- methode :  %(k1)s  inconnue.
+37 : _("""
+ méthode :  %(k1)s  inconnue.
 """),
 
-38: _("""
+38 : _("""
  noeud incorrect
 """),
 
-39: _("""
- le phenome  %(k1)s  n'est pas admis pour la symetrisation des matrices.seuls sont admis les phenomenes "mecanique" et "thermique" .
+39 : _("""
+ le phénomène  %(k1)s  n'est pas admis pour la symétrisation des matrices.
+ seuls sont admis les phénomènes "MECANIQUE" et "THERMIQUE"
 """),
 
-40: _("""
- erreur programmeur : certains type_element ne savent pas calculer les options syme_m?ns_r
+41 : _("""
+ le noeud  : %(i1)d  du RESUEL : %(k1)s  du VECT_ELEM  : %(k2)s
+ n'a pas d'adresse dans : %(k3)s
 """),
 
-41: _("""
- 1--- le noeud  : %(i1)d  du resuel    : %(k1)s    du vect_elem  : %(k2)s 
-    n''a pas d''adresse dans  : %(k3)s 
+4: _("""
+ le noeud  : %(i1)d  du RESUEL : %(k1)s  du VECT_ELEM  : %(k2)s
+   a une adresse  : %(i2)d  > NEQUA : %(i3)d
 """),
 
-42: _("""
- 2--- le noeud  : %(i1)d  du resuel    : %(k1)s  du vect_elem   : %(k2)s 
-   a 1 adresse  : %(i2)d 
-  > nequa : %(i3)d 
+43 : _("""
+ NDDL :  %(i1)d  > NDDL_MAX : %(i2)d
 """),
 
-43: _("""
- 3--- nddl :  %(i1)d  > nddl_max : %(i2)d 
+44 : _("""
+ --- VECT_ELEM     : %(k1)s
+ --- RESU          : %(k2)s
+ --- NOMLI         : %(k3)s
+ --- GREL numéro   : %(i1)d
+ --- MAILLE numéro : %(i2)d
+ --- NNOE par NEMA : %(i3)d
+ --- NNOE par NODE : %(i4)d
 """),
 
-44: _("""
- 4--- vect_elem     : %(k1)s --- resu        : %(k2)s --- nomli       : %(k3)s 
- --- grel numero   : %(i1)d 
- --- maille numero : %(i2)d 
- --- nnoe par nema : %(i3)d 
- --- nnoe par node : %(i4)d 
-"""),
+45 : _("""
+Erreur Programmeur ou utilisateur :
+-----------------------------------
+ Le sd_ligrel    : %(k1)s  référencé par le noeud supplém. : %(i1)d
+ de la maille : %(i2)d  du sd_resuelem  : %(k2)s  du sd_vect_elem : %(k3)s
+ n'est pas présent  dans le sd_nume_ddl : %(k4)s
 
-45: _("""
- 5--- le ligrel : %(k1)s  ref. par le noeud supl.  : %(i1)d 
- --- de la maille : %(i2)d 
-  du resuelem  : %(k2)s 
-  du vect_elem   : %(k3)s 
- --- n"est pas present  dans la numerotation : %(k4)s 
-"""),
+Risques & conseils :
+--------------------
+ Si vous utilisez la commande MACRO_ELAS_MULT :
+   Si %(k5)s est une charge contenant des conditions aux limites dualisées (DDL_IMPO, ...),
+   Etes-vous sur d'avoir indiqué cette charge derrière le mot clé CHAR_MECA_GLOBAL ?
+   En effet, il faut indiquer TOUTES les charges dualisées derrière CHAR_MECA_GLOBAL.
 
-46: _("""
- 6--- nddl :  %(i1)d  > nddl_max : %(i2)d 
+ Si vous utilisez directement la commande ASSE_VECTEUR :
+   Si %(k5)s est une charge contenant des conditions aux limites dualisées (DDL_IMPO, ...),
+   Etes-vous sur d'avoir indiqué cette charge derrière le mot clé CHARGE
+   de la commande CALC_MATR_ELEM/OPTION='RIGI_MECA' ?
 """),
 
-47: _("""
- 7--- nddl :  %(i1)d  > nddl_max : %(i2)d 
+4: _("""
+ --- NDDL :  %(i1)d  > NDDL_MAX : %(i2)d
 """),
 
-48: _("""
- 8--- le noeud  : %(i1)d  du resuel    : %(k1)s  du vect_elem   : %(k2)s 
- --- n''a pas d''adresse  dans la numerotation : %(k3)s 
+47 : _("""
+ --- NDDL :  %(i1)d  > NDDL_MAX : %(i2)d
 """),
 
-49: _("""
- 9--- le noeud  : %(i1)d  du resuel    : %(k1)s  du vect_elem   : %(k2)s 
- --- a une adresse : %(i2)d 
-  > nequa : %(i3)d 
+48 : _("""
+ --- le noeud  : %(i1)d  du RESUEL    : %(k1)s  du VECT_ELEM   : %(k2)s
+ --- n'a pas d''adresse  dans la numérotation : %(k3)s
 """),
 
-50: _("""
- 11  nddl :  %(i1)d  > nddl_max : %(i2)d 
+49 : _("""
+ --- le noeud  : %(i1)d  du RESUEL    : %(k1)s  du VECT_ELEM   : %(k2)s
+ --- a une adresse : %(i2)d   > NEQUA : %(i3)d
 """),
 
-
-
-
-
-
-52: _("""
- 12  nddl :  %(i1)d  > nddl_max : %(i2)d 
+63 : _("""
+ erreur sur le premier lagrange d'une LIAISON_DDL
+ on a mis 2 fois le premier  lagrange :  %(i1)d
+ derrière le noeud :  %(i2)d
 """),
 
-53: _("""
- 13- nddl :  %(i1)d  > nddl_max : %(i2)d 
+64 : _("""
+ erreur sur le  2ème lagrange d'une LIAISON_DDL
+ on a mis 2 fois le 2ème  lagrange :  %(i1)d
+ derrière le noeud :  %(i2)d
 """),
 
+65 : _("""
+ incohérence dans le dénombrement des ddls
+ nombre de ddl a priori    : %(i1)d
+ nombre de ddl a posteriori: %(i2)d
+"""),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-63: _("""
- erreur sur le   premier lagrange d"une liaison_ddl
- on a mis 2 fois le premier  lagrange :  %(i1)d 
- derrire le noeud :  %(i2)d 
+66 : _("""
+ Problème dans NULILI.F: on a au moins deux maillages différents:
+  - maillage 1: %(k1)s
+  - maillage 2: %(k2)s
 """),
 
-64: _("""
- erreur sur le   2 eme lagrange d"une liaison_ddl
- on a mis 2 fois le 2eme  lagrange :  %(i1)d 
- derrire le noeud :  %(i2)d 
+67 : _("""
+ Problème dans NUMERO.F avec FETI: L'objet PROF_CHNO.NUEQ est différent de
+ l'identité pour i= %(i1)d on a NUEQ(i)= %(i2)d
 """),
 
-65: _("""
- incoherence dans  le denombrement des ddlsnbre de ddl a priori    : %(i1)d 
- nbre de ddl a posteriori: %(i2)d 
+6: _("""
+ Problème dans NUMERO.F avec FETI: Incohérence entre la SD_FETI et le paramètrage
+ de l'opérateur. Nombre d'incohérences= %(i1)d
 """),
 
 }
diff --git a/Aster/Cata/cataSTA9/Messages/cable0.py b/Aster/Cata/cataSTA9/Messages/cable0.py
new file mode 100644 (file)
index 0000000..f0d9dce
--- /dev/null
@@ -0,0 +1,35 @@
+#@ MODIF cable0 Messages  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+INST_FIN plus petit que INST_INIT.
+"""),
+
+2: _("""
+
+ --------------------------------------------------------------------------- 
+ DEFI_CABLE_BP - Erreur : MAILLE INTERDIT - UTILISER GROUP_MA               
+ --------------------------------------------------------------------------- 
+"""),
+
+}
index 112489b07c4bac1ec5f0eb29cd859f552aa54ee0..374146dc0c8a545719d8c0a0e5bfea6691170fd9 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF calculel Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF calculel Messages  DATE 19/05/2008   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- trop de parametres.
-"""),
+2 : _("""
+Erreur Utilisateur :
+ Quand on utilise AFFE_CHAR_CINE/EVOL_IMPO, c'est le champ de l'evol_xxx correspondant
+ au 1er instant qui impose sa "loi" : tous les ddls de ce champ seront imposés pour tous
+ les instants du calcul.
+
+ Malheureusement, on ne trouve pas un ddl dans l'evol_xxx %(k1)s :
+   instant : %(r1)f  noeud : %(i1)d  cmp : %(k2)s
 
-2: _("""
- stop 1
+Risques & conseils :
+ Assurez-vous que l'évolution imposée %(k1)s concerne les memes ddls pour tous les instants.
 """),
 
-3: _("""
+3 : _("""
  la grandeur :  %(k1)s  n existe pas dans le catalogue des grandeurs.
 """),
 
-4: _("""
+4 : _("""
  incoherence des maillages : %(k1)s  et  %(k2)s
 """),
 
-5: _("""
- stop 1a
+5 : _("""
+ Erreur de programmation (ou d'utilisation ?) :
+   Le changement de discrétisation : %(k1)s n'est pas encore programmé.
+ Risques et conseils :
+   Il y a peut-etre une demande d'évolution à émettre ...
 """),
 
-6: _("""
- stop 1b
-"""),
+6 : _("""
+ Erreur d'utilisation :
+   On n'arrive pas à construire correctement le champ contenant le nombre de sous-points
+   des éléments finis (coques multi-couches, tuyaux, poutre multi-fibres, ...)  du modèle %(k1)s.
 
-7: _("""
- stop 1c
+ Risques & conseils :
+   Cette erreur intervient lorsque l'on ne définit pas TOUTES les caractéristiques élémentaires
+   dans le meme AFFE_CARA_ELEM.
+   Pour les commandes de calcul, il ne faut qu'un seul MODELE et qu'un seul CARA_ELEM.
 """),
 
-
-9: _("""
- stop 4
+8 : _("""
+ sur la maille %(k1)s le calcul est thermo mécanique. Or il manque la température de référence.
+ On ne peut donc pas calculer de déformation thermique.
 """),
 
-10: _("""
- stop 5
+9 : _("""
+ Erreur d'utilisation dans AFFE_CHAR_CINE :
+   Aucun des ddls que l'on souhaite bloquer n'appartient au modèle.
+   La charge cinématique produite est donc vide.
+
+ Risques & Conseils :
+   Vérifier le nom des ddls portés par les noeuds des éléments de votre modèle.
 """),
 
-11: _("""
+11 : _("""
  le mode_local:  %(k1)s  ne doit pas etre vecteur ou matrice.
 """),
 
-12: _("""
+12 : _("""
  le mode_local:  %(k1)s  ne doit pas etre "diff__".
 """),
 
-13: _("""
- stop
-"""),
-
-14: _("""
+14 : _("""
   incompatibilite des type_champ ("elga"/"elno")  pour l option :  %(k1)s  entre les 2 type_elem :  %(k2)s  et  %(k3)s
 """),
 
+15 : _("""
+ sur la maille %(k1)s le calcul est thermo mécanique. Or il manque le parametre matériau
+ %(k2)s . On ne peut donc pas calculer de déformation thermique.
+"""),
 
-
-
-
-
-16: _("""
+16 : _("""
  type de maille indisponible
 """),
 
-17: _("""
+17 : _("""
  type de champ inconnu
 """),
 
-18: _("""
- la partie reelle et imaginaire du champ a assembler ne sont pas du meme type (l un est un cham_no et l autre un cham_elem
-"""),
-
-19: _("""
- champ incompatible
+18 : _("""
+ les parties réelle et imaginaire du champ à assembler ne sont pas du même type
+ l'un est un CHAM_NO et l'autre un CHAM_ELEM
 """),
 
-20: _("""
+20 : _("""
  le champ de grandeur  %(k1)s  ne respecte pas le format xxxx_r
 """),
 
-21: _("""
- les champs reel et imaginaire a assembler ne contiennent pas la meme grandeur
+21 : _("""
+ les champs réel et imaginaire à assembler ne contiennent pas la même grandeur
 """),
 
-22: _("""
- probleme dans le catalogue des grandeurs simples, la grandeur %(k1)s  ne possede pas le meme nombre de champ que son homologue complexe %(k2)s
+22 : _("""
+ problème dans le catalogue des grandeurs simples
+ la grandeur %(k1)s  ne possède pas le même nombre de champs que son homologue complexe %(k2)s
 """),
 
-23: _("""
- probleme dans le catalogue des grandeurs simples, la grandeur  %(k1)s  ne possede pas les memes champs que son homologue complexe  %(k2)s
+23 : _("""
+ problème dans le catalogue des grandeurs simples
+ la grandeur  %(k1)s  ne possède pas les mêmes champs que son homologue complexe  %(k2)s
 """),
 
-24: _("""
- les champs a assembler n ont pas la meme longueur
+24 : _("""
+ les champs à assembler n'ont pas la même longueur
 """),
 
-25: _("""
- type de champ incorrect
+2: _("""
+ CHAM_ELEM à combiner incompatible
 """),
 
-26: _("""
- longueurs des cham_elem incompatibles
-"""),
-
-27: _("""
- cham_elem a combiner incompatible
-"""),
-
-28: _("""
-  %(k1)s  indisponible
-"""),
-
-29: _("""
+29 : _("""
  option inconnue au catalogue :  %(k1)s
 """),
 
-30: _("""
+30 : _("""
   -> Le TYPE_ELEMENT %(k1)s  ne sait pas encore calculer l'OPTION:  %(k2)s.
      On ne calcule donc rien sur les éléments de ce type.
 
   -> Risque & Conseil :
      Vérifiez que l'option incomplètement calculée est bien une option de post-traitement
      et que le déficit de calcul n'entraine pas de résultats faux.
-
 """),
 
-32: _("""
dvp : Valeur interdite
+3: _("""
 la température n'est pas correctement renseignée
 """),
 
-34: _("""
- le calcul de l'option :  %(k1)s  n'est possible pour aucun des types d'elements  du ligrel.
+34 : _("""
+ le calcul de l'option :  %(k1)s
+ n'est possible pour aucun des types d'éléments du LIGREL.
 """),
 
-35: _("""
- erreur programmeur : trop de champs "in"
-"""),
-
-36: _("""
- On ne sait pas faire.
-"""),
-
-37: _("""
+37 : _("""
  Erreur dans la lecture des CHAR_CINE ou dans les CHAR_CINE
 """),
 
-38: _("""
- la carte concerne aussi des mailles tardives qui sont oubliees.
-"""),
-
-39: _("""
- type scalaire inconnu
+38 : _("""
+ la carte concerne aussi des mailles tardives qui sont oubliées
 """),
 
-40: _("""
- Erreur Programmeur : type_scalaire: %(k1)s  non autorisé (I/R/C),
-"""),
-
-41: _("""
- Erreur Programmeur : type_scalaire: %(k1)s  non autorisé (I/R/C/K8/K16/K24),
-"""),
-
-42: _("""
+42 : _("""
  Erreur Programmeur:
- Incoherence fortran/catalogue type_element:  %(k1)s  option:  %(k2)s
- La routine texxxx.f correspondant au calcul élémentaire ci-dessus est bugguée :
+ Incohérence fortran/catalogue
+ TYPE_ELEMENT :  %(k1)s
+ OPTION       :  %(k2)s
+ La routine texxxx.f correspondant au calcul élémentaire ci-dessus est bugguée
  Elle écrit en dehors de la zone allouée au paramètre (OUT) %(k3)s.
 
 """),
 
-43: _("""
- Arret du aux erreurs precedentes.
-"""),
-
-44: _("""
- Code interdit:  %(k1)s
-"""),
-
-45: _("""
- Erreur Programmeur :
- Transformation non programmée : émettre une fiche d'évolution
-"""),
-
-46: _("""
- a faire ...  : émettre une fiche d'évolution
-"""),
-
-47: _("""
-  le cham_elem:  %(k1)s  n'existe pas.
-"""),
-
-48: _("""
- le cham_elem: %(k1)s  n'a pas le meme nombre de cmps dynamiques sur tous ses elements.
-"""),
-
-49: _("""
- le cham_elem : %(k1)s  a des sous-points.
-"""),
-
-50: _("""
- type de verif. inconnu.
-"""),
-
-51: _("""
- argument prol0 invalide.
-"""),
-
-52: _("""
- la cmp: %(k1)s  n'appartient pas a la grandeur: %(k2)s
-"""),
-
-53: _("""
- option : %(k1)s  inexistante dans les catalogues.
-"""),
-
-54: _("""
- le parametre:  %(k1)s  de l'option:  %(k2)s  n'est pas connu des type_elem du ligrel:  %(k3)s
+47 : _("""
+  le CHAM_ELEM:  %(k1)s  n'existe pas.
 """),
 
-55: _("""
- il manque la cmp: %(k1)s
+48 : _("""
+ le CHAM_ELEM: %(k1)s  n'a pas le même nombre de composantes dynamiques sur tous ses éléments.
 """),
 
-56: _("""
- le ligrel contient des mailles tardives,
+49 : _("""
+ le CHAM_ELEM : %(k1)s a des sous-points.
 """),
 
-57: _("""
- nombres de points differents pour la maille:  %(k1)s  cham_elem de:  %(k2)s
+52 : _("""
+ La composante: %(k1)s  n'appartient pas à la grandeur: %(k2)s
+ Champ : %(k4)s
 """),
 
-58: _("""
- il manque la cmp: %(k1)s  sur la maille: %(k2)s
+53 : _("""
+ Option : %(k1)s  inexistante dans les catalogues.
+ Champ : %(k4)s
 """),
 
-59: _("""
- champ 1 inexistant
+54 : _("""
+ Le paramètre:  %(k1)s  de l'option:  %(k2)s  n'est pas connu des TYPE_ELEM du LIGREL:  %(k3)s
+ Champ : %(k4)s
 """),
 
-60: _("""
- Matrice noeud->gauss nécessaire
+55 : _("""
+ Erreur utilisateur :
+   On cherche à créer un CHAM_ELEM mais sur certains points, on ne trouve pas la composante : %(k1)s
+   Champ : %(k4)s
+ Risques & conseils :
+   Si la commande que vous exécutez comporte le mot clé PROL_ZERO='OUI', vous devriez peut-etre l'utiliser.
 """),
 
-61: _("""
- Erreur Programmeur :
- Argument cesmod obligatoire
+56 : _("""
+ Le LIGREL contient des mailles tardives
+ Champ : %(k4)s
 """),
 
-62: _("""
- champ inexistant
+57 : _("""
+ Nombres de points différents pour la maille:  %(k1)s
+ CHAM_ELEM de :  %(k2)s
+ Champ : %(k4)s
 """),
 
-63: _("""
- on ne traite que des champs "ELNO"
+58 : _("""
+ Il manque la composante : %(k1)s  sur la maille : %(k2)s
+ Champ : %(k4)s
 """),
 
-64: _("""
- le nombre de sous-points ne peut etre >1
-"""),
-
-65: _("""
- des reels ou des complexes svp !
-"""),
-
-66: _("""
- TYPCES invalide
-"""),
-
-67: _("""
+67 : _("""
  grandeur:  %(k1)s  inconnue au catalogue.
 """),
 
-68: _("""
- numero de maille invalide:  %(k1)s  (<1 ou >nbma)
-"""),
-
-69: _("""
- numero de point invalide:  %(k1)s  (<1 ou >nbpt) pour la maille:  %(k2)s
-"""),
-
-70: _("""
- numero de sous_point invalide:  %(k1)s  (<1 ou >nbspt) pour la maille:  %(k2)s  et pour le point:  %(k3)s
-"""),
-
-71: _("""
- numero de cmp invalide:  %(k1)s  (<1 ou >nbcmp) pour la maille:  %(k2)s  pour le point:  %(k3)s  et pour le sous_point:  %(k4)s
-"""),
-
-72: _("""
- nbchs >0 svp
+68 : _("""
+ numéro de maille invalide     :  %(k1)s  (<1 ou >nbma)
 """),
 
-73: _("""
- maillages differents.
+69 : _("""
+ numéro de point invalide      :  %(k1)s  (<1 ou >nbpt)
+ pour la maille                :  %(k2)s
 """),
 
-74: _("""
- grandeurs differentes.
+70 : _("""
+ numéro de sous_point invalide :  %(k1)s  (<1 ou >nbspt)
+ pour la maille                :  %(k2)s
+ pour le point                 :  %(k3)s
 """),
 
-75: _("""
- types differents (CART/ELNO/ELGA).
+71 : _("""
+ numéro de composante invalide :  %(k1)s  (<1 ou >nbcmp)
+ pour la maille                :  %(k2)s
+ pour le point                 :  %(k3)s
+ pour le sous-point            :  %(k4)s
 """),
 
-76: _("""
- nombre de points differents.
+91 : _("""
+ incohérence des familles de points de Gauss pour la maille  %(k1)s
+ ( %(k2)s / %(k3)s )
 """),
 
-77: _("""
nombre de sous-points differents.
+92 : _("""
type scalaire du CHAM_NO :  %(k1)s  non réel.
 """),
 
-78: _("""
- cumul interdit sur ce type non-numerique
+93 : _("""
+ type scalaire du NUME_DDL :  %(k1)s  non réel.
 """),
 
-79: _("""
- i/r/k8/k16 svp
+99 : _("""
+ melange de CHAM_ELEM_S et CHAM_NO_S
 """),
 
-80: _("""
- trop de cmps (997)
-"""),
-
-81: _("""
- maillages differents
-"""),
-
-82: _("""
- nbcmp doit etre >=0
-"""),
-
-83: _("""
- nbma doit etre >=0
-"""),
-
-84: _("""
- stop nomgd
-"""),
-
-85: _("""
- stop nbpt
-"""),
-
-86: _("""
- stop nbsp
-"""),
-
-87: _("""
- stop iad2
-"""),
-
-88: _("""
- caractere illicite.
-"""),
-
-89: _("""
- on ne sait pas encore traiter les resuelem
-"""),
-
-90: _("""
- type de champ interdit: %(k1)s
-"""),
-
-91: _("""
- incoherence des familles de points de gauss pour la maille  %(k1)s  ( %(k2)s / %(k3)s )
-"""),
-
-92: _("""
- type scalaire du cham_no :  %(k1)s  non reel.
-"""),
-
-93: _("""
- type scalaire du nume_ddl :  %(k1)s  non reel.
-"""),
-
-94: _("""
- si ncorr=0, les grandeurs doivent etre identiques : %(k1)s , %(k2)s
-"""),
-
-95: _("""
-  ncorr doit etre pair.
-"""),
-
-96: _("""
- gauss -> noeud a faire ...
-"""),
-
-97: _("""
- il faut modele
-"""),
-
-98: _("""
- non programme: %(k1)s
-"""),
-
-99: _("""
- melange de cham_elem_s et cham_no_s
-"""),
 }
index 27ddf62afae28015be50fd38fac8cb488f1cf094..f46ff3d568eb0f98fb138671171e6063acddd898 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF calculel2 Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF calculel2 Messages  DATE 19/05/2008   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -23,86 +23,52 @@ def _(x) : return x
 cata_msg={
 
 2: _("""
- le champ_s:  %(k1)s  est a la fois cham_elem_s et cham_no_s.
+ le CHAMP_S:  %(k1)s  est a la fois CHAM_ELEM_S et CHAM_NO_S.
 """),
 
 3: _("""
- le champ_s:  %(k1)s n'existe pas.
-"""),
-
-4: _("""
- types scalaires(i/r/c/...) differents pour :  %(k1)s  et  %(k2)s
-"""),
-
-5: _("""
- arret suite a l'alarme precedente.
-"""),
-
-6: _("""
- on ne sait pas renommer la cmp:  %(k1)s
+ le CHAMP_S:  %(k1)s n'existe pas.
 """),
 
 7: _("""
- trop d'antecedents. verifiez si le maillage de l'interface ne contient pas de noeuds coincidents ou  diminuez dist_refe.
+ trop d'antécédents
+ vérifiez si le maillage de l'interface ne contient pas de noeuds coincidents ou diminuez DIST_REFE.
 """),
 
 8: _("""
-  %(k1)s  valeurs de chamno de deplacement n'ont pas ete recopiees sur  %(k2)s  noeuds a affecter  ce qui peut entrainer des erreurs de calcul sur la masse ajoutee des sous structures deduites par rotation et translation definies dans le modele  generalise. augmentez dist_refe ou assurez vous de l' invariance du maillage de structure par la translation et la rotation definies dans le modele generalise.
+  %(k1)s  valeurs de CHAMNO de deplacement n'ont pas ete recopiees sur  %(k2)s  noeuds
+  a affecter  ce qui peut entrainer des erreurs de calcul sur la masse ajoutee des sous structures
+  deduites par rotation et translation definies dans le modele  generalise. augmentez dist_refe
+  ou assurez vous de l' invariance du maillage de structure par la translation et la rotation
+  definies dans le modele generalise.
 """),
 
 9: _("""
- plus de 50 pour cent  des valeurs de chamno de deplacement n'ont pas ete recopiees  ce qui peut entrainer des erreurs graves de calcul sur la masse ajoutee des sous structures deduites par rotation et translation definies dans le modele  generalise. augmentez dist_refe!!!.
+  -> plus de 50 %% des valeurs de CHAM_NO de déplacement n'ont pas été recopiées
+     ce qui peut entrainer des erreurs graves de calcul sur la masse ajoutée des
+     sous structures déduites par rotation et translation définies dans le modèle généralisé
+  -> Risque & Conseil :
+     augmentez DIST_REFE
 """),
 
 10: _("""
- trop de noeuds affectes
+ trop de noeuds affectés
 """),
 
 11: _("""
- seulement reel svp
+ Erreur d'utilisation :
+   Le maillage associé au modèle : %(k1)s
+   n'est pas le meme que celui du champ de matériaux : %(k2)s
 """),
 
 12: _("""
le cham_no est de longueur nulle.
Le CHAM_NO %(k3)s est vide.
 """),
 
 13: _("""
il manque la cmp: %(k1)s  sur le noeud: %(k2)s
Il manque la composante: %(k1)s  sur le noeud: %(k2)s pour le CHAM_NO: %(k3)s
 """),
 
-14: _("""
- ncmp doit etre >0
-"""),
-
-
-
-
-
-
-
-
-16: _("""
- reel ou k8 svp
-"""),
-
-17: _("""
- nbno doit etre >=0
-"""),
-
-18: _("""
- arret suite a l'erreur precedente.
-"""),
-
-
-
-
-
-
-
-
-
-
-
 21: _("""
  grandeur :  %(k1)s  inexistante au catalogue
 """),
@@ -116,7 +82,8 @@ cata_msg={
 """),
 
 24: _("""
- on traite un superelement  et le noeud courant n'est ni un noeud lagrange, ni un noeud physqiue du maillage.
+ on traite un superelement  et le noeud courant n'est ni un noeud lagrange,
+ ni un noeud physique du maillage.
 """),
 
 25: _("""
@@ -128,7 +95,9 @@ cata_msg={
 """),
 
 27: _("""
- le maillage associe au champ: %(k1)s  est different de celui associe au ligrel:  %(k2)s
+ Erreur utilisateur :
+   Le maillage associé au champ: %(k1)s  (%(k3)s)
+   est different de celui associe au ligrel:  %(k2)s  (%(k4)s)
 """),
 
 28: _("""
@@ -136,7 +105,8 @@ cata_msg={
 """),
 
 29: _("""
- la grandeur associee au champ  %(k1)s : %(k2)s  n est pas celle associee au parametre  %(k3)s : %(k4)s  (option: %(k5)s
+ la grandeur associée au champ  %(k1)s : %(k2)s
+ n'est pas celle associée au paramètre  %(k3)s : %(k4)s  (option: %(k5)s
 """),
 
 30: _("""
@@ -152,38 +122,33 @@ cata_msg={
 """),
 
 33: _("""
- pour le modele  %(k1)s  on ne peut pas visualiser les champs ensemble  %(k2)s  ... car les familles de pg sont differentes
+ pour le modele  %(k1)s  on ne peut pas visualiser les champs ensemble  %(k2)s  ...
+ car les familles de pg sont differentes
 """),
 
-
-
-
-
-
-
-
 35: _("""
- aucun element du modele n'est visualisable avec ecla_pg.
+ aucun élément du modèle n'est visualisable avec ECLA_PG
 """),
 
 36: _("""
- on ne trouve aucun point de gauss.
+ on ne trouve aucun point de Gauss
 """),
 
 37: _("""
- le type de resu_init est different de celui du resultat.
+ le type de RESU_INIT est différent de celui du résultat.
 """),
 
 38: _("""
- la liste de numeros d ordre est vide.
+ la liste de numéros d'ordre est vide.
 """),
 
 39: _("""
- les seuls champs autorises pour ecla_pg sont les champs reels.
+ les seuls champs autorisés pour ECLA_PG sont les champs réels.
 """),
 
 40: _("""
- le champ:  %(k1)s  a des elements ayant des sous-points. ces elements ne seront pas traites.
+ le champ:  %(k1)s  a des éléments ayant des sous-points
+ ces elements ne seront pas traités
 """),
 
 41: _("""
@@ -191,18 +156,14 @@ cata_msg={
 """),
 
 42: _("""
- le type_elem:  %(k1)s  n'a pas le nombre de points de gauss declare dans la routine eclau1. nom_cham= %(k2)s
+ le TYPE_ELEM:  %(k1)s  n'a pas le nombre de points de Gauss déclaré dans la routine ECLAU1
+ nom_cham= %(k2)s
 """),
 
 43: _("""
  nombre de noeuds > 27
 """),
 
-
-
-
-
-
 45: _("""
  famille de pg "liste" interdite: %(k1)s
 """),
@@ -223,51 +184,24 @@ cata_msg={
  carte inexistante.
 """),
 
-50: _("""
- 3
-"""),
-
 51: _("""
  cham_elem etendu a faire ...
 """),
 
 52: _("""
- probleme noeud tardif pour un champ a representation constante
-"""),
-
-53: _("""
-  inutile de comprimer 1 telle carte
-"""),
-
-54: _("""
- on devrait avoir icode=3 pour des mailles tardives.
+ probleme noeud tardif pour un champ à représentation constante
 """),
 
 55: _("""
-  erreur dans l'extraction d'un resuelem pour le grel:  %(k1)s le champ n'existe pas
+  erreur dans l'extraction d'un resuelem pour le grel :  %(k1)s
+  le champ n'existe pas
 """),
 
 56: _("""
-  erreur lors d'une extraction: le champ associe au parametre :  %(k1)s  n'est pas dans la liste des champs parametres.
-"""),
-
-57: _("""
- sa21
-"""),
-
-58: _("""
- sa22
-"""),
-
-59: _("""
- sa23
+  erreur lors d'une extraction:
+  le champ associe au parametre :  %(k1)s  n'est pas dans la liste des champs parametres.
 """),
 
-
-
-
-
-
 61: _("""
  Erreur développeur :
  L'option que l'on calcule ne connait pas le paramètre :  %(k1)s
@@ -298,70 +232,28 @@ cata_msg={
 
 """),
 
-65: _("""
- erreur programmeur 3
-"""),
-
-66: _("""
-  type_scalaire inconnu:  %(k1)s
-"""),
-
-67: _("""
- non programme.
-"""),
-
 68: _("""
- maille partiellement affectee.
+ maille partiellement affectée.
 """),
 
 69: _("""
- le parametre: %(k1)s  n'est pas un parametre de l'option: %(k2)s
+ le parametre: %(k1)s  n'est pas un paramètre de l'option: %(k2)s
 """),
 
 70: _("""
- le parametre: %(k1)s  n'est pas un parametre de l'option: %(k2)s  pour le type_element:  %(k3)s
+ le parametre: %(k1)s  n'est pas un paramètre de l'option: %(k2)s  pour le type_element:  %(k3)s
 """),
 
 71: _("""
- erreur :on ne trouve pas dans les arguments de la routine calcul de champ a associer au parametre: %(k1)s  (option: %(k2)s  type_element: %(k3)s )
-"""),
-
-72: _("""
- impossible...
+ on ne trouve pas dans les arguments de la routine CALCUL de champ à associer au parametre: %(k1)s
+  - option: %(k2)s
+  - type_element: %(k3)s
 """),
 
 73: _("""
- erreur :on n'a pas pu extraire toutes les cmps voulues du champ associe au parametre: %(k1)s  (option: %(k2)s  type_element: %(k3)s )
-"""),
-
-74: _("""
- objet:  %(k1)s  introuvable.
-"""),
-
-75: _("""
- long=8,16 ou 24
-"""),
-
-76: _("""
- erreur pgmeur: lk3 pas assez grand.
-"""),
-
-
-
-
-
-
-
-
-
-
-
-79: _("""
- ce chargement n est pas prevu en lagrange
-"""),
-
-80: _("""
- le calcul lagrangien avec les temperatures n'est pas encore disponible
+ on n'a pas pu extraire toutes les cmps voulues du champ associé au paramètre: %(k1)s
+ - option: %(k2)s
+ - type_element: %(k3)s )
 """),
 
 81: _("""
@@ -369,23 +261,11 @@ cata_msg={
 """),
 
 82: _("""
- il faut un modele.
-"""),
-
-83: _("""
- il n'y a pas de rigidite sur le modele.
-"""),
-
-84: _("""
- il n'y a pas de masse sur le modele.
-"""),
-
-85: _("""
- g_bili : champ initial impossible
+ il faut un MODELE
 """),
 
 86: _("""
- compor svp!
+ il faut fournir COMPOR
 """),
 
 87: _("""
@@ -393,40 +273,32 @@ cata_msg={
 """),
 
 88: _("""
- option  %(k1)s  non disponible sur les elements du modele- pas de champ cree
+ option  %(k1)s  non disponible sur les éléments du modèle
+ pas de champ créé
 """),
 
-
-
-
-
-
 92: _("""
- votre chargement contient plus d'une charge repartie. le calcul n'est pas possible pour les modeles de poutre.
+ votre chargement contient plus d'une charge répartie
+ le calcul n'est pas possible pour les modèles de poutre.
 """),
 
 93: _("""
   -> Vous avez renseigné un des mots-clés fonc_mult_*, coef_mult_*,
-     phas_deg, puis_puls, or votre charge ne contient pas d'effort réparti
+     PHAS_DEG, PUIS_PULS, or votre charge ne contient pas d'effort réparti
      sur des poutres. Ces mots-clés seront donc ignorés.
   -> Risque & Conseil :
-
 """),
 
 94: _("""
- pour un modele comportant des elements de plaque ou de coque, il faut le "cara_elem"
+ pour un modèle comportant des éléments de plaque ou de coque
+ il faut fournir le "CARA_ELEM"
 """),
 
-
-
-
-
-
 98: _("""
- erreur: la charge doit etre une charge mecanique !
+ la charge doit être une charge mécanique
 """),
 
 99: _("""
 option  %(k1)s non licite pour un calcul non lineaire.
option  %(k1)s non licite pour un calcul non linéaire.
 """),
 }
index 1dd341760267832ac7dad844d318ac25c6af1a73..fd0ee3363812f0468a80542720b8a299e109eff0 100644 (file)
-#@ MODIF calculel3 Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF calculel3 Messages  DATE 07/04/2008   AUTEUR GALENNE E.GALENNE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  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.        
+# COPYRIGHT (C) 1991 - 2007  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.
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- manque les accelerations
+1 : _("""
+ manque les accélérations
 """),
 
-2: _("""
- pour une sd resultat de type  dyna_trans, seuls les mots_cles fonc_mult et coef_mult sont autorises
+2 : _("""
+ pour une SD RESULTAT de type DYNA_TRANS,
+ seuls les mots-clés FONC_MULT et COEF_MULT sont autorisés
 """),
 
-3: _("""
- pour un sd resultat de type  evol_elas,seul le mot-cle fonc_mult est  autorise
+3 : _("""
+ pour une SD RESULTAT de type  EVOL_ELAS,
+ seul le mot-clé fonc_mult est autorisé
 """),
 
-4: _("""
- l'utilisation d mot-cle fonc_mult n'est licite que pour les sd resultats:  evol_elas, dyna_trans, dyna_harmo
+4 : _("""
+ l'utilisation du mot-clé FONC_MULT n'est licite que pour
+ les SD RESULTATS :  EVOL_ELAS, DYNA_TRANS, DYNA_HARMO
 """),
 
-5: _("""
-  pour calculer  %(k1)s  il faut sief_elno_elga ou efge_elno_depl
+5 : _("""
+  pour calculer  %(k1)s  il faut SIEF_ELNO_ELGA ou EFGE_ELNO_DEPL
 """),
 
-6: _("""
-  option  %(k1)s  non traitee pour un resultat de type  %(k2)s 
+6 : _("""
+  option  %(k1)s  non traitée pour un résultat de type  %(k2)s
 """),
 
-7: _("""
+7 : _("""
  calcul de  %(k1)s  impossible.
 """),
 
-8: _("""
- attention : les champs sief_elga_depl, sief_elga, sigm_elno_coqu etsigm_elno_depl sont absents : on ne peut pas calculer l'option %(k1)s  avec la sd de type  %(k2)s 
+8 : _("""
+ les champs SIEF_ELGA_DEPL, SIEF_ELGA, SIGM_ELNO_COQU et SIGM_ELNO_DEPL sont absents :
+ on ne peut pas calculer l'option %(k1)s  avec la SD de type  %(k2)s
 """),
 
-9: _("""
- attention : le champ  sigm_elno_depl est absent :  on ne peut pas calculer l'option %(k1)s  avec la sd de type  %(k2)s 
+9 : _("""
+ le champ  SIGM_ELNO_DEPL est absent :
+ on ne peut pas calculer l'option %(k1)s  avec la SD de type  %(k2)s
 """),
 
-10: _("""
- attention : le champ  sigm_elno_coqu est absent :  on ne peut pas calculer l'option %(k1)s  avec la sd de type  %(k2)s 
+10 : _("""
+ le champ  SIGM_ELNO_COQU est absent :
+ on ne peut pas calculer l'option %(k1)s  avec la SD de type  %(k2)s
 """),
 
-11: _("""
- le resultat  %(k1)s  doit comporter un champ de deplacement au numero d'ordre  %(k2)s  .
+11 : _("""
+ le résultat  %(k1)s  doit comporter un champ de déplacement au numéro d'ordre  %(k2)s  .
 """),
 
-12: _("""
- le mot cle prec_err est obligatoire avec l'option sing_elem
+12 : _("""
+ le mot cle PREC_ERR est obligatoire avec l'option SING_ELEM
 """),
 
-13: _("""
- le mot cle prec_err doit etre strictement superieur a zero et inferieur ou egal a 1
+13 : _("""
+ le mot cle PREC_ERR doit etre strictement superieur à zéro et inférieur ou egal à 1
 """),
 
-14: _("""
+14 : _("""
  pas d indicateur d erreur- on ne calcule pas l'option sing_elem
 """),
 
-15: _("""
- par defaut on utilise erre_elem_sigm
+1: _("""
+ par défaut on utilise ERZ2_ELEM_SIGM
 """),
 
-16: _("""
- par defaut on utilise erz2_elem_sigm
+1: _("""
+ le résultat  %(k1)s  doit comporter un champ de contraintes au numéro d'ordre  %(k2)s  .
 """),
 
-17: _("""
- le resultat  %(k1)s  doit comporter un champ de contraintes au numero d'ordre  %(k2)s  .
+1: _("""
+ pas de champ de contraintes pour calculer  %(k1)s
 """),
 
-18: _("""
- pas de champ de contraintes pour calculer  %(k1)s 
+1: _("""
+ probleme à l'appel de ALCHML pour  %(k1)s
 """),
 
-19: _("""
- probleme a l'appel de alchml pour  %(k1)s 
+20 : _("""
+ pas de champ d'endommagement pour calculer  %(k1)s
 """),
 
-20: _("""
- pas de champ endommagement pour calculer  %(k1)s 
+2: _("""
+ le calcul avec l'option ENDO_ELNO_ELGA nécessite au préalable un calcul avec l'option ENDO_ELGA
 """),
 
-21: _("""
- le calcul avec l'option endo_elno_elga necessite au prealable un calcul avec l'option endo_elga
+2: _("""
+  option inexistante: %(k1)s
 """),
 
-22: _("""
-  option inexistante: %(k1)s 
+2: _("""
+ option :  %(k1)s
 """),
 
-23: _("""
- option :  %(k1)s 
-"""),
-
-25: _("""
+25 : _("""
  calcul non disponible
 """),
 
-27: _("""
- type :  %(k1)s  incompatible avec l'option :  %(k2)s 
-"""),
-
-28: _("""
- type de champ inconnue
+27 : _("""
+ type :  %(k1)s  incompatible avec l'option :  %(k2)s
 """),
 
-29: _("""
- erreur jacot 1
+2: _("""
+ type de champ inconnu
 """),
 
-30: _("""
- il faut un modele ou des charges.
+30 : _("""
+ il faut un modèle ou des charges.
 """),
 
-31: _("""
- la masse du macr_elem : %(k1)s  n'a pas encore ete calculee.
+31 : _("""
+ la masse du MACR_ELEM : %(k1)s  n'a pas encore ete calculée.
 """),
 
-32: _("""
+32 : _("""
  il manque des masses.
 """),
 
-33: _("""
- la rigidite du macr_elem : %(k1)s  n'a pas encore ete calculee.
+33 : _("""
+ la rigidité du MACR_ELEM : %(k1)s  n'a pas encore été calculée.
 """),
 
-34: _("""
- il manque des rigidites.
+34 : _("""
+ il manque des rigidités.
 """),
 
-35: _("""
- le modele doit contenir des elements finis ou des sous-structures.
+35 : _("""
+ le modèle doit contenir des éléments finis ou des sous-structures.
 """),
 
-
-
-
-
-
-
-
-
-
-
-38: _("""
- on ne traite pas le type_scalaire: %(k1)s 
+38 : _("""
+ on ne traite pas le type_scalaire: %(k1)s
 """),
 
-39: _("""
- le modele contient des elements de structure. il faut probablement utiliser le mot-cle cara_elem.
+39 : _("""
+ le modèle contient des éléments de structure
+ il faut probablement utiliser le mot-clé CARA_ELEM.
 """),
 
-40: _("""
+40 : _("""
   -> Le modèle a probablement besoin d'un champ de matériau (mot-clé CHAM_MATER).
 
   -> Risque & Conseil :
      Ce message peut aider à comprendre un éventuel problème ultérieur lors de calculs élémentaires
      nécessitant des caractéristiques matérielles.
-     Vérifier si votre modélisation nécessite un CHAM_MATER.
+     Vérifiez si votre modélisation nécessite un CHAM_MATER.
 """),
 
-41: _("""
- les charges ne s'appuient pas toutes sur le meme modele.
+41 : _("""
+ les charges ne s'appuient pas toutes sur le meme modèle.
 """),
 
-42: _("""
- les charges ne s'apuient pas sur le modele donne en argument.
+42 : _("""
+ les charges ne s'appuient pas sur le modèle donné en argument.
 """),
 
-43: _("""
- les charges sont de type different.
+43 : _("""
+ les charges sont de type différent.
 """),
 
-44: _("""
- les charges ne s'appuient pas toutes sur le meme modele
+44 : _("""
+ les charges ne s'appuient pas toutes sur le meme modèle
 """),
 
-45: _("""
- donnees incorrectes.
+45 : _("""
+ données incorrectes.
 """),
 
-46: _("""
calc_k_g : champ initial impossible
+50 : _("""
 il faut un modèle
 """),
 
-47: _("""
- le fond de fissure doit contenir un noeud et un seul
+51 : _("""
+ il manque le modèle
 """),
 
-48: _("""
- il faut definir la normale au fond de fissure
+52 : _("""
+ le champ doit être un CHAM_ELEM.
 """),
 
-49: _("""
- on ne trouve pas le .nomo pour: %(k1)s 
+53 : _("""
+ ne traite qu'un CHAM_ELEM réel
 """),
 
-50: _("""
-  il faut un modele
-"""),
-
-51: _("""
- il manque le modele
-"""),
-
-52: _("""
- le champ doit etre un cham_elem.
-"""),
-
-53: _("""
- ne traite qu'un cham_elem reel
-"""),
-
-54: _("""
+54 : _("""
  longueurs des modes locaux imcompatibles entre eux.
 """),
 
-55: _("""
- la longueur:long est trop petite.
-"""),
-
-56: _("""
+56 : _("""
  il n'y a pas autant de composantes
 """),
 
-57: _("""
+57 : _("""
  on ne sait pas moyenner cette composante negative
 """),
 
-58: _("""
+58 : _("""
  champs sur modeles differents
 """),
 
-59: _("""
+59 : _("""
   %(k1)s  doit etre un cham_elem.
 """),
 
-60: _("""
+60 : _("""
  longueurs des modes locaux champ1 imcompatibles entre eux.
 """),
 
-61: _("""
+61 : _("""
  longueurs des modes locaux champ2 imcompatibles entre eux.
 """),
 
-62: _("""
+62 : _("""
  composante non definie
 """),
 
-63: _("""
+63 : _("""
  champ de geometrie non trouve
 """),
 
-64: _("""
- l'instant du calcul est pris  arbitrairement a 0.0 
+64 : _("""
+ l'instant du calcul est pris  arbitrairement a 0.0
 """),
 
-65: _("""
+65 : _("""
   on n'accepte un instant arbitraire que si le concept deformations anelastiques n'a qu'1 champ.
 """),
 
-66: _("""
-  le concept evol_noli :  %(k1)s  ne contient aucun champ de deformations anelastiques.
-"""),
-
-67: _("""
- pour calculer l'option  %(k1)s  les parametres suivants sont obligatoires: "pgeomer" et "pcontrr".
-"""),
-
-
-
-
-
-
-
-
-69: _("""
- il n y a ni elements ni sous-struc
+66 : _("""
+  le concept evol_noli :  %(k1)s  ne contient aucun champ de déformations anélastiques.
 """),
 
-
-
-
-
-
-71: _("""
- il faut 1 chargement de rotation et un seul. 
+71 : _("""
+ il faut 1 chargement de rotation et un seul.
 """),
 
-72: _("""
-  il ne faut pas definir plus d"un champ de vitesse 
+72 : _("""
+  il ne faut pas definir plus d"un champ de vitesse
 """),
 
-73: _("""
+73 : _("""
  le champ:  %(k1)s  n'est ni un cham_elem ni un resuelem
 """),
 
-74: _("""
- type scalaire interdit : %(k1)s 
-"""),
-
-75: _("""
-  on n'accepte un instant arbitraire que si le concept temperature n'a qu'1 champ.
-"""),
-
-76: _("""
-  le concept evol_ther :  %(k1)s  ne contient aucun champ de temperature.
+74 : _("""
+ type scalaire interdit : %(k1)s
 """),
 
-77: _("""
- le champ de temperature utilise est independant du temps.
+7: _("""
+ la matrice A est singulière
 """),
 
-78: _("""
- temperature de reference a probleme.
-"""),
-
-79: _("""
- la matrice a est singuliere
-"""),
-
-81: _("""
+81 : _("""
  cette fonction ne marche que pour des modes locaux de type chno, vect, ou mat
 """),
 
-82: _("""
+82 : _("""
  le mode local est de type matrice non_carree
 """),
 
-83: _("""
- 4
-"""),
-
-84: _("""
- il n y a pas de parametre  %(k1)s  associe a la grandeur: %(k2)s  dans l option: %(k3)s 
-"""),
-
-85: _("""
- il y a plusieurs parametres  %(k1)s  associes a la grandeur: %(k2)s  dans l option: %(k3)s 
-"""),
-
-86: _("""
-  %(k1)s  non prevu
+84 : _("""
+ il n y a pas de parametre  %(k1)s  associe a la grandeur: %(k2)s  dans l option: %(k3)s
 """),
 
-87: _("""
- elrefe inconnu  %(k1)s 
+8: _("""
+ il y a plusieurs parametres  %(k1)s  associes a la grandeur: %(k2)s  dans l option: %(k3)s
 """),
 
-88: _("""
- les charges sont incoherentes avec le modele.
+8: _("""
+ les charges ne s'appuient pas toutes sur le même modèle.
 """),
 
-89: _("""
erreur: les charges ne s appuient pas toutes sur le meme modele.
+90 : _("""
le champ de THETA est inexistant dans la structure de données  %(k1)s  de type THETA_GEOM .
 """),
 
-90: _("""
- le champ de theta est inexistant dans la structure de donnees  %(k1)s  de type theta_geom .
+9: _("""
+ une des charges n'est pas mécanique
 """),
 
-91: _("""
- erreur: une des charges n'est pas mecanique
-"""),
-
-92: _("""
+92 : _("""
  erreur: une des charges n'est pas thermique
 """),
 
-93: _("""
erreur: une des charges n'est pas acoustique
+93 : _("""
+ une des charges n'est pas acoustique
 """),
 
-94: _("""
erreur: le champ doit etre un cham_elem aux points de gauss
+94 : _("""
le champ doit être un CHAM_ELEM aux points de gauss
 """),
 
-95: _("""
- avec un cham_elem calcule sur une liste de maille, il faut utiliser le mot cle "modele:"
+95 : _("""
+ avec un CHAM_ELEM calcule sur une liste de maille,
+ il faut utiliser le mot cle "MODELE"
 """),
 
-96: _("""
- pour prendre en compte les termes d'inertie il est preferable d'utiliser la commande "calc_elem". le mot cle "acce" n'est pas traite et les resultats risquent d'etre faux.
+96 : _("""
+  pour prendre en compte les termes d'inertie,
+  il est préférable d'utiliser la commande "CALC_ELEM".
+  le mot cle "ACCE" n'est pas traité et les résultats risquent d'être faux.
 """),
 
-97: _("""
- le champ de nom symbolique theta existe deja dans la s.d. resultat  %(k1)s 
-"""),
+97 : _("""
+  Erreur d'utilisation :
+    Fonctionnalité : PROJ_CHAMP
+    On cherche à projeter des mailles sur certains noeuds.
+    Mais la la liste de noeuds est vide.
 
-98: _("""
- le champ de nom symbolique grad_noeu_theta existe deja dans la s.d. resultat  %(k1)s 
+  Conseil :
+    Cette erreur peut venir d'une mauvaise utilisation du mot clé
+    PROJ_CHAMP/DISTANCE_MAX
 """),
 
-99: _("""
- il faut donner 3 composantes de la direction
-"""),
 }
index 86e2709a57dceed24b28a152b99753af8324ce38..b5a214ee6dfe17ec8839247183d70ec3c8bf3520 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF calculel4 Messages  DATE 23/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF calculel4 Messages  DATE 06/05/2008   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- option non operationnelle: seule l'option couronne est a utiliserdans le cas ou on emploie le mot cle theta_3d .
-"""),
-
-2: _("""
- il faut donner 3 composantes de la direction,la 3-eme nulle
-"""),
-
-3: _("""
- il faut donner la direction de propagation en 2d    la direction par defaut n'existe plus
-"""),
-
-4: _("""
- option non operationnelle: seule l'option couronne est a utiliserdans le cas ou on emploie le mot cle theta_2d .
-"""),
-
-5: _("""
- option inexistante: seule l'option bande est a utiliser dans le cas ou on emploie le mot cle theta_bande .
-"""),
-
-6: _("""
- la normale n'est pas orthogonale a la tangente a l'origine
-"""),
-
-7: _("""
- la normale n'est pas orthogonale a la tangente a l'extremite
-"""),
-
-8: _("""
+8 : _("""
  le resultat  %(k1)s  n'existe pas
 """),
 
-9: _("""
- creation de la table  %(k1)s
-"""),
-
-
-
-
-
-
-
-
-
-
-
-
-
+10 : _("""
+ Erreur d'utilisation :
+   On ne trouve pas de variables de commandes ('TEMP', 'HYDR', ...) :
+   Option: %(k2)s  type_element: %(k3)s )
 
-
-
-13: _("""
- probleme a la recuperation d'un champ
+ Risques & conseils :
+   La cause la plus fréquente de cette erreur est d'avoir oublié de
+   renseigner AFFE_MATERIAU/AFFE_VARC.
+   (Ou de n'avoir renseigné que AFFE_VARC/VALE_REF sans avoir renseigné EVOL ou CHAMP_GD)
 """),
 
-
-
-
-
-
-
-
-
-
-
-16: _("""
- dans le cas d'une sd resultat de type dyna_trans, le mot-cle excit est obligatoire.
+11 : _("""
+ Erreur d'utilisation lors de l'affectation des variables de commande (AFFE_MATERIAU/AFFE_VARC):
+   Pour la variable de commande %(k1)s,
+   Vous avez oublié d'utiliser l'un des 2 mots clés CHAMP_GD ou EVOL.
+   L'abscence de ces 2 mots clés n'est permise que pour NOM_VARC='TEMP' (modélisations THM)
 """),
 
-17: _("""
- pour un resultat de type mode_meca l option de calcul doit etre k_g_moda.
+12 : _("""
+ Erreur de programmation (catalogue des éléments finis) :
+ Les éléments finis ayant l'attribut VOLU_FINI='OUI' ne peuvent créer que des
+ matrices élémentaires non-symétriques.
 """),
 
 
 
 
-
-
-19: _("""
- le mot cle 'fissure' est obligatoire avec l'option  %(k1)s
-"""),
-
-20: _("""
- le mot cle 'fond_fiss' est obligatoire avec l'option  %(k1)s
-"""),
-
-21: _("""
- mot cle fond_fiss obligatoire pour l option  %(k1)s
-"""),
-
-22: _("""
- champ theta calcule automatiquement
-"""),
-
-23: _("""
- pour l option  %(k1)s (3d local) utiliser le mot cle theta_lagr
-"""),
-
-24: _("""
- il faut donner 3 composantes de la direction %(k1)s
-"""),
-
-25: _("""
- mot cle propagation utilise seulement pour le calcul de g avec propagation lagrangienne
-"""),
-
-26: _("""
- cette combinaison de lissage n'est pas programmee pour l'option :  %(k1)s .
-"""),
-
-27: _("""
- le degre des polynomes de legendre doit etre inferieur ou egal au nombre de noeuds du fond de fissure avec la methode theta-lagrange
-"""),
-
-28: _("""
- le lissage de g doit etre de type legendre si le lissage de theta est de type legendre
-"""),
-
-29: _("""
- l'option  %(k1)s  n'est pas permise avec le lissage 'lagrange_regu'
-"""),
-
-30: _("""
- si la methode 'lagrange_regu' est utilisee pour le lissage, alors le lissage de g et de theta doivent etre de type 'lagrange_regu'.
-"""),
-
-31: _("""
- champ theta obligatoire avec  %(k1)s . utiliser le mot cle theta_lagr.
-"""),
-
-32: _("""
- fond obligatoire avec option calc_k_g
-"""),
-
-36: _("""
- l usage des polynomes de legendre dans le cas d un fond de fissure clos est interdit.
-"""),
-
-37: _("""
- acces impossible au deplacement
-"""),
-
-38: _("""
- mot-clef <bornes> obligatoire avec l option  %(k1)s  !
-"""),
-
-39: _("""
- acces impossible au mode propre
-"""),
-
-40: _("""
- option non dispo actuellement
-"""),
-
-41: _("""
+41 : _("""
  erreur_01
 """),
 
-42: _("""
+42 : _("""
  erreur_02
 """),
 
-43: _("""
+43 : _("""
  le nom_para n'existe pas
 """),
 
-44: _("""
+44 : _("""
  0 ligne trouvee pour le nom_para
 """),
 
-45: _("""
+45 : _("""
  plusieurs lignes trouvees
 """),
 
-46: _("""
+46 : _("""
  code retour de "tbliva" inconnu
 """),
 
-47: _("""
+47 : _("""
  type_resu inconnu:  %(k1)s
 """),
 
-48: _("""
+48 : _("""
  erreur calcul alpha0 :champ depl elastique non trouve
 """),
 
-49: _("""
+49 : _("""
  erreur : le champ depl elastique n'existe pas
 """),
 
-50: _("""
+50 : _("""
  erreur: le champ sief_elga_depl n'existe pas
 """),
 
-51: _("""
+51 : _("""
  methode zac : accommodation et chargement non radial --> methode non appliquable
 """),
 
-
-
-
-
-
-53: _("""
+53 : _("""
  longueurs des modes locaux incompatibles entre eux.
 """),
 
-54: _("""
+54 : _("""
  aucuns noeuds sur lesquels projeter.
 """),
 
-55: _("""
+55 : _("""
  pas de mailles a projeter.
 """),
 
-56: _("""
+56 : _("""
   %(k1)s  pas trouve.
 """),
 
-57: _("""
+57 : _("""
  il n'y a pas de mailles a projeter.
 """),
 
-58: _("""
+58 : _("""
  les maillages a projeter sont ponctuels.
 """),
 
-59: _("""
+59 : _("""
  maillages 1 differents.
 """),
 
-60: _("""
+60 : _("""
  maillages 2 differents.
 """),
 
-61: _("""
+61 : _("""
  probleme dans l'examen de  %(k1)s
 """),
 
-62: _("""
+62 : _("""
  aucun numero d'ordre dans  %(k1)s
 """),
 
-63: _("""
- on ne sait pas encore projeter les champs  %(k1)s
+63 : _("""
+ On n'a pas pu projeter le champ %(k1)s de la sd_resultat %(k2)s
+ vers la sd_resultat %(k3)s pour le numéro d'ordre %(i1)d
 """),
 
-64: _("""
aucun champ projete.
+64 : _("""
Aucun champ projete.
 """),
 
-65: _("""
+65 : _("""
   maillages non identiques :  %(k1)s  et  %(k2)s
 """),
 
-66: _("""
+66 : _("""
  pas de chmate
 """),
 
-67: _("""
+67 : _("""
  erreur dans etanca pour le probleme primal
 """),
 
-68: _("""
+68 : _("""
  erreur dans etenca pour le probleme dual
 """),
 
-69: _("""
+69 : _("""
  On ne trouve pas la variable de commande :  %(k1)s  pour la maille:  %(k2)s
 """),
 
-
-
-
-
-73: _("""
- ! ligrel incompatible avec modele !
-"""),
-
-
-
-
-
-
-
-
-75: _("""
- ! pb acces simultane carth/t !
-"""),
-
-76: _("""
- ! pb etenca cartf !
-"""),
-
-77: _("""
- ! pb etenca carth !
-"""),
-
-78: _("""
- ! pb etenca cartt !
-"""),
-
-79: _("""
+79 : _("""
  La grandeur :  %(k1)s  n'existe pas dans le catalogue des grandeurs.
 """),
 
-80: _("""
+80 : _("""
  le nom de la grandeur  %(k1)s  ne respecte pas le format xxxx_c
 """),
 
-81: _("""
+81 : _("""
  probleme dans le catalogue des grandeurs simples, la grandeur complexe %(k1)s  ne possede pas le
  meme nombre de composantes que son homologue réelle %(k2)s
 """),
 
-82: _("""
+82 : _("""
  probleme dans le catalogue des grandeurs simples, la grandeur %(k1)s  ne possede pas les memes champs que son homologue reelle %(k2)s
 """),
 
-83: _("""
+83 : _("""
  erreur: le calcul des contraintes ne fonctionne que pour le phenomene mecanique
 """),
 
-84: _("""
+84 : _("""
  erreur numeros des noeuds bords
 """),
 
-85: _("""
+85 : _("""
  erreur: les elements supportes sont tria3 ou tria6
 """),
 
-86: _("""
+86 : _("""
  erreur: les elements supportes sont quad4 ou quad8 ou quad9
 """),
 
-87: _("""
+87 : _("""
  maillage mixte tria-quad non supporte pour l estimateur zz2
 """),
 
-88: _("""
+88 : _("""
  erreur: les mailles supportees sont tria ou quad
 """),
 
-89: _("""
+89 : _("""
  erreur: un element du maillage possede tous ses sommets sur une frontiere. il faut au moins un sommet interne.
 Pour pouvoir utiliser ZZ2 il faut remailler le coin de telle facon que tous les trg aient au moins un sommet interieur.
 """),
 
-90: _("""
- erreur programmeur
-"""),
-
-91: _("""
+91 : _("""
  on ne trouve pas de routine te0npq npq doit etre compris entre 1 et 600 ici : npq = %(k1)s
 """),
 
-92: _("""
+92 : _("""
   relation :  %(k1)s  non implantee sur les poulies
 """),
 
-93: _("""
+93 : _("""
   deformation :  %(k1)s  non implantee sur les poulies
 """),
 
-94: _("""
+94 : _("""
  l'attribut:  %(k1)s  n'existe pas pour le type:  %(k2)s
 """),
 
-95: _("""
- erreur de programmation :on ne trouve pas dans les arguments de la routine calcul de champ a associer au parametre: %(k1)s  (option: %(k2)s  type_element: %(k3)s )
+95 : _("""
+ Erreur de programmation ou d'utilisation :
+   On ne trouve pas dans les arguments de la routine calcul de champ a associer
+   au parametre: %(k1)s  (option: %(k2)s  type_element: %(k3)s )
 """),
 
-96: _("""
- erreur de programmation :on n'a pas pu extraire toutes les cmps voulues du champ global associe au parametre: %(k1)s  (option: %(k2)s  type_element: %(k3)s )
+96 : _("""
+ Erreur de programmation :
+ on n'a pas pu extraire toutes les cmps voulues du champ global associe au parametre: %(k1)s  (option: %(k2)s  type_element: %(k3)s )
 """),
 
-97: _("""
- ! tout = oui obligatoire avec  %(k1)s !
+97 : _("""
+ TOUT = OUI obligatoire avec  %(k1)s
 """),
 
-98: _("""
- attention : on n'a pas pu recuperer le parametre theta dans le resultat  %(k1)s , valeur prise pour theta: 0.57
+98 : _("""
+ on n'a pas pu récupérer le paramètre THETA dans le résultat  %(k1)s
+ valeur prise pour THETA: 0.57
 """),
 
-99: _("""
- attention : recuperation d'une valeur de theta illicite dans le resultat  %(k1)s valeur prise pour theta: 1.
+99 : _("""
+ récupération d'une valeur de THETA illicite dans le résultat  %(k1)s
+ valeur prise pour THETA: 1.
 """),
+
 }
index 03b895c8d76f22a3cc33d81693cf11c9da6e2e21..d1dbf3cf0cef7fb4ce7c3b3fd2b8ff1ddb7e0ac7 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF calculel5 Messages  DATE 23/04/2007   AUTEUR GNICOLAS G.NICOLAS 
+#@ MODIF calculel5 Messages  DATE 18/03/2008   AUTEUR CNGUYEN C.NGUYEN 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- ! attention numeros d'ordre non contigus !
-"""),
-
-2: _("""
+2 : _("""
  pour les options de thermique, il y a encore a travailler !!
 """),
 
-4: _("""
+4 : _("""
  !! probleme creation cham_elem nul dans alchml !!
 """),
 
-5: _("""
- nb_ec trop grand
-"""),
 
-6: _("""
- cumul impossible avec i
-"""),
 
-7: _("""
- cumul impossible avec kn
-"""),
 
-8: _("""
- il faut donner "maille"
+
+
+
+
+
+
+
+
+8 : _("""
+ il faut renseigner le mot clé MAILLE
 """),
 
-10: _("""
+10 : _("""
  nbnocp est trop grand, contacter l'assistance
 """),
 
-11: _("""
+11 : _("""
  le parametre est a valeurs de type  " %(k1)s "  et la valeur de reference de type  " %(k2)s ".
 """),
 
-12: _("""
"type_test" inconnu
+12 : _("""
TYPE_TEST inconnu
 """),
 
-13: _("""
+13 : _("""
  le champ  %(k1)s  est a valeurs de type  " %(k2)s "  et la valeur de reference de type  " %(k3)s ".
 """),
 
-14: _("""
+14 : _("""
  le champ  %(k1)s  est de type inconnu.
 """),
 
@@ -75,21 +70,17 @@ cata_msg={
 
 
 
-16: _("""
- ! nbnv: typelem inconnu !
-"""),
-
-17: _("""
- ! jac(ipg): div par zero !
-"""),
-
-
-
 
 
 
 
+20 : _("""
+ le GROUP_NO  %(k1)s  contient  %(k2)s  noeuds
+"""),
 
+21 : _("""
+ le GROUP_MA  %(k1)s  contient  %(k2)s  mailles
+"""),
 
 
 
@@ -97,65 +88,32 @@ cata_msg={
 
 
 
-20: _("""
- le group_no  %(k1)s  contient  %(k2)s  noeuds
-"""),
 
-21: _("""
- le group_ma  %(k1)s  contient  %(k2)s  mailles
-"""),
 
-22: _("""
- ! jac(1): div par zero !
-"""),
 
-23: _("""
- ! jac(2): div par zero !
-"""),
 
-24: _("""
- ! hf: div par zero !
-"""),
 
-25: _("""
- ! calcul naret 2d: typelem inconnu !
-"""),
 
-26: _("""
- ! calcul nsomm 2d: typelem inconnu !
-"""),
 
-27: _("""
+27 : _("""
  ! pas de lumpe en 3d p2: hexa20_d --> face8_d !
 """),
 
-28: _("""
+28 : _("""
  ! pas de lumpe en 3d p2: hexa27 --> face9_d !
 """),
 
-29: _("""
+29 : _("""
  ! pas de lumpe en 3d p2: penta15_d --> face6/8_d !
 """),
 
-30: _("""
+30 : _("""
  ! pas de lumpe en 3d p2: tetra10_d --> face6_d !
 """),
 
-31: _("""
- ! calcul naret/nsomm 3d: typelem inconnu !
-"""),
 
-32: _("""
- ! l'objet chval des segments est inexistant !
-"""),
 
-33: _("""
- ! l'objet chval2 des segments est inexistant !
-"""),
 
-34: _("""
- ! p2 obligeatoire avec terme source non nul !
-"""),
 
 
 
@@ -164,321 +122,213 @@ cata_msg={
 
 
 
+34 : _("""
+ ! p2 obligeatoire avec terme source non nul !
+"""),
+
 
 
 
-37: _("""
- programme  %(k1)s
-"""),
 
-38: _("""
+
+38 : _("""
   il faut definir un champ de vitesse
 """),
 
-39: _("""
+39 : _("""
  la grandeur pour la variable:  %(k1)s  doit etre:  %(k2)s  mais elle est:  %(k3)s
 """),
 
-40: _("""
+40 : _("""
  nombre de sous-points incoherent avec etat initial
 """),
 
-41: _("""
+41 : _("""
  pas de variables internes initiales pour la maille  %(k1)s
 """),
 
-42: _("""
+42 : _("""
  comportements incompatibles :  %(k1)s  et  %(k2)s  pour la maille  %(k3)s
 """),
 
-43: _("""
- erreur pgmeur dans zechlo : type_scalaire: %(k1)s  non autorise(r ou c),
-"""),
 
-44: _("""
+
+
+
+44 : _("""
  ! le champ doit etre un cham_elem !
 """),
 
-45: _("""
+45 : _("""
  ! longueurs des modes locaux imcompatibles entre eux !
 """),
 
-46: _("""
+46 : _("""
  ! terme normalisation global nul !
 """),
 
-
-
-
-
-
-
-
-48: _("""
- PROJ_CHAMP (ou LAISON_MAIL) :
- Le noeud : %(k1)s      est projeté sur une maille un peu distante (%(k2)s).
-    distance à la maille  =   %(r1)g
-    diamètre de la maille =   %(r2)g
+48 : _("""
+ PROJ_CHAMP (ou LIAISON_MAIL) :
+ Certains noeuds ont été projetés sur des mailles un peu distantes
+ (la distance à la maille est supérieure à 1/10ième du diamètre de la maille) 
+ Le noeud projeté le plus loin est le noeud: %(k1)s
+ Il a été projeté à la distance %(r1)f
 """),
 
-49: _("""
+49 : _("""
  LIAISON_MAIL :
  La relation linéaire destinée à éliminer le noeud esclave %(k1)s est une tautologie
  car la maille maitre en vis à vis de ce noeud possède ce meme noeud dans sa connectivité.
  On ne l'écrit donc pas.
 """),
 
-50: _("""
+50 : _("""
  Présence de coques orthotropes, les mots clés ANGL_REP ou VECTEUR
  du mot clé facteur REPE_COQUE ne sont pas traités.
 """),
 
-51: _("""
+51 : _("""
  Le repère de post-traitement a été défini dans la commande AFFE_CARA_ELEM mot clé facteur COQUE.
- Il est conseillé de définir ce repère à l'aide du mot clé ANGL_REP ou VECTEUR du mot clé 
+ Il est conseillé de définir ce repère à l'aide du mot clé ANGL_REP ou VECTEUR du mot clé
  facteur REPE_COQUE de la commande CALC_ELEM.
 """),
 
-52: _("""
+52 : _("""
  Présence de GRILLE dans la modélisation, les mots clés ANGL_REP ou VECTEUR
  du mot clé facteur REPE_COQUE ne sont pas traités.
 """),
 
-53: _("""
+53 : _("""
  La super_maille %(k1)s n'existe pas dans le maillage %(k2)s.
 """),
 
-54: _("""
+54 : _("""
  La maille %(k1)s doit etre une maille de peau de type QUAD ou TRIA
  car on est en 3D et elle est de type %(k2)s.
 """),
 
-55: _("""
+55 : _("""
  L'un des mots-cles ANGL_REP ou VECTEUR est à fournir pour l'option ARCO_ELNO_SIGM.
 """),
 
-56: _("""
- La combinaison 'fonction multiplicatrice' et 'chargement de type fonction' n'est pas autorisée car 
+56 : _("""
+ La combinaison 'fonction multiplicatrice' et 'chargement de type fonction' n'est pas autorisée car
  votre chargement %(k1)s contient une charge exprimée par une formule.
- Pour réaliser cette combinaison, vous devez transformer votre charge 'formule' en charge 'fonction' 
+ Pour réaliser cette combinaison, vous devez transformer votre charge 'formule' en charge 'fonction'
  (via l'opérateur DEFI_FONCTION ou CALC_FONC_INTERP).
  On poursuit sans tenir compte de la fonction multiplicatrice.
 """),
 
-57: _("""
- La combinaison de chargements de meme type n'est pas autorisée car l'un des chargements 
+57 : _("""
+ La combinaison de chargements de meme type n'est pas autorisée car l'un des chargements
  contient une charge exprimée par une formule.
- Pour réaliser cette combinaison, vous devez transformer votre charge 'formule' en charge 'fonction' 
- (via l'opérateur DEFI_FONCTION ou CALC_FONC_INTERP) 
+ Pour réaliser cette combinaison, vous devez transformer votre charge 'formule' en charge 'fonction'
+ (via l'opérateur DEFI_FONCTION ou CALC_FONC_INTERP)
 """),
 
-58: _("""
+58 : _("""
  La combinaison de chargements de type 'déformation initiale' n'a aucun sens physique.'
 """),
 
-59: _("""
+59 : _("""
  La combinaison de chargements de type 'pesanteur' n'a aucun sens physique.'
 """),
 
-60: _("""
+60 : _("""
  La combinaison de chargements de type 'rotation' est déconseillée.
  Veuillez plutot utiliser un chargement de type 'force interne'.
 """),
 
-63: _("""
+63 : _("""
  Il faut au moins 2 numéros d'ordre pour traiter l'option %(k1)s
 """),
 
-64: _("""
- les champs ne sont pas de la meme grandeur:  type du cham_no  %(k1)s 
-   type du cham_no_affe  %(k2)s 
+64 : _("""
+ les champs ne sont pas de la meme grandeur:  type du cham_no  %(k1)s
+   type du cham_no_affe  %(k2)s
 """),
 
-65: _("""
- composante non definie dans  la grandeur.  composante:  %(k1)s 
+65 : _("""
+ composante non definie dans  la grandeur.  composante:  %(k1)s
 """),
 
-66: _("""
+66 : _("""
+
  le nombre de composantes affectees n'est pas egal  au nombre de composantes a affecter
- occurence de affe numero %(i1)d 
- nbre de cmp affectees :  %(i2)d 
- nbre de cmp a affecter :  %(i3)d 
+ occurence de affe numero %(i1)d
+ nbre de cmp affectees :  %(i2)d
+ nbre de cmp a affecter :  %(i3)d
 """),
 
-67: _("""
- erreurs donneesle group_ma  %(k1)s 
-  n'a pas le meme nombre de mailles  que le group_ma  %(k2)s 
+67 : _("""
+ erreurs donneesle GROUP_MA  %(k1)s
+  n'a pas le meme nombre de mailles  que le GROUP_MA  %(k2)s
 """),
 
-68: _("""
- erreurs donneesle group_ma  %(k1)s 
-  n'a pas les memes types de maille  que le group_ma  %(k2)s 
+68 : _("""
+ erreurs donneesle GROUP_MA  %(k1)s
+  n'a pas les memes types de maille  que le GROUP_MA  %(k2)s
 """),
 
-69: _("""
- erreurs donnees : la maille  %(k1)s  du maillage  %(k2)s 
-  n'est pas la translation de la  maille  %(k3)s 
-  du maillage  %(k4)s 
+69 : _("""
+ erreurs donnees : la maille  %(k1)s  du maillage  %(k2)s
+  n'est pas la translation de la  maille  %(k3)s
+  du maillage  %(k4)s
     vecteur translation :  %(r1)f %(r2)f %(r3)f
 """),
 
-70: _("""
- l'instant  de calcul  %(r1)f  n'existe pas dans  %(k1)s 
+70 : _("""
+ l'instant  de calcul  %(r1)f  n'existe pas dans  %(k1)s
 """),
 
-71: _("""
- plusieurs numeros d'ordre trouves pour l'instant  %(r1)f 
+71 : _("""
+ plusieurs numeros d'ordre trouves pour l'instant  %(r1)f
 """),
 
-72: _("""
- cette commande est reentrante :   sd resultat en sortie     %(k1)s 
-    sd resultat "resu_final"  %(k2)s 
+72 : _("""
+ cette commande est reentrante :   sd resultat en sortie     %(k1)s
+    sd resultat "resu_final"  %(k2)s
 """),
 
-73: _("""
- la sd resultat en sortie  %(k1)s 
-  doit contenir qu'un seul nume_ordre %(k2)s 
+73 : _("""
+ la sd resultat en sortie  %(k1)s
+  doit contenir qu'un seul nume_ordre %(k2)s
 """),
 
-74: _("""
- manque le champ  %(k1)s  dans la sd resultat  %(k2)s 
-  pour le nume_ordre  %(i1)d 
+74 : _("""
+ manque le champ  %(k1)s  dans la sd resultat  %(k2)s
+  pour le nume_ordre  %(i1)d
 """),
 
-
-
-
-
-
-
-
-76: _("""
- on ne sait pas encore decouper le type_element :  %(k1)s  en sous-elements %(k2)s 
-    elrefa  :  %(k3)s 
-    famille :  %(k4)s 
+76 : _("""
+ on ne sait pas encore decouper le type_element :  %(k1)s  en sous-elements %(k2)s
+    elrefa  :  %(k3)s
+    famille :  %(k4)s
 """),
 
-
-
-
-
-
-78: _("""
- on ne sait pas encore decouper le type_element :  %(k1)s  en sous-elements %(k2)s 
-    elrefa :  %(k3)s 
+78 : _("""
+ on ne sait pas encore decouper le type_element :  %(k1)s  en sous-elements %(k2)s
+    elrefa :  %(k3)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-83: _("""
- ecla_pg : champ vide nom_cham:  %(k1)s  nume_ordre :  %(i1)d 
+83 : _("""
+ ecla_pg : champ vide nom_cham:  %(k1)s  nume_ordre :  %(i1)d
 """),
 
-84: _("""
- elrefe mal programme nom local cherche (nomte elrefe famille)  %(k1)s 
- parmi les existants  %(k2)s 
+84 : _("""
+ elrefe mal programme nom local cherche (nomte elrefe famille)  %(k1)s
+ parmi les existants  %(k2)s
 """),
 
-85: _("""
- pb liste de mailles carte : %(k1)s  numero entite : %(i1)d 
-  position ds liste : %(i2)d 
-  numero de maille  : %(i3)d 
+85 : _("""
+ pb liste de mailles carte : %(k1)s  numero entite : %(i1)d
+  position ds liste : %(i2)d
+  numero de maille  : %(i3)d
 """),
 
-
-
-
-
-
-
-
-87: _("""
- famille non disponible    maille de reference  %(k1)s 
+87 : _("""
+ famille non disponible
+ maille de reference  %(k1)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 }
index 8361a690068c595a62fab385ad65636988060d7a..a848d8b14d392aa9c66a2e71465e029dc6febcb5 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF calculel6 Messages  DATE 23/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF calculel6 Messages  DATE 18/03/2008   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
@@ -23,109 +23,43 @@ def _(x) : return x
 
 cata_msg={
 
+1: _("""
+Erreur utilisateur (dans la commande AFFE_MATERIAU) :
+  Dans le CHAM_MATER %(k1)s, vous avez affecté le matériau %(k2)s.
+  Dans ce matériau, il existe un coefficient de dilatation (ELAS/ALPHA)
+  qui est une fonction de la température.
+  Pour pouvoir utiliser cette fonction, il est nécessaire de transformer
+  cette fonction (changement de repère : TEMP_DEF_ALPHA -> TEMP_REF).
+  Pour cela, l'utilisateur doit fournir une température de référence.
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+Solution :
+  Vérifier que les mailles affectées par le matériau %(k2)s sont bien
+  toutes affectées par une température de référence
+  (AFFE/TEMP_REF ou AFFE_VARC/NOM_VARC='TEMP',VALE_REF).
+"""),
 
 
 
 10: _("""
-  option inconnue %(k1)s
+  Option inconnue %(k1)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 13: _("""
- interpolation deformations  anelastiques : evol_noli: %(k1)s instant: %(r1)f
- icoret: %(i1)d
+ interpolation déformations anélastiques :
+ evol_noli: %(k1)s
+ instant  : %(r1)f
+ icoret   : %(i1)d
 """),
 
-
-
-
-
-
-
-
 15: _("""
   l'element diagonal u( %(i1)d , %(i2)d ) de la factorisation est nul. %(k1)s
- la solution et les estimations d' erreurs ne peuvent etre calculees. %(k2)s
-"""),
-
-16: _("""
- interpolation temperature:evol_ther: %(k1)s nom symbolique: %(k2)s
- instant: %(r1)f
- icoret: %(i1)d
+  la solution et les estimations d' erreurs ne peuvent etre calculees. %(k2)s
 """),
 
 17: _("""
  recherche nbre de cmp: erreur:  %(k1)s grandeur numero  %(i1)d  de nom  %(k2)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
 20: _("""
  recherche nbre de cmp: erreur: grandeur ligne numero  %(i1)d  de nom  %(k1)s
  grandeur colonne numero  %(i2)d
@@ -142,18 +76,6 @@ cata_msg={
  recherche nbre d entiers codes  %(k1)s grandeur numero  %(i1)d  de nom  %(k2)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
 25: _("""
  recherche nbre d entiers codes grandeur ligne numero  %(i1)d  de nom  %(k1)s
  grandeur colonne numero  %(i2)d de nom  %(k2)s
@@ -163,92 +85,28 @@ cata_msg={
 26: _("""
  recherche nbre d entiers codes grandeur %(i1)d a un code inconnu:  %(i2)d
 """),
-
-27: _("""
- acces impossible  champ :  %(k1)s , nume_ordre :  %(i1)d
-"""),
-
-28: _("""
- acces impossible au mode propre champ :  %(k1)s , nume_ordre :  %(i1)d
-"""),
-
-
-
-
-
-
-
-
-34: _("""
- famille non disponible    type de maille  %(k1)s
-    famille d'integration  %(i1)d
-"""),
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 
-
-
-
-
-41: _("""
- famille non disponible    type de maille  %(k1)s
-"""),
 
 42: _("""
- ! prise en compte de l'erreur !
- ! sur cl de type echange_paroi n'a ! %(i1)d
- ! pas ete encore implantee          ! %(i2)d
+ La prise en compte de l'erreur sur une condition aux limites
+ de type ECHANGE_PAROI n'a pas été encore implantée
 """),
 
 43: _("""
- ! le mot cle excit contient !! plusieurs occurences de type flux lineaire ! %(i1)d
- !   seule la derniere sera prise en compte   ! %(i2)d
-"""),
-
-44: _("""
- ! le mot cle excit contient !! plusieurs occurences de type echange    ! %(i1)d
- ! seule la derniere sera prise en compte  ! %(i2)d
-"""),
-
-45: _("""
- ! le mot cle excit contient !! plusieurs occurences de type source     ! %(i1)d
- ! seule la derniere sera prise en compte  ! %(i2)d
+ le mot cle EXCIT contient plusieurs occurences de type %(k1)s
+ seule la dernière sera prise en compte
 """),
 
 46: _("""
! champ temperature !! vide pour numero ordre ! %(i1)d
champ de température vide pour le numéro d'ordre : %(i1)d
 """),
 
 47: _("""
! champ flux_elno_temp !! vide pour numero ordre ! %(i1)d
champ FLUX_ELNO_TEMP vide pour numéro d'ordre :  %(i1)d
 """),
 
 49: _("""
- erreurs donnees composante inconnue  %(k1)s  pour la grandeur  %(k2)s
+ erreurs données composante inconnue  %(k1)s  pour la grandeur  %(k2)s
 """),
 
 50: _("""
@@ -262,10 +120,12 @@ cata_msg={
 """),
 
 52: _("""
+ Erreur Utilisateur :
 
- variables internes initiales   non coherentes (nb sous-points) avec le comportement  pour la maille  nomail
-  nb sous-points "k-1" :  %(i1)d
-  nb sous-points "k" :  %(i2)d
+ Variables internes initiales non cohérentes (nb sous-points) avec le comportement choisi.
+ Pour la maille : %(k1)s
+ nb sous-points "k-1" :  %(i1)d
+ nb sous-points "k"   :  %(i2)d
 """),
 
 53: _("""
@@ -276,37 +136,31 @@ cata_msg={
 """),
 
 54: _("""
- Utilisation d'un mot clé obsolète : AFFE_CHAR_MECA/TEMP_CALCULEE
+ Problème d'utilisation du parallélisme :
+   Les fonctionnalités de parallélisme utilisées ici (calculs distribués) conduisent à créer
+   des structures de données "incomplètes" (i.e. partiellement calculées sur chaque processeur).
 
- L'une des charges contient un chargement thermique (TEMP_CALCULEE).
- L'utilisation de la température comme variable de commande en mécanique doit
- maintenant se faire en utilisant AFFE_MATERIAU/AFFE_VARC/NOM_VARC='TEMP'.
+   Malheureusement, dans la suite des traitements, le code a besoin que les structures de données soient
+   "complètes". On est donc obligé d'arreter le calcul.
 
- Néanmoins, jusqu'à la version 9.1 (incluse), les 2 syntaxes sont acceptées.
-
- Conseil :
- Déplacer le chargement thermique de AFFE_CHAR_MECA/TEMP_CALCULEE vers
- AFFE_MATERIAU/AFFE_VARC
+ Conseils pour l'utilisateur :
+   1) Il faut émettre une demande d'évolution du code pour que le calcul demandé aille à son terme.
+   2) En attendant, il ne faut pas utiliser la "distribution" des structures de donnée.
+      Aujourd'hui, cela veut dire : "ne pas utiliser le solveur MUMPS distribué".
 """),
 
-55: _("""
- Erreur d'utilisation (préparation des variables de commande) :
- Le CHAM_MATER %(k1)s contient des variables de commandes (AFFE_VARC).
- Une des charges contient un chargement thermique (TEMP_CALCULEE).
 
- Conseil :
- Déplacer le chargement thermique de AFFE_CHAR_MECA/TEMP_CALCULEE vers
- AFFE_MATERIAU/AFFE_VARC
-"""),
+
+
+
 
 56: _("""
  Erreur d'utilisation (rcmaco/alfint) :
- Le CHAM_MATER %(k1)s contient des variables de commandes (AFFE_MATERIAU/AFFE_VARC).
- Un des matériaux du CHAM_MATER contient un coefficient de dilation ALPHA=f(TEMP).
- Mais la température n'est pas fournie sous AFFE_MATERIAU/AFFE_VARC
+ Un des matériaux du CHAM_MATER %(k1)s contient un coefficient de dilation ALPHA=f(TEMP).
+ Mais la température de référence n'est pas fournie sous AFFE_MATERIAU/AFFE_VARC/VALE_REF
 
  Conseil :
- Renseignez le chargement thermique à l'aide de AFFE_MATERIAU/AFFE_VARC/NOM_VARC='TEMP'
+ Renseignez la température de référence à l'aide de AFFE_MATERIAU/AFFE_VARC/NOM_VARC='TEMP' + VALE_REF
 """),
 
 57: _("""
@@ -356,10 +210,11 @@ cata_msg={
 
 62: _("""
  Erreur de programmation (fointa) :
-    Pour l'interpolation de la fonction %(k1)s,
+    Pour l'interpolation de la fonction %(k1)s sur la maille %(k3)s,
     il manque le paramètre %(k2)s
 """),
 
+
 63: _("""
  Erreur lors de l'interpolation (fointa) de la fonction %(k1)s :
  Code retour: %(i1)d
@@ -396,5 +251,71 @@ cata_msg={
    Vérifier les occurences de AFFE_MATERIAU/AFFE_VARC pour la maille concernée.
 """),
 
+68: _("""
+ la liste des composantes fournies à NOCART est incorrecte.
+ composantes dans catalogue:
+"""),
+
+69: _("""
+   %(k1)s
+"""),
+
+70: _("""
+ composantes dans EDITGD:
+"""),
+
+71: _("""
+   %(k1)s
+"""),
+
+72: _("""
+
+"""),
+
+73: _("""
+ ! jacobien negatif en 3d !
+"""),
+
+74: _("""
+ élément  :  %(i1)d
+ jacobien :  %(r1)f
+ attention le calcul d'erreur est faux si la maille n est pas correctement orientée
+"""),
+
+75: _("""
+ Probleme de parallélisation des calculs élémentaires avec FETI. Imcompatiblité
+ entre LIGRELs dans la routine CALCUL.
+--> Risques & conseils :
+ Essayer de passer en séquentiel ou de changer de solveur linéaire.
+"""),
+
+76: _("""
+ Problème de parallélisation des calculs élémentaires avec FETI. Imcompatiblité
+ LIGREL/numéro de maille dans la routine CALCUL.
+--> Risques & conseils :
+ Essayer de passer en séquentiel ou de changer de solveur linéaire.
+"""),
+
+77: _("""
+ problème lors de l'affectation du champ: %(k1)s
+ des valeurs n'ont pas ete recopiées dans le CHAM_ELEM final (perte d'information ?)
+ ce problème peut être du a l'utilisation du mot cle TOUT='OUI'.
+ on peut vérifier le champ produit avec info=2
+
+"""),
+
+78: _("""
+ Lois de comportement différentes pour la maille %(k3)s :
+ - loi de comportement extraite de la SD Résultat   : %(k1)s
+ - loi de comportement fournie à l'opérateur CALC_G : %(k2)s
+
+--> Risques & conseils :
+On doit généralement utiliser la meme loi de comportement entre le calcul et le
+post-traitement. On peut utiliser deux comportements différents, mais alors
+l'utilisateur doit etre vigilant sur l'interprétation des résultats(cf.U2.05.01).
+Si plusieurs comportements sont définis sur la structure, le comportement à
+indiquer dans CALC_G est celui du matériau dans lequel la fissure se développe.
+Dans ce cas, ce message d'alarme est quand meme émis mais le résultat est bien cohérent.
+"""),
 
 }
index defdd7bc2a771021672a499a3007f0751a30ecf6..8c0c0c92b4b7feb213a2f0431ea35e5b6664594f 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF cataelem Messages  DATE 30/04/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF cataelem Messages  DATE 18/09/2007   AUTEUR DURAND C.DURAND 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -23,31 +23,38 @@ def _(x) : return x
 cata_msg={
 
 1: _("""
- l option :  %(k1)s  est probablement composee (viellot)
+ l option :  %(k1)s  est probablement composée (vieillot)
 """),
 
 2: _("""
- l option :  %(k1)s  a plusieurs parametres de memes noms.
+ l option :  %(k1)s  a plusieurs paramètres de memes noms.
 """),
 
 3: _("""
- mode local incorrect  pour le parametre:  %(k1)s  pour l option:  %(k2)s  pour le type:  %(k3)s 
+ mode local incorrect
+ pour le paramètre:  %(k1)s
+ pour l'option    :  %(k2)s
+ pour le type     :  %(k3)s 
 """),
 
 4: _("""
- le parametre :  %(k1)s  pour l option :  %(k2)s  existe pour le type :  %(k3)s mais n existe pas dans l option.
+ le paramètre :  %(k1)s  pour l'option :  %(k2)s
+ existe pour le type :  %(k3)s mais n'existe pas dans l'option.
 """),
 
 5: _("""
- le parametre :  %(k1)s  pour l option :  %(k2)s  et pour le type_element :  %(k3)s n est pas associe a la bonne grandeur.
+ le paramètre :  %(k1)s  pour l'option :  %(k2)s  et pour le TYPE_ELEMENT :  %(k3)s
+ n'est pas associe à la bonne grandeur.
 """),
 
 6: _("""
- le parametre :  %(k1)s  pour l option :  %(k2)s  et pour le type_element :  %(k3)s n a pas le bon nombre de noeuds.
+ le paramètre :  %(k1)s  pour l'option :  %(k2)s  et pour le TYPE_ELEMENT :  %(k3)s
+ n'a pas le bon nombre de noeuds.
 """),
 
 7: _("""
- le parametre :  %(k1)s  pour l option :  %(k2)s  et pour le type_element :  %(k3)s  n est pas du bon type:  %(k4)s 
+ le paramètre :  %(k1)s  pour l option :  %(k2)s  et pour le TYPE_ELEMENT :  %(k3)s 
+ n'est pas du bon type:  %(k4)s 
 """),
 
 8: _("""
@@ -55,50 +62,13 @@ cata_msg={
 """),
 
 9: _("""
- erreurs de coherence dans les catalogues d elements finis.
-"""),
-
-10: _("""
- nb_ec > 1
-"""),
-
-11: _("""
- stop 6
-"""),
-
-12: _("""
- stop 7
-"""),
-
-13: _("""
- stop 8
-"""),
-
-14: _("""
- stop 9
-"""),
-
-15: _("""
- stop a
-"""),
-
-16: _("""
- stop b
-"""),
-
-17: _("""
- stop c
-"""),
-
-18: _("""
- stop d
+ erreurs de cohérence dans les catalogues d'élements finis.
 """),
 
 20: _("""
  Erreur lors de l'accès à la composante %(i1)d dans le champ de nom %(k1)s et de type %(k2)s.
  Les arguments sont hors bornes ou la composante est déjà affectée (écrasement).
- Contactez les développeurs.
+ Contactez le support.
 """),
 
-
 }
index 60506c83f40544fcc4e5fe1f151ee8def4d34b20..e252890cc0142809b5b84f460bbdf80bbef492a3 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF compor1 Messages  DATE 24/04/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF compor1 Messages  DATE 06/05/2008   AUTEUR MARKOVIC D.MARKOVIC 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -23,17 +23,17 @@ def _(x) : return x
 cata_msg={
 
 1: _("""
hujpla :: nombre de variables internes incorrect:
HUJPLA :: nombre de variables internes incorrect:
            NVI > NVIMAX
 """),
 
 2: _("""
hujddd :: on ne calcule pas DPSIDS pour K=4.
HUJDDD :: on ne calcule pas DPSIDS pour K=4.
            - vérifiez la programmation -
 """),
 
 3: _("""
- cam-clay :: le coefficient de poisson est négatif
+ CAM_CLAY :: le coefficient de poisson et ou le module d'Young ne sont pas corrects
              dans la maille %(k1)s
              
              *** vérifiez la cohérence des données mécaniques suivantes :
@@ -42,29 +42,32 @@ cata_msg={
 
                  il faut notamment vérifier ceci:
                
-                 E < 3*PO*(1+e0)/kapa ***
+                 0. <NU = (3*(1+e0)*P- - 2*kapa*mu)/
+                          (6*(1+e0)*P- + 2*kapa*mu) <= 0.5 
+                          
+                          et E >0 ***
 """),
 
 4: _("""
hujeux :: les modélisations autorisées sont 3D D_PLAN ou AXIS
HUJEUX :: les modélisations autorisées sont 3D D_PLAN ou AXIS
 """),
 
 5: _("""
hujeux :: K différent de NBMECA pour le mécanisme isotrope
HUJEUX :: K différent de NBMECA pour le mécanisme isotrope
            - vérifiez la programmation -
 """),
 
 6: _("""
hujeux :: erreur inversion par pivot de Gauss
HUJEUX :: erreur inversion par pivot de Gauss
 """),
 
 7: _("""
hujcri :: epsi_vp est trop grand:
-           !!! l'exponentielle explose !!!
HUJCRI :: EPSI_VP est trop grand:
+           l'exponentielle explose
 """),
 
 8: _("""
hujeux :: mécanisme indéterminé
HUJEUX :: mécanisme indéterminé
            - vérifiez la programmation -
 """),
 
@@ -73,19 +76,34 @@ Arret suite 
 """),
 
 10: _("""
hujksi :: mot-clé inconnu
HUJKSI :: mot-clé inconnu
 """),
 
 11: _("""
- hujnvi :: modélisation inconnue
+ HUJNVI :: modélisation inconnue
+"""),
+
+12: _("""
+ HUJCI1 :: l'incrément de déformation est nul:
+           on ne peut pas trouver le zéro de la fonction.
+"""),
+
+13: _("""
+ HUJCI1 :: le critère d'existence du zéro de la fonction est violé:
+           on recommande soit de changer les données matériaux,
+           soit de raffiner le pas de temps.
+           
+           Ce critère est :
+           
+           2 x P- < P0 * (P0 /K0 /TRACE(DEPS_ELA) /N)**(1-N)
 """),
 
 14: _("""
hujtid :: erreur dans le calcul de la matrice tangente
HUJTID :: erreur dans le calcul de la matrice tangente
 """),
 
 15: _("""
nmcomp :: la loi élastique n'est plus disponible directement avec SIMO_MIEHE : utilisez 
NMCOMP :: la loi élastique n'est plus disponible directement avec SIMO_MIEHE : utilisez 
 VMIS_ISOT_LINE avec un SY grand
 """),
 
@@ -95,4 +113,112 @@ Arret suite 
 Erreur numérique (overflow) : la plasticité cumulée devient très grande.
 """),
 
+17 : _("""
+  HUJCI1 :: Soit le zéro n'existe pas, soit il se trouve hors des
+            bornes admissibles.
+"""),
+
+18 : _("""
+  HUJCI1 :: Cas de traction à l'instant moins.
+"""),
+
+19 : _("""
+  MONOCRISTAL :: écrouissage cinematique non trouvé.
+"""),
+
+20 : _("""
+  MONOCRISTAL :: écoulement non trouvé.
+"""),
+
+21 : _("""
+  MONOCRISTAL :: écrouissage isotrope non trouvé.
+"""),
+
+22 : _("""
+  MONOCRISTAL :: nombre de matrice d'interaction trop grand.
+"""),
+
+23 : _("""
+  MONOCRISTAL :: la matrice d'interaction est définie avec 
+  4 coefficients. Ceci n'est applicable qu'avec 24 systèmes de
+  glissement (famille BCC24).
+"""),
+
+24 : _("""
+  MONOCRISTAL :: la matrice d'interaction est définie avec 
+  6 coefficients. Ceci n'est applicable qu'avec 12 systèmes de
+  glissement.
+"""),
+
+25 : _("""
+  MONOCRISTAL :: la matrice d'interaction est définie avec 
+  un nombre de coefficients incorrect :: il en faut 1, ou 4, ou 6.
+"""),
+
+
+26: _("""
+ lklmat :: paramètres de la loi LETK non cohérents 
+"""),
+27: _("""
+ lkcomp :: Réduire le pas de temps peut dans certains cas remédier au problème.
+ Le critère visqueux max en ce point de charge n'est 
+ pas défini. Le calcul de la distance au critère n'est pas fait.
+"""),
+28: _("""
+ lkcomp :: Réduire le pas de temps peut dans certains cas remédier au problème.
+ Le critère visqueux en ce point de charge n'est pas défini. 
+ Le calcul de la distance au critère n'est pas fait.
+"""),
+
+29: _("""
+ lkdhds :: division par zéro - entrée rapide en plasticité avec un déviateur nul. 
+ réduire le pas de temps.
+"""),
+
+30: _("""
+ lkds2h :: division par zéro - entrée rapide en plasticité avec un déviateur nul. 
+ réduire le pas de temps.
+"""),
+
+31: _("""
+ lkcaln :: division par zéro - entrée rapide en plasticité avec un déviateur nul. 
+ réduire le pas de temps.
+"""),
+
+32: _("""
+ VISC_CINx_CHAB :: pour la viscosité, renseigner le mot-clé LEMAITRE dans DEFI_MATERIAU. 
+ Si vous voulez seulement de l'élastoplasticité, il faut utiliser VMIS_CINx_CHAB.
+"""),
+
+33: _("""
+ NMHUJ :: ELAS/ELAS_ORTH :: erreur de lecture des propriétés matériaux.
+"""),
+
+34: _("""
+ HUJTID :: ELAS/ELAS_ORTH :: cas non prévu.
+"""),
+
+35: _("""
+ HUJDP :: ELAS/ELAS_ORTH :: cas non prévu.
+"""),
+
+36: _("""
+ HUJTEL :: ELAS/ELAS_ORTH :: cas non prévu.
+"""),
+
+37: _("""
+ HUJPOT :: ELAS/ELAS_ORTH :: cas non prévu.
+"""),
+
+38: _("""
+ HUJJID :: ELAS/ELAS_ORTH :: cas non prévu.
+"""),
+
+39: _("""
+ HUJIID :: ELAS/ELAS_ORTH :: cas non prévu.
+"""),
+
+40: _("""
+ HUJELA :: ELAS/ELAS_ORTH :: cas non prévu.
+"""),
 }
index 272d6a81e2302467e70123773716b9548ec8c975..e311743fac98a0f52e00c4cba758a627c6b371d1 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF contact Messages  DATE 30/04/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF contact Messages  DATE 01/04/2008   AUTEUR ABBAS M.ABBAS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # 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.        
-# ====================================================================== 
+# ======================================================================
 
 def _(x) : return x
 
-cata_msg={
-
-1: _("""
- La méthode de résolution du contact utilisée suppose la symétrie de la
- matrice du système à résoudre.
- Dans le cas où votre modélisation ferait intervenir une matrice 
- non-symétrique, on force sa symétrie. On émet une alarme pour vous 
- en avertir. 
- CONSEIL : 
- Vous pouvez supprimer cette alarme en renseignant SYME='OUI' sous le 
- mot-clé facteur SOLVEUR.
-"""),
-
-6: _("""
- Contact methode GCP. On ne peut utiliser le solveur gcpc avec le contact 
-"""),
-
-7: _("""
- Contact methode GCP. Denom est negatif : contacter les developpeurs
-"""),
-
-8: _("""
- Contact methode GCP. Le pas d'avancement est negatif : contacter les developpeurs
-"""),
-
-9: _("""
- Contact liaison glissiere. Des noeuds se decollent plus que la valeur d'ALARME_JEU:
-"""),
-
-10: _("""
- Contact methodes discretes. Une maille maitre de type SEG a une longueur nulle. Verifiez votre maillage.
-"""),
-
-11: _("""
- Contact methodes discretes. Le vecteur tangent defini par VECT_Y est colineaire au vecteur normal.
-"""),
+cata_msg = {
 
-12: _("""
- Contact methodes discretes. Le vecteur normal est colineaire au plan de projection.
+1 : _("""
+Contact méthodes discrètes.
+ -> Les méthodes de contact discrètes supposent la symétrie de la matrice obtenue après assemblage.
+    Si votre modélisation produit une matrice non-symétrique, on force donc sa symétrie pour résoudre
+    le contact.
+ -> Risque & Conseil :
+    Ce changement peut conduire à des difficultés de convergence dans le processus de Newton mais en
+    aucun cas il ne produit des résultats faux.
+    
+    Si la matrice de rigidité de votre structure est symétrique, vous pouvez ignorer ce qui précède.
+    Enfin, il est possible de supprimer l'affichage de cette alarme en renseignant SYME='OUI'
+    sous le mot-clé facteur SOLVEUR.
 """),
 
-13: _("""
- Contact methodes discretes. Il faut reactualiser la projection : contacter les developpeurs
+2 : _("""
+Contact methode GCP. Nombre d'itérations maximal (%(i1)s) dépassé pour le GCP.
+Vous pouvez essayer d'augmenter ITER_GCP_MAXI.
+La liste des noeuds présentant une interpénétration est donnée ci-dessous.
 """),
 
-14: _("""
- Contact methodes discretes. La projection quadratique pour les triangles n'est pas disponible
+3 : _("""
+Contact methode GCP. Nombre d'itérations maximal (%(i1)s) dépassé pour le préconditionneur.
+Vous pouvez essayer d'augmenter ITER_PRE_MAXI
 """),
 
-15: _("""
- Contact methodes discretes. Une maille maitre de type TRI a une surface nulle. Verifiez votre maillage.
+: _("""
+Contact methode GCP. On ne peut utiliser le solveur GCPC avec le contact. 
 """),
 
-22: _("""
- Contact methodes discretes. Cette methode d'appariement n'existe pas : contacter les developpeurs.
+: _("""
+Contact methode GCP. Le pas d'avancement est negatif ; risque de comportement hasardeux de l'algorithme
 """),
 
-23: _("""
- Contact methodes discretes. Erreur d'appel par l'option d'appariement n'existe pas : contacter les developpeurs.
+: _("""
+Contact liaison glissiere. Des noeuds se décollent plus que la valeur d'ALARME_JEU:
 """),
 
-24: _("""
- Contact methodes discretes. Erreur de dimensionnement nombre maximal de noeuds esclaves depasse : contacter les developpeurs
+11 : _("""
+Le vecteur tangent défini par VECT_Y est colinéaire au vecteur normal.
 """),
 
-25: _("""
- Contact methodes discretes. Erreur de dimensionnement des tableaux apcoef et apddl : contacter les developpeurs
+13 : _("""
+La normale que vous avez prédéfinie (VECT_* = 'FIXE') sur le noeud %(k1)s est colinéaire à la tangente à la maille.
 """),
 
-27: _("""
- Contact methodes discretes. On n'a pas trouve de noeud maitre proche du noeud esclave : contacter les developpeurs
+14 : _("""
+La normale que vous avez prédéfinie (VECT_* = 'FIXE') sur la maille %(k1)s est colinéaire à la tangente à la maille.
 """),
 
-30: _("""
- Contact methodes discretes. On ne sait pas traiter ce type de maille
+15 : _("""
+Le vecteur MAIT_FIXE ou ESCL_FIXE est nul !
 """),
 
-31: _("""
- Contact methodes discretes. Le noeud esclave n'a pas pu s'apparier avec la maille quadrangle : contacter les developpeurs
+16 : _("""
+Le vecteur MAIT_VECT_Y ou ESCL_VECT_Y est nul !
 """),
 
-32: _("""
- Contact methodes discretes. Pas de lissage des normales possible avec l'appariement nodal : contacter les developpeurs
+60 : _("""
+La maille %(k1)s est de type 'SEG' (poutres) en 3D sans donner la normale pour l'appariement.
+Vous devez utilisez l'option NORMALE:
+- FIXE: qui décrit une normale constante pour la poutre
+- ou VECT_Y: qui décrit une normale par construction d'un repère basé sur la tangente (voir documentation)
 """),
 
-38: _("""
- Contact. Erreur dans la definition symetrique : contacter les developpeurs
+61 : _("""
+Le noeud %(k1)s fait partie d'une maille de type 'SEG' (poutres) en 3D sans donner la normale pour l'appariement.
+Vous devez utilisez l'option NORMALE:
+- FIXE: qui décrit une normale constante pour la poutre
+- ou VECT_Y: qui décrit une normale par construction d'un repère basé sur la tangente (voir documentation)
 """),
 
-54: _("""
- Contact. On ne peut pas utiliser une direction d'appariement fixe VECT_NORM_ESCL si l'appariement n'est pas nodal.
-"""),
 
-55: _("""
- Contact. La commande VECT_Y n'intervient pas en 2D.
+83 : _("""
+Il y a plusieurs charges contenant des conditions de contact.
 """),
 
-56: _("""
- Contact. La commande VECT_ORIE_POU n'intervient pas en 2D.
-"""),
-
-
-60: _("""
- Contact methodes discretes. Vous utilisez des mailles de type SEG2/SEG3 en 3D sans definir un repere pour l'appariement. Voir les mots-clefs VECT_Y et VECT_ORIE_POU.
+84 : _("""
+Il ne faut pas que les surfaces de contact mélangent des mailles affectées d'une modélisations planes (D_PLAN, C_PLAN ou AXI)
+avec des mailles affectées d'une modélisation 3D. 
 """),
 
-74: _("""
- Contact. Erreur de dimensionnement car le nombre de noeuds est superieur a 9 : contacter les developpeurs
+88 : _("""
+Ne pas utiliser REAC_INCR=0 avec le frottement.
 """),
 
-75: _("""
- Contact. Un POI1 ne peut pas etre une maille maitre.
-"""),
-
-76: _("""
- Contact. On ne peut pas avoir plus de 3 ddls impliques dans la meme relation unilaterale : contacter les developpeurs
-"""),
-
-83: _("""
- Contact. Il y a plusieurs charges contenant des conditions de contact.
-"""),
-
-84: _("""
- Contact. Melange 2d et 3d dans le contact.
-"""),
-
-85: _("""
- Contact. Melange dimensions maillage dans le contact.
-"""),
-
-86: _("""
- Contact. Code methode contact incorrect : contacter les developpeurs
-"""),
-
-87: _("""
- Contact. La norme tangentielle de frottement est negative: contacter les developpeurs
-"""),
-
-88: _("""
- Contact. Ne pas utiliser REAC_INCR=0 avec le frottement.
-"""),
-
-93: _("""
- Contact methode VERIF.
-  -> Interpénétrations des surfaces.
-  -> Risque & Conseil :
-     Vérifier si le niveau d'interpénétration des surfaces est acceptable dans
-     votre problème.
+93 : _("""
+Contact methode VERIF.
+ -> Interpénétrations des surfaces.
+    Attention : si les mailles en contact sont quadratiques, le jeu aux noeuds milieux risque d'etre imprécis (oscillations entre noeuds sommets et milieux).
+ -> Risque & Conseil :
+    Vérifier si le niveau d'interpénétration des surfaces est acceptable dans
+    votre problème.
 """),
 
-94: _("""
- Operation d'appariement inconnue : contacter les developpeurs
+9: _("""
+Contact méthode continue. Pour l'option SANS_GROUP_NO_FR, il faut que le frottement soit activé.
 """),
 
-97: _("""
- Contact methode CONTINUE. Pour l'option SANS_GROUP_NO, l'intégration aux noeuds est obligatoire.
+97 : _("""
+Contact méthode continue. Pour l'option SANS_GROUP_NO et SANS_GROUP_NO_FR, l'intégration aux noeuds est obligatoire.
 """),
 
-
-
 }
index 2a40d493f85af5059640ac8dcb15fde8bfbd2efe..1f04f5a551172a6b1805937d24a706ad0474f830 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF contact2 Messages  DATE 24/04/2007   AUTEUR COURTOIS M.COURTOI
+#@ MODIF contact2 Messages  DATE 01/04/2008   AUTEUR ABBAS M.ABBA
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -31,7 +31,8 @@ cata_msg={
 """),
 
 12 : _("""
-Contact méthode CONTINUE. Une zone de contact contient à la fois des éléments axisymétriques et non axisymétriques ! 
+Contact méthode continue. Une zone de contact contient à la fois des éléments axisymétriques et non axisymétriques.
+Vérifier votre AFFE_MODELE et le type de vos mailles dans la définition des surfaces de contact. 
 """),
 
 }
index 4b788971aefb727bb65b32a087591cd488e7ee98..6a8152deaf55c254fce0db182c88362c1f256816 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF contact3 Messages  DATE 30/04/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF contact3 Messages  DATE 22/04/2008   AUTEUR ABBAS M.ABBAS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
+1 : _("""
 Le mot-clef < %(k1)s > est inconnu dans AFFE_CONTACT. Contactez les développeurs.
 Note DVP: erreur de cohérence fortran/catalogue. 
 """),
 
-2: _("""
+2 : _("""
 Le mot-clef < %(k1)s > n'est pas renseigné dans AFFE_CONTACT alors qu'il est obligatoire. Contactez les développeurs.
 Note DVP: erreur de cohérence fortran/catalogue. 
 """),
 
-3: _("""
+3 : _("""
 L'option < %(k1)s > ne correspond a aucune option permise par le mot-clef < %(k2)s > dans AFFE_CONTACT. Contactez les développeurs.
 Note DVP: erreur de cohérence fortran/catalogue.            
 """),
 
-4: _("""
-Les méthodes de contact doivent etre identiques pour toutes les zones de contact.
+
+13 : _("""
+L'algorithme de Newton a échoué lors de la projection du point de contact de coordonnées
+  (%(r1)s,%(r2)s,%(r3)s)
+sur la maille %(k1)s.
+Erreur de définition de la maille ou projection difficile. Contactez l'assistance dans ce dernier cas.  
 """),
 
-5: _("""
-Le type de formulation du contact doit etre le meme pour toutes les zones de contact.
+14 : _("""
+Les vecteurs tangents sont nuls au niveau du projeté du point de contact de coordonnées
+  (%(r1)s,%(r2)s,%(r3)s) 
+sur la maille %(k1)s, 
+Erreur de définition de la maille ou projection difficile. Contactez l'assistance dans ce dernier cas.
 """),
 
-10: _("""
-La matrice est singulière lors du calcul du repère local tangent au noeud maitre  %(k1)s  sur la maille maitre %(k2)s.
-Une erreur de définition de la maille: les vecteurs tangents sont colinéaires.
+15 : _("""
+La direction d'appariement fixe données par le vecteur DIRE_APPA est nulle !
 """),
 
-11: _("""
-La matrice est singulière lors de la projection du point de contact  sur la maille maitre  %(k1)s.
-Une erreur de définition de la maille: les vecteurs tangents sont colinéaires.
+1: _("""
+Contact méthode continue.
+La méthode d'intégration est GAUSS, le champ VALE_CONT n'est pas créé.
 """),
 
-12: _("""
-L'algorithme de Newton a échoué lors du calcul du repère local tangent au noeud maitre %(k1)s sur la maille maitre  %(k2)s.
-Erreur de définition de la maille ou projection difficile. Contactez l'assistance dans ce dernier cas. 
+17 : _("""
+Contact méthode continue.
+Avec un FOND-FISSURE, il est impossible d'utiliser les options suivantes:
+- LISSAGE = 'OUI' ou/et
+- NORMALE = 'ESCL' ou
+- NORMALE = 'MAIT_ESCL'
 """),
 
-13: _("""
-L'algorithme de Newton a échoué lors de la projection du point de contact  sur la maille maitre  %(k1)s.
-Erreur de définition de la maille ou projection difficile. Contactez l'assistance dans ce dernier cas.  
+
+23 : _("""
+Le vecteur normal est nul au niveau du projeté du point de contact de coordonnées
+  (%(r1)s,%(r2)s,%(r3)s) 
+sur la maille %(k1)s, 
+Erreur de définition de la maille ou projection difficile. Contactez l'assistance dans ce dernier cas.
 """),
 
-14: _("""
-Les vecteurs tangents sont nuls au noeud maitre  %(k1)s  sur la maille maitre  %(k2)s.
-Une erreur de définition de la maille.
+24 : _("""
+Il y a plus de trois noeuds exclus sur la maille esclave  %(k1)s  par l'option SANS_GROUP_NO ou SANS_NOEUD.
+Supprimer directement la maille esclave de la définition de la surface.
 """),
 
-21: _("""
-Les vecteurs tangents sont nuls lors de la projection du point de contact sur la maille maitre  %(k1)s. 
-Une erreur de définition de la maille.s
+25 : _("""
+L'élément porté par la maille esclave %(k1)s n'est pas du bon type pour un fond de fissure, elle est de type  %(k2)s 
 """),
 
-22: _("""
-L'élement inconnu sur la maille maitre  %(k1)s.
-Cet élément n'est pas programmé pour le contact avec formualtion continue.
-Contactez l'assistance. 
+26 : _("""
+Le vecteur normal est nul au niveau du noeud %(k1)s.
 """),
 
-23: _("""
-Le vecteur normal est nul sur le noeud maitre  %(k1)s.
-Si vous avez activé le lissage, essayeé de le désactiver. 
+27 : _("""
+Le vecteur normal est nul au niveau de la maille %(k1)s.
 """),
 
-24: _("""
-Il y a plus de trois noeuds exclus sur la maille esclave  %(k1)s  par l'option SANS_GROUP_NO ou SANS_NOEUD.
-Supprimer directement la maille esclave de la définition de la surface.
+2: _("""
+Le statut du contact a changé %(i1)d fois au point de contact numéro %(i2)d sur la maille esclave %(k1)s
+Présence de flip-flop. 
 """),
 
-25: _("""
-L'élément porté par la maille esclave %(k1)s n'est pas du bon type pour un fond de fissure, elle est de type  %(k2)s 
+30 : _("""
+Le couple de surfaces de contact %(i1)s pour l'appariement nodal est mal défini.
+Il faut moins de noeuds esclaves que de noeuds maitres pour respecter l'injectivité.
+Or ici:
+Nombre de noeuds maitres : %(i2)s
+Nombre de noeuds esclaves: %(i3)s
+Conseil: intervertissez les deux surfaces maitres et esclaves
 """),
 
-26: _("""
-Schema d'intégration inconnu sur la maille  %(k1)s. 
+31 : _("""
+Les vecteurs tangents sont nuls au niveau quand on projette le noeud esclave
+%(k1)s sur la maille %(k2)s
 """),
 
-27: _("""
-Code erreur introuvable. Contactez les développeurs.
+32: _("""
+ Le mot-clef DIST_POUT ne fonctionne qu'avec des sections circulaires définies dans AFFE_CARA_ELEM.
+ """),
+
+33 : _("""
+L'erreur suivante est arrivée lors du pré-calcul des normales aux noeuds activées par les options
+- LISSAGE = 'OUI' ou/et
+- NORMALE = 'ESCL' ou
+- NORMALE = 'MAIT_ESCL'
 """),
 
-28: _("""
-Le statut du contact a changé %(i1)d fois au point de contact numéro %(i2)d sur la maille esclave %(k1)s
-Présence de flip-flop. 
+34 : _("""
+Echec de l'orthogonalisation du repère tangent construit au niveau du projeté du point de contact de coordonnées
+  (%(r1)s,%(r2)s,%(r3)s) 
+sur la maille %(k1)s, 
+Erreur de définition de la maille ou projection difficile. Contactez l'assistance dans ce dernier cas.
+"""),
+
+35 : _("""
+Les vecteurs tangents sont nuls au niveau quand on projette le noeud esclave
+%(k1)s sur la noeud maitre %(k2)s
+"""),
+
+36 : _("""
+La maille %(k1)s est de type 'POI1', ce n'est pas autorisé sur une maille maitre. 
+"""),
+
+
+38 : _("""
+La maille %(k1)s est de type poutre et sa tangente est nulle.
+Vérifiez votre maillage.
+"""),
+
+39: _("""
+Problème pour récupérer l'épaisseur de la coque pour la maille  %(k1)s
+"""),
+
+40: _("""
+L'excentricité de la coque pour la maille %(k1)s n'est pas traitée
+"""),
+
+41: _("""
+Problème pour récupérer l'excentricité de la coque pour la maille  %(k1)s
+"""),
+
+42 : _("""
+Contact méthodes discrètes. Il y a mélange de mailles quadratiques (TRIA6, TRIA7 ou QUAD9) avec des mailles QUAD8 sur la surface escalve du contact.
+On supprime la liaison entre les noeuds sommets et noeud milieu sur le QUAD8.
+Il y a risque d'interpénétration du noeud milieu pour le QUAD8 considéré.
+"""),
+
+43 : _("""
+La normale que vous avez prédéfinie par (VECT_* = 'VECT_Y') n'est pas utilisable en 2D.
+Utilisez plutot (ou Dingo) VECT_* = 'FIXE'
 """),
 
-30: _("""
-Le modèle ne comporte pas de fissure XFEM. 
+
+50: _("""
+Avec l'option VECT_MAIT = 'FIXE', seule l'option NORMALE = 'MAIT' est possible.
 """),
 
-31: _("""
-La définition du contact XFEM ne comporte pas autant de zones que de fissures XFEM dans le modèle. 
+51: _("""
+Avec l'option VECT_MAIT = 'VECT_Y', seule l'option NORMALE = 'MAIT' est possible.
 """),
 
+52: _("""
+Avec l'option VECT_ESCL = 'FIXE', seule l'option NORMALE = 'ESCL' est possible.
+"""),
 
-99: _("""
-La SD contact < %(k1)s > est introuvable. Contactez les développeurs.
+53: _("""
+Avec l'option VECT_ESCL = 'VECT_Y', seule l'option NORMALE = 'ESCL' est possible.
 """),
 
+54: _("""
+Le LISSAGE n'est possible qu'avec des normales automatiques VECT_ESCL='AUTO' et/ou VECT_MAIT='AUTO'.
+"""),
 
+54: _("""
+Le LISSAGE n'est possible qu'avec des normales automatiques VECT_ESCL='AUTO' et/ou VECT_MAIT='AUTO'.
+"""),
+
+60 : _("""
+La maille %(k1)s est de type 'POI1', elle nécessite l'utilisation de l'option
+NORMALE='FIXE' avec une normale non-nulle. 
+"""),
+
+85 : _("""
+Contact méthode continue. 
+  -> Il y a échec de la boucle contraintes actives lors du traitement
+     du contact
+  -> Risque & Conseil :
+     Vérifier votre maillage ou augmenter ITER_CONT_MAX.
+"""),
+
+86 : _("""
+Contact méthode continue. 
+  -> Il y a convergence forcée sur boucle contraintes actives lors du traitement
+     du contact.
+  -> Risque & Conseil :
+     La convergence forcée se déclenche lorsque le problème a du mal à converger. Il y a des risques que le problème 
+     soit un peu moins bien traité. Vérifiez bien que vous n'avez pas d'interpénétration entre les mailles. S'il y des 
+     interpénétrations intempestives, tentez de découper plus finement en temps votre problème.
+"""),
+
+87 : _("""
+Contact méthode continue. 
+  -> Il y a convergence forcée sur boucle seuil frottement lors du traitement du
+     contact.
+  -> Risque & Conseil :
+     La convergence forcée se déclenche lorsque le problème a du mal à converger. Il y a des risques que le problème 
+     soit un peu moins bien traité. La condition de frottement de Coulomb est peut etre mal prise en compte. Risque de 
+     résultats faux sur les forces d'adhérence. Essayez de découper plus finement en temps votre problème.
+"""),
+
+88 : _("""
+Contact méthode continue. 
+  -> Il y a convergence forcée sur boucle de géométrie lors du traitement du
+     contact.
+  -> Risque & Conseil :
+     La convergence forcée se déclenche lorsque le problème a du mal à converger
+     lors de grands glissements relatifs entre deux surfaces de contact.
+     Il y a des risques que le problème soit un peu moins bien traité.
+     Vérifiez bien que vous n'avez pas d'interpénétration entre les mailles.
+     S'il y des interpénétrations intempestives, tentez de découper plus finement en temps votre problème.
+"""),
 
 }
index 5d0447cc417b9401044d3a75a09c97c2a96a635e..f49c9cb61f5b4464d3960eec425f29d8a0e9c9ad 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF contactdebg Messages  DATE 30/04/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF contactdebg Messages  DATE 01/04/2008   AUTEUR ABBAS M.ABBAS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -118,10 +118,6 @@ cata_msg={
  <CONTACT_2> Appariement de type maitre/esclave - Creation de l'objet pour appariement symetrique. 
 """),
 
-98: _("""
- <CONTACT> Erreur fatale <%(i1)s> dans <%(k1)s>: contacter les developpeurs
-"""),
-
 99: _("""
  <CONTACT_2> Message inconnu lors du debuggage : contacter les developpeurs
 """),
diff --git a/Aster/Cata/cataSTA9/Messages/discretisation.py b/Aster/Cata/cataSTA9/Messages/discretisation.py
new file mode 100644 (file)
index 0000000..437f2dc
--- /dev/null
@@ -0,0 +1,97 @@
+#@ MODIF discretisation Messages  DATE 19/12/2007   AUTEUR ABBAS M.ABBAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg = {
+
+1 : _("""
+Certains pas de temps de la liste (LISTE_INST) sont plus petits
+ que le pas de temps minimal renseigné (SUBD_PAS_MINI)
+"""),
+
+2 : _("""
+ il faut donner SUBD_NIVEAU et/ou SUBD_PAS_MINI
+"""),
+
+3 : _("""
+ le nombre de subdivisions du pas de temps doit etre plus grand que 1 (SUBD_PAS)
+"""),
+
+6 : _("""
+ valeur de SUBD_ITER_IGNO incoherent avec ITER_GLOB_MAXI.
+ augmentez ITER_GLOB_MAXI
+"""),
+
+7 : _("""
+ valeur de SUBD_ITER_FIN incoherent avec ITER_GLOB_MAXI.
+ augmentez ITER_GLOB_MAXI
+"""),
+
+
+86 : _("""
+Il n'y a aucun instant de calcul ('LIST_INST' absent).
+"""),
+
+87 : _("""
+La liste d'instants n'est pas croissante.
+"""),
+
+88 : _("""
+Vous tentez d'accéder à l'instant initial ou final, alors que vous
+n'avez pas une évolution ordonnée (EVOLUTION='SANS')
+"""),
+
+89 : _("""
+Instant initial introuvable dans la liste d'instants (LIST_INST).
+"""),
+
+90 : _("""
+Instant final introuvable dans la liste d'instants (LIST_INST).
+"""),
+
+91 : _("""
+ NUME_INST_INIT plus petit que NUME_INST_FIN avec EVOLUTION: 'RETROGRADE'
+"""),
+
+92 : _("""
+ NUME_INST_INIT plus grand que NUME_INST_FIN
+"""),
+
+93: _("""
+ NUME_INST_INIT n'appartient pas à la liste d'instants
+"""),
+
+94 : _("""
+  -> Le numéro d'ordre correspondant à l'instant final de calcul NUME_INST_FIN
+     n'appartient pas à la liste des numéros d'ordre.
+     Dans ce cas, Aster considère pour numéro d'ordre final, le dernier de
+     la liste fournie.
+  -> Risque & Conseil :
+     Afin d'éviter des pertes de résultats, assurez-vous que le numéro d'ordre
+     associé à l'instant NUME_INST_FIN appartienne bien à la liste des numéros
+     d'ordre.
+"""),
+
+99 : _("""
+Le nombre de niveau de subdivisions doit etre plus grand que 1 (SUBD_NIVEAU)
+"""),
+
+}
index 0d23d4a5c7db9065ce9ec7dd8259ef82227d1e40..6bfeeac3e55f99e799242d3cedfb3258c9ce1fb8 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF discrets Messages  DATE 28/03/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF discrets Messages  DATE 11/09/2007   AUTEUR DURAND C.DURAND 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -24,35 +24,35 @@ def _(x) : return x
 cata_msg={
 
 1: _("""
-element discret %(k1)s . Il n'y a pas de rotation non-lineaire possible.
+élément discret %(k1)s .
+Il n'y a pas de rotation non-linéaire possible.
 """),
 
 2: _("""
-element discret %(k1)s . Il n'y a pas de comportement\n
-non-lineaire possible suivant z ou en rotation autour de x,y en 2d.
+élément discret %(k1)s .
+Il n'y a pas de comportement non-lineaire possible suivant Z
+ou en rotation autour de X,Y en 2D.
 """),
 
 3: _("""
-element discret %(k1)s . Il n'y a pas de comportement\n
-non-lineaire possible en rotation ou suivant z en 2d.
+élément discret %(k1)s .
+Il n'y a pas de comportement non-linéaire possible en rotation
+ou suivant Z en 2D.
 """),
 
 4: _("""
-element discret. Le pas de temps est devenu trop petit : %(r1)12.5E .
+élément discret.
+Le pas de temps est devenu trop petit : %(r1)12.5E .
 """),
 
 5: _("""
-element discret %(k1)s . Les caracteristiques sont obligatoirement\n
-donnees dans le repere local du discret..
+élément discret %(k1)s .
+Les caractéristiques sont obligatoirement données dans le repère local du discret.
 """),
 
 6: _("""
-pour les elements discrets il faut definir un repere dans affe_cara_elem\n
+pour les éléments discrets il faut définir un repère dans AFFE_CARA_ELEM
 maille : %(k1)s
 """),
 
 }
-
-
-
-
index 909551e86a3f268927f0fb32e0a1f3ebf2784473..b1b4c97f53963944a6d9c926d1c6ce057ca4b656 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF dvp Messages  DATE 20/02/2007   AUTEUR LEBOUVIER F.LEBOUVIER 
+#@ MODIF dvp Messages  DATE 10/12/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -41,4 +41,29 @@ cata_msg={
    Erreur numérique (floating point exception).
 """),
 
+3 : _("""
+   Erreur de programmation : Nom de grandeur inattendu : %(k1)s
+   Routine : %(k2)s
+"""),
+
+4 : _("""
+   On ne sait pas traiter ce type d'élément : %(k1)s
+"""),
+
+
+97 : _("""
+   Erreur signalée dans la bibliothèque MED
+     nom de l'utilitaire : %(k1)s
+             code retour : %(i1)d
+"""),
+
+
+98 : _("""
+   Erreur lors du traitement du contact.
+"""),
+
+99 : _("""
+   Le calcul de l'option %(k1)s n'est pas prévue avec Arlequin.
+"""),
+
 }
index bbff4bf2a2788e3b7ebe6a8973ffb748a244b8e1..b923c17603607a2be1f35845b27eb0533480baae 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF dynamique Messages  DATE 15/05/2007   AUTEUR GNICOLAS G.NICOLAS 
+#@ MODIF dynamique Messages  DATE 21/02/2008   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -94,4 +94,17 @@ cata_msg={
  Avec le pas de temps maximal, le nombre de pas de calcul est %(i1)d
 """),
 
+13: _("""
+   Arret par manque de temps CPU à la fréquence : %(i1)d
+      - Temps moyen par pas fréquence : %(r1)f
+      - Temps cpu restant             : %(r2)f
+   
+   La base globale est sauvegardée. Elle contient les pas archivés avant l'arret.
+"""),
+
+14: _("""
+   La matrice est presque singulière à la fréquence : %(r1)f
+   Cette fréquence est probablement une fréquence propre du système.
+"""),
+
 }
diff --git a/Aster/Cata/cataSTA9/Messages/elasmult0.py b/Aster/Cata/cataSTA9/Messages/elasmult0.py
new file mode 100644 (file)
index 0000000..a264171
--- /dev/null
@@ -0,0 +1,28 @@
+#@ MODIF elasmult0 Messages  DATE 17/07/2007   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+On ne peut avoir à la fois NOM_CAS et MODE_FOURIER.
+"""),
+
+}
index a666107f86c575319267556b877399c7be47859b..b208166bc3767591d7bfd1b35efa62e4feba000e 100644 (file)
-#@ MODIF elements Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF elements Messages  DATE 04/06/2008   AUTEUR PROIX J-M.PROIX 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  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.
+# COPYRIGHT (C) 1991 - 2007  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.        
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- arret du code
+1 : _("""
+ AFFE_CARA_ELEM : mot clé GENE_TUYAU
+ problème : OMEGA est différent de OMEGA2
+ omega  = %(r1)f
+ omega2 = %(r2)f
 """),
 
-2: _("""
- abs(rayon2-rayon1).gt.epsi
+5 : _("""
+ problème de maillage TUYAU :
+ pour une maille définie par les noeuds N1 N2 N3,
+ le noeud N3 doit etre le noeud milieu
 """),
 
-3: _("""
- abs(theta2-theta1).gt.epsi
+6 : _("""
+  GENE_TUYAU
+  il faut donner un vecteur non colinéaire au tuyau
 """),
 
-4: _("""
- abs(omega2-omega1).gt.epsi
+7 : _("""
+  -> L'angle du coude est trop grand
+     ANGLE     = %(r1)f
+     ANGLE MAX = %(r2)f
+  -> Risque & Conseil : mailler plus fin
 """),
 
-5: _("""
- probleme de maillage tuyau :  pour une maille definie par les noeuds n1 n2 n3  le noeud n3 doit etre le noeud milieu
+9 : _("""
+ il faut renseigner le coefficient E_N  dans les cas des déformations planes et de l'axisymétrie
+ on ne regarde donc que le cas des contraintes planes.
 """),
 
-6: _("""
-  gene_tuyau il faut donner un vecteur non colineaire au tuyau
-"""),
-
-7: _("""
- angle du coude trop grand
-"""),
-
-8: _("""
-  mailler plus fin
-"""),
-
-9: _("""
- il faut renseigner le coefficient e_n  dans les cas des deformations planes et de l'axisymetrie, on ne regarde donc que le cas des contraintes planes.
-"""),
-
-10: _("""
- Subroutine chpver :
+10 : _("""
+ Subroutine CHPVER :
  le champ  %(k1)s n'a pas le bon type :
    type autorisé  :%(k2)s
    type du champ  :%(k3)s
 """),
 
-11: _("""
- la modelisation :  %(k1)s n'est pas traitee.
-"""),
-
-12: _("""
- nombre de couches obligatoirement superieur a 0
-"""),
-
-13: _("""
- nombre de couches limite a 10 pour les coques 3d
-"""),
-
-14: _("""
- le type d'element :  %(k1)s n'est pas prevu.
+11 : _("""
+ La modélisation utilisée n'est pas traitée.
 """),
 
-15: _("""
- la nature du materiau  %(k1)s  n'est pas traitee, seules sont considerees les natures : elas, elas_istr, elas_orth .
+1: _("""
+ nombre de couches obligatoirement supérieur à 0
 """),
 
-16: _("""
- type de maille inconnu
+1: _("""
+ nombre de couches limité a 10 pour les coques 3d
 """),
 
-17: _("""
- noeuds confondus pour un element
+1: _("""
+ le type d'élément :  %(k1)s n'est pas prevu.
 """),
 
-18: _("""
- nno invalide
+15 : _("""
+ la nature du matériau  %(k1)s  n'est pas traitée
+ seules sont considérées les natures : ELAS, ELAS_ISTR, ELAS_ORTH .
 """),
 
-19: _("""
- pb1
+1: _("""
+ noeuds confondus pour un élément
 """),
 
-20: _("""
- aucun type d elements necorrespond au type demande
+18 : _("""
+ le nombre de noeuds d'un tuyau est différent de 3 ou 4
 """),
 
-21: _("""
- predicteur elas hors champs
+2: _("""
+ aucun type d'éléments ne correspond au type demandé
 """),
 
-22: _("""
- irep (indicateur de changement de repere) doit etre egal a 0 ou 1
+2: _("""
+ prédicteur ELAS hors champs
 """),
 
-23: _("""
- piles saturees
-"""),
-
-24: _("""
+24 : _("""
  derivatives of "mp" not defined
 """),
 
-25: _("""
- on passe en mecanisme 2
+25 : _("""
+ on passe en mécanisme 2
 """),
 
-26: _("""
- chargement en meca 2 trop important a verifier
+26 : _("""
+ chargement en mécanisme 2 trop important
+ à vérifier
 """),
 
-27: _("""
- on poursuit en mecanisme 2
+27 : _("""
+ on poursuit en mécanisme 2
 """),
 
-28: _("""
- decharge negative sans passer par meca 1 diminuer le pas de temps
+28 : _("""
+ décharge négative sans passer par meca 1
+ diminuer le pas de temps
 """),
 
-29: _("""
- on revient en mecanisme 1
+29 : _("""
+ on revient en mécanisme 1
 """),
 
-30: _("""
- pas de retour dans meca 1 trop important diminuer le pas de temps
+30 : _("""
+ pas de retour dans meca 1 trop important
+ diminuer le pas de temps
 """),
 
-31: _("""
- type element  %(k1)s  incompatible avec  %(k2)s
+31 : _("""
+ type d'élément  %(k1)s  incompatible avec  %(k2)s
 """),
 
-32: _("""
comportement inattendu
+32 : _("""
le comportement %(k1)s est inattendu
 """),
 
-33: _("""
- nombre d iterations > 1000 .
+33 : _("""
+ la convergence locale de la loi GLRC_DAMAGE n'est pas atteinte en 1000 itérations :
+ XM1 vaut %(r1)f
+ XM2 vaut %(r2)f
+ YM1 vaut %(r3)f
+ YM2 vaut %(r4)f
 """),
 
-34: _("""
element non traite  %(k1)s
+34 : _("""
élément non traité  %(k1)s
 """),
 
-35: _("""
- pas d excentrement avec stat_non_line maille  %(k1)s
+35 : _("""
+ pas d'excentrement avec STAT_NON_LINE
+ maille  : %(k1)s
 """),
 
-36: _("""
- nombre de couches  negatif ou nul :  %(k1)s
+36 : _("""
+ nombre de couches gatif ou nul :  %(k1)s
 """),
 
-37: _("""
- Subroutine chpver :
+37 : _("""
+ Subroutine CHPVER :
  le champ  %(k1)s n'a pas la bonne grandeur :
    grandeur autorisée  :%(k2)s
    grandeur du champ   :%(k3)s
 """),
 
-38: _("""
- ! pb phesen.ne.phenom !
+38 : _("""
+ Le phénomène sensible %(k1)s choisi ne correspond pas au phénomène %(k2)s dont il est issu 
 """),
 
-39: _("""
- l'axe de reference est normal a un element de plaque anisotrope
+39 : _("""
+ l'axe de référence est normal à un élément de plaque anisotrope
 """),
 
-40: _("""
+40 : _("""
   -> L'axe de référence pour le calcul du repère local est normal à un
      au moins un élément de plaque.
   -> Risque & Conseil :
@@ -193,47 +180,50 @@ cata_msg={
 
 """),
 
-41: _("""
- impossibilite : vous avez un materiau de type "elas_coque" et vous n'avez pas defini la raideur de membrane, ni sous la forme "memb_l", ni sous la forme "m_llll".
-"""),
-
-42: _("""
- comportement materiau non admis
+41 : _("""
+ impossibilité :
+ vous avez un materiau de type "ELAS_COQUE" et vous n'avez pas défini la raideur de membrane,
+ ni sous la forme "MEMB_L", ni sous la forme "M_LLLL".
 """),
 
-43: _("""
- impossibilite : vous avez un materiau de type "elas_coque" et le determinant de la sous-matrice de hooke relative au cisaillement est nul.
+4: _("""
+ comportement matériau non admis
 """),
 
-44: _("""
- unknown option demanded
+43 : _("""
+ impossibilité :
+ vous avez un materiau de type "ELAS_COQUE" et le determinant de la sous-matrice de Hooke relative au cisaillement est nul.
 """),
 
-45: _("""
- n < 0
+45 : _("""
+ L'un des coefficients materiaux N_VP et M_VP de la loi de comportement VENDO_CHAB 
+  est négatif. Or ce n'est physiquement pas possible.
 """),
 
-46: _("""
- nombre de couches negatif ou nul
+46 : _("""
+ nombre de couches négatif ou nul
 """),
 
-47: _("""
- pas d excentrement avec forc_noda maille  %(k1)s
+47 : _("""
+ pas d'excentrement avec FORC_NODA
+ maille  : %(k1)s
 """),
 
-48: _("""
- impossibilite, la surface de l'element est nulle.
+48 : _("""
+ impossibilité, la surface de l'élément est nulle.
 """),
 
-49: _("""
- l'axe de reference est normal a un element de plaque - calcul option impossible - orienter ces mailles
+49 : _("""
+ l'axe de référence est normal à un élément de plaque
+ calcul option impossible
+ orienter ces mailles
 """),
 
-50: _("""
- comportement elastique inexistant
+50 : _("""
+ comportement élastique inexistant
 """),
 
-51: _("""
+51 : _("""
   -> Le type de comportement %(k1)s n'est pas prévu pour le calcul de
      SIGM_ELNO_DEPL. Les seuls comportements autorisés sont :
      ELAS, ELAS_COQUE, ou ELAS_ORTH
@@ -242,198 +232,107 @@ cata_msg={
      ou SIGM_ELNO_COQU (contraintes en un point de l'épaisseur).
 """),
 
-52: _("""
- lorsqu'il y a variation de temperature dans l'epaisseur, utiliser "stat_non_line"
-"""),
-
-53: _("""
- probleme: temperature sur la maille: %(k1)s : il manque la composante "temp"
-"""),
-
-54: _("""
- element non prevu
-"""),
-
-55: _("""
- elrefa inconnu:  %(k1)s
-"""),
-
-56: _("""
-  erreur programmeur ecrasement de dff, dimf est inferieur au nb de noeuds * nb cmps
-"""),
-
-57: _("""
-  erreur programmeur: ecrasement de ff, dimf est inferieur au nb de noeuds
-"""),
-
-58: _("""
- la nature du materiau  %(k1)s  necessite la definition du coefficient  b_endoge dans defi_materiau.
-"""),
-
-59: _("""
- bizarre :  %(k1)s
+52 : _("""
+  -> Le type de comportement %(k1)s n'est pas prévu pour le calcul de
+     SIGM_ELNO_DEPL avec chargement thermique. Les seuls comportements autorisés sont :
+     ELAS, ou ELAS_ORTH
 """),
 
-60: _("""
- on ne sait pas traiter :  %(k1)s
+53 : _("""
+ problème :
+ température sur la maille: %(k1)s : il manque la composante "TEMP"
 """),
 
-61: _("""
- axi : r=0
+55 : _("""
+ ELREFA inconnu:  %(k1)s
 """),
 
-62: _("""
- group_ma :  %(k1)s  inconnu dans le maillage
+58 : _("""
+ la nature du matériau  %(k1)s  nécessite la définition du coefficient  B_ENDOGE dans DEFI_MATERIAU.
 """),
 
-63: _("""
- erreurs group_ma
+6: _("""
+ GROUP_MA :  %(k1)s  inconnu dans le maillage
 """),
 
-64: _("""
-  le liaison_*** de  %(k1)s  implique les noeuds physiques  %(k2)s  et  %(k3)s et traverse l'interface
+64 : _("""
+  le LIAISON_*** de  %(k1)s  implique les noeuds physiques  %(k2)s  et  %(k3)s et traverse l'interface
 """),
 
-65: _("""
-  le liaison_*** de  %(k1)s  implique le noeud physique  %(k2)s et touche l'interface
+65 : _("""
+  le LIAISON_*** de  %(k1)s  implique le noeud physique  %(k2)s et touche l'interface
 """),
 
-66: _("""
- si noeud_orig : donner un group_ma ou une liste de mailles. on ne reordonne pas les group_no et les listes de noeuds.
+66 : _("""
+ si NOEUD_ORIG : donner un GROUP_MA ou une liste de mailles
+ on ne réordonne pas les GROUP_NO et les listes de noeuds.
 """),
 
-67: _("""
- le group_no :  %(k1)s n'existe pas.
+67 : _("""
+ le GROUP_NO :  %(k1)s n'existe pas.
 """),
 
-68: _("""
- le noeud origine  %(k1)s ne fait pas parti du chemin
+68 : _("""
+ le noeud origine  %(k1)s ne fait pas partie du chemin
 """),
 
-69: _("""
- le noeud origine  %(k1)s  n'est pas une extremite
+69 : _("""
+ le noeud origine  %(k1)s  n'est pas une extremité
 """),
 
-70: _("""
- pas d'origine definie par noeud_orig ou group_no_orig
+70 : _("""
+ pas d'origine définie par NOEUD_ORIG ou GROUP_NO_ORIG
 """),
 
-71: _("""
echec dans la recherche du noeud origine
+71 : _("""
échec dans la recherche du noeud origine
 """),
 
-72: _("""
group_no oriente : noeud origine =  %(k1)s
+72 : _("""
GROUP_NO orienté : noeud origine =  %(k1)s
 """),
 
-73: _("""
- le group_ma :  %(k1)s n'existe pas.
+73 : _("""
+ le GROUP_MA :  %(k1)s n'existe pas.
 """),
 
-74: _("""
- si le fond est une courbe fermee maille_orig ou group_ma_orig doit accompagner noeud_orig
+74 : _("""
+ si le fond est une courbe fermée MAILLE_ORIG ou GROUP_MA_ORIG doit accompagner NOEUD_ORIG
 """),
 
-75: _("""
+75 : _("""
  le noeud_orig n'appartient pas a la maille_orig
 """),
 
-76: _("""
+76 : _("""
  la maille_orig %(k1)s  n'appartient pas au fond de fissure
 """),
 
-77: _("""
- le noeud extremite  %(k1)s  n'est pas le dernier noeud
-"""),
-
-78: _("""
- group_no oriente : noeud extremite =  %(k1)s
+77 : _("""
+ le noeud extremité  %(k1)s  n'est pas le dernier noeud
 """),
 
-79: _("""
- il y a a la fois des elements volumiques de degre 1 et de degre 2 dans le modele.  on a besoin de savoir si on est en lineaire ou en quadratique pour choisir la methode de lissage.
+7: _("""
+ GROUP_NO orienté : noeud extremité =  %(k1)s
 """),
 
-80: _("""
- le concept fond_fiss est mal cree
+8: _("""
+ le type des mailles des lèvres doit etre quadrangle ou triangle
 """),
 
-81: _("""
- le .vale du cham_no dire_theta n'a pas la bonne taille
+8: _("""
+  %(k1)s CHAM_NO inexistant
 """),
 
-82: _("""
- l'option de lissage 'lagrang2' n'a pas ete developpee lorsque le nombre de noeuds d'un fond de fissure ferme est pair.
+8: _("""
+ bad definition of MP1 and MP2
 """),
 
-83: _("""
- le type des mailles des                                levres doit etre quadrangle ou triangle
+90 : _("""
+Erreur de programmation :
+   L'attribut NBSIGM n'est pas défini pour cette modélisation.
+Solution :
+   Il faut modifier la catalogue phenomene_modelisation__.cata pour ajouter NBSIGM pour cette modélisation.
 """),
 
-84: _("""
-  %(k1)s cham_no inexistant
-"""),
-
-85: _("""
- initial point nm out of domain
-"""),
-
-86: _("""
- ndicho  .gt.  10000
-"""),
-
-87: _("""
- bad definition of mp1 and mp2
-"""),
-
-88: _("""
- le fond de fissure ne doit etre defini que par un noeud ( revoir le group_no )
-"""),
-
-89: _("""
- le fond de fissure ne                             doit etre defini que par un noeud
-"""),
-
-
-
-
-
-
-
-
-91: _("""
- mot cle fond_fiss obligatoire
-"""),
-
-92: _("""
- le fond de fissure ne doit etre defini que par un noeud ( revoir fond_fiss )
-"""),
-
-93: _("""
-  %(k1)s  n'est pas un group_no ou un group_ma
-"""),
-
-94: _("""
- arret sur erreur(s) utilisateur.
-"""),
-
-95: _("""
- les mailles des levres doivent etre lineiques
-"""),
-
-96: _("""
- erreur : la levre superieure possede une maille repetee 2 fois : maille  %(k1)s . revoir les donnees
-"""),
-
-97: _("""
- erreur : la levre inferieure possede une maille repetee 2 fois : maille  %(k1)s . revoir les donnees
-"""),
-
-98: _("""
- erreur : la levre inferieure et la levre superieure ont une maille surfacique en commun. revoir les donnees
-"""),
-
-99: _("""
- probleme dans le calcul de la normale a la fissure
-"""),
 }
index d10730ffe4476016a6523b13d66cf29e76e71387..bc4ba5e8a3ca3e311f801c54f7368b6f9a71d652 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF elements2 Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF elements2 Messages  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-2: _("""
- le mot cle normale doit comporter 3 composantes
+2: _("""
+ pas d'intersection trouvé
 """),
 
-3: _("""
- le degre du polynome doit etre                            au plus egal a 7 
-"""),
-
-4: _("""
- probleme dans rinf et rsup 
-"""),
-
-5: _("""
- le mot cle dtan_orig doit comporter 3 composantes
-"""),
-
-6: _("""
- le mot cle dtan_extr doit comporter 3 composantes
-"""),
-
-7: _("""
- le mot cle vect_grno_orig doit comporter 2 groupes de points
-"""),
-
-8: _("""
- le mot cle vect_grno_extr doit comporter 2 groupes de points
-"""),
-
-9: _("""
- melang1 seg2 et seg3 : les mailles du fond de fissure doivent etre du meme type
-"""),
-
-10: _("""
- le groupe de noeuds  %(k1)s  definissant la fissure n'est pas ordonne
-"""),
-
-11: _("""
- arret sur erreur utilisateur: deux group_no consecutifs incoherents
-"""),
-
-12: _("""
- les mailles du fond de fissure doivent etre du type segment
-"""),
-
-13: _("""
- melang2 seg2 et seg3 : les mailles du fond de fissure doivent etre du meme type
-"""),
-
-14: _("""
- arret sur erreur utilisateur: deux mailles dufond de fissure sont non consecutives dans la numerotation des noeuds 
-"""),
-
-15: _("""
- arret sur erreur utilisateur: 2 group_ma du fond de fissure sontnon consecutifs dans la numerotation des noeuds
-"""),
-
-16: _("""
- les mailles des levres doivent etre du type quadrangle ou triangle
-"""),
-
-17: _("""
- melang3 seg2 et seg3 : les mailles du fond de fissure doivent etre du meme type
-"""),
-
-18: _("""
- la liste de noeuds definissant la fissure n'est pas ordonnee
-"""),
-
-19: _("""
- melang4 seg2 et seg3 : les mailles du fond de fissure doivent etre du meme type
-"""),
-
-20: _("""
- arret sur erreur(s) utilisateur: deux mailles du fond de fissure sont non consecutives dans la numerotation des noeuds 
-"""),
-
-21: _("""
- erreur : le fond de fissure possede un noeud repete 2 fois : noeud  %(k1)s . revoir les donnees
-"""),
-
-22: _("""
- les mailles du fond_inf                           et du fond_sup sont de type different
-"""),
-
-
-
-
-
-
-
-
-24: _("""
- le noeud  %(k1)s  n appartient pas au fond de fissure 
-"""),
-
-25: _("""
- le fond de fissure n est pas complet
-"""),
-
-26: _("""
- pb prgm
-"""),
-
-27: _("""
- no intersection found
-"""),
-
-28: _("""
- indc = 1 (complet   : translation et rotation) ou                 indc = 0 (incomplet : translation seulement  )                    obligatoirement.
-"""),
-
-29: _("""
+29 : _("""
  element faisceau homogeneise non prevu
 """),
 
-
-
-
-
-
-31: _("""
+31 : _("""
   elrefe non prevu
 """),
 
-32: _("""
+32 : _("""
  comportement non trouve: %(k1)s 
 """),
 
-33: _("""
+33 : _("""
  pas de dilatation thermique orthotrope pour coque_3d
 """),
 
-34: _("""
+34 : _("""
  les vecteurs sont au nombre de 1 ou 2
 """),
 
-35: _("""
- normale nulle !
-"""),
-
-36: _("""
- le type d'element :  %(k1)s n'est pas traite.
-"""),
-
-37: _("""
+37 : _("""
  pas de zero, convergence impossible
 """),
 
-38: _("""
+38 : _("""
   ->  L'option ANGL_AXE n'est pas prise en compte en 2D mais seulement
       en 3D.
   -> Risque & Conseil :
@@ -180,139 +60,123 @@ cata_msg={
      un repère d'orthotropie via ANGL_REP.
 """),
 
-39: _("""
+39 : _("""
  loi lema_seuil non implemente avec les poutres multi fibres
 """),
 
-40: _("""
+40 : _("""
  on ne sait pas integrer avec  %(k1)s  caracteristiques par fibre
 """),
 
-41: _("""
+41 : _("""
  cas avec inerties des fibres non programme
 """),
 
-42: _("""
+42 : _("""
  " %(k1)s "    nom d'element inconnu.
 """),
 
-43: _("""
- noeuds confondus pour un element:  %(k1)s 
+43 : _("""
+ noeuds confondus pour la maille:  %(k1)s 
 """),
 
-44: _("""
+44 : _("""
   option de matrice de masse  %(k1)s  inconnue
 """),
 
-45: _("""
- on n'a pas trouver de variable interne correspondante a la deformation plastiqueequivalente cumule
+45 : _("""
+ on n'a pas trouvé de variable interne correspondante a la déformation plastique équivalente cumulé
 """),
 
-46: _("""
+46 : _("""
  on ne traite pas les moments
 """),
 
-47: _("""
+47 : _("""
  l'option " %(k1)s " est inconnue
 """),
 
-48: _("""
+48 : _("""
  type de poutre inconnu
 """),
 
-49: _("""
- charge repartie variable non admise sur un element courbe.
+49 : _("""
+ charge répartie variable non admise sur un élément courbe.
 """),
 
-50: _("""
- charge repartie variable non admise sur un element variable.
+50 : _("""
+ charge répartie variable non admise sur un élément variable.
 """),
 
-51: _("""
- on ne peut pas imposer de charges reparties suiveuses de type vitesse de vent sur les poutres courbes.
+51 : _("""
+ on ne peut pas imposer de charges réparties suiveuses de type vitesse de vent sur les poutres courbes.
 """),
 
-52: _("""
- on ne peut pas imposer de charges reparties suiveuses sur les poutres courbes.
+52 : _("""
+ on ne peut pas imposer de charges réparties suiveuses sur les poutres courbes.
 """),
 
-53: _("""
- un champ de vitesse de vent est impose sans donner un cx dependant de la vitesse sur une des poutres.
+53 : _("""
+ un champ de vitesse de vent est imposé sans donner un cx dépendant de la vitesse sur une des poutres.
 """),
 
-54: _("""
- g est nul mais pas e
+54 : _("""
+ le module de cisaillement G est nul mais pas le module d'Young E
 """),
 
-55: _("""
+55 : _("""
  section circulaire uniquement
 """),
 
-56: _("""
+56 : _("""
  pour l'instant on ne fait pas le calcul de la  matrice de masse d'un element de plaque q4g excentre.
 """),
 
-57: _("""
+57 : _("""
  pour l'instant on ne peut pas excentrer les elements q4g .
 """),
 
-58: _("""
+58 : _("""
  echec de convergence dans l'inversion du systeme par newton-raphson.
 """),
 
-59: _("""
- pb
-"""),
-
-60: _("""
+60 : _("""
  mauvaise orientation de l element !
 """),
 
-61: _("""
+61 : _("""
  " %(k1)s "   nom d'option non reconnue
 """),
 
-62: _("""
+62 : _("""
  ! pb rcvala rhocp !
 """),
 
-63: _("""
+63 : _("""
  ! comportement non trouve !
 """),
 
-64: _("""
- ! pb rccoma rhocp !
-"""),
-
-65: _("""
- ! deltat: div par zero !
+66 : _("""
+ la matrice gyroscopique n'est pas disponible pour l'élément %(k1)s
 """),
 
-66: _("""
- ! r axi: div par zero !
-"""),
-
-67: _("""
+67 : _("""
  option non traitee
 """),
 
-68: _("""
- une deformation initiale est presente dans la charge : incompatible avec la contrainte initiale sigma_init
-"""),
-
-69: _("""
+69 : _("""
  relation de comportement non traite
 """),
 
-70: _("""
+70 : _("""
  option non valide
 """),
 
-71: _("""
+71 : _("""
  comp_elas non programme pour les modelisations dkt. il faut utiliser comp_incr.
 """),
 
-72: _("""
+72 : _("""
   -> La réactualisation de la géométrie (DEFORMATION='PETIT_REAC' sous
      le mot clé COMP_INCR) est déconseillée pour les éléments de type plaque. Les
      grandes rotations ne sont pas modélisées correctement.
@@ -321,111 +185,80 @@ cata_msg={
      d'utiliser la modélisation COQUE_3D, avec DEFORMATION='GREEN_GR'
 """),
 
-73: _("""
+73 : _("""
  comportement non traite:  %(k1)s 
 """),
 
-74: _("""
+74 : _("""
   %(k1)s  non implante.
 """),
 
-75: _("""
- option "sief_elno_elga" non implantee pour la deformation "green_gr"
+75 : _("""
+ option "SIEF_ELNO_ELGA" non implantée pour la déformation "GREEN_GR"
 """),
 
-76: _("""
+76 : _("""
  la nature du materiau  %(k1)s  n'est pas traitee.
 """),
 
-77: _("""
+77 : _("""
  option :  %(k1)s  interdite
 """),
 
-78: _("""
- element de bord pas encore programme
-"""),
-
-79: _("""
- probleme eventuel dans le calcul des pressions sur les faces x-fem
-"""),
-
-80: _("""
- elements de poutre noeuds confondus pour un element:  %(k1)s 
+80 : _("""
+ éléments de poutre noeuds confondus pour un élément:  %(k1)s 
 """),
 
-81: _("""
elements de poutre section variable affine :seul rectangle plein disponible.
+81 : _("""
éléments de poutre section variable affine :seul une section rectangle plein est disponible.
 """),
 
-82: _("""
elements de poutre section variable homothetique : l'aire initiale est nulle.
+82 : _("""
éléments de poutre section variable homothétique : l'aire initiale est nulle.
 """),
 
-83: _("""
+83 : _("""
  poutre section variable/constante  passage par section homothetique avec a1 = a2 
 """),
 
-84: _("""
+84 : _("""
  elements de poutre l'option " %(k1)s " est inconnue
 """),
 
-85: _("""
+85 : _("""
  non prevu pour les sections rectangulaires
 """),
 
-86: _("""
+86 : _("""
  non prevu pour les sections generales
 """),
 
-87: _("""
+87 : _("""
  " %(k1)s "    : option non traitee
 """),
 
-88: _("""
+88 : _("""
  element discret " %(k1)s " inconnu.
 """),
 
-89: _("""
+89 : _("""
  element discret (te0044): l'option " %(k1)s " est inconnue pour le type " %(k2)s "
 """),
 
-90: _("""
comp_elas non valide
+90 : _("""
COMP_ELAS non valide
 """),
 
-91: _("""
+91 : _("""
  " %(k1)s " matrice de decharge non developpee
 """),
 
-92: _("""
- la loi dis_gricra doit etre utilisee avec deselements du type meca_dis_tr_l: element seg2 + modelisation dis_tr
+92 : _("""
+ la loi DIS_GRICRA doit etre utilisée avec des éléments du type MECA_DIS_TR_L : élément SEG2 + modelisation DIS_TR
 """),
 
-93: _("""
- longueurs diff. pour rigi et amor
-"""),
-
-94: _("""
- longueurs diff. pour mass et amor
-"""),
-
-95: _("""
+95 : _("""
  option de calcul invalide
 """),
 
-96: _("""
- erreur calcul de texnp1
-"""),
-
-97: _("""
- erreur calcul de texn
-"""),
-
-98: _("""
- erreur calcul de echnp1
-"""),
-
-99: _("""
- erreur calcul de echn
-"""),
 }
index 748b8726bb24ddde4a035465abaab1d65097e79c..483be10a9691a2adf5a67245512c8c0728165d4a 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF elements3 Messages  DATE 22/05/2007   AUTEUR GALENNE E.GALENNE 
+#@ MODIF elements3 Messages  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- erreur calcul de sigm1
-"""),
-
-2: _("""
- erreur calcul de sigmn
-"""),
-
-3: _("""
- erreur calcul de eps1
-"""),
-
-4: _("""
- erreur calcul de epsn
-"""),
-
-5: _("""
- erreur calcul de tpf1
-"""),
-
-6: _("""
- erreur calcul de tpfn
-"""),
-
-8: _("""
- erreur calcul de coenp1
-"""),
-
-9: _("""
+9 : _("""
  erreur calcul de coen
 """),
 
-10: _("""
+10 : _("""
  on ne peut pas affecter la modelisation "axis_diag" aux elements de l'axe
 """),
 
-11: _("""
+11 : _("""
   -> Attention vous avez une loi de comportement inélastique et vous etes
      en contraintes planes, la composante du tenseur de déformations EPZZ que
      vous allez calculer n'est valable que tant que vous restez dans le
@@ -68,162 +40,147 @@ cata_msg={
      la valeur de EPZZ calculée par cette option.
 """),
 
-12: _("""
+12 : _("""
  e, nu, alpha dependent de la temperature,                         tgu differente de tgv
 """),
 
-13: _("""
- le calcul de dg n'a pas ete etendu a la plasticite !
-"""),
-
-
-
-
-
-
-
-
-15: _("""
- nom d'element illicite
-"""),
-
-16: _("""
+16 : _("""
  comportement: %(k1)s non implante
 """),
 
-17: _("""
+17 : _("""
  le materiau  %(k1)s  n'est pas connu. seuls sont admis les materiaux  'ther', 'ther_coqmu' et 'ther_coque' pour les coques thermiques .
 """),
 
-18: _("""
+18 : _("""
  le materiau  %(k1)s  n'est pas connu. seuls sont admis les materiaux  'ther' et 'ther_coqmu' pour le calcul des flux pour les coques thermiques .
 """),
 
-19: _("""
+19 : _("""
  l'option  %(k1)s  n'est disponible qu'avec des elements tetra ou hexa. or, la maille  %(k2)s  est de type  %(k3)s .
 """),
 
-20: _("""
+20 : _("""
  la maille  %(k1)s  ne repond pas au critere geometrique sur les mailles hexa : les cotes opposes doivent etre paralleles
 """),
 
-21: _("""
+21 : _("""
  erreur lors de l appel a fointe
 """),
 
-22: _("""
+22 : _("""
  erreur dans le calcul de coef_f
 """),
 
-
-
-
-
-
-
-
-24: _("""
- matns mal dimensionnee
+25 : _("""
+ calcul de sensibilite :  actuellement, on ne derive que les : pou_d_e
 """),
 
-26: _("""
+26 : _("""
  mauvaise definition des caracteristiques de la section
 """),
 
-27: _("""
+27 : _("""
  l'option  " %(k1)s "  n'est pas programmee
 """),
 
-28: _("""
+28 : _("""
  rigidite geometrique non definie pour les elements courbes.
 """),
 
-29: _("""
+29 : _("""
  force elementaire electrique non definie pourles elements courbes.
 """),
 
-30: _("""
+30 : _("""
  section non tubulaire pour mass_flui_stru
 """),
 
-31: _("""
+31 : _("""
  pas de valeur utilisateur pour rho
 """),
 
-32: _("""
+32 : _("""
  " %(k1)s "  nom d'option inconnu.
 """),
 
-33: _("""
+33 : _("""
  option non disponible
 """),
 
-34: _("""
+34 : _("""
  seules les forces suiveuses de type vent definies par un evol_char sont autorisees
 """),
 
-35: _("""
+35 : _("""
  un champ de vitesse de vent est impose sans donner un cx dependant de la vitesse sur une des barres.
 """),
 
-36: _("""
+36 : _("""
  comp_incr non valide
 """),
 
-37: _("""
+37 : _("""
   relation :  %(k1)s  non implantee sur les cables
 """),
 
-38: _("""
+38 : _("""
   deformation :  %(k1)s  non implantee sur les cables
 """),
 
-39: _("""
+39 : _("""
  un champ de vitesse de vent est impose sans donner un cx dependant de la vitesse sur un des cables.
 """),
 
-46: _("""
+46 : _("""
  le parametre "pnosym" n'existe pas dans le catalogue de l'element  %(k1)s  .
 """),
 
-47: _("""
+47 : _("""
  la taille de la matrice non-symetrique en entree est fausse.
 """),
 
-48: _("""
+48 : _("""
  la taille de la matrice symetrique en sortie est fausse.
 """),
 
-49: _("""
+49 : _("""
  anisotropie non prevue pour coque1d
 """),
 
-50: _("""
+50 : _("""
  nombre de couches limite a 30 pour les coques 1d
 """),
 
+51 : _("""
+ Le nombre de couches défini dans DEFI_COQU_MULT et dans AFFE_CARA_ELEM dans n'est pas cohérent.
+ Nombre de couches dans DEFI_COQU_MULT: %(i1)d
+ Nombre de couches dans AFFE_CARA_ELEM: %(i2)d
+"""),
 
+52 : _("""
+ L'épaisseur totale des couches definie dans DEFI_COQU_MULT et celle définie dans AFFE_CARA_ELEM ne sont pas cohérentes.
+ Epaisseur totale des couches dans DEFI_COQU_MULT: %(r1)f
+ Epaisseur dans AFFE_CARA_ELEM: %(r2)f
+"""),
 
-
-
-
-54: _("""
+54 : _("""
   la reactualisation de la geometrie (deformation : petit_reac sous le mot cle comp_incr) est deconseillee pour les elements de coque_1d.
 """),
 
-55: _("""
+55 : _("""
  nombre de couches limite a 10 pour les coques 1d
 """),
 
-56: _("""
+56 : _("""
  valeurs utilisateurs de rho ou de rof nulles
 """),
 
-57: _("""
+57 : _("""
  pas d elements lumpes pourhydratation 
 """),
 
-58: _("""
+58 : _("""
   -> La réactualisation de la géométrie (DEFORMATION='PETIT_REAC' sous
      le mot clé COMP_INCR) est déconseillée pour les éléments POU_D_T et POU_D_E.
   -> Risque & Conseil :
@@ -234,82 +191,55 @@ cata_msg={
      DEFORMATION='GREEN_GR'.
 """),
 
-59: _("""
+59 : _("""
   le coefficient de poisson est non constant. la programmation actuelle n en tient pas compte.
 """),
 
-60: _("""
+60 : _("""
  noeuds confondus pour un element de poutre
 """),
 
-61: _("""
+61 : _("""
  loi  %(k1)s  indisponible pour les pou_d_e/d_t
 """),
 
-62: _("""
+62 : _("""
  noeuds confondus pour un element de barre
 """),
 
-63: _("""
+63 : _("""
  ne pas utiliser ther_lineaire avec des elements de fourier mais les cmdes developpees
 """),
 
-64: _("""
+64 : _("""
  erreur dans le calcul de coeh_f
 """),
 
-65: _("""
- chargements non nuls sur l'axe
-"""),
-
-66: _("""
+66 : _("""
  option  %(k1)s  inattendue
 """),
 
-67: _("""
+67 : _("""
  element degenere:revoir le maillage
 """),
 
-68: _("""
- L'option CALC_K_G est incompatible avec les comportements incrémentaux, avec les comportement non
- linéaires et avec la deformation GREEN.
-"""),
-
-69: _("""
- on a pas pu calculer les derivees des fonctions singulieres car on se trouve sur le fond de fissure
-"""),
-
-70: _("""
- il faut affecter les elements de  bord (e et nu) pour le calcul des fic
-"""),
-
-
-
-
-
-
-
-
-
-
-
-73: _("""
+73 : _("""
  option de calcul non valide
 """),
 
-74: _("""
+74 : _("""
  pour l'option "rice_tracey", la relation " %(k1)s " n'est pas admise
 """),
 
-75: _("""
+75 : _("""
  le materiau  %(k1)s  n'est pas autorise pour calculer les deformations plastiques : seuls les materiaux isotropes sont traites en plasticite.
 """),
 
-76: _("""
+76 : _("""
  couplage fluage/fissuration : la loi beton_double_dp ne peut etre couplee qu avec une loi de fluage de granger.
 """),
 
-77: _("""
+77 : _("""
   -> Attention vous etes en contraintes planes, et vous utilisez la loi
      de comportement %(k1)s. La composante du tenseur des déformations
      plastiques EPZZ est calculée en supposant l'incompressibilité des
@@ -319,71 +249,63 @@ cata_msg={
 
 """),
 
-78: _("""
+78 : _("""
   la reactualisation de la geometrie (deformation : petit_reac sous le mot cle comp_incr) est deconseillee pour les elements pou_d_tg  .
 """),
 
-79: _("""
+79 : _("""
  tableau sous dimensionne (dvlp)
 """),
 
-80: _("""
+80 : _("""
  situation de contact impossible
 """),
 
-81: _("""
- option inconnue 
-"""),
-
-82: _("""
+82 : _("""
  vecteur sous dimensionne (dvlp)
 """),
 
-83: _("""
+83 : _("""
  dimension incorrecte (dvlp)
 """),
 
-84: _("""
+84 : _("""
  type maille inconnu
 """),
 
-85: _("""
+85 : _("""
   relation :  %(k1)s  non implantee sur les elements "pou_d_t_gd"
 """),
 
-86: _("""
+86 : _("""
   deformation :  %(k1)s  non implantee sur les elements "pou_d_t_gd"
 """),
 
-87: _("""
+87 : _("""
  rcvala ne trouve pas rho, qui est necessaire en dynamique
 """),
 
-88: _("""
- la masse volumique rho n'a pas ete definie
-"""),
-
-89: _("""
+89 : _("""
  developpement non realise
 """),
 
-90: _("""
+90 : _("""
  option:  %(k1)s  non implante
 """),
 
-91: _("""
+91 : _("""
   calcul de la masse non implante pour les elements coque_3d en grandes rotations, deformation : green_gr
 """),
 
-92: _("""
+92 : _("""
  les comportements elastiques de type comp_elas ne sont pas disponibles pour la modelisation dktg.
 """),
 
-93: _("""
+93 : _("""
   deformation :  %(k1)s  non implantee sur les elements coque_3d en grandes rotations.   deformation : green_gr obligatoirement 
 """),
 
-94: _("""
+94 : _("""
   -> La réactualisation de la géométrie (DEFORMATION='PETIT_REAC' sous
      le mot clé COMP_INCR) est déconseillée pour les éléments COQUE_3D.
   -> Risque & Conseil :
@@ -395,24 +317,16 @@ cata_msg={
 
 """),
 
-95: _("""
+95 : _("""
   nume_couche incorrect
 """),
 
-96: _("""
- l'option est incompatible avec                                  les comportements incrementaux ainsi que la deformation           green
-"""),
-
-
-
-
-
-
-98: _("""
+98 : _("""
  comportement coeur homogeneise inexistant
 """),
 
-99: _("""
+99 : _("""
   : seule les poutres a sections constantes sont admises !
 """),
+
 }
index 7723f9b81db4fbe635db17a7d522693c1323aa2d..26df59798a96bd6e3943b9a56609a9b292b43a31 100644 (file)
-#@ MODIF elements4 Messages  DATE 04/06/2007   AUTEUR DURAND C.DURAND 
+#@ MODIF elements4 Messages  DATE 11/03/2008   AUTEUR MEUNIER S.MEUNIER 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  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.        
+# COPYRIGHT (C) 1991 - 2007  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.
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
-  erreur dans le calcul de pres_f 
+1 : _("""
+  erreur dans le calcul de pres_f
 """),
 
-2: _("""
+2 : _("""
  pour l'option "indic_ener", les seules relations admises sont "vmis_isot_line" et "vmis_isot_trac" .
 """),
 
-3: _("""
+3 : _("""
  pour l'option "indic_seuil", les seules relations admises sont "vmis_isot_line", "vmis_isot_trac"  et "vmis_cine_line" .
 """),
 
-4: _("""
- ! pb rcvala biot_coef  %(k1)s 
+: _("""
+ le type du champ de contraintes est incompatible avec l'option :  %(k1)s
 """),
 
-6: _("""
- le type du champ de contraintes est incompatible avec l'option :  %(k1)s 
-"""),
-
-7: _("""
+7 : _("""
  pas de contraintes dans pcontgp
 """),
 
-8: _("""
+8 : _("""
  pas de champ endo_elga dans ptriagp
 """),
 
-9: _("""
+9 : _("""
  pas de champ vari_elga dans pvarimr
 """),
 
-10: _("""
+10 : _("""
  pas de champ vari_elga dans pvaripr
 """),
 
-11: _("""
+11 : _("""
  option non traitée  %(k1)s
  """),
 
-12: _("""
- nombre total de sous-éléments limité a 32.
-"""),
-
-13: _("""
- nombre total de points d'intersection limité a 11.
-"""),
-
-14: _("""
- type de maille non valide pour le post-traitement des éléments xfem
-"""),
-
-15: _("""
+15 : _("""
   deformation :  %(k1)s non implantée sur les éléments "pou_d_tgm" : utiliser PETIT ou REAC_GEOM
 """),
 
-16: _("""
+16 : _("""
  option "vari_elno_elga" impossible actuellement
 """),
 
-17: _("""
+17 : _("""
  seuls comportements autorises :"elas" et "vmis_isot_trac"
 """),
 
-18: _("""
- pb de statut de contact
-"""),
-
-19: _("""
- lsn non nul sur la surface.
-"""),
-
-20: _("""
- pour l'élément de poutre " %(k1)s " l'option " %(k2)s " est invalide
-"""),
-
-21: _("""
- pour un élément de poutre noeuds confondus :  %(k1)s 
-"""),
-
-22: _("""
- les poutres à section variable ne sont pas traitées.
-"""),
-
-23: _("""
+23 : _("""
  comp_incr non disponible pour les elements enrichis avec x-fem.
 """),
 
-30: _("""
- option refe_forc_noda plus tard...
-"""),
-
-31: _("""
+31 : _("""
  dfdi mal dimensionnée
 """),
 
-32: _("""
+32 : _("""
  vous utilisez le mot clé liaison_elem avec l'option coq_pou: l'épaisseur des éléments de bord de coque n'a pas été affectée.
 """),
 
-33: _("""
+33 : _("""
  l'epaisseur des éléments de bord de coque est negative ou nulle.
 """),
 
-34: _("""
+34 : _("""
  le jacobien est nul.
 """),
 
-35: _("""
+35 : _("""
  matns() sous-dimensionné
 """),
 
-36: _("""
+36 : _("""
  pr() sous-dimensionne
 """),
 
-37: _("""
+37 : _("""
  nive_couche ne peut etre que "moy"
 """),
 
-38: _("""
- option  %(k1)s  non active pour un élément de type  %(k2)s 
+38 : _("""
+ option  %(k1)s  non active pour un élément de type  %(k2)s
 """),
 
-39: _("""
+39 : _("""
  option  %(k1)s  : incompatibilité des deux champs d entrée
 """),
 
-40: _("""
+40 : _("""
  le nombre de ddl est trop grand
 """),
 
-41: _("""
+41 : _("""
  le nombre de ddl est faux
 """),
 
-42: _("""
+42 : _("""
  nom de type élément inattendu
 """),
 
-43: _("""
+43 : _("""
  comp. elastique inexistant
 """),
 
-44: _("""
+44 : _("""
  l'option " %(k1)s " est interdite pour les tuyaux
 """),
 
-45: _("""
+45 : _("""
  l'option " %(k1)s " en repère local est interdite pour les tuyaux : utiliser le repère global
 """),
 
-46: _("""
+46 : _("""
  le nombre de couches et de secteurs doivent etre supérieurs a 0
 """),
 
-47: _("""
+47 : _("""
  composante  %(k1)s  non traitée, on abandonne
 """),
 
-48: _("""
+48 : _("""
  champ  %(k1)s  non traité, on abandonne
 """),
 
-49: _("""
+49 : _("""
  l'option " %(k1)s " est non prévue
 """),
 
-50: _("""
-  angle compris entre 0 et deuxpi
-"""),
-
-51: _("""
+51 : _("""
   nume_sect incorrect
 """),
 
-52: _("""
+52 : _("""
  mauvaise option
 """),
 
-53: _("""
+53 : _("""
  ep/r > 0.2 modi_metrique pas adapté
 """),
 
-54: _("""
+54 : _("""
  ep/r > 0.2 modi_metrique=non pas adapté
 """),
 
-55: _("""
- alpha est pris egal a 0
+5: _("""
+ famille inexistante  %(k1)s
 """),
 
-56: _("""
- famille inexistante  %(k1)s 
-"""),
-
-57: _("""
+57 : _("""
  indn = 1 (intégration normale) ou indn = 0 (integration réduite) obligatoirement.
 """),
 
-58: _("""
+58 : _("""
   le code " %(k1)s " est non prévu. code doit etre = "gl" ou "lg"
 """),
 
-59: _("""
- nom d'élément fini incompatible
-"""),
-
-60: _("""
- pb calcul des derivées des fonctions singulières sur le fond de fissure
-"""),
-
-61: _("""
+61 : _("""
  préconditions non remplies
 """),
 
-62: _("""
+62 : _("""
   erreur: élément non 2d
 """),
 
-63: _("""
-  l'option %(k1)s n'est pas disponible pour le comportement %(k2)s 
+63 : _("""
+  l'option %(k1)s n'est pas disponible pour le comportement %(k2)s
 """),
 
-64: _("""
+64 : _("""
   Il est impossible de calculer la normale au noeud %(k1)s de la maille %(k2)s.
   Des aretes doivent etre confondues.
 """),
 
-65: _("""
+65 : _("""
   Comportement inattendu : %(k1)s.
 """),
 
-66: _("""
+66 : _("""
   Il est impossible de calculer la contrainte d'arc.
   La normale à l'élément et le vecteur obtenu à partir du mot-clé ANGL_REP sont colinéaires.
 """),
 
-68: _("""
+
+68 : _("""
  Nombre d'itérations internes insuffisant.
 """),
 
-69: _("""
+69 : _("""
  ! pb récuperation donnée matériau dans thm_liqu %(k1)s !
 """),
 
-72: _("""
-   rcvala ne trouve pas nu, qui est nécessaire pour l'élément MECA_HEXS8  
+7: _("""
+ ! pb récupération donnée matériau dans thm_init %(k1)s !
 """),
 
-73: _("""
-   élément MECA_HEXS8:COMP_ELAS non implanté, utiliser COMP_INCR RELATION='ELAS'  
+7: _("""
+ ! pb récupération données matériau dans elas %(k1)s !
 """),
 
-74: _("""
-  Attention l'élément MECA_HEXS8 ne fonctionne correctement que sur les parallélépipèdes.
-  Sur les elements quelconques on peut obtenir des résultats faux.   
+72 : _("""
+   rcvala ne trouve pas nu, qui est nécessaire pour l'élément MECA_HEXS8
 """),
 
-75: _("""
- la maille de numero:  %(i1)d appartient à plusieurs sous-domaines! %(i2)d 
+7: _("""
+   élément MECA_HEXS8:COMP_ELAS non implanté, utiliser COMP_INCR RELATION='ELAS'
 """),
 
-76: _("""
- la maille du modèle de numéro:  %(i1)d n appartient à aucun sous-domaine ! %(i2)d 
+74 : _("""
+  Attention l'élément MECA_HEXS8 ne fonctionne correctement que sur les parallélépipèdes.
+  Sur les elements quelconques on peut obtenir des résultats faux.
 """),
 
-77: _("""
- numero de couche  %(i1)d 
-  trop grand par rapport au nombre de couches autorisé pour la maille  %(k1)s 
+75 : _("""
+ la maille de numero:  %(i1)d appartient à plusieurs sous-domaines! %(i2)d
 """),
 
-78: _("""
- ! pb recuperation donnée matériau dans thm_diffu %(k1)s !
+7: _("""
+ la maille du modèle de numéro:  %(i1)d n appartient à aucun sous-domaine ! %(i2)d
 """),
 
-79: _("""
- la loi de comportement n'existe pas pour la modélisation dktg :  %(k1)s 
+77 : _("""
+ numero de couche  %(i1)d
+  trop grand par rapport au nombre de couches autorisé pour la maille  %(k1)s
 """),
 
-80: _("""
- attention : l élément de plaque quad4 défini sur la maille : %(k1)s n est pas plan et peut conduire a des résultats faux. 
-  distance au plan :  %(r1)f 
+78 : _("""
+ ! pb recuperation donnée matériau dans thm_diffu %(k1)s !
 """),
 
-81: _("""
- manque le paramètre  %(k1)s pour la maille  %(k2)s 
+79 : _("""
+ la loi de comportement n'existe pas pour la modélisation dktg :  %(k1)s
 """),
 
-83: _("""
- utiliser "stat_non_line"  température inf:  %(r1)f   température moy:  %(r2)f 
- température sup:  %(r3)f 
-"""),
+80 : _("""
 
-84: _("""
- famille non disponible élément de référence  %(k1)s 
- famille  %(k2)s 
+ attention : l élément de plaque quad4 défini sur la maille : %(k1)s n est pas plan et peut conduire a des résultats faux.
+  distance au plan :  %(r1)f
 """),
 
-88: _("""
- elrefe non disponible élément de référence  %(k1)s 
+8: _("""
+ manque le paramètre  %(k1)s pour la maille  %(k2)s
 """),
 
-90: _("""
- elrefe mal programme maille  %(k1)s  type  %(k2)s  nb noeuds  %(i1)d 
- nb noeuds pour le gano  %(i2)d 
+84 : _("""
+ famille non disponible élément de référence  %(k1)s
+ famille  %(k2)s
 """),
 
-91: _("""
- ! le calcul de cet estimateur !! ne tient pas compte d'éventuelles ! %(i1)d 
- ! conditions limites non linéaires   ! %(i2)d 
+88 : _("""
+ elrefe non disponible élément de référence  %(k1)s
 """),
 
-92: _("""
- la pression doit etre nulle pour la maille  %(k1)s 
+90 : _("""
+ elrefe mal programme maille  %(k1)s  type  %(k2)s  nb noeuds  %(i1)d
+ nb noeuds pour le gano  %(i2)d
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-98: _("""
- la contrainte equivalente est nulle pour la maille  %(k1)s 
+91 : _("""
+ ! le calcul de cet estimateur !! ne tient pas compte d'éventuelles ! %(i1)d
+ ! conditions limites non linéaires   ! %(i2)d
 """),
 
+92 : _("""
+ la pression doit etre nulle pour la maille  %(k1)s
+"""),
 
-
-
-
+98 : _("""
+ la contrainte equivalente est nulle pour la maille  %(k1)s
+"""),
 
 }
index 250a1b752ae3d58d76f4d864a76ef7a0ab892f6e..cd318eb48cb3aa9557c498438a7fc44b724cedf6 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF elements5 Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF elements5 Messages  DATE 06/05/2008   AUTEUR MARKOVIC D.MARKOVIC 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-
-
-
-
-
-
-2: _("""
+2 : _("""
  tuyau : le nombre de couches est limite a  %(i1)d 
 """),
 
-3: _("""
+3 : _("""
  tuyau : le nombre de secteurs est limite a  %(i1)d 
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-8: _("""
+8 : _("""
  Vous voulez utiliser l'indicateur de convergence RESI_REFE_RELA mais vous n'avez pas
  renseigné le mot-clé %(k1)s .
 """),
 
-9: _("""
+9 : _("""
  Employez la modélisation spécifique aux grandes déformations XX_INCO_GD
-"""), 
-
-10: _("""
- La modélisation GRAD_VARI n'est plus disponible en grandes déformations. Pour Rousselier
- version SIMO_MIEHE, vous pouvez faire du non-local en utilisant la modélisation XX_INCO_GD
- et en définissant C_GONF<>0 sous l'opérande NON_LOCAL de DEFI_MATERIAU
-"""), 
-
-11: _("""
- Le rayon R_SUP (ou R_SUP_FO) doit obligatoirement etre supérieur au rayon R_INF 
- (resp. R_INF_FO).
-"""), 
-
-12: _("""
- Le noeud %(k1)s du fond de fissure n est rattaché à aucune maille surfacique 
- de la lèvre supérieure : vérifier les groupes de mailles.
-"""), 
-
-13: _("""
- Le noeud %(k1)s du fond de fissure n est rattaché à aucune maille surfacique 
- de la lèvre inférieure : vérifier les groupes de mailles.
-"""), 
-
-14: _("""
- Les noeuds %(k1)s de FOND_INF et %(k2)s de FOND_SUP ne sont pas en vis à vis. 
-"""), 
-
-15: _("""
+"""),
+
+15 : _("""
  FONFIS - occurence %(i1)s : les objets précédemment évoqués sont inexistants
  ou de type incompatible.
-"""), 
+"""),
 
-16: _("""
+16 : _("""
  FONFIS - occurence %(i1)s : les mailles spécifiées ne permettent pas de définir 
  une ligne continue.
  Conseil (si opérateur DEFI_FOND_FISS) : vérifier le groupe de maille du fond de fissure.
-"""), 
+"""),
 
-17: _("""
+17 : _("""
  FONFIS - Trop de noeuds dans le groupe de noeuds %(k1)s.
  --> Noeud utilisé : %(k2)s
-"""), 
+"""),
 
-18: _("""
+18 : _("""
  FONFIS - Trop de mailles dans le groupe de mailles GROUP_MA_ORIG.
  --> Maille utilisée : %(k1)s
-"""), 
+"""),
 
-19: _("""
+19 : _("""
  FONFIS - Occurence %(i1)s : maille %(k1)s inexistante.
-"""), 
+"""),
 
-20: _("""
+20 : _("""
  FONFIS - Occurence %(i1)s : maille %(k1)s non linéique.
-"""), 
+"""),
 
-21: _("""
+21 : _("""
  FONFIS - Occurence %(i1)s : mélange de SEG2 et de SEG3 (maille %(k1)s).
-"""), 
+"""),
 
-22: _("""
+22 : _("""
    Erreur, le nombre de noeuds d'un element de joint 3D n'est pas correct   
 """),
 
-
-23: _("""
+23 : _("""
    Erreur, le nombre de points de Gauss d'un element de joint 3D n'est pas correct   
 """),
 
-24: _("""
+24 : _("""
   le nombre de mailles du modele %(i1)d est différent de la somme des mailles des sous-domaines %(i2)d 
 """),
-25: _("""
+
+25 : _("""
   le sous-domaine n %(i1)d n'est pas renseigné ou vide dans DEFI_PART_OPS
 """),
 
+28 : _("""
+  le modele comporte %(i1)d mailles de plus que l'ensemble des sous-domaines 
+"""),
+
+29 : _("""
+  le modele comporte %(i1)d mailles de moins que l'ensemble des sous-domaines 
+"""),
+
+30 : _("""
+ jacobien negatif ou nul : jacobien =  %(r1)f 
+"""),
+
+32 : _("""
+  Toute méthode de contact autre que la méthode continue est proscrite avec
+  FETI! En effet cette dernière méthode est basée sur un vision maille/calcul
+  élémentaire et non pas sur une approche globale discrète dont le flot de
+  données est plus difficilement dissociable par sous-domaine.
+  Merci, d'activer donc toutes les zones de contact avec ladite méthode. 
+"""),
+
+33 : _("""
+  Avec FETI, on ne peut mélanger dans une seul AFFE_CHAR_MECA, du contact
+  avec des chargements à LIGREL tardif (Dirichlet, Force Nodale...).
+  Merci, de dissocier les types de chargement par AFFE_CHAR_MECA.
+"""),
 
+34 : _("""
+  Contact méthode continue avec FETI: la maille %(i1)d de la zone %(i2)d
+  du chargement %(i3)d , semble etre à cheval entre les sous-domaines
+  %(i4)d et %(i5)d !
+  Solution paliative: il faut forcer le partitionnement à ne pas couper
+  cette zone de contact ou essayer de la dédoubler en deux zones.
+"""),
 
+35 : _("""
+  Contact méthode continue avec FETI: la surface %(i1)d de la zone %(i2)d
+  du chargement %(i3)d n'est portée par aucun sous-domaine !
+"""),
 
+36 : _("""
+  Contact méthode continue avec FETI: le noeud %(i1)d est présent plusieurs
+  fois dans la zone de contact %(i2)d . Cela ne devrait pas etre un problème
+  pour l'algorithme, mais ce n'est pas une modélisation du contact très
+  orthodoxe !
+"""),
 
+37 : _("""
+  Contact méthode continue avec FETI: le noeud %(i1)d est a l'intersection de
+  plusieurs zones de contact. Cela va probablement générer un problème dans
+  l'algorithme de contact (pivot nul) !
+"""),
+
+38 : _("""
+  Contact méthode continue avec FETI: le noeud %(i1)d de la zone de contact
+  %(i2)d est aussi sur l'interface FETI ! Pour l'instant ce cas de figure
+  est proscrit. Essayer de l'enlevez de la zone de contact ou de reconfigurer
+  vos sous-domaines.
+"""),
 
+39 : _("""
+ echec de la recherche de zero a l'iteration :  %(i1)d 
+  fonction decroissante - pour x=a:  %(r1)f 
+  / fonction(a):  %(r2)f 
+                          et   x=b:  %(r3)f 
+  / fonction(b):  %(r4)f 
 
+  fonction x=:  %(r5)f  %(r6)f  %(r7)f  %(r8)f  %(r9)f  %(r10)f %(r11)f %(r12)f %(r13)f %(r14)f
+                %(r15)f %(r16)f %(r17)f %(r18)f %(r19)f %(r20)f %(r21)f %(r22)f %(r23)f %(r24)f
 
-28: _("""
-  le modele comporte %(i1)d mailles de plus que l'ensemble des sous-domaines 
+  fonction f=:  %(r25)f  %(r26)f  %(r27)f  %(r28)f  %(r29)f  %(r30)f %(r31)f %(r32)f %(r33)f %(r34)f
+                %(r35)f  %(r36)f  %(r37)f  %(r38)f  %(r39)f  %(r40)f %(r41)f %(r42)f %(r43)f %(r44)f
 """),
-29: _("""
-  le modele comporte %(i1)d mailles de moins que l'ensemble des sous-domaines 
+
+40 : _("""
+ echec de la recherche de zero a l'iteration :  %(i1)d 
+  fonction constante    - pour x=a:  %(r1)f 
+  / fonction(a):  %(r2)f 
+                          et   x=b:  %(r3)f 
+  / fonction(b):  %(r4)f 
+
+  fonction x=:  %(r5)f  %(r6)f  %(r7)f  %(r8)f  %(r9)f  %(r10)f %(r11)f %(r12)f %(r13)f %(r14)f
+                %(r15)f %(r16)f %(r17)f %(r18)f %(r19)f %(r20)f %(r21)f %(r22)f %(r23)f %(r24)f
+
+  fonction f=:  %(r25)f  %(r26)f  %(r27)f  %(r28)f  %(r29)f  %(r30)f %(r31)f %(r32)f %(r33)f %(r34)f
+                %(r35)f  %(r36)f  %(r37)f  %(r38)f  %(r39)f  %(r40)f %(r41)f %(r42)f %(r43)f %(r44)f
 """),
+
+41 : _("""
+     Température négative à la maille :  %(k1)s
+"""),
+
+42 : _("""
+ L'épaisseur definie dans DEFI_GLRC et celle définie dans AFFE_CARA_ELEM ne sont pas cohérentes.
+ Epaisseur dans DEFI_GLRC: %(r1)f
+ Epaisseur dans AFFE_CARA_ELEM: %(r2)f
+"""),
+
 }
diff --git a/Aster/Cata/cataSTA9/Messages/execlogiciel0.py b/Aster/Cata/cataSTA9/Messages/execlogiciel0.py
new file mode 100644 (file)
index 0000000..f2e606d
--- /dev/null
@@ -0,0 +1,56 @@
+#@ MODIF execlogiciel0 Messages  DATE 19/05/2008   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+Format Salome, l'argument 1 doit etre 
+le nom du fichier med produit par le script python.
+"""),
+
+2: _("""
+On ne sait pas traiter le format %(k1)s
+"""),
+
+3: _("""
+Code retour incorrect (MAXI %(i1)d) : %(i2)d
+"""),
+
+4: _("""
+Le mot-cle logiciel n'est pas utilise avec ce format.
+"""),
+
+5: _("""
+Erreurs lors de l'execution du fichier ci-dessous :
+<<<<<<<<<<<<<<< DEBUT DU FICHIER >>>>>>>>>>>>>>>
+%(k1)s
+<<<<<<<<<<<<<<<  FIN  DU FICHIER >>>>>>>>>>>>>>>
+"""),
+
+6: _("""
+Le fichier %(k1)s n'existe pas.
+"""),
+
+7: _("""
+Mode de lancement inconnu : %(k1)s
+"""),
+
+}
index 4b983b527ba631f70eca7ac171e31888dc26a617..08cfacb7aa6091286e4a1a01113fbbda05929201 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF factor Messages  DATE 09/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF factor Messages  DATE 11/02/2008   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -103,20 +103,27 @@ Conseil :
   Il s'agit peut-etre d'un manque de conditions aux limites,
   ou au contraire, de redondances entre de trop nombreuses conditions.
 """),
-
+#-----------------------------------------------------------------------------------------------
+50: _("""
+ Solveur MUMPS :
+   -> Vous avez demandé comme renuméroteur RENUM = '%(k1)s', or MUMPS en a
+      utilisé un autre.
+   -> Risque & Conseil :
+      Il se peut que votre version de MUMPS n'ait pas été compilée avec
+      le support de ce renuméroteur. Dans le doute, RENUM='AUTO' permet
+      de laisser MUMPS faire le meilleur choix.
+ """),
 #-----------------------------------------------------------------------------------------------
 51: _("""
 Solveur MUMPS interdit ici.
 Causes possibles :
-  - contact/frottement discret
-  - STAT_NON_LINE / FLAMBEMENT
+  - frottement pénalisé ou lagrangien (si MUMPS distribué parallèle)
 """),
 
 #-----------------------------------------------------------------------------------------------
 52: _("""
 Solveurs LDLT et MULT_FRONT seuls permis ici.
 Causes possibles :
-  - contact/frottement discret
   - STAT_NON_LINE / FLAMBEMENT
 """),
 
@@ -132,20 +139,17 @@ Remarque : on a le droit de d
 #-----------------------------------------------------------------------------------------------
 54: _("""
 Solveur MUMPS :
-  Mumps manque de mémoire lors de la factorisation de la matrice.
+  Le solveur Mumps manque de mémoire lors de la factorisation de la matrice.
+
 Solution :
-  Il faut augmenter la mémoire donnée à Mumps.
-  Pour cela, il faut diminuer le pourcentage de mémoire donné à JEVEUX.
-  C'est à dire diminuer la valeur du paramètre "mem_aster" du menu "Options" d'ASTK.
-Remarque :
-  On peut par exemple choisir mem_aster=50 ce qui correspond à un partage
-  équitable (50/50) de la mémoire entre JEVEUX et Mumps.
+  Il faut augmenter la mémoire accessible à Mumps (et autres programmes hors fortran d'Aster).
+  Pour cela, il faut diminuer la mémoire donnée à JEVEUX (ASTK : case "dont Aster (Mo)").
 """),
 
 #-----------------------------------------------------------------------------------------------
 55: _("""
 Solveur MUMPS :
-  Problème dans le solveur MUMPS.
+  Problème ou alarme dans le solveur MUMPS.
   Le code retour de mumps (INFOG(1)) est : %(i1)d
 Solution :
   Consulter le manuel d'utilisation de Mumps.
@@ -174,9 +178,9 @@ Solution :
 #-----------------------------------------------------------------------------------------------
 58: _("""
 Solveur MUMPS :
-  La matrice est singulière.
+  La matrice est numériquement singulière.
 Solution :
-  On peut essayer d'aller plus loin en précisant : STOP_SINGULIER='NON'
+  Peut être un problème de modélisation (blocages redondants...)
 """),
 
 #-----------------------------------------------------------------------------------------------
@@ -208,5 +212,24 @@ Erreur Programmeur lors de la r
 """),
 
 #-----------------------------------------------------------------------------------------------
+62: _("""
+Alarme Solveur MUMPS :
+  La procédure de raffinement itératif aurait besoin de plus que les %(i1)d d'itérations
+  imposées en dur dans l'appel MUMPS par Code_Aster.
+Solution :
+  On peut essayer de corriger l'affectation de XMPSK%ICNTL(10) dans AMUMPR/C.F.
+  Contactez l'assistance.
+"""),
+
+#-----------------------------------------------------------------------------------------------
+63: _("""
+Information Solveur MUMPS :
+  Déséquilibrage de charge maximum supérieur à %(r1)g %% sur au moins une des 6 étapes profilées.
+Conseils: Pour optimiser l'équilibrage de votre calcul, vous pouvez essayer
+        - d'enlever du modèle les mailles qui ne participent pas au calcul,
+        - utiliser l'option 'DISTRIBUE_SD' au lieu de 'DISTRIBUE_MAILLE' ou 'CENTRALISE',
+        - diminuer le nombre de processeurs utilisés.
+"""),
+
 #-----------------------------------------------------------------------------------------------
 }
diff --git a/Aster/Cata/cataSTA9/Messages/fatigue1.py b/Aster/Cata/cataSTA9/Messages/fatigue1.py
new file mode 100644 (file)
index 0000000..e694576
--- /dev/null
@@ -0,0 +1,289 @@
+#@ MODIF fatigue1 Messages  DATE 26/11/2007   AUTEUR ANGLES J.ANGLES 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+ Aucun élément du modèle ne sait calculer l'option
+ de fatigue multiaxiale, ('PFACY_R').
+ Il se peut que la modélisation affectée au groupe de mailles
+ sur lequel vous faites un calcul de fatigue ne soit pas "3D".
+
+ Le critère de fatigue que vous utilisez n'est utilisable qu'en 3D.
+
+"""),
+
+2: _("""
+ La modélisation affectée au groupe de mailles sur lequel vous
+ faites un calcul de fatigue n'est problament pas "3D".
+ La composante %(i1)d du tenseur des contraintes n'existe pas.
+
+ Le critère de fatigue que vous utilisez n'est utilisable qu'en 3D.
+
+"""),
+
+3: _("""
+ La modélisation affectée au groupe de mailles sur lequel vous
+ faites un calcul de fatigue n'est problament pas "3D".
+ La composante %(i1)d du tenseur des déformations n'existe pas.
+
+ Le critère de fatigue que vous utilisez n'est utilisable qu'en 3D.
+
+"""),
+
+4: _("""
+ le coefficient de Goodman n'est pas calculable
+"""),
+
+5: _("""
+ le coefficient de Gerber n'est pas calculable
+"""),
+
+6: _("""
+ pour calculer le dommage de Lemaitre-Sermage,
+ il faut définir le comportement DOMMA_LEMAITRE dans DEFI_MATERIAU
+"""),
+
+7: _("""
+ pour calculer le dommage de Lemaitre_Sermage,
+ il faut définir le comportement ELAS_FO dans DEFI_MATERIAU
+"""),
+
+8: _("""
+ le matériau est obligatoire pour le calcul du dommage par TAHERI_MANSON
+"""),
+
+9: _("""
+ une fonction doit être introduite sous le mot clé TAHERI_FONC
+"""),
+
+10: _("""
+ une nappe doit être introduite sous le mot clé TAHERI_NAPPE
+"""),
+
+11: _("""
+ la courbe de MANSON_COFFIN est nécessaire pour le calcul du dommage TAHERI_MANSON_COFFIN
+"""),
+
+12: _("""
+ le matériau est obligatoire pour le calcul du dommage par TAHERI_MIXTE
+"""),
+
+13: _("""
+ la courbe de MANSON_COFFIN est nécessaire pour le calcul du dommage TAHERI_MIXTE
+"""),
+
+14: _("""
+ la courbe de WOHLER est nécessaire pour le calcul du dommage TAHERI_MIXTE
+"""),
+
+15: _("""
+ méthode de comptage inconnue
+"""),
+
+16: _("""
+ nombre de cycles nul
+"""),
+
+17: _("""
+ l'utilisation de MANSON_COFFIN est réservé à des histoires de chargements en déformations
+"""),
+
+18: _("""
+ la courbe de MANSON_COFFIN doit être donnée dans DEFI_MATERIAU
+"""),
+
+19: _("""
+ les lois de TAHERI sont réservées pour des chargements en déformations
+"""),
+
+20: _("""
+ loi de dommage non compatible
+"""),
+
+21: _("""
+ l'histoire de chargement doit avoir même discrétisation pour toutes les composantes
+"""),
+
+22: _("""
+ l'histoire de la déformation plastique cumulée doit avoir même discrétisation que l'histoire des contraintes
+"""),
+
+23: _("""
+ l'histoire de la température doit avoir même discrétisation que l'histoire des contraintes
+"""),
+
+24: _("""
+ pour calculer le dommage, il faut définir le comportement "FATIGUE" dans DEFI_MATERIAU
+"""),
+
+25: _("""
+ la méthode 'TAHERI_MANSON' ne peut pas etre utilisée avec l'option %(k1)s
+"""),
+
+26: _("""
+ le nom de la fonction  nappe DSIGM(DEPSI,DEPSIMAX)
+ doit être présent sous le mot cle 'TAHERI_NAPPE'
+"""),
+
+27: _("""
+ le nom de la fonction DSIGM(DEPSI)
+ doit être présent sous le mot cle 'TAHERI_FONC'
+"""),
+
+28: _("""
+ la méthode 'TAHERI_MIXTE' ne peut pas être utilisée avec l'option %(k1)s
+"""),
+
+29: _("""
+ la methode 'WOHLER' ne peut pas être utilisée avec l'option %(k1)s 
+"""),
+
+30: _("""
+ une courbe de WOHLER doit être définie dans DEFI_MATERIAU
+"""),
+
+31: _("""
+ la methode 'MANSON_COFFIN' ne peut pas être utilisée avec l'option %(k1)s 
+"""),
+
+32: _("""
+ une courbe de MANSON_COFFIN doit être définie dans DEFI_MATERIAU
+"""),
+
+33: _("""
+ les mailles attachées au noeud traité ne sont pas affectées du même matériau.
+"""),
+
+34: _("""
+ la donnée d'une courbe de WOHLER est obligatoire
+"""),
+
+35: _("""
+ la donnée du moment spectral d'ordre 4 est obligatoire pour le comptage des pics de contraintes
+"""),
+
+36: _("""
+ la valeur du moment spectral d'ordre 0 (lambda_0) est certainement nulle
+"""),
+
+37: _("""
+ la valeur du moment spectral d'ordre 2 (lambda_2) est nulle
+"""),
+
+38: _("""
+ la valeur du moment spectral d'ordre 4 (lambda_4) est nulle
+"""),
+
+63: _("""
+ pour calculer le dommage max,
+ il faut renseigner CISA_PLAN_CRIT dans la commande DEFI_MATERIAU
+"""),
+
+64: _("""
+ nous ne pouvons pas récupérer la valeur du paramètre A du critère de MATAKE
+ commande: DEFI_MATERIAU
+ opérande: CISA_PLAN_CRIT
+"""),
+
+65: _("""
+ nous ne pouvons pas récupérer la valeur du paramètre B du critère de MATAKE
+ commande: DEFI_MATERIAU
+ opérande: CISA_PLAN_CRIT
+"""),
+
+66: _("""
+ nous ne pouvons pas récupérer la valeur du coefficient de passage flexion-torsion
+ commande: DEFI_MATERIAU
+ opérande: CISA_PLAN_CRIT
+"""),
+
+67: _("""
+ nous ne pouvons pas récupérer la valeur du paramètre A du critère de DANG_VAN_MODI_AC
+ commande: DEFI_MATERIAU
+ opérande: CISA_PLAN_CRIT
+"""),
+
+68: _("""
+ nous ne pouvons  pas récupérer la valeur du paramètre B du critère de DANG_VAN_MODI_AC
+ commande: DEFI_MATERIAU
+ opérande: CISA_PLAN_CRIT
+"""),
+
+69: _("""
+ nous ne pouvons  pas récupérer la valeur du coefficient de passage cisaillement-traction
+ commande: DEFI_MATERIAU
+ opérande: CISA_PLAN_CRIT
+"""),
+
+70: _("""
+ nous ne pouvons pas récupérer la valeur du paramètre A du critère DOMM_MAXI
+ commande: DEFI_MATERIAU
+ opérande: CISA_PLAN_CRIT
+"""),
+
+71: _("""
+ nous ne pouvons pas récupérer la valeur du paramètre B du critère DOMM_MAXI
+ commande: DEFI_MATERIAU
+ opérande: CISA_PLAN_CRIT
+"""),
+
+72: _("""
+ nous ne pouvons pas récupérer la valeur du coefficient de passage cisaillement-traction
+ commande: DEFI_MATERIAU
+ opérande: CISA_PLAN_CRIT
+"""),
+
+73: _("""
+ nous ne pouvons pas récupérer la valeur du paramètre A du critère DANG_VAN_MODI_AV
+ commande: DEFI_MATERIAU
+ opérande: CISA_PLAN_CRIT
+"""),
+
+74: _("""
+ nous ne pouvons pas récupérer la valeur du paramètre B du critère DANG_VAN_MODI_AV
+ commande: DEFI_MATERIAU
+ opérande: CISA_PLAN_CRIT
+"""),
+
+75: _("""
+ nous ne pouvons pas récupérer la valeur du paramètre A du critère FATEMI_SOCIE
+ commande: DEFI_MATERIAU
+ opérande: CISA_PLAN_CRIT
+"""),
+
+76: _("""
+ Le nombre d'instants calculés est égal à %(i1)d.
+
+ Il faut que l'histoire du chargement comporte au moins 2 instants
+ pour calculer un dommage.
+
+"""),
+
+77: _("""
+ Le nombre de cycles extraits est égal à %(i1)d.
+
+ Votre chargement est constant.
+ On ne peut donc pas extraire de cycles.
+
+"""),
+
+}
index 90f63d22797a5a89de0053d25434fb0144394095..8b17ea79581ef6255adf4f70ed70f3e22883afb9 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF fermetur Messages  DATE 07/06/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF fermetur Messages  DATE 08/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -70,5 +70,11 @@ cata_msg={
       qui n'est pas encore programmée.
 """),
 
+10: _("""
+  Erreur :
+      le solveur "PETSc" n'est pas installé sur cette machine.
+"""),
+
+
 
 }
diff --git a/Aster/Cata/cataSTA9/Messages/feti0.py b/Aster/Cata/cataSTA9/Messages/feti0.py
new file mode 100644 (file)
index 0000000..4f08b7f
--- /dev/null
@@ -0,0 +1,33 @@
+#@ MODIF feti0 Messages  DATE 17/07/2007   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+Afin de pouvoir générer les GROUP_MA, réduisez le nombre 
+de caractères de NOM_GROUP_MA à un maximum de : %(i1)d 
+"""),
+
+2: _("""
+Il existe déjà un GROUP_MA nommé : %(k1)s
+"""),
+
+}
diff --git a/Aster/Cata/cataSTA9/Messages/fiabilite0.py b/Aster/Cata/cataSTA9/Messages/fiabilite0.py
new file mode 100644 (file)
index 0000000..eac4975
--- /dev/null
@@ -0,0 +1,28 @@
+#@ MODIF fiabilite0 Messages  DATE 17/07/2007   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+Le nombre d'élements du mot clé MATRICE doit etre égal à : %(i1)d
+"""),
+
+}
index 6fdb87ce85eaab93e2aeab958f01f8afe1d82260..bb17648ec06ac1e29a1dd3fdf500fc54c3597cdb 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF fonct0 Messages  DATE 30/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF fonct0 Messages  DATE 11/03/2008   AUTEUR MAZET S.MAZET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -20,7 +20,7 @@
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
 1 : _("""
 Le fichier %(k1)s existe déjà, on écrit à la suite.
@@ -59,19 +59,15 @@ ABSCISSE et ORDONNEE n'ont pas la meme taille.
 Format inconnu : %(k1)s
 """),
 
-# le message 9 est parfois suivi du message 10
-9 : {
-   'message' : _("""
+9 : _("""
 Erreur lors de l'interpolation de la fonction '%(k1)s'.
 """),
-   'context' : { 'CONCEPT' : 'k1' },
-},
 
-10: _("""
+10 : _("""
  sur la maille '%(k1)s'
 """),
 
-11: _("""
+11 : _("""
 L'interpolation de la fonction '%(k1)s' n'est pas autorisée.
 Le type d'interpolation de la fonction vaut 'NON'
   
@@ -79,7 +75,7 @@ Le type d'interpolation de la fonction vaut 'NON'
     Voir le mot-clé INTERPOL des commandes qui créent des fonctions.
 """),
 
-12: _("""
+12 : _("""
 Une erreur s'est produite dans la recherche de l'intervalle des abscisses contenant la valeur %(r1)s.
   
   -> Risque & Conseil :
@@ -87,7 +83,7 @@ Une erreur s'est produite dans la recherche de l'intervalle des abscisses conten
     (mot-clé INTERPOL des commandes qui créent des fonctions).
 """),
 
-13: _("""
+13 : _("""
 Le type de la fonction '%(k1)s' est inconnu.
 Seules les fonctions, nappes, fonctions constantes peuvent etre traitées par FOINTE.
 
@@ -95,31 +91,31 @@ Seules les fonctions, nappes, fonctions constantes peuvent etre trait
       le type est '%(k2)s'
 """),
 
-14: _("""
+14 : _("""
 Il n'y a pas assez de paramètres pour évaluer la fonction.
 Seulement %(i1)d paramètre(s) sont fourni(s) alors que la fonction en réclame %(i2)d.
 """),
 
-15: _("""
+15 : _("""
 Il y a des doublons dans la liste des paramètres fournis :
    %(ktout)s
 """),
 
-16: _("""
+16 : _("""
 Les paramètres nécessaires sont :
    %(ktout)s
 """),
 
-17: _("""
+17 : _("""
 Les paramètres fournis sont :
    %(ktout)s
 """),
 
-18: _("""
+18 : _("""
 La fonction n'a meme pas un point !
 """),
 
-19: _("""
+19 : _("""
 On est hors du domaine de définition de la fonction.
 On ne peut pas interpoler la fonction pour cette abscisse car le prolongement à gauche est exclus.
    abscisse demandée              : %(r1)f
@@ -129,7 +125,7 @@ On ne peut pas interpoler la fonction pour cette abscisse car le prolongement 
     Voir le mot-clé PROL_GAUCHE des commandes qui créent des fonctions.
 """),
 
-20: _("""
+20 : _("""
 On est hors du domaine de définition de la fonction.
 On ne peut pas interpoler la fonction pour cette abscisse car le prolongement à droite est exclus.
    abscisse demandée              : %(r1)f
@@ -139,14 +135,14 @@ On ne peut pas interpoler la fonction pour cette abscisse car le prolongement 
     Voir le mot-clé PROL_DROITE des commandes qui créent des fonctions.
 """),
 
-21: _("""
+21 : _("""
 Erreur de programmation : type d'extrapolation inconnu.
 
   -> Debug :
       le type d'extrapolation est '%(k1)s'
 """),
 
-22: _("""
+22 : _("""
 La fonction n'est définie qu'en un point. On ne peut pas l'interpoler en
 plus d'un point si le prolongement n'est pas constant des deux cotés.
   
@@ -154,7 +150,7 @@ plus d'un point si le prolongement n'est pas constant des deux cot
     Voir les mot-clés PROL_GAUCHE/PROL_DROITE des commandes qui créent des fonctions.
 """),
 
-23: _("""
+23 : _("""
 La fonction n'est définie qu'en un point. On ne peut pas l'interpoler ailleurs
 qu'en ce point si le prolongement n'est pas constant des deux cotés.
   
@@ -162,12 +158,12 @@ qu'en ce point si le prolongement n'est pas constant des deux cot
     Voir les mot-clés PROL_GAUCHE/PROL_DROITE des commandes qui créent des fonctions.
 """),
 
-24: _("""
+24 : _("""
 On attend une fonction d'un seul paramètre.
 La fonction '%(k1)s' est une fonction de %(i1)d paramètres.
 """),
 
-25: _("""
+25 : _("""
 Le type de la fonction '%(k1)s' est inconnu.
 Seules les fonctions, nappes, fonctions constantes et formules sont
 traitées par FOINTR.
@@ -176,12 +172,12 @@ trait
       le type est '%(k2)s'
 """),
 
-26: _("""
+26 : _("""
    abscisse demandée : %(r1)f
    intervalle trouvé : [%(r2)f, %(r3)f]
 """),
 
-27: _("""
+27 : _("""
 Un problème d'interpolation a été rencontré. 
 %(k1)s
 
@@ -193,7 +189,7 @@ Un probl
       %(k2)s
 """),
 
-28: _("""
+28 : _("""
 Un problème concernant le nom des abscisses ou ordonnées a été rencontré.
 %(k1)s
    
@@ -205,7 +201,7 @@ Un probl
       %(k2)s
 """),
 
-29: _("""
+29 : _("""
 Un problème concernant le prolongement de la (des) fonction(s) a été rencontré.
 %(k1)s
    
@@ -217,7 +213,7 @@ Un probl
       %(k2)s
 """),
 
-30: _("""
+30 : _("""
 Une erreur s'est produite lors de l'opération.
 %(k1)s
    
@@ -230,4 +226,93 @@ Remont
 
 """),
 
+31 : _("""
+   Génération par défaut de 3 amortissements :[%(r1)f,%(r2)f,%(r3)f]
+"""),
+
+32 : _("""
+   Génération par défaut de 150 fréquences :
+   %(k1)s
+"""),
+
+33 : _("""
+   SPEC_OSCI, la norme ne peut etre nulle.
+"""),
+
+34 : _("""
+   SPEC_OSCI, le type de la fonction doit etre ACCE.
+"""),
+
+35 : _("""
+   SPEC_OSCI, seule la méthode NIGAM est codée.
+"""),
+
+36 : _("""
+   SPEC_OSCI, la méthode choisie suppose des amortissements sous-critiques,
+   amor<1.
+"""),
+
+37 : _("""
+ calcul du MAX, la liste de fonctions n'est pas 
+ homogène en type (fonctions et nappes)
+"""),
+
+38 : _("""
+ Calcul du MAX, la liste de fonctions n'est pas homogène
+ en label NOM_PARA :%(k1)s
+"""),
+
+39 : _("""
+ Calcul du MAX, la liste de fonctions n'est pas homogène
+ en label NOM_RESU :%(k1)s 
+"""),
+
+40 : _("""
+ Intensite spectrale, avant de calculer l'intensite spectrale, 
+ il est prudent de verifier la norme de la nappe sur laquelle 
+ porte le calcul, ceci peut etre une source d erreurs.
+"""),
+
+41 : _("""
+ Le fichier %(k1)s est introuvable.
+"""),
+
+42 : _("""
+Erreur lors de la lecture des blocs de valeurs :
+   %(k1)s
+"""),
+
+43 : _("""
+Les fréquences doivent etre strictement positives.
+"""),
+
+44 : _("""
+Les abscisses de la fonction %(k1)s ne sont pas strictement croissantes.
+"""),
+
+45 : _("""
+Les abscisses de la fonction %(k1)s ne sont pas croissantes.
+"""),
+
+46 : _("""
+Les abscisses de la fonction %(k1)s ne sont pas décroissantes.
+"""),
+
+47 : _("""
+Les abscisses de la fonction %(k1)s ne sont pas strictement décroissantes.
+"""),
+
+50 : _("""
+Seules les formules à une variable peuvent être traitées directement par IMPR_FONCTION.
+
+La formule '%(k1)s' dépend de %(i1)d paramètres.
+
+  -> Risque & Conseil :
+      - Si votre formule dépend de 2 paramètres, utilisez CALC_FONC_INTERP pour produire
+        une nappe puis appeler IMPR_FONCTION.
+      - Si votre formule dépend de 3 paramètres ou plus, vous devez d'abord créer une
+        nouvelle formule à un seul paramètre (et appelé IMPR_FONCTION) ou à 2 paramètres
+        et passer par CALC_FONC_INTERP puis IMPR_FONCTION.
+"""),
+
 }
index eea65e3801686a1224b4ecffc32937452a6e0eef..863c4f7f252fa1e10f6af8fcf8331ec49d03a68a 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF grappefluide Messages  DATE 16/05/2007   AUTEUR BOYERE E.BOYERE 
+#@ MODIF grappefluide Messages  DATE 06/11/2007   AUTEUR BOYERE E.BOYERE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -69,9 +69,9 @@ cata_msg={
 """),
 
 11: _("""
- Force fluide, grappe bloquée   
+ Force fluide, arrivee de la grappe en butee, fin du calcul de chute de grappe
   - iteration  %(i1)d , z =  %(r1)f    itération  %(i2)d  , z =  %(r2)f 
-    temps de chute compris entre  %(r3)f et  %(r4)f 
+    temps de chute total T5 + T6 compris entre  %(r3)f et  %(r4)f 
 """),
 
 12: _("""
@@ -81,4 +81,23 @@ cata_msg={
 13: _("""
  CALCUL GRAPPE FLUIDE : C1 nul (altitude %(r1)f m)
 """),
+
+14: _("""
+ Force fluide, grappe a l'entree du retreint
+  - iteration  %(i1)d , z =  %(r1)f    itération  %(i2)d  , z =  %(r2)f 
+    temps de chute T5 compris entre  %(r3)f et  %(r4)f 
+"""),
+
+15: _("""
+ Force fluide, attention grappe bloquee
+  - iteration  %(i1)d , z =  %(r1)f    itération  %(i2)d  , z =  %(r2)f 
+    attention temps de chute compris entre  %(r3)f et  %(r4)f 
+"""),
+
+16: _("""
+ Force fluide, pression maximale dans le retreint
+  - iteration  %(i1)d , z =  %(r1)f    itération  %(i2)d  , z =  %(r2)f 
+    pression maximale  %(r4)f Pa dans le retreint
+"""),
+
 }
diff --git a/Aster/Cata/cataSTA9/Messages/homard0.py b/Aster/Cata/cataSTA9/Messages/homard0.py
new file mode 100644 (file)
index 0000000..56ec8fe
--- /dev/null
@@ -0,0 +1,44 @@
+#@ MODIF homard0 Messages  DATE 17/07/2007   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+Cette macro commande est inconnue.
+"""),
+
+2: _("""
+Erreur : %(k1)s
+"""),
+
+3: _("""
+Impossible de tuer le fichier %(k1)s
+"""),
+
+4: _("""
+Impossible de créer le répertoire de travail pour HOMARD : %(k1)s
+"""),
+
+5: _("""
+Impossible de détruire le fichier :%(k1)s
+"""),
+
+}
index fc66cdebb95547d4c41e1a9b430f29acadeedb46..b4e1163118fb16496a8b18442601e6ec6e66aa95 100644 (file)
@@ -1,35 +1,34 @@
-#@ MODIF indicateur Messages  DATE 23/04/2007   AUTEUR GNICOLAS G.NICOLAS 
+#@ MODIF indicateur Messages  DATE 11/03/2008   AUTEUR MEUNIER S.MEUNIER 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
-# RESPONSABLE GNICOLAS G.NICOLAS
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
+1 : _("""
 Le choix TOUT = 'OUI' est obligatoire avec l'option %(k1)s.
 On ne peut pas faire de calcul de champ d'indicateur d'erreur sur des mailles
 ou des groupes de mailles car on doit connaitre tous les voisins.
 """),
 
-2: _("""
+2 : _("""
 Le champ de contraintes n'a pas été calculé sur tout le modèle.
 On ne peut pas calculer l'option %(k1)s pour le numéro d'ordre %(k2)s.
 """),
@@ -50,78 +49,84 @@ Attention : r
 La valeur prise par défaut pour theta est 1.
 """),
 
-6: _("""
+6 : _("""
 Le calcul de l'indicateur d erreur ne sait pas traiter les charges du type de %(k1)s.
 """),
 
-7: _("""
+7 : _("""
 Le choix %(k1)s apparait au moins dans 2 charges.
 """),
 
-8: _("""
+8 : _("""
 Probleme sur les charges. Consulter la documentation
 """),
 
-11: _("""
+11 : _("""
 Impossible de récupérer les paramètres temporels.
 """),
 
-20: _("""
-perm_in: division par zéro
+18 : _("""
+Impossible de récupérer la porosité
 """),
 
-21: _("""
-La %(k1)s caractéristique est nulle. On risque la division par zéro.
+19 : _("""
+Impossible de récupérer le coefficient de Poisson
 """),
 
-31: _("""
-deltat: division par zéro
+20 : _("""
+perm_in: division par zéro
 """),
 
-38: _("""
-type d'element %(k1)s inconnu
+21 : _("""
+La %(k1)s caractéristique est nulle. On risque la division par zéro.
 """),
 
-39: _("""
-rho liquide: division par zéro
+22: _("""
+rho liquide: div par zero
 """),
 
-41: _("""
-Il faut renseigner le mot-clef comp_incr avec elas et liqu_satu
-pour calculer l'indicateur d'erreur temporelle.                
+23: _("""
+Vous n'utilisez pas une modélisation hm saturée élastique.
 """),
 
-42: _("""
-Vous n'utilisez pas une modélisation hm saturée élastique.
+24 : _("""
+ le résultat  %(k1)s  doit comporter un champ d'indicateurs d'erreur au numéro
+ d'ordre%(k2)s  .
 """),
 
-43: _("""
-pression caractéristique : division par zéro
+
+25: _("""
+Il faut renseigner le mot-clef comp_incr avec elas et liqu_satu pour calculer l'
+indicateur d'erreur temporelle.
 """),
 
-44: _("""
-module de Young non défini : division par zéro
+28 : _("""
+Pour le calcul de l'indicateur d'erreur en HM, il faut fournir
+les longueur et pression caractéristiques.
+Ces valeurs doivent etre strictement positives.
 """),
 
-48: _("""
-Vous utilisez une modélisation THM et vous n'avez pas renseigné
-correctement le mot-clé ERRE_THM.
-Conseil : Donner une longueur et une pression caractéristique 
+31: _("""
+deltat: division par zéro
 """),
 
-90: _("""
+90 : _("""
 La condition %(k1)s est bizarre.
 """),
 
-91: _("""
+91 : _("""
 On ne sait pas traiter la condition %(k1)s.
 """),
 
-98: _("""
+92 : _("""
+L'option %(k1)s est calculable en dimension 2 uniquement.
+"""),
+
+98 : _("""
 L'option %(k1)s est invalide.
 """),
 
-99: _("""
+99 : _("""
 Erreur de programmation dans %(k1)s
 L'option %(k2)s ne correspond pas à une option de calcul d'indicateur d'erreur.
 """),
index f0950e2782ab6b1d411497bff5536307002640ef..3609a602adab0ff3322a98832742c8bc6cc1c2c5 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF irrad3m Messages  DATE 23/04/2007   AUTEUR FLEJOU J-L.FLEJOU 
+#@ MODIF irrad3m Messages  DATE 17/12/2007   AUTEUR FLEJOU J-L.FLEJOU 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 # RESPONSABLE FLEJOU J-L.FLEJOU
 
@@ -27,25 +27,26 @@ cata_msg={
 La <%(k1)s> dichotomie pour la loi IRRAD3M n'a pas trouvée de solution pour
 le nombre d'itération donné <%(i1)d>.\n
 Info pour le debug
-   Borne 0                 : <%(r1)E>
-   Borne 1                 : <%(r2)E>
-   Puissance N             : <%(r3)E>
-   Pas pour la recherche   : <%(r4)E>
-   RM                      : <%(r5)E>
-   EU                      : <%(r6)E>
-   R02                     : <%(r7)E>
-   Précision demandée      : <%(r8)E>
+   Borne 0                 : <%(r1).15E>
+   Borne 1                 : <%(r2).15E>
+   Puissance N             : <%(r3).15E>
+   Pas pour la recherche   : <%(r4).15E>
+   RM                      : <%(r5).15E>
+   EU                      : <%(r6).15E>
+   R02                     : <%(r7).15E>
+   Précision demandée      : <%(r8).15E>
 Valeurs initiales
-   N0                      : <%(r9)E>
-   Borne 0                 : <%(r10)E>
-   Borne 1                 : <%(r11)E>
+   N0                      : <%(r9).15E>
+   Borne 0                 : <%(r10).15E>
+   Borne 1                 : <%(r11).15E>
+   Borne E                 : <%(r12).15E>
 """),
 
 2: _("""
 L'irradiation diminue au cours du temps. C'EST PHYSIQUEMENT IMPOSSIBLE.
-Grandeurs au point de Gauss qui pose problème :
-   Irradiation a t- : <%(r1)E>
-   Irradiation a t+ : <%(r2)E>
+Grandeurs au point de Gauss :
+   Irradiation a t- : <%(r1).15E>
+   Irradiation a t+ : <%(r2).15E>
 """),
 
 3: _("""
index 547852b31e54374935d697ac3998cbc8cf43f531..71cf62e2c8c418f6abfdc89073fb5abd24d48a78 100644 (file)
-#@ MODIF jeveux Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF jeveux Messages  DATE 15/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  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.
+# COPYRIGHT (C) 1991 - 2007  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.        
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
+1 : _("""
   %(k1)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-7: _("""
- destruction de  %(k1)s
+2 : _("""
+ Pointeur de longueur externe interdit maintenant.
 """),
 
+3 : _("""
+ Pointeur de nom externe interdit maintenant.
+"""),
 
-
-
-
-
-
-
-
-
-
-10: _("""
- le nom demande existe deja  dans la base  %(k1)s
+6 : _("""
+ Erreur de programmation :
+  Appel invalide, la marque devient négative
 """),
 
-11: _("""
erreur lors de la fermeture de la base  %(k1)s
+: _("""
Destruction de  %(k1)s
 """),
 
-12: _("""
-  fichier associe a la base  %(k1)s  inexistant
+8 : _("""
+ La base  %(k1)s  a été constituée avec la version  %(k2)s
+ et vous utilisez la version  %(k3)s
 """),
 
-13: _("""
-  erreur de lecture du 1er bloc de  %(k1)s
+: _("""
+ Suppression de la partition mémoire
 """),
 
-14: _("""
-  erreur lors de la fermeture de  %(k1)s
+10 : _("""
+ Erreur de programmation :
+
+ Le nom demandé existe déjà dans la base %(k1)s
 """),
 
-15: _("""
-  Ecrasement amont, l'objet :< %(k1)s > est peut etre écrasé
+1: _("""
+ Erreur lors de la fermeture de la base  %(k1)s
 """),
 
-16: _("""
-  Ecrasement aval, l'objet :< %(k1)s > est peut etre écrasé
+1: _("""
+ Fichier associé à la base  %(k1)s  inexistant
 """),
 
-17: _("""
 Chainage casse apres l'objet :  %(k1)s
+1: _("""
Erreur de lecture du 1er bloc de  %(k1)s
 """),
 
+14 : _("""
+ Erreur lors de la fermeture de  %(k1)s
+"""),
 
+15 : _("""
+ Ecrasement amont, l'objet :< %(k1)s > est peut être écrasé"""),
 
+16 : _("""
+ Ecrasement aval, l'objet :< %(k1)s > est peut être écrasé
+"""),
 
+17 : _("""
+ Chainage cassé après l'objet :  %(k1)s
+"""),
 
+18 : _("""
+ Le segment de valeurs associé à l'objet : %(k1)s, n'existe pas en mémoire et
+ l'objet ne possède pas d'image disque. 
+"""),
 
-19: _("""
+19 : _("""
  Le nom d'un objet JEVEUX ne doit pas commencer par un blanc.
 """),
 
-21: _("""
+21 : _("""
      REOUVERTURE DE LA BASE                  :  %(k1)s
      CREEE AVEC LA VERSION                   :  %(k2)s
      NOMBRE D'ENREGISTREMENTS UTILISES       :  %(i1)d
@@ -117,7 +106,7 @@ cata_msg={
      POURCENTAGE D'UTILISATION DU REPERTOIRE :  %(i6)d %%
 """),
 
-22: _("""
+22 : _("""
      NOM DE LA BASE                          :  %(k1)s
      NOMBRE D'ENREGISTREMENTS UTILISES       :  %(i1)d
      NOMBRE D'ENREGISTREMENTS MAXIMUM        :  %(i2)d
@@ -128,132 +117,184 @@ cata_msg={
      POURCENTAGE D'UTILISATION DU REPERTOIRE :  %(i7)d %%
 """),
 
-23: _("""
+23 : _("""
      Nom de Collection ou de Répertoire de noms inexistant :  %(k1)s
 """),
 
-24: _("""
+24 : _("""
      JENONU : Collection ou Répertoire de noms  :  %(k1)s
      Il faut passer par JEXNOM,JEXNUM.
 """),
 
-25: _("""
+25 : _("""
      Nom de collection ou de répertoire inexistant : >%(k1)s<
 """),
 
-26: _("""
+26 : _("""
      Objet JEVEUX inexistant dans les bases ouvertes : >%(k1)s<
      l'objet n'a pas été créé ou il a été détruit
 """),
 
-27: _("""
+27 : _("""
      Objet simple JEVEUX inexistant en mémoire et sur disque : >%(k1)s<
      le segment de valeurs est introuvable
 """),
 
-28: _("""
+28 : _("""
      Collection JEVEUX inexistant en mémoire et sur disque : >%(k1)s<
      le segment de valeurs est introuvable
 """),
 
-29: _("""
+29 : _("""
      Objet %(i1)d de collection JEVEUX inexistant en mémoire et sur disque : >%(k1)s<
 """),
 
-30: _("""
+30 : _("""
      Objet de collection JEVEUX inexistant : >%(k1)s<
      l'objet n'a pas été créé ou il a été détruit
 """),
 
-31: _("""
+31 : _("""
      Erreur programmeur :
-     La routine JUVECA n'a pas prévu de redimensionner l'objet :%(k1)s
+     La routine JUVECA n'a pas prévu de re-dimensionner l'objet :%(k1)s
      de type :%(k2)s
 """),
 
-32: _("""
-     Erreur allocation de segment de memoire de longueur %(i1)d (entiers).
-     Memoire allouee insuffisante. Fermeture des bases (glob.*) sur erreur
-     Il faut relancer le calcul en augmentant la limite memoire.
+32 : _("""
+     Erreur allocation de segment de mémoire de longueur %(i1)d (entiers).
+     Mémoire allouée insuffisante. Fermeture des bases (glob.*) sur erreur
+     Il faut relancer le calcul en augmentant la limite mémoire.
 """),
 
-33: _("""
+33 : _("""
      Modification de l'environnement JEVEUX.
-     Allocation dynamique des segments de valeurs de taille superieure
+     Allocation dynamique des segments de valeurs de taille supérieure
      a %(i1)d (entiers) 
 """),
 
-34: _("""
+34 : _("""
      Modification de l'environnement JEVEUX.
      Mode debug positionne a %(i1)d
 """),
 
-35: _("""
-     Le nombre de bases gerables est limite a %(i1)d
-"""),
-
-36: _("""  
-     Le nombre d'enregistrements maximum de la base %(k1)s sera modifie,
+36 : _("""  
+     Le nombre d'enregistrements maximum de la base %(k1)s sera modifié
      de %(i1)d a %(i2)d
 """),
 
-37: _("""
+37 : _("""
      La valeur du rapport entre partitions ne convient pas, 
      la longueur de la partition 1 doit etre au minimum de %(i1)d mots 
      soit environ %(i2)d %%
 """),
 
-
-38: _("""
+38 : _("""
      Numero d'objet invalide %(i1)d 
 """),
 
-
-39: _("""
-     Taille de repertoire demandee trop grande.
+39 : _("""
+     Taille de repertoire demandé trop grande.
      Le maximun est de %(i1)d
-     La valeur reclamee est de %(i2)d 
+     La valeur reclamé est de %(i2)d 
       
 """),
 
-
-40: _("""
-     Erreur ecriture de l'enregistrement %(i1)s sur la base : %(k1)s %(i2)d
+40 : _("""
+     Erreur ériture de l'enregistrement %(i1)s sur la base : %(k1)s %(i2)d
      code retour WRITDR : %(i3)d 
-     Erreur probablement provoquee par une taille trop faible du repertoire de travail.
-      
+     Erreur probablement provoquée par une taille trop faible du répertoire de travail.
 """),
 
-
-41: _("""
+41 : _("""
      Erreur lecture de l'enregistrement %(i1)d sur la base : %(k1)s %(i2)d
      code retour READDR : %(i3)d 
-      
 """),
 
-
-42: _("""
-     Fichier sature, le nombre maximum d'enregistrement %(i1)d de la base %(k1)s 
-     est atteint, il faut relancer le calcul en modifiant le parametre NMAX_ENRE dans DEBUT 
+42 : _("""
+     Fichier saturé le nombre maximum d'enregistrement %(i1)d de la base %(k1)s est atteint
+     il faut relancer le calcul en modifiant le parametre NMAX_ENRE dans DEBUT 
      ou en passant une taille maximum de base sur la ligne de commande 
      argument "-max_base" suivi de la valeur en Mo.
-
 """),
 
-
-43: _("""
+43 : _("""
      Erreur d'ouverture du fichier %(k1)s , code retour OPENDR = %(i1)d 
-
-      
 """),
 
-44: _("""
+44 : _("""
  Taille des segments de valeurs %(i1)d 
 """),
 
-45: _("""
+45 : _("""
  Taille de la partition principale %(r1)g 
 """),
 
-}
+47 : _("""
+ Erreur lors de la relecture d'un enregistrement sur le fichier d'accès direct.
+"""),
 
+48 : _("""
+ Erreur lors de l'écriture d'un enregistrement sur le fichier d'accès direct.
+"""),
+
+49 : _("""
+ Taille de la zone à allouer invalide %(i1)d < 0 .
+"""),
+
+50 : _("""
+ Allocation dynamique impossible.
+"""),
+
+51 : _("""
+ Relecture au format HDF impossible.
+"""),
+
+52 : _("""
+ Erreur de relecture des paramètres du dataset HDF.
+"""),
+
+53 : _("""
+ Relecture au format HDF impossible.
+"""),
+
+54 : _("""
+ Impossible d'ouvrir le fichier HDF %(k1)s. 
+"""),
+
+55 : _("""
+ Impossible de fermer le fichier HDF %(k1)s. 
+"""),
+
+56 : _("""
+ Fermeture du fichier HDF %(k1)s. 
+"""),
+
+57 : _("""
+ Longueur du segment de valeurs à allouer invalide %(i1)d.
+"""),
+
+58 : _("""
+ Le répertoire est saturé.
+"""),
+
+59 : _("""
+ Le nom demandé existe déjà dans le répertoire %(k1)s.
+
+"""),
+
+60 : _("""
+ Erreur lors de l'allocation dynamique. Il n'a pas été possible d'allouer 
+ une zone mémoire de longueur %(i1)d (octets).
+ La dernière opération de libération mémoire a permis de récupérer %(i2)d (octets). 
+
+"""),
+
+62 : _("""
+ Erreur lors de l'allocation dynamique. Il n'a pas été possible d'allouer 
+ une zone mémoire de longueur %(i1)d (octets), on dépasse la limite maximum 
+ fixée à %(i2)d (octets) et on occupe déjà %(i3)d (octets).
+ La dernière opération de libération mémoire a permis de récupérer %(i4)d (octets). 
+
+"""),
+
+}
index b2385b5b389324a0a10d82db1ed8e3bfcc5cdd35..0ebbb675d5360a451d5a11b95fc57349b8a63158 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF maillage Messages  DATE 30/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF maillage Messages  DATE 10/12/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
-   Le nom de groupe numéro %(i1)d de la famille %(k1)s
-   est trop long. Il sera tronqué à 8 caractères.
-   Le groupe "%(k2)s" est renommé en "%(k3)s".
-"""),
-
-2: _("""
-Le nom de groupe numéro %(i1)d de la famille %(k1)s
-est vide.
-"""),
-
-3: _("""
-Famille %(k1)s :
-   Incohérence sur les nombres de %(k2)s, il y en a %(i1)d alors
-   que la fonction MED en annonce %(i2)d.
+11 : _("""
+Plus de %(i1)d faces touchent le noeud %(k1)s.
 
-Impossible de lire ce fichier. On peut utiliser mdump (utilitaire med)
-pour voir si le problème vient du fichier MED ou de la lecture dans
-Code_Aster.
+Risque & conseils :
+   Vérifier la validité de votre maillage autour de ce point.
+   Dans une grille, un noeud est commun à 12 faces.
 """),
 
-4: _("""
-La famille %(k1)s n'a ni groupe, ni attribut.
+12 : _("""
+ L'option HEXA20_27 ne traite pas les macros mailles
 """),
 
-5: _("""
-   Lecture de la famille numéro %(i1)4d de nom %(k1)s.
+13 : _("""
+ L'option HEXA20_27 ne traite pas les absc_curv
 """),
 
-6: _("""
-      Groupe numéro %(i1)6d : %(k1)s
-"""),
-
-7: _("""
-      Groupe numéro %(i1)6d : %(k1)s
-                renommé en : %(k2)s
-"""),
-
-8: _("""
-Vous ne pouvez pas renommer le groupe "%(k1)s" en "%(k2)s"
-car "%(k2)s" existe déjà dans le fichier MED.
-"""),
-
-9: _("""
-Arret en raison des conflits sur les noms de groupe.
-"""),
-
-10: _("""
-   Le nom de groupe numéro %(i1)d de la famille %(k1)s
-   est contient des caractères interdits.
-   Le groupe "%(k2)s" est renommé en "%(k3)s".
+14 : _("""
+ Le mot-cle MAILLAGE est obligatoire avec le mot-cle HEXA20_27.
 """),
 
 }
-
diff --git a/Aster/Cata/cataSTA9/Messages/matrice0.py b/Aster/Cata/cataSTA9/Messages/matrice0.py
new file mode 100644 (file)
index 0000000..0050fde
--- /dev/null
@@ -0,0 +1,52 @@
+#@ MODIF matrice0 Messages  DATE 14/01/2008   AUTEUR DESOZA T.DESOZA 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+ Cas fluides multiples : précisez le GROUP_MA dans lequel vous affectez la masse volumique RHO.
+"""),
+
+2: _("""
+ PRES_FLUIDE obligatoire une fois.
+"""),
+
+3: _("""
+ Amortissement ajouté sur modèle generalisé non encore implanté.
+"""),
+
+4: _("""
+ Rigidité ajouté sur modele généralisé non encore implanté.
+"""),
+
+9: _("""
+ Une des options doit etre RIGI_MECA ou RIGI_THER ou RIGI_ACOU ou RIGI_MECA_LAGR.
+"""),
+
+10: _("""
+ Pour calculer RIGI_MECA_HYST, il faut avoir calculé RIGI_MECA auparavant (dans le meme appel).
+"""),
+
+11: _("""
+ Pour calculer AMOR_MECA, il faut avoir calculé RIGI_MECA et MASS_MECA auparavant (dans le meme appel).
+"""),
+
+}
index 7e673c8ece9643e7a70278767891624f90b01f4d..55dd3da37ee68724df509f7b25fa47ed3201c19a 100644 (file)
-#@ MODIF mecanonline Messages  DATE 30/04/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF mecanonline Messages  DATE 26/05/2008   AUTEUR DESOZA T.DESOZA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  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.
-# ============================ ==========================================
-def _(x) : return x
-
-cata_msg={
-
-
-1: _("""
- Le champ absolu n'est accessible pour OBSERVATION qu'en presence de modes statiques
-"""),
-
-2: _("""
- Melange de champs de nature differente dans le meme mot-clef facteur OBSERVATION
-"""),
-
-3: _("""
- Il y a trop de colonnes d'affichage (on est limite a quinze)
-"""),
-
-4: _("""
- Option non prevue pour la matrice de rigidite
-"""),
-
-5: _("""
- Le type de selection du coefficient de pilotage est inconnu
-"""),
-
-6: _("""
- Les variables de commandes initiales induisent des contraintes incompatibles
-"""),
-
-7: _("""
- Le champ de deplacement Dirichlet differentiel n'est pas trouve dans le concept EVOL_NOLI  %(k1)s
-"""),
-
-8: _("""
- Le critere de convergence choisi est lache, risque de resultats faux
-"""),
-
-9: _("""
- On surcharge un resultat sans definir d'etat initial (pas d'ETAT_INIT) : on suppose un etat initial nul
-"""),
-
-10: _("""
- Le concept dans ETAT_INIT n'est du type EVOL_NOLI
-"""),
-
-11: _("""
- Pas de numero d'ordre trouve dans le concept EVOL_NOLI nomme %(k1)s
-"""),
-
-12: _("""
- L'instant specifie sous ETAT_INIT n'est pas trouve
-"""),
-
-13: _("""
- Plusieurs instants correspondent a celui specifie sous ETAT_INIT
-"""),
-
-14: _("""
- La derivee de  %(k1)s  par rapport a  %(k2)s  est introuvable
-"""),
-
-15: _("""
- Le champ de deplacement DEPL_R (ou sa derivee) n'est pas trouve dans le concept EVOL_NOLI nomme %(k1)s
-"""),
-
-16: _("""
- Pour faire une reprise avec un calcul de sensibilite, il faut obligatoirement renseigner EVOL_NOLI dans ETAT_INIT
-"""),
-
-17: _("""
- Le champ de contraintes SIEF_R (ou sa derivee) n'est pas trouve dans le concept EVOL_NOLI nomme %(k1)s
-"""),
-
-18: _("""
- Le champ de variables internes VARI_R (ou sa derivee) n'est pas trouve dans le concept EVOL_NOLI nomme %(k1)s
-"""),
-
-19: _("""
- Le champ de variables non locales VARI_NONL (ou sa derive) n'est pas trouve dans le concept EVOL_NOLI nomme %(k1)s
-"""),
-
-20: _("""
- Le champ de Lagrangiens non locaux LANL_ELGA n'est pas trouve dans le concept EVOL_NOLI nomme %(k1)s
-"""),
-
-21: _("""
- Le champ de vitesses VITE n'est pas trouve dans le concept EVOL_NOLI nomme %(k1)s , on cree un champ de vitesses nulles
-"""),
-
-22: _("""
- L'etat initial n'appartient pas a un EVOL_NOLI : on suppose qu'on part d'un etat a vitesses nulles
-"""),
-
-23: _("""
- Le champ d'accelerations ACCE n'est pas trouve dans le concept EVOL_NOLI nomme %(k1)s  on calcule un champ d'accelerations, ce qui est possible puisque les vitesses sont nulles
-"""),
-
-24: _("""
- Le champ d'accelerations ACCE n'est pas trouve dans le concept EVOL_NOLI nomme %(k1)s  on ne peut pas, pour l'instant, calculer le champ des accelerations car les vitesses ne sont pas nulles
-"""),
-
-25: _("""
- Le parametre REAC_INCR est negatif
-"""),
-
-26: _("""
- Le parametre REAC_ITER est negatif
-"""),
-
-27: _("""
- Le parametre REAC_ITER_ELAS est negatif
-"""),
-
-28: _("""
- Il faut preciser un concept de type EVOL_NOLI dans le mot-clef facteur ETAT_INIT lorsque l'on fait une prediction de type DEPL_CALCULE
-"""),
-
-29: _("""
- La definition des parametres de recherche lineaire RHO_MIN et RHO_EXCL est contradictoire, on prend l'intervalle [RHO_MIN,RHO_EXCL]
-"""),
-
-30: _("""
- La definition des parametres de recherche lineaire RHO_MAX et RHO_EXCL est contradictoire, on prend l'intervalle [-RHO_EXCL,RHO_MAX]
-"""),
-
-31: _("""
- Le parametre de pilotage ETA_PILO_MAX doit etre inferieur a ETA_PILO_R_MAX
-"""),
-
-32: _("""
- Le parametre de pilotage ETA_PILO_MIN doit etre superieur a ETA_PILO_R_MIN
-"""),
-
-33: _("""
- Il faut _au plus_ UN noeud pour le pilotage de type DDL_IMPO
-"""),
-
-34: _("""
- Il faut _au plus_ UN groupe de noeuds pour le pilotage de type DDL_IMPO
-"""),
-
-35: _("""
- Il y a plus d'un noeud dans le groupe de noeuds definissant le pilotage de type DDL_IMPO
-"""),
-
-36: _("""
- Il faut preciser un groupe de noeuds dans la methode de pilotage de type LONG_ARC
-"""),
-
-37: _("""
- Le groupe de noeud nomme %(k1)s que l'on utilise pour le pilotage de type LONG_ARC est vide
-"""),
-
-38: _("""
- La liste de composantes NOM_CMP que l'on utilise pour le pilotage de type LONG_ARC est vide
-"""),
-
-39: _("""
- On fait un calcul de flambement non lineaire avec l'hypothese des petites perturbations (HPP)
-"""),
-
-40: _("""
- On fait un calcul de flambement non lineaire avec l'hypothese des deformations de type GREEN
-"""),
-
-41: _("""
- Les deformations de type %(k1)s sont incompatibles avec le calcul du flambement
-"""),
-
-42: _("""
- Pour le traitement du contact avec X-FEM, le solveur MUMPS est vivement recommande
-"""),
-
-43: _("""
- Contact et pilotage sont des fonctionnalites incompatibles
-"""),
-
-44: _("""
- Contact et recherche lineaire peuvent poser des problemes de convergence
-"""),
-
-45: _("""
- Contact methode continue et recherche lineaire sont incompatibles
-"""),
-
-46: _("""
- Le contact avec le solveur GCPC n'est pas disponible.
-"""),
-
-47: _("""
- Liaison unilaterale et pilotage sont des fonctionnalites incompatibles
-"""),
-
-48: _("""
- Liaison unilaterale et recherche lineaire peuvent poser des problemes de convergence
-"""),
-
-49: _("""
- Le denominateur est nul lors du calcul du parametre de pilotage
-"""),
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
 
-50: _("""
- La lecture du champ DEPL_CALCULE est impossible
-"""),
+def _(x) : return x
 
-51: _("""
- La prediction par extrapolation est impossible : l'increment de temps initial est nul
-"""),
+cata_msg = {
 
-52: _("""
- Le parametre de recherche lineaire ITER_LINE_MAXI doit etre inferieur a 1000
+10 : _("""
+ Le concept dans ETAT_INIT n'est pas du type EVOL_NOLI
 """),
 
-53: _("""
- Le champ de temperature est une grandeur inconnue (ni reelle, ni fonction)
+12 : _("""
+ L'instant spécifié sous ETAT_INIT n'est pas trouvé
 """),
 
-54: _("""
- Erreur dans la decoupe initiale des pas
+13 : _("""
+ Plusieurs instants correspondent à celui spécifié sous ETAT_INIT
 """),
 
-55: _("""
- Attention, ARRET=NON donc poursuite du calcul sans avoir eu convergence, risque de resultats faux
+14 : _("""
+ Vous utilisez la méthode CONTINUE pour le traitement du contact et faites une reprise de calcul (mot-clé reuse). L'état initial de contact sera
+ non contactant sauf si vous avez utilisé le mot-clé CONTACT_INIT.
+ Cela peut entraîner des difficultés de convergence en présence de fortes non-linéarités. En présence de frottement, la solution peut bifurquer
+ différemment.
+ Conseils :
+   Si vous le pouvez, faites votre calcul en une seule fois.
 """),
 
-56: _("""
- Le nom du champ NOM_CHAMP de la variable de commande est obligatoire pour le decoupage
+15 : _("""
+ Vous utilisez la méthode CONTINUE pour le traitement du contact et définissez un état initial via le mot-clé ETAT_INIT. L'état initial de contact
+ sera non contactant sauf si vous avez utilisé le mot-clé CONTACT_INIT.
 """),
 
-57: _("""
- Le nom de la composante NOM_CMP du champ NOM_CHAMP de la variable de commande est obligatoire
+22 : _("""
+ L'etat initial n'appartient pas à un EVOL_NOLI :
+ on suppose qu'on part d'un état a vitesses nulles
 """),
 
-58: _("""
- La valeur VALE du critere est obligatoire pour le decoupage
+43 : _("""
+ Contact et pilotage sont des fonctionnalités incompatibles
 """),
 
-59: _("""
+59 : _("""
  Cette loi de comportement n'est pas disponible pour le pilotage de type PRED_ELAS
 """),
 
-60: _("""
- Le pilotage de type PRED_ELAS necessite ETA_PILO_MIN et ETA_PILO_MAX pour la loi ENDO_ISOT_BETON
+60 : _("""
+ Le pilotage de type PRED_ELAS nécessite ETA_PILO_MIN et ETA_PILO_MAX pour la loi ENDO_ISOT_BETON
 """),
 
-61: _("""
- Le pilotage de type PRED_ELAS necessite ETA_PILO_MIN et ETA_PILO_MAX pour la loi ENDO_ORTH_BETON
-"""),
-
-62: _("""
- La valeur de NUME_SUIVI est incorrecte dans SUIVI_DDL
-"""),
-
-63: _("""
- Le ddl est inconnu sur le noeud ou la maille specifiee pour SUIVI_DDL
-"""),
-
-64: _("""
- Le parametre ITER_DUAL_MAXI est trop eleve (il doit etre inferieur a 10000)
-"""),
-
-65: _("""
- La fonction duale dans le lagrangien non local est non convexe
-"""),
-
-66: _("""
- Probleme lors de la recherche lineaire dans le lagrangien non local
-"""),
-
-67: _("""
- Il y a plusieurs charges contenant un chargement de type FORCE_FLUIDE
-"""),
-
-68: _("""
- Impossible de faire du pilotage en contraintes planes
-"""),
-
-69: _("""
+69 : _("""
  Problème rencontré :
    la matrice de masse est non inversible.
    On ne peut donc pas s'en servir pour calculer l'accélération initiale.
@@ -304,41 +76,13 @@ cata_msg={
    Avez-vous bien affecté une masse sur tous les éléments ?
 """),
 
-70: _("""
- On detecte une divergence, on force la subdivision du pas de temps
-"""),
-
-71: _("""
- Nombre maximum d'iterations atteint sans convergence, on force la subdivision du pas de temps
-"""),
-
-72: _("""
- Le pas minimal de la subdivision est atteint. On ne peut diviser plus.
-"""),
-
-73: _("""
- Le contact avec le solveur MUMPS n'est pas disponible.
-"""),
-
-74: _("""
- Liaison unilaterale avec le solveur GCPC n'est pas disponible.
-"""),
-
-75: _("""
- Liaison unilaterale avec le solveur MUMPS n'est pas disponible.
-"""),
-
-76: _("""
- L'etat initial n'appartient pas a un EVOL_NOLI : on suppose qu'on part d'un etat a deplacements nuls
-"""),
-
-77: _("""
+77 : _("""
  Vous faites une reprise de calcul avec PILOTAGE en longueur d'arc et avec l'option ANGL_INCR_DEPL mais il n'y pas assez d'informations dans
- la structure de donnees resultats. Il vous faut en effet au moins les deux derniers champs deplacements solutions.
+ la structure de donnees resultats. Il vous faut en effet au moins les deux derniers champs déplacements solutions.
  Changer l'option de PILOTAGE (utilisez NORM_INCR_DEPL) ou refaites le premier calcul pour enrichir la SD resultat (modifiez vos options d'ARCHIVAGE).
 """),
 
-78: _("""
+78 : _("""
  Problème rencontré :
    la matrice de masse est quasi-singulière.
    On se sert de cette matrice pour calculer l'accélération initiale.
@@ -352,9 +96,9 @@ cata_msg={
    avec, eventuellement, un schéma d'integration choisi volontairement très
    dissipatif (par exemple HHT avec alpha=-0.3).
    On peut ensuite reprendre en poursuite avec un schéma moins dissipatif si besoin est.
-"""), 
+"""),
 
-79: _("""
+79 : _("""
    Arret par manque de temps CPU au numéro d'instant : %(i1)d
                                  lors de l'itération : %(i2)d
       - Temps moyen par itération : %(r1)f
@@ -363,7 +107,7 @@ cata_msg={
    La base globale est sauvegardée. Elle contient les pas archivés avant l'arret.
 """),
 
-80: _("""
+80 : _("""
    Arret par manque de temps CPU au numéro d'instant : %(i1)d
       - Temps moyen par %(k1)s : %(r1)f
       - Temps cpu restant      : %(r2)f
@@ -371,29 +115,37 @@ cata_msg={
    La base globale est sauvegardée. Elle contient les pas archivés avant l'arret.
 """),
 
-81: _("""
+81 : _("""
    Echec dans la recherche linéaire. Contactez les développeurs.
 """),
 
-82: _("""
+82 : _("""
    Arret pour cause de matrice non inversible.
 """),
 
-83: _("""
+83 : _("""
    Arret : absence de convergence avec le nombre d'itérations requis.
 """),
 
-84: _("""
+84 : _("""
    Arret par échec dans le pilotage.
 """),
 
-85: _("""
+85 : _("""
    Arret : absence de convergence au numéro d'instant : %(i1)d
                                   lors de l'itération : %(i2)d
 """),
 
-86: _("""
+86 : _("""
     Erreur dans la gestion des erreurs. Contactez les développeurs.
 """),
 
+87 : _("""
+    Recherche linéaire non favorable. Rho forcé à 1.
+"""),
+
+88 : _("""
+    Echec lors de l'interpolation de la variable de commande.
+"""),
+
 }
index 1439eb90f3fcb649999e9392b120c08dc28b0d27..a6a18708c7964c2eed51624018d28dd1e3fa8ce9 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF mecanonline2 Messages  DATE 30/05/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF mecanonline2 Messages  DATE 06/05/2008   AUTEUR MAHFOUZ D.MAHFOUZ 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-67: _("""
- Le code %(i1)d retourné lors de l'intégration de la loi de comportement n'est
- pas traité.  
+3 : _("""
+
+ Le résidu global converge plus vite que la condition des contraintes planes. 
+ La convergence de la condition des contraintes planes peut être améliorée en 
+ augmentant ITER_MAXI_DEBORST (=1 par défaut), sous le mot clef facteur COMP_INCR. 
+
+"""),
+
+4 : _("""
+ La charge definie dans STAT_NON_LINE en tant que une charge de type suiveuse, 
+ sous le mot-clé TYPE_CHARGE = 'SUIV' n'est pas une Charge SUIVEUSE.
 """),
 
-96: _("""
-    -> Les surfaces en contact relatif ont bougé de plus de 5%.
+27 : _("""
+ Lecture du champ DEPL_CALCULE impossible.
+"""),
+
+36 : _("""
+ Erreur dans la découpe initiale des pas.
+"""),
+
+37 : _("""
+ Attention, ARRET=NON donc poursuite du calcul sans avoir eu convergence.
+"""),
+
+67 : _("""
+ Le code %(i1)d retourné lors de l'intégration de la loi de comportement n'est pas traité.  
+"""),
+
+93 : _("""
+  -> Risque & Conseil :  dans le cas d'une résolution incrémentale, 
+     on ne considère que la variation des variables de commande entre
+     l'instant précédent et l'instant actuel.
+     On  ne prend donc pas en compte d'éventuelles contraintes incompatibles
+     dues à ces variables de commande initiales. 
+     Pour tenir compte de ces contraintes vous pouvez :
+     - partir d'un instant fictif antérieur où toutes les variables de 
+       commande sont nulles ou égales aux valeurs de référence
+     - choisir des valeurs de référence adaptées
+     Pour plus d'informations, voir la documentation de STAT_NON_LINE 
+     (U4.51.03) mot-clé EXCIT, et le test FORMA09 (V7.20.101).
+"""),
+
+94 : _("""
+  -> Indications supplémentaires : pour la variable de commande :  %(k1)s
+     et la composante :  %(k2)s
+     Valeur maximum : %(r1)f sur la maille : %(k3)s
+     Valeur minimum : %(r2)f sur la maille : %(k4)s
+"""),
+
+95 : _("""
+  -> Indications supplémentaires : pour la variable de commande :  %(k1)s 
+     et la composante :  %(k2)s
+     Valeur maximum de abs( %(k2)s - %(k5)s_REF) : %(r1)f sur la maille : %(k3)s
+     Valeur minimum de abs( %(k2)s - %(k5)s_REF) : %(r2)f sur la maille : %(k4)s
+"""),
+
+96 : _("""
+    -> Les surfaces en contact relatif ont bougé de plus de 5%%.
        Or vous n'avez pas activé la réactualisation géométrique (REAC_GEOM) automatique ou
        vous utiliser le mode "CONTROLE"
     -> Risque & Conseil : Vos résultats risquent d'etre faux, les mailles ne
@@ -39,18 +91,15 @@ cata_msg={
        pas interpénétration.
 """),
 
-97: _("""
-  -> Les variables de commandes initiales induisent des contraintes
-     incompatibles.
-  -> Risque & Conseil : Ce message apparait si l'état initial
-    (avant le premier instant de calcul) est tel que les variables de commande
-    (température, hydratation, séchage...) conduisent à des contraintes
-     non équilibrées. Dans le cas de la température, vérifiez que la valeur
-     TEMP_REF correspond à la température de l'état initial.
-
+97 : _("""
+  -> Les variables de commandes initiales induisent des contraintes 
+     incompatibles : 
+     l'état initial (avant le premier instant de calcul) est tel que 
+     les variables de commande (température, hydratation, séchage...)
+     conduisent à des contraintes non équilibrées. 
 """),
 
-98: _("""
+98 : _("""
   -> Le chargement extérieur est nul (à la précision près).
      Or vous avez demandé une convergence avec le critère relatif (RESI_GLOB_RELA). 
      Pour éviter une division par zéro, le code est passé automatiquement en mode de convergence
@@ -62,13 +111,4 @@ cata_msg={
      de résidu maximum à l'instant précédent. 
 """),
 
-99: _("""
-  -> Le chargement extérieur est nul (à la précision près).
-     Or vous avez demandé une convergence avec le critère relatif (RESI_GLOB_RELA). 
-  -> Risque & Conseil : Vérifier bien que votre chargement doit etre nul à cet instant 
-     Le chargement est "nul" dans le cas de l'utilisation d'AFFE_CHAR_CINE en particulier.
-     Il vous faut changer votre critère de convergence: RESI_GLOB_MAXI ou RESI_REFE_RELA
-"""),
-
-
 }
diff --git a/Aster/Cata/cataSTA9/Messages/mecanonline3.py b/Aster/Cata/cataSTA9/Messages/mecanonline3.py
new file mode 100644 (file)
index 0000000..04d7e73
--- /dev/null
@@ -0,0 +1,77 @@
+#@ MODIF mecanonline3 Messages  DATE 19/12/2007   AUTEUR ABBAS M.ABBAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg = {
+
+70 : _("""
+ macro_element statique et FETI incompatibles
+"""),
+
+71 : _("""
+ chargement onde plane et FETI incompatibles
+"""),
+
+72 : _("""
+ forces fluides sur les grappes et FETI incompatibles
+"""),
+
+73 : _("""
+ forces d'inertie et FETI incompatibles
+"""),
+
+75 : _("""
+ forces d'inertie derivées et FETI incompatibles
+"""),
+
+78 : _("""
+ FETI et contact discret incompatibles !
+"""),
+
+89 : _("""
+ contact et recherche linéaire peuvent poser des problèmes de convergence
+"""),
+
+90 : _("""
+ la combinaison: contact-frottement et solveur GCPC n'est pas disponible.
+"""),
+
+91 : _("""
+ contact méthode continue et recherche linéaire sont incompatibles
+"""),
+
+92 : _("""
+ contact méthode continue et pilotage sont incompatibles
+"""),
+
+93 : _("""
+ la combinaison: méthode continue en contact et solveur GCPC n'est pas disponible.
+"""),
+
+94 : _("""
+ LIAISON_UNILATER et PILOTAGE sont des fonctionnalités incompatibles
+"""),
+
+95 : _("""
+ LIAISON_UNILATER et recherche linéaire peuvent poser des problèmes de convergence
+"""),
+
+}
diff --git a/Aster/Cata/cataSTA9/Messages/mecanonline4.py b/Aster/Cata/cataSTA9/Messages/mecanonline4.py
new file mode 100644 (file)
index 0000000..f5df981
--- /dev/null
@@ -0,0 +1,85 @@
+#@ MODIF mecanonline4 Messages  DATE 12/02/2008   AUTEUR ABBAS M.ABBAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg = {
+
+3 : _("""
+Il y a trop de colonnes de SUIVI_DDL (limité à quatre)
+"""),
+
+5 : _("""
+Le fichier pour le SUIVI_DDL doit etre défini dans la première occurrence
+"""),
+
+6 : _("""
+Le fichier pour le SUIVI_DDL a été donné sans unité logique
+"""),
+
+21 : _("""
+Le format est trop grand pour la largeur max. d'une colonne (16)
+"""),
+
+
+35 : _("""
+ On utilise MECA_NON_LINE en enrichissant les résultats (REUSE).
+ Mais on ne définit pas d'état initial: on prend un état initial nul.
+"""),
+
+37 : _("""
+ On ne trouve aucun numéro d'ordre pour le concept EVOl_NOLI de nom <%(k1)s> 
+"""),
+
+41 : _("""
+ Le champ des déplacements (ou sa dérivée pour la sensibilité) n'a pas été trouvé 
+ dans le concept EVOL_NOLI de nom <%(k1)s>
+"""),
+
+42 : _("""
+ Le champ des contraintes (ou sa dérivée pour la sensibilité) n'a pas été trouvé 
+ dans le concept EVOL_NOLI de nom <%(k1)s>
+"""),
+
+43 : _("""
+ Le champ des vitesses (ou sa dérivée pour la sensibilité) n'a pas été trouvé 
+ dans le concept EVOL_NOLI de nom <%(k1)s>
+ On suppose qu'on part d'un champ de vitesses nulles.
+"""),
+
+44 : _("""
+ Le champ des accélérations (ou sa dérivée pour la sensibilité) n'a pas été trouvé 
+ dans le concept EVOL_NOLI de nom <%(k1)s>
+ On calcule un champ d'accélérations initiales, ce qui est possible puisque les vitesses initiales sont nulles
+"""),
+
+45 : _("""
+ Le champ des accélérations (ou sa dérivée pour la sensibilité) n'a pas été trouvé 
+ dans le concept EVOL_NOLI de nom <%(k1)s>
+ On ne peut pas calculer un champ d'accélérations initiales, car les vitesses initiales ne sont pas nulles
+"""),
+
+46 : _("""
+ Le champ des variables internes (ou sa dérivée pour la sensibilité) n'a pas été trouvé 
+ dans le concept EVOL_NOLI de nom <%(k1)s>
+"""),
+
+
+}
diff --git a/Aster/Cata/cataSTA9/Messages/mecanonline5.py b/Aster/Cata/cataSTA9/Messages/mecanonline5.py
new file mode 100644 (file)
index 0000000..64fb667
--- /dev/null
@@ -0,0 +1,59 @@
+#@ MODIF mecanonline5 Messages  DATE 19/05/2008   AUTEUR ABBAS M.ABBAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg = {
+
+
+21 : _("""
+  -> Critère de convergence est lache !
+  -> Risque & Conseil : La valeur de RESI_GLOB_RELA est supérieure à 10-4.
+     Cela peut nuire à la qualité de la solution. Vous ne vérifiez pas l'équilibre de 
+     manière rigoureuse.
+"""),
+
+44 : _("""
+Pour la prédiction de type 'DEPL_CALCULE', il faut obligatoirement:
+ - ITER_GLOB_MAXI = 0
+ - ARRET = 'NON'
+"""),
+
+45 : _("""
+Il faut préciser un concept EVOL_NOLI en prédiction de type 'DEPL_CALCULE'
+"""),
+
+46 : _("""
+  -> La définition des paramètres RHO_MIN et RHO_EXCL est contradictoire.
+     On choisit de prendre RHO_MIN à RHO_EXCL.
+  -> Risque & Conseil :
+     RHO_MIN ne doit pas etre compris entre -RHO_EXCL et RHO_EXCL
+
+"""),
+
+47 : _("""
+  -> La définition des paramètres RHO_MAX et RHO_EXCL est contradictoire.
+     On choisit de prendre RHO_MAX à -RHO_EXCL.
+  -> Risque & Conseil :
+     RHO_MAX ne doit pas etre compris entre -RHO_EXCL et RHO_EXCL
+
+"""),
+
+}
diff --git a/Aster/Cata/cataSTA9/Messages/med.py b/Aster/Cata/cataSTA9/Messages/med.py
new file mode 100644 (file)
index 0000000..a85f4ba
--- /dev/null
@@ -0,0 +1,489 @@
+#@ MODIF med Messages  DATE 03/06/2008   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg = {
+
+1 : _("""
+  -> Absence de localisation de points de Gauss dans le fichier MED
+     pour l'élément de référence %(k1)s.
+     On suppose que l'ordre des points de Gauss est celui d'Aster.
+  -> Risque & Conseil:     
+     Risque de résultats faux.
+"""),
+
+2 : _("""
+  -> Le nombre de points de Gauss est différent entre le fichier med et Aster:
+      - nombre de points de Gauss contenu dans le fichier MED : %(i2)d
+      - nombre de points de Gauss défini dans Aster           : %(i1)d
+
+     Visiblement les éléments finis décrits dans le fichier MED ne sont pas les
+     mêmes que dans Code_Aster.
+     Si vous avez choisi PROL_ZERO='OUI', le champ sera initialisé à zéro sur
+     ces éléments.
+     Sinon, le champ ne sera pas initialisé (NaN, not a number). C'est le
+     comportement par défaut.
+
+  -> Risque & Conseil :
+      - Choisissez des éléments finis compatibles entre Aster et le code tiers
+"""),
+
+3 : _("""
+  -> Les point de Gauss Med/Aster ne correspondent pas géométriquement.
+  -> Risque & Conseil:
+     Risque de résultats faux à cause cette incompatibilité.
+"""),
+
+4 : _("""
+
+     Point De Gauss : %(i1)d              MED               ASTER
+"""),
+
+5 : _("""
+        %(k1)s                          %(r1)f          %(r2)f
+"""),
+
+6 : _("""
+  -> Une ou plusieurs permutations ont été effectuées sur l'ordre des points
+     de Gauss pour que la localisation Med corresponde à celle d'Aster.
+"""),
+
+7 : _("""
+  -> Le nom de groupe numéro %(i1)d de la famille %(k1)s
+     est trop long. Il sera tronqué à 8 caractères.
+     Le groupe "%(k2)s" est renommé en "%(k3)s".
+"""),
+
+8 : _("""
+  -> Famille %(k1)s :
+       Incohérence sur les nombres de %(k2)s, il y en a %(i1)d alors
+       que la fonction MED en annonce %(i2)d.
+  -> Risque & Conseil: 
+       Impossible de lire ce fichier. 
+       On peut utiliser mdump (utilitaire med) pour voir si le problème
+       vient du fichier MED ou de la lecture dans Code_Aster.
+"""),
+
+9 : _("""
+  -> Vous ne pouvez pas renommer le groupe "%(k1)s" en "%(k2)s"
+     car "%(k2)s" existe déjà dans le fichier MED.
+"""),
+
+10 : _("""
+  -> Le nom de groupe numéro %(i1)d de la famille %(k1)s
+     est contient des caractères interdits.
+     Le groupe "%(k2)s" est renommé en "%(k3)s".
+"""),
+
+11 : _("""
+  -> Le nom de groupe numéro %(i1)d de la famille %(k1)s
+     est vide.
+"""),
+
+12 : _("""
+  -> Erreur lors de l'appel à EFNEMA, code retour = %(k1)s
+  -> Risque & Conseil :
+     Vérifier l'intégrité du fichier MED avec medconforme/mdump.
+     Si le maillage a été produit par un code externe, vérifier que les
+     noms de maillage, de groupes, de familles ne contiennent pas de
+     blancs à la fin.
+     Dans Salomé, on peut renommer ces entités et supprimer les espaces
+     invalides.
+"""),
+
+13 : _("""
+  -> La famille %(k1)s n'a ni groupe, ni attribut.
+"""),
+
+14 : _("""
+  -> Lecture de la famille numéro %(i1)4d de nom %(k1)s.
+"""),
+
+15 : _("""
+      Groupe numéro %(i1)6d : %(k1)s
+"""),
+
+16 : _("""
+      Groupe numéro %(i1)6d : %(k1)s
+                renommé en : %(k2)s
+"""),
+
+17 : _("""
+  -> Aucune famille n'est présente dans ce fichier med.
+  -> Risque & Conseil :
+     Vérifier l'intégrité du fichier MED avec medconforme/mdump.
+"""),
+
+18 : _("""
+  -> Arret en raison des conflits sur les noms de groupe.
+"""),
+
+19 : _("""
+  -> Les mailles  %(k1)s ne sont pas nommées dans le fichier med.
+"""),
+
+20 : _("""
+  -> Impossible de retrouver l'adresse associée au groupe  %(k1)s 
+"""),
+
+21 : _("""
+  -> Il manque les coordonnées !
+"""),
+
+22 : _("""
+  Le nom de groupe numéro  %(i1)d  est en double. %(k1)s
+  - premier nom med  :  %(k2)s
+  - second nom med   :  %(k3)s
+  - nom aster retenu :  %(k4)s
+"""),
+
+23 : _("""
+  -> Mailles  %(k1)s 
+"""),
+
+24 : _("""
+  -> Le fichier n'a pas été construit avec la meme version de med.
+  -> Risque & Conseil :
+     La lecture du fichier peut échouer !
+
+"""),
+
+25 : _("""
+   Version de la bibliothèque med utilisee par Code_Aster:  %(i1)d %(i2)d %(i3)d
+"""),
+
+26 : _("""
+   Version de la bibliothèque med qui a créé le fichier  : < 2.1.5
+"""),
+
+27 : _("""
+   Version de la bibliothèque med pour créer le fichier  :  %(i1)d %(i2)d %(i3)d 
+"""),
+
+28 : _("""
+
+   Un utilitaire vous permet peut-etre de convertir votre fichier (medimport)
+"""),
+
+29 : _("""
+  -> Il manque les mailles !
+"""),
+
+30 : _("""
+  -> Erreur: numéro de groupe = 0
+"""),
+
+31 : _("""
+  -> Ce champ existe déjà dans le fichier MED. 
+     On ne peut pas le créer de nouveau.
+
+     Nom MED du champ : "%(k1)s"
+
+  -> Risque & Conseil :
+     Si vous essayez d'imprimer les différentes composantes d'un champ,
+     ne faites qu'un seul IMPR_RESU avec la liste des composantes à
+     retenir derrière le mot-clé NOM_CMP.
+     Pour la visualisation dans Salomé (Scalar Map par exemple),
+     sélectionner la composante dans Scalar Range/Scalar Mode.
+"""),
+
+32 : _("""
+     Le champ est inconnu.
+"""),
+
+33 : _("""
+     Il manque des composantes.
+"""),
+
+34 : _("""
+     Aucune valeur n'est présente à cet instant.
+"""),
+
+35 : _("""
+     Aucune valeur n'est présente à ce numéro d'ordre.
+"""),
+
+36 : _("""
+     Le nombre de valeurs n'est pas correct.
+"""),
+
+37 : _("""
+  -> La lecture est donc impossible.
+  -> Risque & Conseil :
+     Veuillez vérifier l'intégrité du fichier MED avec medconforme/mdump.
+"""),
+
+38 : _("""
+  -> Incohérence catalogue - fortran (nbtyp fortran différent de nbtyp catalogue)
+"""),
+
+39 : _("""
+  -> Incohérence catalogue - fortran (nomtyp fortran différent de nomtyp catalogue)
+"""),
+
+40 : _("""
+  -> Ouverture du fichier med en mode  %(k1)s  %(k2)s 
+"""),
+
+41 : _("""
+  -> Incohérence de version détectée.
+"""),
+
+42 : _("""
+  -> Le type d'entité  %(k1)s  est inconnu.
+"""),
+
+43 : _("""
+  -> Le maillage est introuvable !
+"""),
+
+44 : _("""
+  -> Pas d'écriture pour  %(k1)s 
+"""),
+
+45 : _("""
+     Issu de  %(k1)s 
+"""),
+
+46 : _("""
+  -> Le type de champ est inconnu :  %(k1)s 
+"""),
+
+47 : _("""
+  -> Création des tableaux de valeurs à écrire avec :
+"""),
+
+48 : _("""
+  -> Renumérotation impossible avec plus d'un sous-point.
+"""),
+
+49 : _("""
+  -> Veritable écriture des tableaux de valeurs
+"""),
+
+50 : _("""
+  -> Pas de maillage dans  %(k1)s 
+"""),
+
+51 : _("""
+  -> Maillage  %(k1)s  inconnu dans  %(k2)s 
+"""),
+
+52 : _("""
+  ->  Instant inconnu pour ce champ et ces supports dans le fichier.
+"""),
+
+53 : _("""
+  ->  La version de la lib med utilisée par Code-Aster est plus récente que 
+      celle qui a produit votre fichier med.
+  ->  Conséquence:  On considère les champs aux noeuds par élément 
+      comme des pseudo champs aux points de Gauss. 
+      (On utilise pour la lecture du champ %(k1)s 
+       contenu dans votre fichier med, le type d'entité MED_MAILLE au lieu
+       de MED_NOEUD_MAILLE).
+"""),
+
+55 : _("""
+  -> Lecture impossible pour  %(k1)s  au format MED
+"""),
+
+57 : _("""
+  -> Le champ  %(k1)s n'existe pas dans le fichier med.
+  -> Risque & Conseil :
+     Vérifier l'intégrité du fichier MED avec medconforme/mdump.
+"""),
+
+60 : _("""
+  -> On ne traite pas les maillages distants.
+"""),
+
+62 : _("""
+  -> Impossible de déterminer un nom de maillage MED.
+"""),
+
+63 : _("""
+  -> Le mot clé "INFO_MAILLAGE" est réservé au format med.
+"""),
+
+65 : _("""
+  -> Grandeur inconnue.
+"""),
+
+66 : _("""
+  -> Composante inconnue pour la grandeur.
+"""),
+
+67 : _("""
+  -> Le maillage %(k2)s est déjà présent dans le fichier med %(k1)s.
+"""),
+
+68 : _("""
+  -> Instant voulu :  %(r1)f
+"""),
+
+69 : _("""
+  -> Numéro d'ordre :  %(i1)d numéro de pas de temps :  %(i2)d 
+
+"""),
+
+70 : _("""
+  -> Trop de composantes pour la grandeur.
+"""),
+
+71 : _("""
+  -> le mot-clé MODELE est obligatoire pour lire un CHAM_ELEM
+"""),
+
+72 : _("""
+  -> Nom de composante tronqué à 8 caractères ( %(k1)s  >>>  %(k2)s )
+"""),
+
+73 : _("""
+  -> Impossible de trouver la composante ASTER associée a  %(k1)s 
+"""),
+
+74 : _("""
+  -> Ecriture des localisations des points de gauss.
+"""),
+
+75 : _("""
+  -> Problème dans la lecture du nom du champ et de ses composantes.
+"""),
+
+76 : _("""
+  -> Problème dans le diagnostic.
+"""),
+
+79 : _("""
+  -> Attention le maillage n'est pas de type non structuré
+"""),
+
+80 : _("""
+  -> Le maillage ' %(k1)s ' est inconnu dans le fichier.
+"""),
+
+81 : _("""
+  -> Attention, il s'agit d'un maillage structuré
+"""),
+
+82 : _("""
+  -> L'objet  %(k1)s  n'existe pas.
+  -> Risque & Conseil:
+     Veuillez renseigner le modèle.
+"""),
+
+83 : _("""
+  -  valeurs lues dans le fichier        : %(i1)d 
+  -  valeurs non affectees dans le champ : %(i2)d 
+"""),
+
+84 : _("""
+  -> Type incorrect  %(i1)d 
+"""),
+
+85 : _("""
+  -> Maillage présent :  %(k1)s 
+"""),
+
+86 : _("""
+  -> champ à lire :  %(k1)s typent :  %(i1)d typgeo :  %(i2)d 
+     instant voulu :  %(r1)f 
+     --> numéro d'ordre :  %(i3)d 
+     --> numéro de pas de temps :  %(i4)d 
+"""),
+
+87 : _("""
+  Le numéro d'ordre %(i1)d que vous avez renseigné ne figure pas
+  dans la liste des numéros d'ordre du résultat med. 
+  Conséquence: le champ correspondant ne figurera pas dans la 
+  SD Résultat %(k1)s
+"""),
+
+
+88 : _("""
+  -> Fichier med :  %(k1)s, nombre de maillages présents : %(i1)d 
+"""),
+
+89 : _("""
+  -> Ecriture impossible pour  %(k1)s  au format MED.
+"""),
+
+90 : _("""
+     Début de l'écriture MED de  %(k1)s 
+"""),
+
+91 : _("""
+  -> Impossible de déterminer un nom de champ MED.
+  -> Risque & Conseil:  
+"""),
+
+92 : _("""
+  -> Le type de champ  %(k1)s  est inconnu pour med.
+  -> Risque & Conseil:
+     Veuillez vérifier la mise en données du mot-clé NOM_CHAM_MED
+     (LIRE_RESU) ou NOM_MED (LIRE_CHAMP).
+"""),
+
+93 : _("""
+     Fin de l'écriture MED de  %(k1)s 
+"""),
+
+94 : _("""
+  -> Le nom du champ med est introuvable.
+  -> Risque & Conseil:
+     Veuillez vérifier la mise en données du mot-clé NOM_CHAM_MED.
+"""),
+
+95 : _("""
+  -> Le champ med %(k1)s est introuvable.
+  -> Risque & Conseil:
+     Veuillez vérifier la mise en données du mot-clé NOM_CHAM_MED
+     ainsi que le fichier med fourni à l'opérateur.
+"""),
+
+96 : _("""
+  -> NOM_MED absent !
+  -> Risque & Conseil:
+     Veuillez renseigner le mot-cle NOM_MED de l'opérateur LIRE_CHAMP.
+"""),
+
+97 : _("""
+  -> Fichier med :  %(k1)s, Champ :  %(k2)s, Instant voulu :  %(r1)f 
+     - typent :  %(i1)d 
+     - typgeo :  %(i2)d 
+"""),
+
+98 : _("""
+  -> Fichier med :  %(k1)s champ :  %(k2)s 
+"""),
+
+99 : _("""
+  -> Des éléments finis différents s'appuient sur un meme type de maille(%(k1)s).
+     Le nombre de valeurs à écrire est différent entre ces deux types
+     d'éléments, on ne peut pas écrire le champ complet au format med.
+  -> Risque & Conseil:
+     Veuillez utiliser la restriction géométrique GROUP_MA de l'opérateur
+     IMPR_RESU pour spécifier les mailles à considérer.
+"""),
+
+}
diff --git a/Aster/Cata/cataSTA9/Messages/meidee0.py b/Aster/Cata/cataSTA9/Messages/meidee0.py
new file mode 100644 (file)
index 0000000..5265a1c
--- /dev/null
@@ -0,0 +1,42 @@
+#@ MODIF meidee0 Messages  DATE 26/03/2008   AUTEUR BODEL C.BODEL 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+Le modèle mesuré doit etre un concept de type DYNA_HARMO ou MODE_MECA.
+"""),
+2: _("""
+Le maillage et les déformées ne sont pas compatibles.
+"""),
+3: _("""
+Calcul de MAC impossible : bases incompatibles.
+"""),
+4: _("""
+Problème inverse impossible : problème de cohérence entre les données.
+"""),
+5: _("""
+Problème de NUME_DDL dans MACRO_EXPANS : il est possible de le preciser
+a l'appel de la macro. Si vous utilisez MACRO_EXPANS par l'intermediaire d'une IHM,
+contactez l'assistance technique.
+"""),
+
+}
diff --git a/Aster/Cata/cataSTA9/Messages/miss0.py b/Aster/Cata/cataSTA9/Messages/miss0.py
new file mode 100644 (file)
index 0000000..34253ec
--- /dev/null
@@ -0,0 +1,32 @@
+#@ MODIF miss0 Messages  DATE 17/07/2007   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+Longueur de LFREQ_LISTE incorrecte.
+"""),
+
+2: _("""
+Longueur de CONTR_LISTE incorrecte.
+"""),
+
+}
diff --git a/Aster/Cata/cataSTA9/Messages/modal0.py b/Aster/Cata/cataSTA9/Messages/modal0.py
new file mode 100644 (file)
index 0000000..d20b51c
--- /dev/null
@@ -0,0 +1,29 @@
+#@ MODIF modal0 Messages  DATE 17/07/2007   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+MATR_ASSE et MATR_ASSE_GENE absents.
+"""),
+
+
+}
index f73644dd66c52a1b27db75d52363513fd2a9546e..1233c25dccf44dfdb77557d8a51e10d87a15a995 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF modelisa Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF modelisa Messages  DATE 18/03/2008   AUTEUR CNGUYEN C.NGUYEN 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- l option de calcul d une abscisse curviligne sur un groupe de mailles n est pas implantee
+1 : _("""
+ l'option de calcul d'une abscisse curviligne sur un groupe de mailles
+ n'est pas implantée
 """),
 
-2: _("""
- il est possible de definir une abscisse curviligne uniquement pour des mailles de type: poi1 ou seg2
+2 : _("""
+ il est possible de définir une abscisse curviligne uniquement
+ pour des mailles de type: POI1 ou SEG2
 """),
 
-3: _("""
- point non trouve parmi les seg2
+3 : _("""
+ point non trouvé parmi les SEG2
 """),
 
-4: _("""
- mauvaise definition pour l abs_curv. detection de plusieurs chemins. 
+4 : _("""
+ mauvaise définition pour l'abscisse curviligne
+ détection de plusieurs chemins. 
 """),
 
-5: _("""
-  le groupe de maille que    vous donnez ne correspond    pas au modele de structure que vous etudiez  
+5 : _("""
+  le groupe de maille que vous donnez ne correspond pas
+  au modèle de structure que vous étudiez  
 """),
 
-6: _("""
- methode au-yang : la geometrie doit etre cylindrique
+6 : _("""
+ methode AU-YANG : la géometrie doit etre cylindrique
 """),
 
-7: _("""
barre : une erreur a ete detectee lors de l affectation des valeurs dans le tampon
+7 : _("""
BARRE : une erreur a été détectée lors de l'affectation des valeurs dans le tampon
 """),
 
-8: _("""
- on interdit d'avoir sur un maillage 2d des elements discrets 2d et 3d .
+8 : _("""
+ on interdit d'avoir sur un maillage 2D des éléments discrets 2D et 3D
 """),
 
-9: _("""
- on interdit d'avoir sur un maillage 3d des elements discrets 2d .
+9 : _("""
+ on interdit d'avoir sur un maillage 3D des éléments discrets 2D
 """),
 
-10: _("""
- axe_z nul
+10 : _("""
+ la norme de l'axe définie sous le mot clé facteur GRILLE/AXE est nul.
 """),
 
-11: _("""
+11 : _("""
  noeud confondu avec l'origine
 """),
 
-12: _("""
- orientation : une  erreur a ete detectee lors de l affectation des orientations
+12 : _("""
+ orientation : une erreur a ete détectée lors de l'affectation des orientations
 """),
 
-13: _("""
- erreur(s) dans les donnees.
+13 : _("""
+ erreur(s) dans les données.
 """),
 
-14: _("""
poutre : une erreur a ete detectee lors de l affectation des valeurs dans le tampon
+14 : _("""
POUTRE : une erreur a été détectée lors de l'affectation des valeurs dans le tampon
 """),
 
-15: _("""
+15 : _("""
  poutre : une  erreur a ete detectee lors des verifications des valeurs entrees
 """),
 
-16: _("""
- si 2 caracteristiques 1 amor et 1 rigi obligatoires
+16 : _("""
+ vous fournissez deux caractéristiques élémentaires. Il est obligatoire de fournir une caractéristique
+ relative à l'amortissement et une caractéristique relative à la rigidité
 """),
 
-17: _("""
- caracteristique  %(k1)s  non admise actuellement
+17 : _("""
+ caractéristique  %(k1)s  non admise actuellement
 """),
 
-18: _("""
- le noeud  %(k1)s  non modelise par un discret
+18 : _("""
+ le noeud  %(k1)s  non modelisé par un discret
 """),
 
-19: _("""
- pas de noeuds du radier modelises par des discrets
+19 : _("""
+ pas de noeuds du Radier modélisés par des discrets
 """),
 
-20: _("""
- le discret  %(k1)s  n a pas le bon nombre de noeuds.
+20 : _("""
+ le discret  %(k1)s  n'a pas le bon nombre de noeuds.
 """),
 
-21: _("""
- le noeud  %(k1)s  extremite d un des discrets n existe pas dans la surface donnee par group_ma.
+21 : _("""
+ le noeud  %(k1)s  éxtremité d'un des discrets n'existe pas dans la surface donnée par GROUP_MA.
 """),
 
-22: _("""
- nbext1.ne.nbext2
-"""),
 
-23: _("""
- nbext1.ne.nbpart
-"""),
 
-24: _("""
-  gene_tuyau preciser un seul noeud par tuyau
+
+
+
+
+
+
+24 : _("""
+  GENE_TUYAU : préciser un seul noeud par tuyau
 """),
 
-25: _("""
- orientation : gene_tuyau le noeud doit etre une des extremites
+25 : _("""
+ ORIENTATION : GENE_TUYAU
+ le noeud doit etre une des extremités
 """),
 
-26: _("""
-  pb nmmt 
+26 : _("""
+  Il y a un probleme lors de l'affectation du mot clé MODI_METRIQUE sur la maille %(k1)s 
 """),
 
-27: _("""
- on ne peut pas melanger des tuyaux a 3 et 4 noeuds pour le moment
+27 : _("""
+ on ne peut pas mélanger des tuyaux à 3 et 4 noeuds pour le moment
 """),
 
-28: _("""
- orientation : gene_tuyau un seul noeud doit etre efecte
+28 : _("""
+ ORIENTATION : GENE_TUYAU
+ un seul noeud doit etre affecté
 """),
 
-29: _("""
- vous ne pouvez affecter des valeurs de type "poutre" au modele  %(k1)s  qui ne contient pas un seul element poutre !
+29 : _("""
+ vous ne pouvez affecter des valeurs de type "POUTRE" au modèle  %(k1)s
+ qui ne contient pas un seul élément poutre
 """),
 
-30: _("""
- vous ne pouvez affecter des valeurs de type "coque" au modele  %(k1)s  qui ne contient pas un seul element coque !
+30 : _("""
+ vous ne pouvez affecter des valeurs de type "COQUE" au modèle  %(k1)s
+ qui ne contient pas un seul élément coque
 """),
 
-31: _("""
- vous ne pouvez affectee des valeurs de type "discret" au modele  %(k1)s  qui ne contient pas un seul element discret !
+31 : _("""
+ vous ne pouvez affecter des valeurs de type "DISCRET" au modèle  %(k1)s
+ qui ne contient pas un seul élément discret
 """),
 
-32: _("""
- vous ne pouvez affecter des valeurs de type "orientation" au modele  %(k1)s  qui ne contient ni element poutre ni element discret ni element barre !
+32 : _("""
+ vous ne pouvez affecter des valeurs de type "ORIENTATION" au modèle  %(k1)s
+ qui ne contient ni element poutre ni élément DISCRET ni élément BARRE
 """),
 
-33: _("""
- vous ne pouvez affecter des valeurs de type "cable" au modele  %(k1)s  qui ne contient pas un seul element cable !
+33 : _("""
+ vous ne pouvez affecter des valeurs de type "CABLE" au modèle  %(k1)s
+ qui ne contient pas un seul élément CABLE
 """),
 
-34: _("""
- vous ne pouvez affecter des valeurs de type "barre" au modele  %(k1)s  qui ne contient pas un seul element barre !
+34 : _("""
+ vous ne pouvez affecter des valeurs de type "BARRE" au modèle  %(k1)s
+ qui ne contient pas un seul élément BARRE
 """),
 
-35: _("""
- vous ne pouvez affecter des valeurs de type "massif" au modele  %(k1)s  qui ne contient pas un seul element thermique ou mecanique !
+35 : _("""
+ vous ne pouvez affecter des valeurs de type "MASSIF" au modèle  %(k1)s
+ qui ne contient pas un seul élément thermique ou mécanique
 """),
 
-36: _("""
- vous ne pouvez affecter des valeurs de type "grille" au modele  %(k1)s  qui ne contient pas un seul element grille
+36 : _("""
+ vous ne pouvez affecter des valeurs de type "GRILLE" au modèle  %(k1)s
+ qui ne contient pas un seul élément GRILLE
 """),
 
-37: _("""
- impossible d"affecter des caracteristiques a des noeuds de ce modele car aucun noeud ne supporte un element
+37 : _("""
+ impossible d'affecter des caractéristiques à des noeuds de ce modèle
+ car aucun noeud ne supporte un élément
 """),
 
-38: _("""
- la maille  %(k1)s  n'a pas ete affectee par des caracteristiques de poutre.
+38 : _("""
+ la maille  %(k1)s  n'a pas été affectée par des caractéristiques de poutre.
 """),
 
-39: _("""
- la maille  %(k1)s  n'a pas ete affectee par une matrice (discret).
+39 : _("""
+ la maille  %(k1)s  n'a pas ete afféctée par une matrice (DISCRET).
 """),
 
-40: _("""
- la maille  %(k1)s  n'a pas ete affectee par des caracteristiques de cable.
+40 : _("""
+ la maille  %(k1)s  n'a pas ete affectée par des caractéristiques de cable.
 """),
 
-41: _("""
- la maille  %(k1)s  n'a pas ete affectee par des caracteristiques de barre.
+41 : _("""
+ la maille  %(k1)s  n'a pas ete affectée par des caractéristiques de barre.
 """),
 
-42: _("""
- la maille  %(k1)s  n'a pas ete affectee par des caracteristiques de grille.
+42 : _("""
+ la maille  %(k1)s  n'a pas ete affectée par des caractéristiques de grille.
 """),
 
-43: _("""
- le noeud  %(k1)s  n'a pas ete affecte par une matrice.
+43 : _("""
+ le noeud  %(k1)s  n'a pas ete affecté par une matrice.
 """),
 
-44: _("""
- barre : occurence  %(k1)s  : "cara" :  %(k2)s  arguments maxi pour une section " %(k3)s "
+44 : _("""
+ BARRE :
+ occurence :  %(k1)s
+ "CARA"    :  %(k2)s
+ arguments maximums pour une section " %(k3)s "
 """),
 
-45: _("""
- barre : occurence  %(k1)s  : "cara" :  4  arguments maxi pour une section " %(k2)s "
+45 : _("""
+ BARRE :
+ occurence  %(k1)s
+ "cara"   :  4
+ arguments maximums pour une section " %(k2)s "
 """),
 
-46: _("""
- barre : occurence  %(k1)s  : section " %(k2)s  argument "h" incompatible avec "hy" ou "hz"
+46 : _("""
+ BARRE :
+ occurence  %(k1)s
+ section " %(k2)s
+ argument "h" incompatible avec "hy" ou "hz"
 """),
 
-47: _("""
- barre : occurence  %(k1)s  : section " %(k2)s  argument "hy" ou "hz" incompatible avec "h" 
+47 : _("""
+ barre :
+ occurence  %(k1)s
+ section " %(k2)s
+ argument "hy" ou "hz" incompatible avec "h" 
 """),
 
-48: _("""
- barre : occurence  %(k1)s  : section " %(k2)s  argument "ep" incompatible avec "epy" ou "epz"
+48 : _("""
+ barre :
+ occurence  %(k1)s
+ section " %(k2)s  argument "ep" incompatible avec "epy" ou "epz"
 """),
 
-49: _("""
- barre : occurence  %(k1)s  : section " %(k2)s  argument "epy" ou "epz" incompatible avec "ep"
+49 : _("""
+ barre :
+ occurence  %(k1)s
+ section " %(k2)s
+ argument "epy" ou "epz" incompatible avec "ep"
 """),
 
-50: _("""
- barre : occurence  %(k1)s  : "cara" : nombre de valeurs entrees incorrect : il en faut  %(k2)s 
+50 : _("""
+ barre :
+ occurence  %(k1)s
+ "cara" : nombre de valeurs entrees incorrect
+ il en faut  %(k2)s 
 """),
 
-51: _("""
- barre : occurence  %(k1)s  : section " %(k2)s  : valeur  %(k3)s  de "vale" non admise (valeur test interne)
+51 : _("""
+ barre :
+ occurence  %(k1)s
+ section " %(k2)s
+ valeur  %(k3)s  de "vale" non admise (valeur test interne)
 """),
 
-52: _("""
- cable : occurence 1 : le mot cle "section" est obligatoire.
+52 : _("""
+ cable :
+ occurence 1
+ le mot cle "section" est obligatoire.
 """),
 
-53: _("""
- coque : occurence 1 : le mot cle "epais" est obligatoire.
+53 : _("""
+ coque :
+ occurence 1
+ le mot cle "epais" est obligatoire.
 """),
 
-54: _("""
+54 : _("""
  coque : avec un excentrement, la prise en compte des termes d'inertie de rotation est obligatoire.
 """),
 
-55: _("""
+55 : _("""
  absence d elements discrets dans le modele
 """),
 
-56: _("""
+56 : _("""
  impossibilite, la maille  %(k1)s  doit etre une maille de type  %(k2)s , et elle est de type :  %(k3)s  pour la caracteristique  %(k4)s 
 """),
 
-57: _("""
- orientation : occurence 1 : le mot cle "vale" est obligatoire
+57 : _("""
+ orientation :
+ occurence 1
+ le mot cle "vale" est obligatoire
 """),
 
-58: _("""
- orientation : occurence 1 : le mot cle "cara" est obligatoire
+58 : _("""
+ orientation :
+ occurence 1
+ le mot cle "cara" est obligatoire
 """),
 
-59: _("""
- orientation : occurence  %(k1)s  : presence de "vale" obligatoire si "cara" est present
+59 : _("""
+ orientation :
+ occurence  %(k1)s
+ presence de "vale" obligatoire si "cara" est present
 """),
 
-60: _("""
- orientation : occurence  %(k1)s  : val :  %(k2)s  : nombre de valeurs entrees incorrect
+60 : _("""
+ orientation :
+ occurence  %(k1)s
+ val :  %(k2)s
+ nombre de valeurs entrees incorrect
 """),
 
-61: _("""
- defi_arc: le rayon de courbure doit etre positif.
+61 : _("""
+ defi_arc:
+ le rayon de courbure doit etre positif.
 """),
 
-62: _("""
- defi_arc: il faut 3 reels pour definir le centre de courbure.
+62 : _("""
+ defi_arc:
+ il faut 3 reels pour definir le centre de courbure.
 """),
 
-63: _("""
- defi_arc: il faut 3 reels pour definir le point de concours des tangentes.
+63 : _("""
+ defi_arc:
+ il faut 3 reels pour definir le point de concours des tangentes.
 """),
 
-64: _("""
- defi_arc: le coefficient de flexibilite doit etre positif.
+64 : _("""
+ defi_arc:
+ le coefficient de flexibilite doit etre positif.
 """),
 
-65: _("""
+65 : _("""
  defi_arc: l'indice de contrainte doit etre positif.
 """),
 
-66: _("""
- poutre : occurence  %(k1)s  : section "cercle", vari_sect "constant" la caracteristique "r" est obligatoire
+66 : _("""
+ poutre :
+ occurence  %(k1)s
+ section "cercle", vari_sect "constant" la caracteristique "r" est obligatoire
 """),
 
-67: _("""
+67 : _("""
  erreur de programmation
 """),
 
-68: _("""
- mauvais calcul de nbgrel
-"""),
-
-69: _("""
+69 : _("""
  occurence  %(k1)s de "barre" (maille  %(k2)s ) ecrasement d un type de geometrie de section par un autre
 """),
 
-70: _("""
- barre : maille  %(k1)s  : section generale : il manque la caracteristique  %(k2)s 
+70 : _("""
+ barre :
+ maille  %(k1)s
+ section generale
+ il manque la caracteristique  %(k2)s 
 """),
 
-71: _("""
- barre : maille  %(k1)s  : section generale : la valeur de  %(k2)s  doit etre  strictement positive.
+71 : _("""
+ barre :
+ maille  %(k1)s
+ section generale
+ la valeur de  %(k2)s  doit etre  strictement positive.
 """),
 
-72: _("""
- barre : maille  %(k1)s  : section rectangle : il manque  la caracteristique  %(k2)s 
+72 : _("""
+ barre :
+ maille  %(k1)s
+ section rectangle
+ il manque  la caracteristique  %(k2)s 
 """),
 
-73: _("""
- barre : maille  %(k1)s  : section rectangle : la valeur de  %(k2)s  doit etre  strictement positive.
+73 : _("""
+ barre :
+ maille  %(k1)s
+ section rectangle
+ la valeur de  %(k2)s  doit etre  strictement positive.
 """),
 
-74: _("""
- barre : maille  %(k1)s  : section cercle : il manque  la caracteristique  %(k2)s 
+74 : _("""
+ barre :
+ maille  %(k1)s
+ section cercle
+ il manque  la caracteristique  %(k2)s 
 """),
 
-75: _("""
- barre : maille  %(k1)s  : section cercle : la valeur de  %(k2)s  doit etre  strictement positive.
+75 : _("""
+ barre :
+ maille  %(k1)s
+ section cercle
+ la valeur de  %(k2)s  doit etre  strictement positive.
 """),
 
-76: _("""
- barre : maille  %(k1)s  : section cercle : la valeur de  %(k2)s  doit etre positive.
+76 : _("""
+ barre :
+ maille  %(k1)s
+ section cercle
+ la valeur de  %(k2)s  doit etre positive.
 """),
 
-77: _("""
- poutre : maille  %(k1)s  : section generale : il manque la caracteristique  %(k2)s 
+77 : _("""
+ poutre :
+ maille  %(k1)s
+ section generale
+ il manque la caracteristique  %(k2)s 
 """),
 
-78: _("""
- poutre : maille  %(k1)s  : section generale : element poutre de timoshenko : il manque la caracteristique  %(k2)s 
+78 : _("""
+ poutre :
+ maille  %(k1)s
+ section generale
+ element poutre de timoshenko : il manque la caracteristique  %(k2)s 
 """),
 
-79: _("""
- poutre : maille  %(k1)s  : section rectangle : il manque  la caracteristique  %(k2)s 
+79 : _("""
+ poutre :
+ maille  %(k1)s
+ section rectangle
+ il manque  la caracteristique  %(k2)s 
 """),
 
-80: _("""
- poutre : maille  %(k1)s  : section cercle :  il manque  la caracteristique  %(k2)s 
+80 : _("""
+ poutre :
+ maille  %(k1)s
+ section cercle
+ il manque la caracteristique  %(k2)s 
 """),
 
-81: _("""
- poutre : maille  %(k1)s  : section generale : la valeur de  %(k2)s  doit etre  strictement positive
+81 : _("""
+ poutre :
+ maille  %(k1)s
+ section générale
+ la valeur de  %(k2)s  doit etre strictement positive
 """),
 
-82: _("""
- poutre : maille  %(k1)s  : section rectangle : la valeur de  %(k2)s  doit etre strictement positive
+82 : _("""
+ poutre :
+ maille  %(k1)s
+ section rectangle
+ la valeur de  %(k2)s  doit etre strictement positive
 """),
 
-83: _("""
- poutre : maille  %(k1)s  : section cercle :  la valeur de  %(k2)s  doit etre strictement positive
+83 : _("""
+ poutre :
+ maille  %(k1)s
+ section cercle
+ la valeur de  %(k2)s  doit etre strictement positive
 """),
 
-84: _("""
- poutre : maille  %(k1)s  : section rectangle : la valeur de  %(k2)s  ne doit pas depasser  %(k3)s /2  !!! m enfin quoi !
+84 : _("""
+ poutre :
+ maille  %(k1)s
+ section rectangle
+ la valeur de  %(k2)s  ne doit pas dépasser  %(k3)s /2
 """),
 
-85: _("""
- poutre : maille  %(k1)s  : section cercle :  la valeur de  %(k2)s  ne doit pas depasser celle de  %(k3)s  !!! aarg !!
+85 : _("""
+ poutre :
+ maille  %(k1)s
+ section cercle
+ la valeur de  %(k2)s  ne doit pas dépasser celle de  %(k3)s
 """),
 
-86: _("""
- section circulaire/rectangulaire non supportee par poutre/tuyau/faisceau
+86 : _("""
+ section CIRCULAIRE/RECTANGULAIRE non supportée par POUTRE/TUYAU/FAISCEAU
 """),
 
-87: _("""
- orientation : pas d affectation d orientation du type  %(k1)s  sur la maille  %(k2)s  qui n est pas un seg2
+87 : _("""
+ orientation :
+ pas d'affectation d'orientation du type  %(k1)s  sur la maille  %(k2)s
+ qui n est pas un SEG2
 """),
 
-88: _("""
- orientation : pas d affectation d orientation du type  %(k1)s sur la maille  %(k2)s  de longueur nulle
+88 : _("""
+ orientation :
+ pas d'affectation d'orientation du type  %(k1)s sur la maille  %(k2)s
+ de longueur nulle
 """),
 
-89: _("""
- orientation : pas d affectation d orientation du type  %(k1)s  sur le noeud  %(k2)s 
+89 : _("""
+ orientation :
+ pas d affectation d orientation du type  %(k1)s  sur le noeud  %(k2)s 
 """),
 
-90: _("""
- orientation : pas d affectation d orientation du type  %(k1)s  sur la maille  %(k2)s  de longueur non nulle
+90 : _("""
+ orientation :
+ pas d'affectation d'orientation du type  %(k1)s  sur la maille  %(k2)s
+ de longueur non nulle
 """),
 
-91: _("""
- orientation : pas d affectation d orientation du type  %(k1)s  sur la maille  %(k2)s  qui n est pas seg2
+91 : _("""
+ orientation :
+ pas d affectation d orientation du type  %(k1)s  sur la maille  %(k2)s
+ qui n est pas SEG2
 """),
 
-92: _("""
- occurence  %(k1)s de "poutre" (maille  %(k2)s ) ecrasement d un type de variation de section par un autre
+92 : _("""
+ occurence  %(k1)s de "poutre" (maille  %(k2)s )
+ écrasement d'un type de variation de section par un autre
 """),
 
-93: _("""
- occurence  %(k1)s de "poutre" (maille  %(k2)s ) ecrasement d un type de geometrie de section par un autre
+93 : _("""
+ occurence  %(k1)s de "poutre" (maille  %(k2)s )
+ écrasement d'un type de géometrie de section par un autre
 """),
 
-94: _("""
- le descripteur_grandeur des deplacements ne tient pas sur dix entiers codes
+94 : _("""
+ le DESCRIPTEUR_GRANDEUR des déplacements ne tient pas sur dix entiers codés
 """),
 
-95: _("""
+95 : _("""
  la carte :  %(k1)s  n'existe pas
 """),
 
-
-
-
-
-
-
-
-97: _("""
- tous les coef. sont nuls
+97 : _("""
+ tous les coefficients sont nuls
 """),
 
-98: _("""
- type de coef. inconnu: %(k1)s 
+98 : _("""
+ type de coefficient inconnu: %(k1)s 
 """),
 
-99: _("""
- les coef. de l equation sont tres petits ou tres grands et on ne peut la normaliser.
-"""),
 }
index 7fb84d2225b3dfa5f926da56dfae57d44f6d35f3..8b6798d1ce9878418f45067beb407f75da5fa4ec 100644 (file)
@@ -1,27 +1,32 @@
-#@ MODIF modelisa2 Messages  DATE 30/04/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF modelisa2 Messages  DATE 01/04/2008   AUTEUR ABBAS M.ABBAS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2006  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.        
+# 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.
 # ======================================================================
 
 def _(x) : return x
 
 cata_msg={
 
+1: _("""
+ Formule interdite pour définir ALPHA(TEMP) : la fonction soit etre tabulée.
+ Utilisez CALC_FONC_INTERP
+"""),
+
 2: _("""
  resserrer le mot cle precision pour le materiau elas_fo
 """),
@@ -34,15 +39,20 @@ cata_msg={
  calcul de la tension le long du cable no %(k1)s  : la longueur sur laquelle on doit prendre en compte les pertes de tension par recul de l ancrage est egale a la longueur du cable
 """),
 
+5: _("""
+ Formule interdite pour le calcul d'intégrale : la fonction soit etre tabulée.
+ Utilisez CALC_FONC_INTERP pour tabuler la formule %(k1)s
+"""),
 
 9: _("""
-  %(k1)s  n'existe pas
+  Erreur utilisateur :
+    l'objet %(k1)s n'existe pas. On ne peut pas continuer.
+  Risques & conseils :
+    Dans ce contexte, les seuls solveurs autorisés sont MULT_FRONT et LDLT
 """),
 
-
-
 13: _("""
- probleme pour recuperer une grandeur dans la table "cara_geom"
+ problème pour recuperer une grandeur dans la table "cara_geom"
 """),
 
 14: _("""
@@ -50,15 +60,15 @@ cata_msg={
 """),
 
 15: _("""
- groupe de maille group_ma_1= %(k1)s  inexistant dans le maillage  %(k2)s 
+ groupe de maille group_ma_1= %(k1)s  inexistant dans le maillage  %(k2)s
 """),
 
 16: _("""
- groupe de maille group_ma_2= %(k1)s  inexistant dans le maillage  %(k2)s 
+ groupe de maille group_ma_2= %(k1)s  inexistant dans le maillage  %(k2)s
 """),
 
 17: _("""
- les groupes de mailles group_ma_1= %(k1)s  et group_ma_2= %(k2)s  ont des cardinaux differents
+ les groupes de mailles group_ma_1= %(k1)s  et group_ma_2= %(k2)s  ont des cardinaux différents
 """),
 
 18: _("""
@@ -129,39 +139,37 @@ cata_msg={
 
 
 37: _("""
- valeur inattendue:  %(k1)s 
+ valeur inattendue:  %(k1)s
 """),
 
 38: _("""
  les courbures ky et kz ne sont pas prises en compte pour les poutres courbes
 """),
 
-39: _("""
- pb pour recuperer "epais" pour la maille  %(k1)s 
-"""),
+42: _("""
+Erreur Utilisateur :
+ Le paramètre ALPHA (dilatation) du matériau est une fonction de la température.
+ Cette fonction (%(k1)s) n'est définie que par 1 point.
+ TEMP_DEF_ALPHA et TEMP_REF ne sont pas identiques.
+ On ne peut pas faire le changement de variable TEMP_DEF_ALPHA -> TEMP_REF.
+ On s'arrete donc.
 
-40: _("""
- excentricite non traitee
+Risque & Conseil:
+ Il faut définir la fonction ALPHA avec plus d'1 point.
 """),
 
-41: _("""
- pb pour recuperer "excent" pour la maille  %(k1)s 
-"""),
 
-42: _("""
- melange mailles quadratiques avec quad8: liaison supprimee sur noeud milieu quad8
-"""),
 
 43: _("""
  deux mailles poi1 interdit
 """),
 
 44: _("""
- le mot clef evol_ther est incompatible avec: %(k1)s 
+ le mot clef evol_ther est incompatible avec: %(k1)s
 """),
 
 45: _("""
- aucun noeud ne connait le ddl:  %(k1)s 
+ aucun noeud ne connait le ddl:  %(k1)s
 """),
 
 46: _("""
@@ -169,7 +177,7 @@ cata_msg={
 """),
 
 47: _("""
- fonree non traite  %(k1)s 
+ fonree non traite  %(k1)s
 """),
 
 48: _("""
@@ -177,11 +185,11 @@ cata_msg={
 """),
 
 49: _("""
- les caracteristiques materielles n ont pas ete affectees a la maille no %(k1)s  appartenant au cable no %(k2)s 
+ les caracteristiques materielles n ont pas ete affectees a la maille no %(k1)s  appartenant au cable no %(k2)s
 """),
 
 50: _("""
- des materiaux differents ont ete affectes aux mailles appartenant au cable no %(k1)s 
+ des materiaux differents ont ete affectes aux mailles appartenant au cable no %(k1)s
 """),
 
 51: _("""
@@ -209,28 +217,28 @@ cata_msg={
 """),
 
 57: _("""
- les caracteristiques geometriques n ont pas ete affectees a la maille no %(k1)s  appartenant au cable no %(k2)s 
+ les caracteristiques geometriques n ont pas ete affectees a la maille no %(k1)s  appartenant au cable no %(k2)s
 """),
 
 58: _("""
- l aire de la section droite n a pas ete affectee a la maille no %(k1)s  appartenant au cable no %(k2)s 
+ l aire de la section droite n a pas ete affectee a la maille no %(k1)s  appartenant au cable no %(k2)s
 """),
 
 59: _("""
- valeur invalide pour l aire de la section droite affectee a la maille no %(k1)s  appartenant au cable no %(k2)s 
+ valeur invalide pour l aire de la section droite affectee a la maille no %(k1)s  appartenant au cable no %(k2)s
 """),
 
 60: _("""
- des aires de section droite differentes ont ete affectees aux mailles appartenant au cable no %(k1)s 
+ des aires de section droite differentes ont ete affectees aux mailles appartenant au cable no %(k1)s
 """),
 
 61: _("""
 Le mot-clef facteur < %(k1)s > est inconnu. Contactez les développeurs.
-Note DVP: erreur de cohérence fortran/catalogue. 
+Note DVP: erreur de cohérence fortran/catalogue.
 """),
 
 62: _("""
-  numero d"occurence negatif 
+  numero d"occurence negatif
 """),
 
 63: _("""
@@ -298,15 +306,15 @@ Note DVP: erreur de coh
 """),
 
 79: _("""
- probleme pour recuperer le "cdg_x" dans  %(k1)s 
+ probleme pour recuperer le "cdg_x" dans  %(k1)s
 """),
 
 80: _("""
- probleme pour recuperer le "cdg_y" dans  %(k1)s 
+ probleme pour recuperer le "cdg_y" dans  %(k1)s
 """),
 
 81: _("""
- probleme pour recuperer le "cdg_z" dans  %(k1)s 
+ probleme pour recuperer le "cdg_z" dans  %(k1)s
 """),
 
 82: _("""
@@ -318,7 +326,7 @@ Note DVP: erreur de coh
 """),
 
 84: _("""
- il faut que le cham_no dont les termes  servent de seconds membres a la relation lineaire a ecrire ait ete defini. 
+ il faut que le cham_no dont les termes  servent de seconds membres a la relation lineaire a ecrire ait ete defini.
 """),
 
 85: _("""
@@ -363,11 +371,11 @@ Les mots-cles admissibles pour definir la seconde liste de noeuds sous le mot-fa
 """),
 
 95: _("""
- le groupe  %(k1)s ne fait pas partie du maillage :  %(k2)s 
+ le groupe  %(k1)s ne fait pas partie du maillage :  %(k2)s
 """),
 
 96: _("""
-  %(k1)s   %(k2)s ne fait pas partie du maillage :  %(k3)s 
+  %(k1)s   %(k2)s ne fait pas partie du maillage :  %(k3)s
 """),
 
 98: _("""
@@ -375,6 +383,6 @@ Les mots-cles admissibles pour definir la seconde liste de noeuds sous le mot-fa
 """),
 
 99: _("""
- il faut que le cham_no dont les termes  servent de coefficients a la relation lineaire a ecrire ait ete defini. 
+ il faut que le cham_no dont les termes  servent de coefficients a la relation lineaire a ecrire ait ete defini.
 """),
 }
index 8ca4433203517a8e4c292bfbf1cb36cbb84a14f5..9295490d42ec8d735bdce74da0af46a7404d72c5 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF modelisa3 Messages  DATE 30/04/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF modelisa3 Messages  DATE 01/04/2008   AUTEUR ABBAS M.ABBAS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -70,7 +70,12 @@ cata_msg={
 """),
 
 12: _("""
-  les listes de noeuds a mettre de vis-a-vis n'ont pas le meme nombre de noeuds
+  Mot clé LIAISON_GROUP : les mots clés %(k1)s et %(k2)s à mettre 
+  en vis-à-vis n'ont pas le meme nombre de noeuds.
+  
+   - Nombre de noeuds présent sous le mot clé %(k1)s: %(i1)d
+   - Nombre de noeuds présent sous le mot clé %(k2)s: %(i2)d
+
 """),
 
 13: _("""
@@ -155,17 +160,6 @@ Suggestion :
  l'angle forme par le vecteur normal courant a 1 face et le vecteur normal moyenne, au noeud  %(k1)s , est superieur a 10 degres et vaut  %(k2)s  degres.
 """),
 
-32: _("""
- que des sections circulaires !
-"""),
-
-33: _("""
- pb pour recuperer "r1" pour la maille  %(k1)s 
-"""),
-
-34: _("""
- pb pour recuperer "r2" pour la maille  %(k1)s 
-"""),
 
 35: _("""
  probleme pour determiner le rang de la composante <n> de la grandeur <sief_r>
index 338a6043e700c03f38cd72470dd83c7165f57799..3a840edbb7bc46b49324f4f2a5548e227cbc5832 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF modelisa4 Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF modelisa4 Messages  DATE 06/05/2008   AUTEUR KHAM M.KHAM 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
+1 : _("""
  arret sur erreurs
 """),
 
-2: _("""
- type inconnu verifier le call a charci
-"""),
 
-3: _("""
- ddl inconnu
-"""),
 
-4: _("""
+
+
+
+
+
+
+
+
+4 : _("""
   -> Le modèle contient un mélange de modélisations planes et volumiques
      ou bien il contient des sous-structures statiques.
 
@@ -43,20 +45,20 @@ cata_msg={
      Parfois, cela empeche de faire le "bon choix".
 """),
 
-5: _("""
+5 : _("""
  mot-cle  %(k1)s  interdit en 2d
 """),
 
-6: _("""
+6 : _("""
   -> Phase de vérification du maillage : présence de noeuds orphelins.
      Les noeuds orphelins sont des noeuds qui n'appartiennent à aucune maille.
 """),
 
-7: _("""
+7 : _("""
  certains noeuds connectent plus de 200 mailles. ces mailles ne sont pas verifiees.
 """),
 
-8: _("""
+8 : _("""
   -> Phase de vérification du maillage : présence de mailles doubles (ou triples, ...)
      Les mailles multiples sont des mailles de noms différents qui ont la meme connectivité
      (elles s'appuient sur les memes noeuds).
@@ -68,7 +70,7 @@ cata_msg={
      Sur ce maillage, il est imprudent d'affecter des quantités avec le mot clé TOUT='OUI'.
 """),
 
-9: _("""
+9 : _("""
   -> Phase de vérification du maillage : présence de mailles aplaties.
 
   -> Risque & Conseil :
@@ -76,7 +78,7 @@ cata_msg={
      problèmes de convergence et nuire à la qualité des résultats.
 """),
 
-10: _("""
+10 : _("""
  - chckma phase de verification du maillage - mailles degenerees
 """),
 
@@ -85,127 +87,124 @@ cata_msg={
 
 
 
-12: _("""
- type de chgt de repere non prevu.
-"""),
-
-13: _("""
+13 : _("""
  seule la grandeur neut_f est traitee actuellement.
 """),
 
-14: _("""
+14 : _("""
  les champs de cham_f et cham_para n'ont pas la meme discretisation noeu/cart/elga/elno/elem. 
 """),
 
-15: _("""
- eval. carte: pas encore
-"""),
 
-16: _("""
+
+
+
+
+16 : _("""
  avec "noeud_cmp", il faut donner un nom et une composante.
 """),
 
-17: _("""
+17 : _("""
  pour recuperer le champ de geometrie, il faut utiliser le mot cle maillage
 """),
 
-18: _("""
+18 : _("""
  le mot-cle type_champ =  %(k1)s n'est pas coherent avec le type du champ extrait :  %(k2)s _ %(k3)s 
 """),
 
-19: _("""
+19 : _("""
  on ne peut extraire qu'1 numero d'ordre. vous en avez specifie plusieurs.
 """),
 
-20: _("""
+20 : _("""
  on est dans le cas d'un contact point-point et le vecteur vect_norm_escl n'a pas ete renseigne
 """),
 
-21: _("""
+21 : _("""
  impossibilite, la maille  %(k1)s  doit etre une maille de peau de type "quad" ou "tria" car on est en 3d et elle est de type :  %(k2)s 
 """),
 
-22: _("""
+22 : _("""
  impossibilite,  soit la maille  %(k1)s  doit etre une  maille de peau de type "seg" car on est  en 2d et elle est de type :  %(k2)s , soit il faut renseigner "vect_pou_z" en 3d
 """),
 
-23: _("""
+23 : _("""
  impossibilite, la maille  %(k1)s  doit etre une maille de peau de type "seg" car on est en 2d et elle est de type :  %(k2)s 
 """),
 
-24: _("""
+24 : _("""
  arret sur erreur(s), normale non sortante
 """),
 
-25: _("""
+25 : _("""
   la liste : %(k1)s  a concatener avec la liste  %(k2)s  doit exister 
 """),
 
-26: _("""
+26 : _("""
   on ne peut pas affecter la liste de longueur nulle %(k1)s  a la liste  %(k2)s  qui n'existe pas
 """),
 
-27: _("""
+27 : _("""
  la concatenation de listes de type  %(k1)s  n'est pas encore prevue.
 """),
 
-28: _("""
+28 : _("""
  <coefal> le numero de correlation et/ou le type de reseau passes dans le fichier de commande ne  sont pas coherents avec le fichier .70
 """),
 
-29: _("""
+29 : _("""
  <coefam> le numero de correlation et/ou le type de reseau passes dans le fichier de commande ne  sont pas coherents avec le fichier .70
 """),
 
-30: _("""
+30 : _("""
  <coefam> ce type de reseau n est pas encore implante dans le code
 """),
 
-31: _("""
+31 : _("""
  <coefra> le numero de correlation et/ou le type de reseau passes dans le fichier de commande ne  sont pas coherents avec le fichier .71
 """),
 
-32: _("""
+32 : _("""
  <coefra> ce type de reseau n est pas encore implante dans le code
 """),
 
-33: _("""
+33 : _("""
  <coefrl> le numero de correlation et/ou le type de reseau passes dans le fichier de commande ne  sont pas coherents avec le fichier .71
 """),
 
-34: _("""
+34 : _("""
  les ligrels a concatener ne referencent pas le meme maillage.
 """),
 
-35: _("""
+35 : _("""
  jacobien negatif
 """),
 
-36: _("""
- scal nul
+36 : _("""
+ La normale de la maille %(k1)s est nulle
 """),
 
-37: _("""
+37 : _("""
  on essaie de creer ou d'agrandir le ligrel de charge avec un nombre de termes negatif ou nul
 """),
 
-38: _("""
- depassement tableau (dvlp)
-"""),
 
-39: _("""
+
+
+
+39 : _("""
  probleme rencontre lors de l interpolation d une des deformees modales
 """),
 
-40: _("""
+40 : _("""
  probleme rencontre lors de l interpolation d une des fonctions
 """),
 
-41: _("""
+41 : _("""
  probleme dans le cas 3d ou les noeuds sont alignes, la distance separant 2 noeuds non-identiques de la liste est trop petite
 """),
 
-42: _("""
+42 : _("""
   -> Mélange de mailles quadratiques avec des QUAD8. Aster supprime la liaison
      sur le noeud milieu des QUAD8
   -> Risque & Conseil :
@@ -214,231 +213,223 @@ cata_msg={
      d'utiliser des éléments linéaires.
 """),
 
-43: _("""
+43 : _("""
  incoherence car aucun noeud n'a de ddl drz et la routine traite le cas 2d ou il y a au-moins un ddl drz
 """),
 
-44: _("""
+44 : _("""
  incoherence car aucun noeud n'a de ddl derotation drx et dry et drz et la routine traite le cas 3d ou il y a au-moins un noeud ayant ces 3 ddls
 """),
 
-45: _("""
- erreur sur nmaco
-"""),
 
-46: _("""
- erreur sur nnoco
-"""),
 
-47: _("""
- erreur sur nnoqua
-"""),
 
-48: _("""
+
+
+
+
+
+48 : _("""
  aucun noeud n est affecte par liaison_unilaterale
 """),
 
-49: _("""
- depassement capacite (dvlp)
-"""),
 
-50: _("""
+
+
+
+
+
+50 : _("""
  la maille :  %(k1)s  n'est pas affectee par un element fini.
 """),
 
-51: _("""
- incoherence .flii pour ligrel  %(k1)s 
-"""),
 
-52: _("""
- mot cle inconnu (ni maille, ni group_ma
-"""),
 
-53: _("""
+
+
+
+53 : _("""
  le noeud d application de l excitation n est pas un noeud du maillage.
 """),
 
-54: _("""
+54 : _("""
  le noeud d application de l excitation ne doit pas etre situe au bord du domaine de definition du maillage.
 """),
 
-55: _("""
+55 : _("""
  la fenetre excitee deborde du domaine de definition du maillage.
 """),
 
-56: _("""
+56 : _("""
  la demi-fenetre excitee en amont du noeud central d application n est pas definie.
 """),
 
-57: _("""
+57 : _("""
  la demi-fenetre excitee en amont du noeud central d application deborde du domaine de definition du maillage.
 """),
 
-58: _("""
+58 : _("""
  les demi-fenetres excitees en aval et en amont du noeud central d application ne sont pas raccordees.
 """),
 
-59: _("""
+59 : _("""
  la demi-fenetre excitee en aval du noeud central d application n est pas definie.
 """),
 
-60: _("""
+60 : _("""
  la demi-fenetre excitee en aval du noeud central d application deborde du domaine de definition du maillage.
 """),
 
-61: _("""
+61 : _("""
  les fonctions interpretees doivent etre tabulees auparavant 
 """),
 
-62: _("""
+62 : _("""
  nappe interdite pour definir le flux
 """),
 
-63: _("""
+63 : _("""
   on deborde a gauche
 """),
 
-64: _("""
+64 : _("""
  prolongement gauche inconnu
 """),
 
-65: _("""
+65 : _("""
   on deborde a droite
 """),
 
-66: _("""
+66 : _("""
  prolongement droite inconnu
 """),
 
-67: _("""
+67 : _("""
   on est en dehors des bornes
 """),
 
-68: _("""
+68 : _("""
  les mailles de type  %(k1)s ne sont pas traitees pour la selection des noeuds
 """),
 
-69: _("""
+69 : _("""
  on ne sait plus trouver de noms.
 """),
 
-70: _("""
+70 : _("""
  erreur : deux noeuds du cable sont confondus on ne peut pas definir le cylindre.
 """),
 
-71: _("""
+71 : _("""
  immersion du cable no %(k1)s  dans la structure beton : le noeud  %(k2)s  se trouve a l'exterieur de la structure
 """),
 
-72: _("""
+72 : _("""
  maille degeneree
 """),
 
-73: _("""
- .nommai du maillage inexistant :  %(k1)s 
-"""),
 
-74: _("""
- .groupema du maillage inexistant :  %(k1)s 
-"""),
 
-75: _("""
+
+
+
+75 : _("""
   le determinant de la matrice a inverser est nul
 """),
 
-76: _("""
+76 : _("""
  le vecteur normal est dans le plan tangent
 """),
 
-77: _("""
+77 : _("""
   %(k1)s  mot cle lu " %(k2)s " incompatible avec " %(k3)s "
 """),
 
-78: _("""
+78 : _("""
  lecture 1 :erreur de lecture pour %(k1)s 
 """),
 
-79: _("""
+79 : _("""
  lecture 1 :item > 24 car  %(k1)s 
 """),
 
-80: _("""
+80 : _("""
   %(k1)s  le groupe  %(k2)s  est vide
 """),
 
-81: _("""
+81 : _("""
   %(k1)s  erreur de syntaxe : mot cle " %(k2)s " non reconnu
 """),
 
-82: _("""
+82 : _("""
   %(k1)s  mot cle " %(k2)s " ignore
 """),
 
-83: _("""
le ligret  %(k1)s  n"existe pas.
+83 : _("""
 le vecteur est perpendiculaire à la poutre.
 """),
 
-84: _("""
- erreur sur ipma
+84 : _("""
+  La poutre présente une ou plusieurs branches: cas non permis.
+  Essayez de créer des groupes de mailles différents pour
+  chaque branche et de les orienter indépendemment.
 """),
 
-85: _("""
- erreur sur ipno
-"""),
 
-86: _("""
- erreur sur ipnoqu
-"""),
 
-87: _("""
- mauvaise sortie de palima
-"""),
 
-88: _("""
- pb lecture courbe de wohler
-"""),
 
-89: _("""
+89 : _("""
  mot cle wohler non trouve
 """),
 
-90: _("""
- pb lecture courbe de manson_coffin
-"""),
 
-91: _("""
+
+
+91 : _("""
  mot cle manson_coffin non trouve
 """),
 
-92: _("""
+92 : _("""
  lecture 1 : ligne lue trop longue : %(k1)s 
 """),
 
-93: _("""
-  %(k1)s  il manque le mot fin !??!
+93 : _("""
+  Probleme lors de la lecture du fichier maillage
+  numéro de la derniere ligne traitée : %(i1)d 
+  
+  -> Risque & Conseil :
+  Verifiez si le mot clé FIN est présent à la fin du fichier.
 """),
 
-94: _("""
- lecture 1 : erreur de syntaxe detectee
+94 : _("""
+  Probleme lors de la lecture du fichier maillage
+  Le fichier à lire est vide.
+  
+  -> Risque & Conseil :
+  Vérifiez la valeur mise derrière le mot clé UNITE et 
+  que cette valeur par défaut correspond au type "mail" dans ASTK
 """),
 
-95: _("""
- inom a une valeur inattendue :  %(k1)s 
-"""),
 
-96: _("""
- "nblige=" nb lignes entete
-"""),
 
-97: _("""
+
+
+
+
+
+
+
+
+97 : _("""
  le nom du groupe  %(k1)s  est tronque a 8 caracteres
 """),
 
-98: _("""
+98 : _("""
  il faut un nom apres "nom="
 """),
 
-99: _("""
- lirtet: sortie anormale
-"""),
+
+
+
 }
index 736f1313ae1041266c09ffa62e4a77125f5f66f2..eec2ec43bcecf057140c7457320da1aad53ea096 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF modelisa5 Messages  DATE 30/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF modelisa5 Messages  DATE 10/12/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
+1 : _("""
  erreur fortran de dimensionnement de tableau (nbmmai>nbmmax)
 """),
 
-2: _("""
+2 : _("""
  lecture 1 : il manque les coordonnees !
 """),
 
-3: _("""
+3 : _("""
  lecture 1 : il manque les mailles !
 """),
 
-4: _("""
+4 : _("""
  transcodage : le noeud  %(k1)s  declare dans la connectivite de la maille  %(k2)s  n existe pas dans les coordonnees
 """),
 
-5: _("""
+5 : _("""
  transcodage : le noeud  %(k1)s  declare dans le group_no:  %(k2)s  n'existe pas dans les coordonnees
 """),
 
-6: _("""
+6 : _("""
  le noeud :  %(k1)s  est en double dans le group_no:  %(k2)s . on elimine les doublons
 """),
 
-7: _("""
+7 : _("""
  transcodage : la maille  %(k1)s  declare dans le group_ma:  %(k2)s  n'existe pas dans les connectivitees
 """),
 
-8: _("""
+8 : _("""
  la maille :  %(k1)s  est en double dans le group_ma:  %(k2)s . on elimine les doublons
 """),
 
-9: _("""
+9 : _("""
  transcodage : une incoherence a ete detectee entre les declarations de noms de noeuds ou de mailles lors du transcodage des objets groupes et connectivitees
 """),
 
-10: _("""
- med: erreur eflfde numero  %(k1)s 
-"""),
-
-11: _("""
- med: erreur effien numero  %(k1)s 
-"""),
-
-12: _("""
- probleme a la lecture de la description
-"""),
-
-13: _("""
- impossible de retrouver l'adresse associee au groupe  %(k1)s 
-"""),
-
-14: _("""
- MED : Erreur lors de l'appel à EFNEMA, code retour = %(k1)s
-
-  -> Risque & Conseil :
-    Vérifier l'intégrité du fichier MED avec medconforme/mdump.
-    Si le maillage a été produit par un code externe, vérifier que les
-    noms de maillage, de groupes, de familles ne contiennent pas de
-    blancs à la fin.
-    Dans Salomé, on peut renommer ces entités et supprimer les espaces
-    invalides.
-"""),
-
-15: _("""
- il manque les coordonnees !
-"""),
-
-16: _("""
- mailles  %(k1)s 
-"""),
-
-17: _("""
- il manque les mailles !
-"""),
-
-18: _("""
- med: erreur efngro numero  %(k1)s 
-"""),
-
-19: _("""
- med: erreur efnatt numero  %(k1)s 
-"""),
-
-20: _("""
- med: erreur effami numero  %(k1)s 
-"""),
-
-23: _("""
- erreur numero de groupe = 0
-"""),
-
-24: _("""
- med: erreur efnfam numero  %(k1)s 
-"""),
-
-25: _("""
- aucune famille dans ce fichier med
-"""),
-
-26: _("""
- med: erreur effaml numero  %(k1)s 
-"""),
-
-27: _("""
- les mailles  %(k1)s ne sont pas nommees dans le fichier med
-"""),
-
-28: _("""
- med: erreur efconl numero  %(k1)s 
-"""),
-
-29: _("""
- med: erreur efcool numero  %(k1)s 
-"""),
-
-30: _("""
- incoherence catalogue - fortran (nbtyp fortran different de nbtyp catalogue)
-"""),
-
-31: _("""
- incoherence catalogue - fortran (nomtyp fortran different de nomtyp catalogue)
-"""),
-
-32: _("""
+32 : _("""
  il faut fournir des mailles
 """),
 
-33: _("""
+33 : _("""
  on attend 1 et 1 seule maille
 """),
 
-34: _("""
+34 : _("""
  on n'a pas trouve la maille
 """),
 
-35: _("""
+35 : _("""
  que des mailles de type "seg"
 """),
 
-36: _("""
+36 : _("""
  un group_ma n'a pas de nom, suppression de ce groupe.
 """),
 
-37: _("""
+37 : _("""
  un group_no n'a pas de nom, suppression de ce groupe.
 """),
 
-38: _("""
+38 : _("""
  type d extraction interdit (dvlp)
 """),
 
-39: _("""
- projection quadratique interdite avec mailles linearisees
-"""),
-
-40: _("""
+40 : _("""
  absence de convergence j
 """),
 
-41: _("""
+41 : _("""
  absence de convergence i
 """),
 
-42: _("""
+42 : _("""
  pas de convergence
 """),
 
-43: _("""
+43 : _("""
  erreur programmeur. type de maille inconnu
 """),
 
-44: _("""
+44 : _("""
  parametre beta non trouve
 """),
 
-45: _("""
+45 : _("""
  parametre lambda non trouve
 """),
 
-
-
-
-
-
-
-
-47: _("""
+47 : _("""
  parametre affinite non trouve
 """),
 
-48: _("""
+48 : _("""
   option calcul de l absc_curv sur  un group_ma non implantee. 
 """),
 
-49: _("""
+49 : _("""
   -> La phase de vérification du maillage a été volontairement désactivée.
 
   -> Risque & Conseil :
@@ -225,19 +126,19 @@ cata_msg={
      ne seront pas détectées. Cela pourra nuire à la qualité des résultats.
 """),
 
-50: _("""
+50 : _("""
  la grandeur associee au mot cle:  %(k1)s  doit etre:  %(k2)s  mais elle est:  %(k3)s 
 """),
 
-51: _("""
+51 : _("""
  pour affecter une liste de modelisations, il faut qu'elles soient de meme dimension topologique.
 """),
 
-52: _("""
+52 : _("""
  aucune maille n a ete affectee par des elements finis pour le maillage  %(k1)s 
 """),
 
-53: _("""
+53 : _("""
   -> Le maillage est 3D mais les éléments du modèle sont 2D.
 
   -> Risque & Conseil :
@@ -247,187 +148,181 @@ cata_msg={
      modélisation souhaitée dans la commande AFFE_MODELE.
 """),
 
-54: _("""
+54 : _("""
  il est interdit d'avoir ,pour un modele donne, a la fois des elements discrets 2d et 3d .
 """),
 
-55: _("""
+55 : _("""
  verif : 2 arguments maxi
 """),
 
-56: _("""
+56 : _("""
  il manque le mot cle facteurpoutre.
 """),
 
-57: _("""
+57 : _("""
  erreur(s) rencontree(s) lors de la verification des affectations.
 """),
 
-#_VIDE 58
-
-59: _("""
+59 : _("""
  une erreur d affectation a ete detectee : certaines mailles demandees possedent un type element incompatible avec les donnees a affecter
 """),
 
-60: _("""
+60 : _("""
  des poutres ne sont pas affectees
 """),
 
-61: _("""
+61 : _("""
  des barres ne sont pas affectees
 """),
 
-62: _("""
+62 : _("""
  des cables ne sont pas affectes
 """),
 
-63: _("""
+63 : _("""
  le parametre "rho" n'est pas defini pour toutes les couches.
 """),
 
-64: _("""
+64 : _("""
  un seul elas svp
 """),
 
-65: _("""
+65 : _("""
  <faisceau_trans> deux zones d excitation du fluide ont meme nom
 """),
 
-66: _("""
+66 : _("""
  spec_exci_point : si inte_spec alors autant d arguments pour nature, angl et noeud
 """),
 
-67: _("""
+67 : _("""
  spec_exci_point : si grappe_2 alors un seul noeud
 """),
 
-68: _("""
+68 : _("""
  spec_fonc_forme : le nombre de fonctions fournies doit etre egal a la dimension de la matrice interspectrale
 """),
 
-69: _("""
+69 : _("""
  spec_exci_point : le nombre d arguments pour nature, angl et noeud doit etre egal a la dimension de la matrice interspectrale
 """),
 
-70: _("""
+70 : _("""
  mauvaise definition de la plage  de frequence.
 """),
 
-71: _("""
+71 : _("""
  mauvaise definition de la plage de frequence. les modeles ne tolerent pas des valeurs negatives ou nulles.
 """),
 
-72: _("""
+72 : _("""
  le nombre de points pour la discr. freq. doit etre une puissance de 2.
 """),
 
-73: _("""
+73 : _("""
  les spectres de type "longueur de correlation"  ne peuvent etre combines avec des spectres d un autre type.
 """),
 
-74: _("""
+74 : _("""
  le spectre de nom  %(k1)s  est associe a la zone  %(k2)s  qui n existe pas dans le concept  %(k3)s 
 """),
 
-75: _("""
+75 : _("""
  le spectre de nom  %(k1)s  est associe a la zone de nom  %(k2)s 
 """),
 
-76: _("""
+76 : _("""
  deux spectres sont identiques 
 """),
 
-77: _("""
+77 : _("""
  les spectres de noms  %(k1)s  et  %(k2)s  sont associes au meme profil de vitesse, de nom  %(k3)s 
 """),
 
-78: _("""
+78 : _("""
  pas le bon numero de mode
 """),
 
-79: _("""
+79 : _("""
  le calcul de tous les interspectres de reponse modale n est pas possible car seuls les autospectres d excitation ont ete calcules.
 """),
 
-80: _("""
+80 : _("""
  la composante selectionnee pour la restitution en base physique des interspectres est differente de celle choisie pour le couplage fluide-structure.
 """),
 
-81: _("""
+81 : _("""
  la tabl_intsp de reponse modale ne contient que des autospectres. le calcul demande n est donc pas realisable.
 """),
 
-82: _("""
+82 : _("""
  le champ des contraintes modales doit etre calcule par <calc_elem> option <sipo_elno_depl>.
 """),
 
-83: _("""
+83 : _("""
  mot-cle <defi_cable>, occurence no  %(k1)s , operande <noeud_ancrage> : il faut definir 2 noeuds d'ancrage
 """),
 
-84: _("""
+84 : _("""
  mot-cle <defi_cable>, occurence no  %(k1)s , operande <group_no_ancrage> : il faut definir 2 group_no d'ancrage
 """),
 
-85: _("""
+85 : _("""
  mot-cle <defi_cable>, occurence no  %(k1)s , operande <noeud_ancrage> : les 2 noeuds d'ancrage doivent etre distincts
 """),
 
-86: _("""
+86 : _("""
  mot-cle <defi_cable>, occurence no  %(k1)s , operande <group_no_ancrage> : les 2 group_no d'ancrage doivent etre distincts
 """),
 
-87: _("""
+87 : _("""
  mot-cle <defi_cable>, occurence no  %(k1)s , operande type ancrage : les 2 extremites sont passives -> armature passive
 """),
 
-88: _("""
+88 : _("""
  mot-cle <defi_cable>, occurence no  %(k1)s , operande type ancrage : les 2 extremites sont passives et la tension que vous voulezimposer est non-nulle : impossible !
 """),
 
-89: _("""
+89 : _("""
  la carte des caracteristiques materielles des elements n existe pas. il faut prealablement affecter ces caracteristiques en utilisant la commande <affe_materiau>
 """),
 
-90: _("""
+90 : _("""
  la carte des caracteristiques geometriques des elements de barre de section generale n existe pas. il faut prealablement affecter ces caracteristiques en utilisant la commande <affe_cara_elem>
 """),
 
-91: _("""
+91 : _("""
  probleme pour determiner le rang de la composante <a1> de la grandeur <cagnba>
 """),
 
-92: _("""
+92 : _("""
  probleme sur une relation : les coefficients sont trop petits
 """),
 
-
-
-
-
-
-94: _("""
+94 : _("""
  impossibilite, la maille  %(k1)s  doit etre une maille de peau, i.e. de type "quad" ou "tria" en 3d ou de type "seg" en 2d, et elle est de type :  %(k2)s 
 """),
 
-95: _("""
+95 : _("""
  vous avez utilise le mot cle orie_peau_2d alors que le probleme est 3d. utilisez orie_peau_3d
 """),
 
-96: _("""
+96 : _("""
  vous avez utilise le mot cle orie_peau_3d alors que le probleme est 2d. utilisez orie_peau_2d
 """),
 
-97: _("""
+97 : _("""
  erreur donnees : le noeud  %(k1)s  n'existe pas
 """),
 
-98: _("""
+98 : _("""
  impossibilite de melanger des "seg" et des "tria" ou "quad" !
 """),
 
-99: _("""
+99 : _("""
  impossibilité de vérifier l'orientation des mailles de bord : on trouve des groupes de mailles disjoints dans la liste de mailles de bords fournie.
  vérifier que les groupes de mailles de bord définis forment un ensemble connexe.
 """),
+
 }
index 84f310bb711a194e29c8d6b9e1cb2aba54a26a28..92d453cc649397f38d7a0f4608cbd626ddee9125 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF modelisa6 Messages  DATE 30/04/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF modelisa6 Messages  DATE 08/04/2008   AUTEUR MEUNIER S.MEUNIER 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- probleme d'orientation: aucune maille ne touche le noeud indique.
+1 : _("""
+ problème d'orientation: aucune maille ne touche le noeud indiqué
 """),
 
-2: _("""
- certaines mailles n'ont pas pu etre reorientees. l'ensemble des mailles n'est pas connexe.
+2 : _("""
+ certaines mailles n'ont pas pu être réorientées. l'ensemble des mailles n'est pas connexe
 """),
 
-3: _("""
- on ne trouve pas de noeud assez pres du noeud  %(k1)s 
+3 : _("""
+ on ne trouve pas de noeud assez près du noeud  %(k1)s 
 """),
 
-4: _("""
-  erreurs dans les donnees
+4 : _("""
+  erreurs dans les données
 """),
 
-5: _("""
- extraction de plus de noeuds que n"en contient la maille
+5 : _("""
+ extraction de plus de noeuds que n'en contient la maille
 """),
 
-6: _("""
-  nombre de noeuds negatif
+6 : _("""
+  nombre de noeuds négatif
 """),
 
-7: _("""
- nombre de noeuds sommets non prevu
+7 : _("""
+ nombre de noeuds sommets non prévu
 """),
 
-8: _("""
-  on est sur 2 mailles orthgonales
+8 : _("""
+  on est sur 2 mailles orthogonales
 """),
 
-9: _("""
- type de maille inconnue
+9 : _("""
+ le type de maille est inconnu
 """),
 
-10: _("""
+10 : _("""
  la maille  %(k1)s  ne fait pas partie du maillage  %(k2)s 
 """),
 
-11: _("""
- pref_maille est trop long, pref_nume est trop grand.
+11 : _("""
+ PREF_MAILLE est trop long, PREF_NUME est trop grand
 """),
 
-12: _("""
pref_maille est trop long
+12 : _("""
PREF_MAILLE est trop long
 """),
 
-13: _("""
+13 : _("""
  sous  %(k1)s  : (  %(k2)s  le groupe  %(k3)s ne fait pas partie du maillage :  %(k4)s 
 """),
 
-14: _("""
- sous  %(k1)s  : (  %(k2)s  arret sur erreur(s) utilisateur.
+14 : _("""
+ sous  %(k1)s  : (  %(k2)s  arrêt sur erreur(s) utilisateur.
 """),
 
-15: _("""
+15 : _("""
  sous  %(k1)s  : (  %(k2)s  : la maille  %(k3)s ne fait pas partie du maillage :  %(k4)s 
 """),
 
-16: _("""
+16 : _("""
  le noeuds :  %(k1)s  ne fait pas partie du maillage
 """),
 
-17: _("""
- la maille  %(k1)s  du group_ma  %(k2)s donne apres le mot cle  %(k3)s n'a pas un type geometrique autorise.
+17 : _("""
+ la maille  %(k1)s  du group_ma  %(k2)s donne apres le mot cle  %(k3)s n'a pas un type géométrique autorisé
 """),
 
-18: _("""
- la maille  %(k1)s donne apres le mot cle  %(k2)s n'a pas un type geometrique autorise.
+18 : _("""
+ la maille  %(k1)s donné après le mot clé  %(k2)s n'a pas un type géométrique autorisé
 """),
 
-19: _("""
-  mot cle non admis : %(k1)s  les mots-cles admissibles sont :  %(k2)s  ou  %(k3)s  ou  %(k4)s  ou  %(k5)s  ou  %(k6)s  ou  %(k7)s  ou  %(k8)s ou  %(k9)s 
+19 : _("""
+  mot cle non admis : %(k1)s  les mots-clés admissibles sont :  %(k2)s  ou  %(k3)s  ou  %(k4)s  ou  %(k5)s  ou  %(k6)s  ou  %(k7)s  ou  %(k8)s ou  %(k9)s 
 """),
 
-20: _("""
- ce type de maille n"est pas encore traite :  %(k1)s 
+20 : _("""
+ ce type de maille n'est pas encore traité :  %(k1)s 
 """),
 
-21: _("""
- le nombre toal de noeuds est /= de la somme des noeuds sommets,arretes et interieurs
+21 : _("""
+ le nombre total de noeuds est /= de la somme des noeuds sommets, arêtes et intérieurs
 """),
 
-22: _("""
+22 : _("""
  les 2 listes %(k1)s  et  %(k2)s  ne sont pas de meme longueur
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-26: _("""
- affe_fibre pour " %(k1)s ": il y a  %(k2)s  valeurs pour "vale", ce devrait etre un multiple de 3
+26 : _("""
+ AFFE_FIBRE pour " %(k1)s ": il y a  %(k2)s  valeurs pour "VALE", ce devrait être un multiple de 3
 """),
 
-27: _("""
- dans le maillage " %(k1)s " la maille " %(k2)s " est de type " %(k3)s " (ni tria3 ni quad4)
+27 : _("""
+ dans le maillage " %(k1)s " la maille " %(k2)s " est de type " %(k3)s " (ni TRIA3 ni QUAD4)
 """),
 
-28: _("""
- erreur nbzoco/symetrique
+30 : _("""
+ l'indicateur :  %(k1)s de position des multiplicateurs de lagrange associés à une relation lineaire n'est pas correct.
 """),
 
-29: _("""
- erreur nbsuco/symetrique
-"""),
-
-30: _("""
- l'indicateur :  %(k1)s de position des multiplicateurs de lagrange associes a une relation lineaire n'est pas correct.
-"""),
-
-
-33: _("""
- il faut coef_group ou fonc_group
+33 : _("""
+ il faut COEF_GROUP ou FONC_GROUP
 """),
 
-34: _("""
- un element n'est ni tria3 ni tria6 ni quad4 ni quad8
+34 : _("""
+ un element n'est ni TRIA3 ni TRIA6 ni QUAD4 ni QUAD8
 """),
 
-35: _("""
- un element n'est ni tria3 ni tria6 ni tria7 niquad4 ni quad8 ni quad9
+35 : _("""
+ un element n'est ni TRIA3 ni TRIA6 ni TRIA7 ni QUAD4 ni QUAD8 ni QUAD9
 """),
 
-36: _("""
-  le noeud  %(k1)s  doit appartenir a une seule maille
+36 : _("""
+  le noeud  %(k1)s  doit appartenir à une seule maille
 """),
 
-37: _("""
- la maille a laquelle appartient le noeud  %(k1)s  doit etre de type seg
+37 : _("""
+ la maille à laquelle appartient le noeud  %(k1)s  doit etre de type SEG
 """),
 
-38: _("""
+38 : _("""
  on ne trouve pas les angles nautiques pour le tuyau
 """),
 
-39: _("""
+39 : _("""
  option  %(k1)s  invalide
 """),
 
-40: _("""
- il faut indiquer le mot-cle 'noeud_2' ou 'group_no_2' apres le mot-facteur  %(k1)s  pour l'option '3d_pou'.
+40 : _("""
+ il faut indiquer le mot-cle 'NOEUD_2' ou 'GROUP_NO_2' après le mot-facteur  %(k1)s  pour l'option '3D_POU'.
 """),
 
-41: _("""
+41 : _("""
  il ne faut donner qu'un seul noeud de poutre a raccorder au massif.
 """),
 
-42: _("""
- il ne faut donner qu'un un seul group_no a un noeud a raccorder au massif.
+42 : _("""
+ il ne faut donner qu'un un seul GROUP_NO à un noeud à raccorder au massif.
 """),
 
-43: _("""
- il ne faut donner q"un  seul noeud dans le group_no :  %(k1)s 
+43 : _("""
+ il ne faut donner q'un seul noeud dans le GROUP_NO :  %(k1)s 
 """),
 
-44: _("""
- impossibilite,le noeud  %(k1)s porte le ddl de rotation  %(k2)s 
+44 : _("""
+ impossibilité, le noeud  %(k1)s porte le ddl de rotation  %(k2)s 
 """),
 
-45: _("""
- impossibilite,le noeud poutre  %(k1)s  devrait porter le ddl  %(k2)s 
+45 : _("""
+ impossibilité, le noeud poutre  %(k1)s  devrait porter le ddl  %(k2)s 
 """),
 
-46: _("""
- impossibilite, la surface de raccord du massif est nulle 
+46 : _("""
+ impossibilité, la surface de raccord du massif est nulle 
 """),
 
-47: _("""
- il faut donner un cara_elem pour recuperer les caracteristiques de tuyau.
+47 : _("""
+ il faut donner un CARA_ELEM pour récupérer les caractéristiques de tuyau.
 """),
 
-48: _("""
- il faut indiquer le mot-cle 'noeud_2' ou 'group_no_2' apres le mot-facteur  %(k1)s  pour l'option  %(k2)s 
+48 : _("""
+ il faut indiquer le mot-cle 'NOEUD_2' ou 'GROUP_NO_2' après le mot-facteur  %(k1)s  pour l'option  %(k2)s 
 """),
 
-49: _("""
- il ne faut donner qu'un seul noeud de poutre a raccorder a la coque.
+49 : _("""
+ il ne faut donner qu'un seul noeud de poutre à raccorder à la coque.
 """),
 
-50: _("""
- il ne faut donner qu'un un seul group_no a un noeud a raccorder a la coque.
+50 : _("""
+ il ne faut donner qu'un seul GROUP_NO à un noeud à raccorder à la coque.
 """),
 
-51: _("""
- il faut donner un vecteur orientant l'axe de la poutre sous le mot-cle "axe_poutre".
+51 : _("""
+ il faut donner un vecteur orientant l'axe de la poutre sous le mot-cle "AXE_POUTRE".
 """),
 
-52: _("""
- il faut donner un vecteur non nul orientant l'axe de la poutre sous le mot-cle "axe_poutre".
+52 : _("""
+ il faut donner un vecteur non nul orientant l'axe de la poutre sous le mot-cle "AXE_POUTRE".
 """),
 
-53: _("""
- il faut donner un cara_elem pour recuperer l'epaisseur des elements de bord.
+53 : _("""
+ il faut donner un CARA_ELEM pour récupérer l'épaisseur des éléments de bord.
 """),
 
-54: _("""
- impossibilite,le noeud  %(k1)s ne porte pas le ddl de rotation  %(k2)s 
+54 : _("""
+ impossibilité, le noeud  %(k1)s ne porte pas le ddl de rotation  %(k2)s 
 """),
 
-55: _("""
- impossibilite, la surface de raccord de la coque est nulle 
+55 : _("""
+ impossibilité, la surface de raccord de la coque est nulle 
 """),
 
-56: _("""
- plusieurs comportements de type  %(k1)s  ont ete trouves
+56 : _("""
+ plusieurs comportements de type  %(k1)s  ont ete trouvés
 """),
 
-57: _("""
- comportement de type  %(k1)s  non trouve
+57 : _("""
+ comportement de type  %(k1)s  non trouvé
 """),
 
-58: _("""
- nappe interdite pour les caracteristiques materiau
+58 : _("""
+ nappe interdite pour les caractéristiques matériau
 """),
 
-59: _("""
- deformation plastique cumulee p < 0
+59 : _("""
+ déformation plastique cumulée p < 0
 """),
 
-60: _("""
-  prolongement a droite exclu pour la fonction r(p)
+60 : _("""
+  Le prolongement à droite étant exclu pour la fonction %(k1)s, 
+  il n'est pas possible d'extrapoler la fonction R(p) en p = %(r1)f.
 """),
 
-61: _("""
- on deborde a droite redefinissez vos nappes alpha - moment
-"""),
-
-62: _("""
+62 : _("""
  la limite d elasticite est deja renseignee dans elas_meta
 """),
 
-63: _("""
+63 : _("""
  objet  %(k1)s .materiau.nomrc non trouve 
 """),
 
-64: _("""
- type sd non traite:  %(k1)s 
-"""),
-
-
-
-
-
-
-66: _("""
- fonction constante interdite pour la courbe mz=f(drz)
-"""),
-
-67: _("""
- fonction nappe interdite pour la courbe mz=f(drz)
-"""),
-
-68: _("""
- concept de type :  %(k1)s  interdit pour la courbe de traction
-"""),
-
-69: _("""
- le mot cle: %(k1)s  est identique (sur ses 8 1ers caracteres) a un autre.
+64 : _("""
+ type sd non traité:  %(k1)s 
 """),
 
-70: _("""
- erreur lors de la definition de la courbe de traction, il manque le parametre : %(k1)s 
+69 : _("""
+ le mot cle: %(k1)s  est identique (sur ses 8 1ers caracteres) à un autre.
 """),
 
-71: _("""
- erreur lors de la definition de la courbe de traction : %(k1)s  nb de points < 2  ! 
+7: _("""
+ erreur lors de la définition de la courbe de traction, il manque le paramètre : %(k1)s 
 """),
 
-72: _("""
- erreur lors de la definition de la courbe de traction : %(k1)s  nb de points < 1  ! 
+7: _("""
+ erreur lors de la définition de la courbe de traction : %(k1)s  nb de points < 2  ! 
 """),
 
-73: _("""
- erreurs rencontrees.
+7: _("""
+ erreur lors de la définition de la courbe de traction : %(k1)s  nb de points < 1  ! 
 """),
 
-74: _("""
- erreur lors de la definition de la nappe des courbes de traction: nb de points < 2 ! 
+7: _("""
+ erreurs rencontrées.
 """),
 
-75: _("""
- erreur lors de la definition de la nappe des courbes de traction:  %(k1)s  nb de points < 1 ! 
+7: _("""
+ erreur lors de la définition de la nappe des courbes de traction: nb de points < 2 ! 
 """),
 
-76: _("""
 erreur lors de la definition dela courbe de traction: fonction ou nappe ! 
+7: _("""
erreur lors de la définition de la nappe des courbes de traction:  %(k1)s  nb de points < 1 ! 
 """),
 
-77: _("""
erreur lors de la definition de la courbe rela_mz : nb de points < 2  ! 
+7: _("""
 erreur lors de la définition de la courbe de traction: fonction ou nappe ! 
 """),
 
-78: _("""
- abscisses non croissants.
+80 : _("""
+ comportement TRACTION non trouve
 """),
 
-79: _("""
-  erreur lors de la definition dela courbe rela_mz: fonction ! 
+81 : _("""
+ fonction SIGM non trouvée
 """),
 
-80: _("""
- comportement traction non trouve
+8: _("""
+ comportement meta_traction non trouvé
 """),
 
-81: _("""
- fonction sigm non trouvee
+8: _("""
+ fonction SIGM_F1 non trouvée
 """),
 
-82: _("""
comportement meta_traction non trouve
+8: _("""
fonction SIGM_F2 non trouvée
 """),
 
-83: _("""
- fonction sigm_f1 non trouvee
+8: _("""
+ fonction SIGM_F3 non trouvée
 """),
 
-84: _("""
- fonction sigm_f2 non trouvee
+8: _("""
+ fonction SIGM_F4 non trouvée
 """),
 
-85: _("""
- fonction sigm_f3 non trouvee
+8: _("""
+ fonction SIGM_C non trouvée
 """),
 
-86: _("""
- fonction sigm_f4 non trouvee
-"""),
-
-87: _("""
- fonction sigm_c non trouvee
-"""),
-
-88: _("""
+88 : _("""
  fonction constante interdite pour la courbe de traction %(k1)s 
 """),
 
-89: _("""
- prolongement a gauche exclu pour la courbe  %(k1)s 
+89 : _("""
+ prolongement à gauche EXCLU pour la courbe  %(k1)s 
 """),
 
-90: _("""
- prolongement a droite exclu pour la courbe  %(k1)s 
+90 : _("""
+ prolongement à droite EXCLU pour la courbe  %(k1)s 
 """),
 
-91: _("""
+91 : _("""
  concept de type :  %(k1)s  interdit pour la courbe de traction %(k2)s 
 """),
 
-92: _("""
- materiau : %(k1)s  non trouve
+92 : _("""
+ materiau : %(k1)s  non trouvé
 """),
 
-93: _("""
-  les fonctions complexes ne sont pas implementees
+93 : _("""
+  les fonctions complexes ne sont pas implementées
 """),
 
-94: _("""
+94 : _("""
  nb param. > 30 materiau  %(k1)s 
 """),
 
-95: _("""
+95 : _("""
  mauvaise definition de la plage de frequence, aucun mode pris en compte
 """),
 
-96: _("""
- les mailles imprimees ci-dessus n'appartiennent pas au modele et pourtant elles ont ete affectees dans le mot-cle facteur : %(k1)s 
+96 : _("""
+ les mailles imprimées ci-dessus n'appartiennent pas au modèle et pourtant elles ont ete affectées dans le mot-clé facteur : %(k1)s 
 """),
 
-97: _("""
- freq init plus grande que freq fin
+97 : _("""
+ FREQ INIT plus grande que FREQ FIN
 """),
 
-98: _("""
- freq init necessaire avec chamno
+98 : _("""
+ FREQ INIT nécessaire avec CHAMNO
 """),
 
-99: _("""
- freq fin necessaire avec chamno
+99 : _("""
+ FREQ FIN nécessaire avec CHAMNO
 """),
+
 }
index a9b7a04bd3730c6c00bafe023713be7158b824a8..57cb0dd05eab58b818a8f39d84e2a3092f885bbe 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF modelisa7 Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF modelisa7 Messages  DATE 08/04/2008   AUTEUR MEUNIER S.MEUNIER 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -31,15 +31,16 @@ cata_msg={
 """),
 
 3: _("""
-  la method est de au-yang. on a  besoin du  vecteur de l axe vect_x et de l origine  orig_axe du cylindre
+  la methode est de AU-YANG
+  on a besoin du  vecteur de l'axe VECT_X et de l'origine ORIG_AXE du cylindre
 """),
 
 4: _("""
- le type de spectre est incompatible avec la configuration etudiee
+ le type de spectre est incompatible avec la configuration etudiée
 """),
 
 5: _("""
- probleme rencontre lors de l interpolation d un interspectre
+ probleme rencontré lors de l'interpolation d'un interspectre
 """),
 
 6: _("""
@@ -47,15 +48,19 @@ cata_msg={
 """),
 
 7: _("""
- l integrale double pour le calcul de la longueur de correlation ne converge pas.
+ l'intégrale double pour le calcul de la longueur de corrélation ne converge pas.
+ JM,IM  = %(i1)s , %(i2)s
+ valeur finale = %(r1)f
+ valeur au pas précédent = %(r2)f
+ erreur relative = %(r3)f
 """),
 
 8: _("""
- la liste de noms doit etre de meme longueur que la liste de group_ma
+ la liste de noms doit etre de meme longueur que la liste de GROUP_MA
 """),
 
 9: _("""
- le group_no :  %(k1)s  existe deja, on ne le cree donc pas.
+ le GROUP_NO :  %(k1)s  existe deja, on ne le crée donc pas.
 """),
 
 10: _("""
@@ -66,48 +71,36 @@ cata_msg={
  le groupe  %(k1)s  existe deja
 """),
 
-12: _("""
- erreur programmeur sur dimension de manoco
-"""),
-
-13: _("""
- erreur programmeur sur dimension de nomaco
-"""),
-
-14: _("""
- erreur programmeur sur dimension de mamaco
-"""),
-
 15: _("""
faisceau_axial : il y a plus de types de grilles que de grilles
FAISCEAU_AXIAL : il y a plus de types de grilles que de grilles
 """),
 
 16: _("""
faisceau_axial : il faut autant d'arguments pour les operandes <type_grille> et <coor_grille>
FAISCEAU_AXIAL : il faut autant d'arguments pour les operandes <TYPE_GRILLE> et <COOR_GRILLE>
 """),
 
 17: _("""
faisceau_axial, operande <type_grille> : detection d'une valeur illicite
FAISCEAU_AXIAL, operande <TYPE_GRILLE> : detection d'une valeur illicite
 """),
 
 18: _("""
- faisceau_axial : il faut autant d'arguments pour les operandes <long_typg>, <larg_typg>, <epai_typg>, <rugo_typg>, <coef_trai_typg> et <coef_dpor_typg>
+ faisceau_axial : il faut autant d'arguments pour les operandes <LONG_TYPG>, <LARG_TYPG>, <EPAI_TYPG>, <RUGO_TYPG>, <COEF_TRAI_TYPG> et <COEF_DPOR_TYPG>
 """),
 
 19: _("""
- <faisceau_trans> le mot cle <couplage> doit etre renseigne au moins une fois sous l une des occurence du mot-cle facteur <faisceau_trans>
+ <FAISCEAU_TRANS> le mot cle <COUPLAGE> doit etre renseigné au moins une fois sous l'une des occurence du mot-cle facteur <FAISCEAU_TRANS>
 """),
 
 20: _("""
- <faisceau_trans> : si couplage <type_pas> , <type_reseau> et <pas> mots-cles obligatoires dans au moins l une des occurences du mot-cle facteur
+ <FAISCEAU_TRANS> : si couplage <TYPE_PAS> , <TYPE_RESEAU> et <PAS> mots-cles obligatoires dans au moins l une des occurences du mot-cle facteur
 """),
 
 21: _("""
faisceau_trans : si pas de couplage <coef_mass_ajou> mot-cle obligatoire dans au moins l une des occurences du mot cle facteur <faisceau_trans>
FAISCEAU_TRANS : si pas de couplage <coef_mass_ajou> mot-cle obligatoire dans au moins l une des occurences du mot cle facteur <faisceau_trans>
 """),
 
 22: _("""
- <faisceau_trans> : le mot-cle <cara_elem> doit etre renseigne au moins une fois dans l une des occurences du mot-cle facteur <faisceau_trans>
+ <FAISCEAU_TRANS> : le mot-cle <CARA_ELEM> doit etre renseigne au moins une fois dans l une des occurences du mot-cle facteur <faisceau_trans>
 """),
 
 23: _("""
@@ -315,11 +308,12 @@ cata_msg={
 """),
 
 74: _("""
- les discretisations des fonctions de forme ne sont pas coherentes. les nombres de points sur 0,l et sur l,2l doivent etre communs a toutes les fonctions.
+ les discrétisations des fonctions de forme ne sont pas cohérentes
+ les nombres de points sur 0,l et sur l,2l doivent etre communs à toutes les fonctions.
 """),
 
 75: _("""
- le group_no  %(k1)s  ne fait pas partie du maillage :  %(k2)s
+ le GROUP_NO  %(k1)s  ne fait pas partie du maillage :  %(k2)s
 """),
 
 76: _("""
@@ -327,38 +321,32 @@ cata_msg={
 """),
 
 77: _("""
- le group_ma  %(k1)s  ne fait pas partie du maillage :  %(k2)s
+ le GROUP_MA  %(k1)s  ne fait pas partie du maillage :  %(k2)s
 """),
 
-
-
-
-
-
-
-
 79: _("""
  le type  %(k1)s d'objets a verifier n'est pas correct : il ne peut etre egal qu'a group_no ou noeud ou group_ma ou maille
 """),
 
 80: _("""
- defaut de planeite.l angle entre les normales aux mailles: %(k1)s  et  %(k2)s  est superieur a angl_max.
+ défaut de planéité
+ l angle entre les normales aux mailles: %(k1)s  et  %(k2)s  est supérieur à ANGL_MAX.
 """),
 
 81: _("""
-  %(k1)s  un identificateur est attendu :                             " %(k2)s " n en est pas un
+  %(k1)s  un identificateur est attendu : " %(k2)s " n'en est pas un
 """),
 
 82: _("""
-  %(k1)s  un identificateur depasse 8 caracteres
+  %(k1)s  un identificateur depasse 8 caractères
 """),
 
 83: _("""
-  %(k1)s  le mot cle fin n est pas attendu
+  %(k1)s  le mot cle FIN n'est pas attendu
 """),
 
 84: _("""
-  %(k1)s  le mot cle finsf n est pas attendu
+  %(k1)s  le mot cle FINSF n est pas attendu
 """),
 
 85: _("""
@@ -366,11 +354,13 @@ cata_msg={
 """),
 
 86: _("""
- la maille de nom :  %(k1)s  n'est pas de type segment, elle ne sera pas affectee par  %(k2)s
+ la maille de nom :  %(k1)s  n'est pas de type SEGMENT
+ elle ne sera pas affectée par  %(k2)s
 """),
 
 87: _("""
- la maille de nom :  %(k1)s  n'est pas de type tria ou quad, elle ne sera pas affectee par  %(k2)s
+ la maille de nom :  %(k1)s  n'est pas de type TRIA ou QUAD
+ elle ne sera pas affectee par  %(k2)s
 """),
 
 88: _("""
@@ -379,40 +369,32 @@ cata_msg={
 """),
 
 89: _("""
- la maille de numero :  %(k1)s  n'est pas de type segment, elle ne sera pas affectee par  %(k2)s
+ la maille de numéro :  %(k1)s  n'est pas de type SEGMENT
+ elle ne sera pas affectée par  %(k2)s
 """),
 
 90: _("""
- la maille de numero :  %(k1)s  n'est pas de type tria ou quad, elle ne sera pas affectee par  %(k2)s
+ la maille de numéro :  %(k1)s  n'est pas de type TRIA ou QUAD
+ elle ne sera pas affectée par  %(k2)s
 """),
 
 91: _("""
- erreur dans les noms de maille du group_ma:  %(k1)s  du mot-cle facteur  %(k2)s  : aucune n'est du bon type
+ erreur dans les noms de maille du GROUP_MA:  %(k1)s  du mot-cle facteur  %(k2)s
+ aucune maille n'est du bon type
 """),
 
 92: _("""
- la maille de nom :  %(k1)s  n'est pas une maille 3d, elle ne sera pas affectee par  %(k2)s
+ la maille de nom :  %(k1)s  n'est pas une maille 3d, elle ne sera pas affectée par  %(k2)s
 """),
 
 93: _("""
- la maille de numero :  %(k1)s  n'est pas une maille 3d, elle ne sera pas affectee par  %(k2)s
-"""),
-
-94: _("""
- pb de statut des noeuds enrichis
-"""),
-
-95: _("""
- pb de groupe mailles enrichies
+ la maille de numéro :  %(k1)s  n'est pas une maille 3d, elle ne sera pas affectee par  %(k2)s
 """),
 
-
-
-
-
-
-98: _("""
- Erreur lors de la vérification des noms de groupes.
+97: _("""
+  -> Le group_ma %(k1)s du maillage %(k2)s se retrouve vide du fait
+     de l'élimination des mailles servant au collage.
+     Il n'est donc pas recréé dans le maillage assemblé.
 """),
 
 99: _("""
index 79fee17d66026b7136e279aac4443dda393352fd..abb83b1eee0b7262ab062ecc60ad5d67d03cf43f 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF modelisa8 Messages  DATE 29/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF modelisa8 Messages  DATE 17/12/2007   AUTEUR FLEJOU J-L.FLEJOU 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
+1 : _("""
  la section de la poutre est nulle
 """),
-2: _("""
+
+2 : _("""
  l'inertie de la poutre suivant OY est nulle
 """),
-3: _("""
+
+3 : _("""
  l'inertie de la poutre suivant OZ est nulle
 """),
-4: _("""
- La somme des aires des fibres est differente de l'aire de la section de la poutre.\n
- L'erreur relative est superieure a la precision definie par le mot cle PREC_AIRE :\n
-   - occurence de multifire : %(r1)d \n
-   - aire de la poutre      : %(r2)12.5E \n
-   - aire des fibres        : %(r3)12.5E \n
+
+4 : _("""
+ La somme des aires des fibres est differente de l'aire de la section de la poutre.
+
+ L'erreur relative est superieure a la precision definie par le mot cle PREC_AIRE :
+
+   - occurence de multifire : %(r1)d
+
+   - aire de la poutre      : %(r2)12.5E
+
+   - aire des fibres        : %(r3)12.5E
+
    - erreur relative        : %(r4)12.5E
 """),
-5: _("""
- La somme des moments d'inertie des fibres par rapport a l'axe 0Y est differente du moment de la poutre.\n
- L'erreur relative est superieure a la precision definie par le mot cle PREC_INERTIE :\n
-   - occurence de multifire : %(r1)d \n
-   - moment d'inertie de la poutre : %(r2)12.5E \n
-   - aire d'inertie des fibres     : %(r3)12.5E \n
+
+5 : _("""
+ La somme des moments d'inertie des fibres par rapport a l'axe 0Y est differente du moment de la poutre.
+
+ L'erreur relative est superieure a la precision definie par le mot cle PREC_INERTIE :
+
+   - occurence de multifire : %(r1)d
+
+   - moment d'inertie de la poutre : %(r2)12.5E
+
+   - aire d'inertie des fibres     : %(r3)12.5E
+
    - erreur relative               : %(r4)12.5E
 """),
-6: _("""
- La somme des moments d'inertie des fibres par rapport a l'axe 0Z est differente du moment de la poutre.\n
- L'erreur relative est superieure a la precision definie par le mot cle PREC_INERTIE :\n
-   - occurence de multifire : %(r1)d \n
-   - moment d'inertie de la poutre : %(r2)12.5E \n
-   - aire d'inertie des fibres     : %(r3)12.5E \n
+
+6 : _("""
+ La somme des moments d'inertie des fibres par rapport a l'axe 0Z est differente du moment de la poutre.
+
+ L'erreur relative est superieure a la precision definie par le mot cle PREC_INERTIE :
+
+   - occurence de multifire : %(r1)d
+
+   - moment d'inertie de la poutre : %(r2)12.5E
+
+   - aire d'inertie des fibres     : %(r3)12.5E
+
    - erreur relative               : %(r4)12.5E
 """),
 
-7: _("""
+7 : _("""
  actuellemnt on ne peut mettre que %(k1)s groupes de fibres sur un element
 """),
 
-8: _("""
+8 : _("""
  Le groupe de fibre %(k1)s n'a pas ete defini dans DEFI_GEOM_FIBRE
 """),
 
-9: _("""
+9 : _("""
  mot cle facteur  "defi_arc", occurence  %(i1)d , group_ma :  %(k1)s
  le centre n'est pas vraiment  le centre du cercle %(k2)s
 """),
 
-10: _("""
+10 : _("""
  mot cle facteur  "defi_arc", occurence  %(i1)d , group_ma :  %(k1)s
  le point de tangence n est pas equidistant des points extremites %(k2)s
 """),
 
-11: _("""
+11 : _("""
  mot cle facteur  "defi_arc", occurence  %(i1)d , maille :  %(k1)s
  le centre n'est pas vraiment  le centre du cercle %(k2)s
 """),
 
-
-
-
-
-
-13: _("""
+13 : _("""
   , maille :  %(i1)d la maille n'est pas situee  sur le cercle %(k1)s
 """),
 
-14: _("""
+14 : _("""
   , maille :  %(i1)d
  la maille n'est pas orientee  dans le meme sens que les autres sur le cercle %(k1)s
 """),
 
-
-
-
-
-
-16: _("""
+16 : _("""
   , maille :  %(i1)d pb produit scalaire %(k1)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-25: _("""
+25 : _("""
    l'ensemble des mailles comporte plus de 2 extremites %(k1)s
 """),
 
-26: _("""
+26 : _("""
  defi_arcl'ensemble des mailles  forme un cercle : a subdiviser  %(k1)s
 """),
 
-27: _("""
+27 : _("""
  le ddl  %(k1)s est interdit pour le noeud %(k2)s
 """),
 
-28: _("""
+28 : _("""
  affectation deja effectuee du ddl  %(k1)s du noeud %(k2)s   %(k3)s
 """),
 
-29: _("""
+29 : _("""
  nombre de cmps superieur au max nmaxcmp=  %(i1)d ncmp   =  %(i2)d
 """),
 
-30: _("""
+30 : _("""
  Erreur utilisateur:
     On cherche à imposer une condition aux limites sur le ddl %(k1)s
     du noeud %(k2)s.
@@ -174,136 +144,79 @@ cata_msg={
         - le noeud porte-t-il le ddl que l'on cherche à contraindre ?
 """),
 
-
-31: _("""
+31 : _("""
  nombre de motcles superieur au max nmaxocl=  %(i1)d nmocl  =  %(i2)d
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-34: _("""
+34 : _("""
  erreur dans les donneesle parametre  %(k1)s n existe pas dans la table  %(k2)s
 """),
 
-35: _("""
+35 : _("""
  erreur dans les donneespas de valeur pour le parametre  %(k1)s
 """),
 
-36: _("""
+36 : _("""
  erreur dans les donneesplusieurs valeurs pour le group_ma  %(k1)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-40: _("""
+40 : _("""
  la maille de nom :  %(k1)s n'est pas de type  %(k2)s  ou  %(k3)s
  elle ne sera pas affectee par  %(k4)s
 """),
 
-41: _("""
+41 : _("""
  mgrappmasse de la tige calculee:      %(r1)f
  masse de l'araignee calculee:  %(r2)f
  masse du crayon calculee:       %(r3)f
  masse grappe=tige+araignee+crayon:  %(r4)f
 """),
 
-42: _("""
+42 : _("""
  erreurs dans les donneeslongueur modelisee:  %(r1)f longueur donnee   :  %(r2)f
 """),
 
-43: _("""
+43 : _("""
 
  le nombre de ddl_1 figurant dans  la liaison n'est pas egal au nombre de coef_mult_1 :
    %(i1)d
    %(i2)d
 """),
 
-44: _("""
+44 : _("""
 
  le nombre de ddl_2 figurant dans  la liaison n'est pas egal au nombre de coef_mult_2 :
    %(i1)d
    %(i2)d
 """),
 
-
-
-
-
-
-
-
-46: _("""
+46 : _("""
 
  le nombre de ddls figurant dans  la liaison n'est pas egal au nombre de  coef_mult/coef_mult_fonc :
    %(i1)d
    %(i2)d
 """),
 
-47: _("""
+47 : _("""
 
  le nombre de ddls figurant dans  la liaison n'est pas egal au nombre de noeuds :
    %(i1)d
    %(i2)d
 """),
 
-
-
-
-
-
-
-
-49: _("""
+49 : _("""
 
  la direction normale est calculee sur la face esclave. il faut donner des mailles
   de facettes, mots cles :  %(k1)s %(k2)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-52: _("""
+52 : _("""
  les noeuds n1 et n2 sont confondus coor(n1): %(r1)f   %(r2)f coor(n2): %(r3)f
    %(r4)f
  norme   : %(r5)f
 """),
 
-53: _("""
+53 : _("""
  n3 colineaires coor(n1): %(r1)f   %(r2)f   %(r3)f coor(n2): %(r4)f   %(r5)f
    %(r6)f
  coor(n3): %(r7)f
@@ -312,207 +225,70 @@ cata_msg={
  norme   : %(r10)f
 """),
 
-
-
-
-
-
-
-
-55: _("""
- interpolation interditepour un resultat de type :  %(k1)s
+55 : _("""
+Interpolation interdite pour un résultat de type :  %(k1)s
+Seule l'extraction est possible : OPERATION='EXTR'
 """),
 
-56: _("""
+56 : _("""
  group_ma  %(k1)s mailles mal orientees  %(i1)d
 """),
 
-57: _("""
+57 : _("""
  maille mal orientee:  %(k1)s
 """),
 
-58: _("""
+58 : _("""
   composante existante sur  le noeud:  %(k1)s  composante:  %(k2)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-66: _("""
- le nom de groupe numero  %(i1)d  est en double. %(k1)s
- premier nom med  :  %(k2)s
- second nom med   :  %(k3)s
- nom aster retenu :  %(k4)s
-"""),
-
-67: _("""
-
- le numero de la maille de type  nomtyp(ityp)  est superieur au nombre total de  mailles :
- numero de la maille :  %(i1)d
- nombre de mailles   :  %(i2)d
-"""),
-
-68: _("""
+68 : _("""
   la maille  de num  %(i1)d  de nom  %(k1)s
 """),
 
-69: _("""
+69 : _("""
  le code:  %(i1)d   %(k1)s
 """),
 
-70: _("""
+70 : _("""
  pour l'occurence de affe   numero  %(i1)d
   on n'a pas pu affecter  %(i2)d
   mailles de dimension  %(i3)d
   (info=2 pour details)  %(i4)d
 """),
 
-71: _("""
+71 : _("""
  materiau non valide materiau :  %(k1)s
 """),
 
-72: _("""
+72 : _("""
  materiaux non valideson ne peut avoir a la fois  %(k1)s  et  %(k2)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-75: _("""
+75 : _("""
  erreur donneesle group_no n'existe pas  %(k1)s
 """),
 
-
-
-
-
-
-
-
-77: _("""
+77 : _("""
  conflit dans les vis_a_vis  des noeuds le noeud  %(k1)s
   est le vis-a-vis des noeuds  %(k2)s
   et  %(k3)s
 """),
 
-
-
-
-
-
-
-
-79: _("""
+79 : _("""
  conflit dans les vis-a-vis  generes successivement le noeud  %(k1)s
   a pour vis-a-vis le noeud %(k2)s
   et le noeud %(k3)s
 """),
 
-80: _("""
+80 : _("""
  conflit dans les vis-a-vis  generes successivement
  le noeud de la premiere liste %(k1)s
   n"est l"image d"aucun  %(k2)s
  noeud par la correspondance inverse %(k3)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-87: _("""
+87 : _("""
  conflit dans les vis-a-vis  generes successivement a partir des listes  %(k1)s
  et  %(k2)s
  le noeud  %(k3)s
@@ -520,7 +296,7 @@ cata_msg={
   et le noeud %(k5)s
 """),
 
-88: _("""
+88 : _("""
  conflit dans les vis-a-vis  generes successivement a partir des listes  %(k1)s
  et  %(k2)s
  le noeud de la premiere liste %(k3)s
@@ -528,66 +304,52 @@ cata_msg={
  noeud par la correspondance inverse %(k5)s
 """),
 
-89: _("""
+89 : _("""
  on ne trouve pas dans la paroi 2 de maille de type :  %(i1)d
 """),
 
-90: _("""
+90 : _("""
  conflit dans les vis_a_vis les mailles  %(k1)s  et  %(k2)s
   ont toutes les 2 comme vis_a_vis la maille %(k3)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-93: _("""
+93 : _("""
 
  evaluation impossible  d une fonction materiau - on deborde a gauche  pour la temperature
  temp : %(r1)f
 """),
 
-94: _("""
+94 : _("""
 
  evaluation impossible  d une fonction materiau - on deborde a droite  pour la temperature
  temp : %(r1)f
 """),
 
-95: _("""
+95 : _("""
  erreur dans les parametres valeur de typem :  %(k1)s
  les valeurs possibles sont no_maille,  no_noeud, nu_maille et nu_noeud %(k2)s
 """),
 
-96: _("""
+96 : _("""
  erreur dans les parametres pour l'indice :  %(i1)d
  la valeur de tymocl est :  %(k1)s
  les valeurs possibles sont maille et group_ma %(k2)s
  car type2 vaut  %(k3)s
 """),
 
-97: _("""
+97 : _("""
  erreur dans les parametres pour l'indice :  %(i1)d
  la valeur de tymocl est :  %(k1)s
  les valeurs possibles sont maille, noeud, %(k2)s
  group_ma,group_no et tout %(k3)s
 """),
 
-98: _("""
+98 : _("""
  il manque le parametre  %(k1)s dans la table %(k2)s
  .sa presence est indispensable a la  creation du champ nodal. %(k3)s
 """),
 
-99: _("""
+99 : _("""
  le parametre  %(k1)s ne doit pas apparaitre dans la  table %(k2)s
  pour la creation d'un champ nodal. %(k3)s
 """),
index 2ab1839fc53cbfbcb489df24a41daaaeca07f51a..f98e980c2d52c3b1c55f00326bbde9484a1f95f0 100644 (file)
@@ -1,80 +1,78 @@
-#@ MODIF modelisa9 Messages  DATE 04/06/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF modelisa9 Messages  DATE 15/04/2008   AUTEUR ZENTNER I.ZENTNER 
 # -*- coding: iso-8859-1 -*-
-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.
+# 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.        
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
-1: _("""
+cata_msg = {
+
+1 : _("""
  il manque le parametre  %(k1)s dans la table %(k2)s
  .sa presence est indispensable a la  creation d'un champ elementaire. %(k3)s
 """),
 
-2: _("""
+2 : _("""
  le parametre  %(k1)s de la table %(k2)s
  est incompatible a la  creation d'un  champ elementaire constant. %(k3)s
 """),
 
-3: _("""
+3 : _("""
  il manque le parametre  %(k1)s dans la table %(k2)s
  .sa presence est indispensable a la  creation d'un champ  %(k3)s
 """),
 
-4: _("""
+4 : _("""
  le parametre  %(k1)s de la table %(k2)s
  n'est valable que pour la  creation d'un champ  %(k3)s
 """),
 
-5: _("""
+5 : _("""
  incoherence entre maille et point dans la table %(k1)s maille : %(k2)s
  point  : %(i1)d
  nombre de points de la maille: %(i2)d
 """),
 
-6: _("""
+6 : _("""
  plusieurs affectations  pour le meme point d'une maille
   dans la table %(k1)s
  maille: %(k2)s
  point : %(i1)d
 """),
 
-7: _("""
+7 : _("""
  plusieurs affectations  pour le meme sous-point dans la table %(k1)s
  maille: %(k2)s
  point : %(i1)d
  sous-point : %(i2)d
 """),
 
-8: _("""
+8 : _("""
  plusieurs affectations  pour la meme maille dans la table %(k1)s
  maille: %(k2)s
 """),
 
-
-9: _("""
+9 : _("""
 Erreur utilisateur :
    Pour le materiau : %(k1), on cherche à redéfinir un mot clé déjà défini : %(k2)
 """),
 
-
-10: _("""
+10 : _("""
 Erreur utilisateur :
    Comportement 'HUJEUX'
    Non convergence pour le calcul de la loi de comportement (NB_ITER_MAX atteint).
@@ -84,13 +82,319 @@ Conseil :
 
 """),
 
-11: _("""
+11 : _("""
  mocle facteur non traite :mclf %(k1)s
 """),
 
+15 : _("""
+ pas de freq initiale definie : on prend la freq mini des modes calcules 
+   %(r1)f 
+"""),
+
+16 : _("""
+ pas de freq finale definie : on prend la freq max des modes calcules   %(r1)f 
+"""),
+
+17 : _("""
+ votre freq de coupure   %(r1)f 
+"""),
+
+18 : _("""
+ est inferieure a celle  du modele de turbulence adopte :  %(r1)f 
+"""),
+
+19 : _("""
+ on prend la votre. 
+"""),
+
+20 : _("""
+ votre freq de coupure :   %(r1)f 
+"""),
+
+21 : _("""
+ est superieure a celle  du modele de turbulence adopte :   %(r1)f 
+"""),
+
+22 : _("""
+ on prend celle du modele. 
+"""),
+
+23 : _("""
+ erreur dans les donnees mot cle facteur  %(k1)s  occurence  %(i1)d 
+"""),
+
+24 : _("""
+ le maillage est "plan" ou "z_cst"
+"""),
+
+25 : _("""
+ le maillage est "3d"
+"""),
+
+26 : _("""
+ il y a  %(i1)d  valeurs pour le mot cle  %(k1)s il en faut  %(i2)d 
+"""),
+
+27 : _("""
+ erreur dans les donnees mot cle facteur  %(k1)s  occurence  %(i1)d 
+ pour le mot cle  %(k2)s 
+  le noeud n'existe pas  %(k3)s 
+"""),
+
+28 : _("""
+ erreur dans les donnees mot cle facteur  %(k1)s  occurence  %(i1)d 
+ pour le mot cle  %(k2)s 
+  le GROUP_NO n'existe pas  %(k3)s 
+"""),
+
+29 : _("""
+ trop de noeuds dans le GROUP_NO mot cle facteur  %(k1)s  occurence  %(i1)d 
+   noeud utilise:  %(k2)s 
+"""),
+
+30 : _("""
+ Le MODELE doit etre de type mécanique.
+"""),
+
+31 : _("""
+ poutre : occurence %(i2)d : 
+ "cara" nombre de valeurs entrees:  %(i2)d 
+ "vale" nombre de valeurs entrees:  %(i3)d 
+ verifier vos donnees
+"""),
+
+32 : _("""
+ erreur dans les donnees mot cle facteur  %(k1)s  occurence  %(i1)d 
+"""),
+
+35 : _("""
+ il y a  %(i1)d  valeurs pour le mot cle  ANGL_NAUT il en faut  %(i2)d 
+"""),
+
+36 : _("""
+ erreur dans les donnees mot cle facteur  %(k1)s  occurence  %(i1)d 
+"""),
+
+39 : _("""
+ il y a  %(i1)d  valeurs pour le mot cle  %(k1)s il en faut  %(i2)d 
+"""),
+
+40 : _("""
+ erreur dans les donnees mot cle facteur  %(k1)s  occurence  %(i1)d 
+"""),
+
+43 : _("""
+ il y a  %(i1)d  valeurs pour le mot cle  %(k1)s il en faut  %(i2)d 
+"""),
+
+53 : _("""
+ l'identifiant d'une maille depasse les 8 caracteres autorises:
+   %(k1)s 
+ maille      : %(k2)s 
+ pref_maille : %(k3)s 
+"""),
+
+54 : _("""
+ l'utilisation de 'pref_nume' est recommandee.
+"""),
+
+55 : _("""
+ comportement : %(k1)s non trouve
+"""),
+
+56 : _("""
+ pour la maille  %(k1)s 
+"""),
+
+58 : _("""
+ Le matériau ne dépend pas des bons paramètres %(k1)s
+  depend de  %(k1)s il ne peut dependre que de %(k2)s 
+"""),
+
+59 : _("""
+ erreur lors de la definition de la courbe de traction : %(k1)s
+ le premier point de la courbe de traction %(k2)s a pour abscisse:  %(r1)f 
+"""),
+
+60 : _("""
+ erreur lors de la definition de la courbe de traction :%(k1)s
+ le premier point de la courbe de traction %(k2)s a pour ordonnee:  %(r1)f 
+"""),
+
+61 : _("""
+ Erreur lors de la definition de la courbe de traction : %(k1)s
+ la courbe de traction doit satisfaire les conditions suivantes :
+ - les abscisses (deformations) doivent etre strictement croissantes,
+ - la pente entre 2 points successifs doit etre inferieure a la pente
+   elastique (module d'Young) entre 0 et le premier point de la courbe.
+   
+ pente initiale (module d'Young) :   %(r1)f 
+ pente courante                  :   %(r2)f 
+ pour l'abscisse                 :   %(r3)f 
+
+"""),
+
+62 : _("""
+ Courbe de traction : %(k1)s points presques alignés. Risque de PB dans STAT_NON_LINE
+ en particulier en C_PLAN
+  pente initiale :     %(r1)f
+  pente courante:      %(r2)f 
+  precision relative:  %(r3)f 
+  pour l'abscisse:     %(r4)f 
+"""),
+
+63 : _("""
+ erreur lors de la definition de la courbe de traction %(k1)s
+ le premier point de la fonction indicee par :  %(i1)d de la nappe  %(k2)s 
+ a pour abscisse:  %(r1)f 
+"""),
+
+64 : _("""
+ erreur lors de la definition de la courbe de traction %(k1)s
+ le premier point de la fonction indicee par :  %(i1)d de la nappe  %(k2)s 
+ a pour ordonnee:  %(r1)f 
+"""),
+
+65 : _("""
+ erreur lors de la definition de la courbe de traction %(k1)s
+ pente initiale :   %(r1)f 
+ pente courante:    %(r2)f 
+ pour l'abscisse:  %(r3)f 
+"""),
+
+73 : _("""
+ erreur de programmation type de fonction non valide %(k1)s 
+"""),
+
+74 : _("""
+ comportement :%(k1)s non trouvé
+"""),
+
+75 : _("""
+ comportement %(k1)s non trouvé pour la maille  %(k2)s 
+"""),
 
+77 : _("""
+ manque le parametre  %(k1)s 
+"""),
 
+78 : _("""
+ pour la maille  %(k1)s 
+"""),
 
+80 : _("""
+  Noeud sur l'axe Z 
+"""),
+
+81 : _("""
+  La maille de nom %(k1)s n'est pas de type SEG3 ou SEG4,
+  elle ne sera pas affectée par %(k2)s  
+"""),
+
+82 : _("""
+  GROUP_MA : %(k1)s 
+"""),
+
+83 : _("""
+  Erreur a l'interpolation, paramètres non trouvé.
+"""),
 
+84 : _("""
+    Mots clés: CARA_HYDR, VALE_HYDR, il manque des données:
+      - Nombre de données recues :    %(i1)d
+      - Nombre de données attendues : %(i2)d
+      - Données recues : %(k1)s %(k2)s %(k3)s, ...
+
+ Risques & Conseils
+   Voir la documentation d'AFFE_CHAR_MECA / GRAPPE_FLUIDE
+"""),
+
+85 : _("""
+    Mots clés: CARA_GRAPPE, VALE_GRAPPE, il manque des données:
+      - Nombre de données recues :    %(i1)d
+      - Nombre de données attendues : %(i2)d
+      - Données recues : %(k1)s %(k2)s %(k3)s, ...
+
+ Risques & Conseils
+   Voir la documentation d'AFFE_CHAR_MECA / GRAPPE_FLUIDE
+"""),
+
+86 : _("""
+    Mots clés: CARA_COMMANDE, VALE_COMMANDE, il manque des données:
+      - Nombre de données recues :    %(i1)d
+      - Nombre de données attendues : %(i2)d
+      - Données recues : %(k1)s %(k2)s %(k3)s, ...
+
+ Risques & Conseils
+   Voir la documentation d'AFFE_CHAR_MECA / GRAPPE_FLUIDE
+"""),
+
+87 : _("""
+    Mots clés: CARA_MANCHETTE, VALE_MANCHETTE, il manque des données:
+      - Nombre de données recues :    %(i1)d
+      - Nombre de données attendues : %(i2)d
+      - Données recues : %(k1)s %(k2)s %(k3)s, ...
+
+ Risques & Conseils
+   Voir la documentation d'AFFE_CHAR_MECA / GRAPPE_FLUIDE
+"""),
+
+88 : _("""
+    Mots clés: CARA_GUIDE, VALE_GUIDE, il manque des données:
+      - Nombre de données recues :    %(i1)d
+      - Nombre de données attendues : %(i2)d
+      - Données recues : %(k1)s %(k2)s %(k3)s, ...
+
+ Risques & Conseils
+   Voir la documentation d'AFFE_CHAR_MECA / GRAPPE_FLUIDE
+"""),
+
+89 : _("""
+    Mots clés: CARA_ASSEMBLAGE, VALE_ASSEMBLAGE, il manque des données:
+      - Nombre de données recues :    %(i1)d
+      - Nombre de données attendues : %(i2)d
+      - Données recues : %(k1)s %(k2)s %(k3)s, ...
+
+ Risques & Conseils
+   Voir la documentation d'AFFE_CHAR_MECA / GRAPPE_FLUIDE
+"""),
+
+90 : _("""
+    Mots clés: CARA_PDC, VALE_PDC, il manque des données:
+      - Nombre de données recues :    %(i1)d
+      - Nombre de données attendues : %(i2)d
+      - Données recues : %(k1)s %(k2)s %(k3)s, ...
+
+ Risques & Conseils
+   Voir la documentation d'AFFE_CHAR_MECA / GRAPPE_FLUIDE
+"""),
+
+91 : _("""
+ depend de  %(k1)s  
+"""),
+
+92 : _("""
+ il ne peut dependre que de %(k1)s 
+"""),
+
+93 : _("""
+ ... 
+"""),
+
+94 : _("""
+     On ne peut pas appliquer un cisaillement 2d sur une modélisation 3D
+"""),
+95 : _("""
+     ERREUR: l'auto-spectre est a valeurs négatives
+"""),
 
 }
diff --git a/Aster/Cata/cataSTA9/Messages/oar0.py b/Aster/Cata/cataSTA9/Messages/oar0.py
new file mode 100644 (file)
index 0000000..897c64e
--- /dev/null
@@ -0,0 +1,52 @@
+#@ MODIF oar0 Messages  DATE 17/07/2007   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+Les coupes mécanique et thermique doivent partager les memes abscisses.
+"""),
+
+2: _("""
+Erreur d'interpolation: %(k1)s
+"""),
+
+3: _("""
+Les coupes du revetement et de la structure doivent partager une abscisse commune.
+"""),
+
+4: _("""
+Erreur d'accès aux données.
+"""),
+
+5: _("""
+Fonction non implantée.
+"""),
+
+6: _("""
+Mot clé facteur inconnu.
+"""),
+
+7: _("""
+Erreur à l'ouverture du fichier.
+"""),
+
+}
diff --git a/Aster/Cata/cataSTA9/Messages/observation.py b/Aster/Cata/cataSTA9/Messages/observation.py
new file mode 100644 (file)
index 0000000..2c8ad16
--- /dev/null
@@ -0,0 +1,92 @@
+#@ MODIF observation Messages  DATE 19/12/2007   AUTEUR ABBAS M.ABBAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+def _(x) : return x
+
+cata_msg = {
+
+1 : _("""
+ l'entité  %(k1)s  n'est pas possible  %(k2)s 
+"""),
+
+2 : _("""
+ erreur dans les données  d'observation
+ le noeud  %(k1)s n'existe pas dans  %(k2)s 
+"""),
+
+3 : _("""
+ erreur dans les données d'observation
+ le GROUP_NO  %(k1)s n'existe pas dans  %(k2)s 
+"""),
+
+4 : _("""
+ erreur dans les données d'observation
+ la maille  %(k1)s n'existe pas dans  %(k2)s 
+"""),
+
+5 : _("""
+ erreur dans les données d'observation
+ le GROUP_MA  %(k1)s n'existe pas dans  %(k2)s 
+"""),
+
+6 : _("""
+ erreur dans les données d'observation
+ pour "NOM_CHAM"  %(k1)s , il faut renseigner  %(k2)s ou  %(k3)s 
+"""),
+
+7 : _("""
+ erreur dans les données d'observation
+ pour "NOM_CHAM"  %(k1)s , il faut renseigner  %(k2)s et  %(k3)s 
+"""),
+
+45 : _("""
+ le champ absolu n'est accessible qu'en présence de modes statiques
+"""),
+
+49 : _("""
+ il faut definir "LIST_ARCH" ou "LIST_INST" ou "INST" ou "PAS_OBSE"
+ au premier mot cle facteur "OBSERVATION"
+"""),
+
+50 : _("""
+ seule la valeur de "LIST_ARCH" ou "LIST_INST" ou "INST" ou "PAS_OBSE"
+ du premier mot cle facteur "OBSERVATION" est prise en compte
+"""),
+
+79 : _("""
+ DDL inconnu sur le noeud ou la maille specifiée pour le suivi
+"""),
+
+85 : _("""
+Le nombre de SUIVI_DDL est limité à 4.
+"""),
+
+86 : _("""
+Mélange de champs de nature différente dans le meme mot-clé facteur SUIVI.
+"""),
+
+87 : _("""
+Mélange de champs de nature différente dans le meme mot-clé facteur OBSERVATION
+"""),
+
+99: _("""
+ le champ %(k1)s est incompatible avec la commande  %(k2)s
+"""),
+
+}
diff --git a/Aster/Cata/cataSTA9/Messages/post0.py b/Aster/Cata/cataSTA9/Messages/post0.py
new file mode 100644 (file)
index 0000000..155efc5
--- /dev/null
@@ -0,0 +1,100 @@
+#@ MODIF post0 Messages  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+Définition incorrecte de la ligne de coupe.
+"""),
+
+2: _("""
+Valeurs incorrectes pour VECT_Y.
+"""),
+
+3: _("""
+Valeurs incorrectes pour VECT_Y: x colinéaire a y.
+"""),
+
+4: _("""
+Le vecteur Y n'est pas orthogonal a la ligne de coupe.
+Le vecteur Y a ete orthonormalise pour vous.
+VECT_Y=(%(r1)f,%(r2)f,%(r3)f)
+"""),
+
+5: _("""
+Le type %(k1)s n'est pas cohérent avec le choix du repère (REPERE %(k2)s).
+"""),
+
+6: _("""
+Définition incorrecte de COOR_ORIG et CENTRE.
+"""),
+
+7: _("""
+Définition incorrecte de DNOR.
+"""),
+
+8: _("""
+Attention la ligne de coupe traverse des zones sans matière :
+ - Les coordonnées des points sur la ligne de coupe sont :
+            %(k1)s
+ - Les coordonnées des points éliminés (car hors de la matière) sont:
+            %(k2)s
+"""),
+
+9: _("""
+Nom du modèle absent dans le concept résultat %(k1)s.
+"""),
+
+10: _("""
+Veuillez renseigner le MODELE si vous utilisez un CHAM_GD.
+"""),
+
+11: _("""
+Dimensions de maillage et de coordonnées incohérentes.
+"""),
+
+12: _("""
+Le mot-clé 'DNOR' est obligatoire en 3D pour le type 'ARC'.
+"""),
+
+13: _("""
+Le group_no %(k1)s n'est pas dans le maillage %(k2)s.
+"""),
+
+14: _("""
+Le group_ma %(k1)s n'est pas dans le maillage %(k2)s.
+"""),
+
+15: _("""
+le group_ma %(k1)s contient la maille %(k2)s qui n'est pas de type SEG.
+"""),
+
+16: _("""
+On ne peut pas combiner des lignes de coupes de type ARC
+avec des lignes de coupes SEGMENT ou GROUP_NO.
+"""),
+
+17: _("""
+Le champ %(k1)s n'est pas traité par macr_ligne_coupe en repère %(k2)s.
+Le calcul est effectué en repère global.
+"""),
+
+}
index 000f165c1e23d223de1063782b9d5e70a2d0d063..949a4d2625805a91378ed662b4ab080c5648171a 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF postrccm Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF postrccm Messages  DATE 19/02/2008   AUTEUR VIVAN L.VIVAN 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -84,12 +84,12 @@ cata_msg={
 
 13: _("""
  Probleme lors du passage du CH_MATER en CARTE
- Contactez l'assistance téléphonique.
+ Contactez le support
 """),
 
 14: _("""
  Probleme lors du passage du TEMPE_REF en CARTE
- Contactez l'assistance téléphonique.
+ Contactez le support
 """),
 
 15: _("""
@@ -115,7 +115,7 @@ cata_msg={
 
 19: _("""
  si on est la, y a un bug!
- Contactez l'assistance téléphonique.
+ Contactez le support
 """),
 
 20: _("""
@@ -155,11 +155,6 @@ cata_msg={
    occurence situation %(i2)d et %(i3)d 
 """),
 
-
-
-
-
-
 28: _("""
  erreur données, pour la situation numero %(i1)d 
  on n'a pas pu récupérer le "RESU_MECA" correspondant au numéro du cas de charge %(i2)d 
@@ -171,13 +166,13 @@ cata_msg={
 """),
 
 30: _("""
- probleme pour recuperer ioc seisme.
- Contactez l'assistance téléphonique.
+ probleme pour recuperer IOC SEISME.
+ Contactez le support
 """),
 
 31: _("""
  probleme avec TYPEKE.
- Contactez l'assistance téléphonique.
+ Contactez le support
 """),
 
 32: _("""
@@ -193,4 +188,77 @@ cata_msg={
    D_AMORC          : %(r2)12.5E
 """),
 
+34: _("""
+ avec une ou des situations de passage, il faut définir au plus 3 groupes
+"""),
+
+35: _("""
+ avec une ou des situations de passage, il ne faut définir qu'un seul séisme. 
+"""),
+
+36: _("""
+ bug ! contactez l'assistance.
+"""),
+
+37: _("""
+ -> L'ordre des noeuds de la table %(k1)s n'est pas respecté.
+    Les noeuds doivent etre rangés d'une des peaux vers l'autre.
+ -> Risque & Conseil:
+    Veuillez consulter la documentation U2.09.03.
+"""),
+
+38: _("""
+ -> Les noeuds de la ligne de coupe %(k2)s (table %(k1)s) ne sont pas alignés:
+    - distance maximale à la ligne de coupe: %(r1)f
+    - longueur de la ligne de coupe        : %(r2)f
+ -> Risque & Conseil:
+    Les calculs avec POST_RCCM ne sont théoriquement valides que pour des lignes
+    de coupe rectilignes. Vérifier les données d'entrée ou utiliser
+    MACR_LIGN_COUPE pour extraire le résultat sur un segment de droite.
+"""),
+
+39: _("""
+ -> Il est préférable de fournir des tables comportant les coordonnées des noeuds.
+"""),
+
+40: _("""
+ -> Pour le cas unitaire, il doit y avoir un seul ligament.
+    La table %(k1)s contient %(i1)d ligaments.
+ -> Risque & Conseil:
+    Veuillez revoir le contenu de votre table.
+ """),
+
+41: _("""
+ -> Les tables %(k1)s et %(k2)s ont des noeuds possédant
+    des coordonnées différentes:
+    - table %(k1)s : %(k3)s = %(r1)f
+    - table %(k2)s : %(k3)s = %(r2)f
+ -> Risque & Conseil:
+    Veuillez revoir le contenu de vos tables
+"""),    
+
+ 42: _("""
+ -> Les tables %(k1)s et %(k2)s ne sont pas cohérentes en terme de nombre
+    de ligaments:
+    - table %(k1)s : %(i1)d ligaments 
+    - table %(k2)s : %(i2)d ligaments 
+ -> Risque & Conseil:
+    Veuillez revoir le contenu de vos tables
+"""),
+
+43: _("""
+ -> Les tables %(k1)s et %(k2)s ne sont pas cohérentes en terme d'instant:
+    Une différence a été observée entre les valeurs d'instant d'un meme point
+    - table %(k1)s : INST = %(r1)f
+    - table %(k2)s : INST = %(r2)f
+ -> Risque & Conseil:
+    Veuillez revoir le contenu de vos tables
+   
+"""),
+
+44: _("""
+ probleme pour récupérer dans la table %(k1)s la valeur du parametre %(k2)s
+ pour le parametre %(k3)s de valeur %(r1)12.5E.
+"""),
+
 }
index 6ead235cad887e1e833ee4320752c4cf93cf598d..ab2e68ab5a3db38a15c9220d6350556f920080a8 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF postrele Messages  DATE 03/04/2007   AUTEUR VIVAN L.VIVAN 
+#@ MODIF postrele Messages  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
+1 : _("""
  création/extension de la table %(k1)s 
 """),
 
-2: _("""
- ***************************************** 
- *   post_traitement numéro :  %(i1)d 
- *   inexistence de champ-gd 
- *   pas de post-traitement 
- *****************************************
+2 : _("""
+ post_traitement numéro :  %(i1)d 
+ inexistence de CHAM_GD 
+ pas de post-traitement 
  """),
 
-3: _("""
- **********************************************************
- *   post_traitement numéro :  %(i1)d 
- *   aucunes mailles ne correspondent aux criteres demandés
- *   pas de post-traitement
- **********************************************************
+3 : _("""
+ post_traitement numéro :  %(i1)d 
+ aucune maille ne correspond aux critères demandés
+ pas de post-traitement
 """),
 
-4: _("""
- on ne traite pas les multicouches
-"""),
-
-5: _("""
+5 : _("""
  il manque le vecteur des composantes "NOCP".
- Contactez l'assistance téléphonique.
+ Contactez le support.
 """),
 
-6: _("""
+6 : _("""
  chemin nul ou défini en un noeud
 """),
 
-7: _("""
+7 : _("""
  le nombre de composantes à traiter est limité à 6 pour operation "MOYENNE".
  utiliser "NOM_CMP" avec au plus 6 composantes.
 """),
 
-8: _("""
+8 : _("""
  initialisation de la table %(k1)s
 """),
 
-9: _("""
+9 : _("""
  pas de champ trouvé pour l'option %(k1)s
 """),
 
-10: _("""
- parametre %(k1)s de type %(k2)s 
+10 : _("""
+ paramètre %(k1)s de type %(k2)s 
 """),
 
-11: _("""
+11 : _("""
  on ne traite que les champs complexes
 """),
 
-12: _("""
+12 : _("""
  tableau de travail limité, reduire le nombre de composantes à traiter
 """),
 
-13: _("""
- + de 3000 cmps!
- Contactez l'assistance téléphonique.
+13 : _("""
+ plus de 3000 composantes.
+ Contactez le support
 """),
 
-14: _("""
- en repere local, on ne traite pas le champ %(k1)s 
+14 : _("""
+ en repère local, on ne traite pas le champ %(k1)s 
 """),
 
-15: _("""
icoef trop grand
- Contactez l'assistance téléphonique.
+15 : _("""
ICOEF trop grand
+ Contactez le support
 """),
 
-16: _("""
- probleme maillage
- Contactez l'assistance téléphonique.
+16 : _("""
+ problème maillage
+ Contactez le support
 """),
 
-17: _("""
- on ne traite que des champs de type "DEPL_R" pour un changement de repere
+17 : _("""
+ on ne traite que des champs de type "DEPL_R" pour un changement de repère
 """),
 
-18: _("""
+18 : _("""
  le type de maille %(k1)s n'est pas traité
 """),
 
-19: _("""
+19 : _("""
  mauvaise définition du chemin, probleme de continuité du chemin sur une maille
  diminuer la précision dans l'opérateur INTE_MAIL_(2D/3D)
 """),
 
-20: _("""
+20 : _("""
  on ne traite pas ce cas
- Contactez l'assistance téléphonique.
+ Contactez le support
 """),
 
-21: _("""
+21 : _("""
  avec VECT_Y, le groupe de noeuds doit contenir au moins 2 noeuds
 """),
 
-22: _("""
+22 : _("""
  avec VECT_Y, il faut préciser 
-   soit un seul groupe de noeuds
-   soit plusieurs noeuds
+   soit un seul groupe de noeuds
+   soit plusieurs noeuds
 """),
 
-23: _("""
+23 : _("""
  on ne peut pas mélanger des arcs et des segments.
 """),
 
-24: _("""
+24 : _("""
  chemin de maille vide
 """),
 
-25: _("""
+25 : _("""
  contradiction avec INTE_MAIL_2D
 """),
 
-26: _("""
- changement de repere:
- champ non traité %(k1)s option de calcul %(k2)s 
+26 : _("""
+ changement de repère:
+ champ non traité %(k1)s
+ option de calcul %(k2)s 
 """),
 
-27: _("""
+27 : _("""
  noeud sur l'AXE_Z
- maille: %(k1)s, noeud: %(k2)s, coordonnées: %(r1)f 
+ maille      : %(k1)s
+ noeud       : %(k2)s
+ coordonnées : %(r1)f 
 """),
 
-28: _("""
- les noeuds du maillage ne sont pas tous dans un meme plan z = cst
- changement de repere non traité
+28 : _("""
+ les noeuds du maillage ne sont pas tous dans un meme plan Z = CST
+ changement de repère non traité
 """),
 
-29: _("""
- on ne sait pas faire ce post-traitement pour le chemin %(k1)s en repere %(k2)s 
+29 : _("""
+ on ne sait pas faire ce post-traitement pour le chemin %(k1)s en repère %(k2)s 
 """),
 
-30: _("""
+30 : _("""
  le noeud %(k1)s est confondu avec l'origine
 """),
 
-31: _("""
+31 : _("""
  le noeud %(k1)s est sur l'AXE_Z
 """),
 
-32: _("""
- les noeuds du maillage ne sont pas tous dans un meme plan z = cst
+32 : _("""
+ les noeuds du maillage ne sont pas tous dans un meme plan Z = CST
  option TRAC_NOR non traitée
  utiliser l'option TRAC_DIR
 """),
 
-33: _("""
+33 : _("""
  option non traitée: %(k1)s, post-traitement: %(i1)d 
  les invariants tensoriels sont calculés
    pour les options :  %(k2)s 
@@ -196,7 +191,7 @@ cata_msg={
                        %(k20)s 
 """),
 
-34: _("""
+34 : _("""
  option non traitée: %(k1)s, post-traitement: %(i1)d 
  les traces normales sont calculées 
    pour les options :  %(k2)s 
@@ -220,7 +215,7 @@ cata_msg={
                          %(k20)s 
 """),
 
-35: _("""
+35 : _("""
  option non traitée: %(k1)s, post-traitement: %(i1)d 
  les traces directionnelles sont calculées
    pour les options :  %(k2)s 
@@ -247,23 +242,23 @@ cata_msg={
                          %(k23)s 
 """),
 
-36: _("""
+36 : _("""
  trace directionnelle, post-traitement: %(i1)d 
  direction nulle, pas de calul
 """),
 
-37: _("""
+37 : _("""
  attention post-traitement %(i1)d 
  seules les composantes du tenseur des contraintes sont traitées
 """),
 
-38: _("""
+38 : _("""
  post-traitement %(i1)d 
  composante non traitée dans un changement de repere
- Contactez l'assistance téléphonique.
+ Contactez le support
 """),
 
-39: _("""
+39 : _("""
  post-traitement %(i1)d 
  grandeur %(k1)s non traitée dans un changement de repere
  les changements de repere sont possibles
@@ -272,106 +267,125 @@ cata_msg={
    pour les grandeurs %(k7)s  %(k8)s
 """),
 
-40: _("""
+40 : _("""
  le noeud numéro %(i1)d n'est pas connecté à la maille de nom %(k1)s 
 """),
 
-41: _("""
+41 : _("""
  champ inexistant nom_cham: %(k1)s  nume_ordre: %(i1)d 
 """),
 
-42: _("""
+42 : _("""
  occurence %(i1)d du mot clé facteur ACTION
  les listes arguments des mots clés RESULTANTE et MOMENT doivent etre de meme longueur
  cette longueur doit etre de 2 ou 3
 """),
 
-43: _("""
+43 : _("""
  occurence %(i1)d du mot clé facteur ACTION
  la liste arguments du mot clé POINT doit etre de longueur 2 ou 3
 """),
 
-44: _("""
+44 : _("""
  occurence %(i1)d du mot clé facteur ACTION
  on ne peut accéder au RESULTAT de nom %(k1)s et de type %(k2)s par %(k3)s ou par %(k4)s 
 """),
 
-45: _("""
+45 : _("""
  occurence %(i1)d du mot clé facteur ACTION
  on ne peut accéder au RESULTAT de nom %(k1)s et de type %(k2)s par %(k3)s
 """),
 
-46: _("""
+46 : _("""
  occurence %(i1)d du mot clé facteur ACTION
  le NOM_CHAM %(k1)s n'est pas autorisé pour le RESULTAT %(k2)s de type %(k3)s
  ou le NOM_CHAM est autorisé mais aucun champ effectif n'existe.
 """),
 
-47: _("""
+47 : _("""
  occurence %(i1)d du mot clé facteur ACTION
  le ou les champs élémentaires mis en jeu est ou sont donnés aux pointe de gauss
  ce ou ces champs ne sont pas traités.
 """),
 
-48: _("""
+48 : _("""
  occurence %(i1)d du mot clé facteur ACTION
  la composante %(k1)s n'est pas présente au catalogue des grandeurs.
 """),
 
-49: _("""
+49 : _("""
  occurence %(i1)d du mot clé facteur ACTION
  le maillage de la courbe %(k1)s est différent du maillage du champ à traiter %(k2)s
 """),
 
-50: _("""
+50 : _("""
  occurence %(i1)d du mot clé facteur ACTION
  le groupe de noeuds %(k1)s ne fait pas parti du maillage sous jacent au champ à traiter.
 """),
 
-51: _("""
+51 : _("""
  occurence %(i1)d du mot clé facteur ACTION
  le noeud %(k1)s ne fait pas parti du maillage sous jacent au champ à traiter.
 """),
 
-52: _("""
+52 : _("""
  on ne traite pas le FORMAT_C %(k1)s
 """),
 
-53: _("""
+53 : _("""
  NEC trop grand
- Contactez l'assistance téléphonique.
+ Contactez le support
 """),
 
-54: _("""
+54 : _("""
  occurence %(i1)d du mot clé facteur ACTION
  Impossible de récupérer les composantes du champ. 
 """),
 
-55: _("""
+55 : _("""
  la composante %(k1)s est en double.
 """),
 
-56: _("""
+56 : _("""
  la composante %(k1)s n'est pas une composante de %(k2)s
 """),
 
-57: _("""
+57 : _("""
  la grandeur %(k1)s est inconnue au catalogue.
 """),
 
-58: _("""
+58 : _("""
  erreur de programmation
- Contactez l'assistance téléphonique.
+ Contactez le support
 """),
 
-59: _("""
+59 : _("""
  Le contenu de la table n'est pas celui attendu !
- Contactez l'assistance téléphonique.
+ Contactez le support
 """),
 
-60: _("""
+60 : _("""
  arret sur erreurs
- Contactez l'assistance téléphonique.
+ Contactez le support
+"""),
+
+61 : _("""
+ Nombre de cycles admissibles négatif, 
+ verifier la courbe de WOLHER
+ contrainte calculee =  %(r1)f    nadm =  %(r2)f 
+"""),
+
+62 : _("""
+ Attention lors de la définition de votre liste de noeuds,
+ %(i1)d noeud est hors de la matière 
+"""),
+
+63 : _("""
+ Attention lors de la définition de votre liste de noeuds,
+ %(i1)d noeuds sont hors de la matière 
 """),
 
 }
diff --git a/Aster/Cata/cataSTA9/Messages/poutre0.py b/Aster/Cata/cataSTA9/Messages/poutre0.py
new file mode 100644 (file)
index 0000000..9912e53
--- /dev/null
@@ -0,0 +1,36 @@
+#@ MODIF poutre0 Messages  DATE 04/09/2007   AUTEUR DURAND C.DURAND 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+GROUP_MA et GROUP_MA_BORD incohérents.
+"""),
+
+2: _("""
+GROUP_MA et NOEUD incohérents.
+"""),
+
+3: _("""
+Il faut donner un noeud unique.
+"""),
+
+}
index c95b1401c462cc6fa155b938cf0f45e7e974b667..81f1549e01cd9005da3fd0b35af5cefeec466112 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF precalcul Messages  DATE 30/04/2007   AUTEUR ABBAS M.ABBA
+#@ MODIF precalcul Messages  DATE 09/10/2007   AUTEUR COURTOIS M.COURTOI
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
 
-
 def _(x) : return x
 
-cata_msg={
-
-1: _("""
-Le type du parametre CARA_ELEM nomme <%(k1)s> est inconnu. Contactez les developpeurs.
-"""),
-
-2: _("""
-Le type du parametre XFEM nomme <%(k1)s> est inconnu. Contactez les developpeurs.
-"""),
-
-11: _("""
-Le type de parametre pour le champ IN de temperature est inconnu (ni scalaire, ni fonction mais <%(k1)s>). Contactez les developpeurs. 
-"""),
-
-20: _("""
-Le type de calcul du chargement est invalide :  %(k1)s. Contactez les developpeurs. 
-"""),
-
-50: _("""
-Depassement de la capacite pour les tableaux de champs d'entree de CALCUL. Contactez les developpeurs.
-"""),
-
-51: _("""
-On tente d'ecraser le parametre de champ d'entree de CALCUL deja existant nomme <%(k1)s> par un autre parametre d'entree nomme <%(k2)s>. Contactez les developpeurs.
-"""),
-
-52: _("""
-On tente d'ecraser le champ d'entree de CALCUL deja existant nomme <%(k1)s> par un autre champ d'entree nomme <%(k2)s>. Contactez les developpeurs.
-"""),
+cata_msg = {
 
-60: _("""
-Appel à CALCUL. Le nom du paramètre de champ d'entree numéro %(i1)d est vide.
+60 : _("""
+Appel à CALCUL
+Le nom du paramètre de champ d'entree numéro %(i1)d est vide.
 """),
 
-61: _("""
-Appel à CALCUL. Le champ d'entree numéro %(i1)d est vide.
+61 : _("""
+Appel à CALCUL
+Le champ d'entrée numéro %(i1)d est vide.
 """),
 
-62: _("""
+62 : _("""
 Appel à CALCUL. Le nom du paramètre de champ de sortie numéro %(i1)d est vide.
 """),
 
-63: _("""
+63 : _("""
 Appel à CALCUL. Le champ de sortie numéro %(i1)d est vide.
 """),
 
-
 }
index 172d9d75f428d741c5d81a4c3479cfb7e89521bf..9f3f2137520f6d958e10035c7760b20b85039e78 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF prepost Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF prepost Messages  DATE 17/03/2008   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
group_no :  %(k1)s  inconnu dans le maillage
+1 : _("""
GROUP_NO :  %(k1)s  inconnu dans le maillage
 """),
 
-2: _("""
- pour calculer le dommage il faut definir le comportement "fatigue" dans defi_materiau
+: _("""
+ méthode  %(k1)s  illicite
 """),
 
-3: _("""
- hors bornes  definies dans cescre.
+5 : _("""
+ la longueur du défaut n'est pas en accord avec les tables définies
+ coté revetement et coté métal de base
 """),
 
-4: _("""
- methode  %(k1)s  illicite
+: _("""
+ prolongement à gauche exclu
 """),
 
-5: _("""
- la longueur du defaut n est pas en accord avec les tables definies cote revetement et cote metal de base
+: _("""
+ prolongement à droite exclu
 """),
 
-6: _("""
- incoherence catalogue - fortran
+10 : _("""
+ phénomène non valide
 """),
 
-7: _("""
- erreur_dvp
+11 : _("""
+ nous ne pouvons pas récupérer la valeur du module d'Young : E.
 """),
 
-8: _("""
- prolongement a gauche exclu
+12 : _("""
+ nous ne pouvons pas récupérer la valeur du coefficient de Poisson : NU.
 """),
 
-9: _("""
- prolongement a droite exclu
+21 : _("""
+ Intersection Droite / Cercle
+ pas d'intersection trouvée
 """),
 
-10: _("""
- phenomene non valide
+27 : _("""
+ volume négatif
 """),
 
-11: _("""
- nous ne pouvons pas recuperer la valeur du module d'young : e.
+28 : _("""
+ volume supérieur à 1.d6
 """),
 
-12: _("""
- nous ne pouvons pas recuperer la valeur du coefficient de poisson : nu.
+31 : _("""
+ structure de données RESULTAT inconnue  %(k1)s 
 """),
 
-13: _("""
-  le type d entite  %(k1)s  est inconnu.
+32 : _("""
+  l'impression de la SD_RESULTAT  %(k1)s  a déjà été effectuée
+  avec une liste de numéros d'ordre dont le premier numéro etait
+  le meme que celui de la liste actuelle.
+  on arrete l'impression afin d'éviter l'écrasement des fichiers écrits.
 """),
 
-14: _("""
- ipoi1 et ipoi4 non traite
+33 : _("""
+ problème à l'ouverture du fichier résultat ENSIGHT  %(k1)s
+ pour l'impression du CHAM_GD  %(k2)s 
 """),
 
-15: _("""
- sprim negative bizarre
+34 : _("""
+ probleme à l'ouverture du fichier résultat ENSIGHT  %(k1)s
+ pour l'impression du CONCEPT  %(k2)s 
 """),
 
-16: _("""
- airtot ou ener nul
+36 : _("""
+ le champ de:  %(k1)s  a des éléments ayant des sous-points.
+ ces éléments ne seront pas traités.
 """),
 
-17: _("""
- do102=0 
+38 : _("""
+ le vecteur défini sous le mot clé ACTION/AXE_Z a une norme nulle.
 """),
 
-18: _("""
- probleme intersection cylindre tetraedre
+46 : _("""
+ erreur dans la création du fichier de maillage au format GIBI.
+ Celui-ci ne contient pas d'objet de type maillage.
+ Risque & Conseil:
+ Assurez vous que votre procédure gibi sauvegarde bien les objets du maillage (pile 32 dans le formalisme GIBI)
 """),
 
-19: _("""
- voli negative bizarre
+51 : _("""
+ l'option de calcul " %(k1)s " n'existe pas dans la structure de données %(k2)s 
 """),
 
-20: _("""
- voltot ou ener nul
+52 : _("""
+ le champ " %(k1)s " pour l'option de calcul " %(k2)s ", n'a pas été notée
+ dans la structure de données %(k3)s 
 """),
 
-21: _("""
- pas inters
+53 : _("""
+ la dimension du problème est invalide : il faut : 1d, 2d ou 3d.
 """),
 
-22: _("""
- delta negatif pb lors de recherche intersection
+54 : _("""
+ nombre de noeuds supérieur au maximum autorisé : 27.
 """),
 
-23: _("""
- pb n2+n3
+55 : _("""
+ objet &&GILIRE.INDIRECT inexistant
+ problème à la lecture des points 
 """),
 
-24: _("""
- cas idiot
+56 : _("""
+ type de maille :  %(k1)s  inconnu de la commande PRE_GIBI.
 """),
 
-25: _("""
- pb en dehors des 2 points
+57 : _("""
+ nombre d'objets supérieur au maximum autorisé : 99999.
 """),
 
-26: _("""
-  probleme n2+n3
+59 : _("""
+ le maillage GIBI est peut etre erroné :
+ il est écrit : "NIVEAU RREUR N_ERR"  avec N_ERR est >0 .
+ on continue quand meme, mais si vous avez des problèmes plus loin ...
 """),
 
-27: _("""
- volume negatif
-"""),
-
-28: _("""
- volume superieur a 1.d6
-"""),
-
-29: _("""
- tbelzo depassement
-"""),
-
-30: _("""
- tbnozo depassement
-"""),
-
-31: _("""
- sd resultat inconnue  %(k1)s 
-"""),
-
-32: _("""
-  l'impression de la sd_resultat  %(k1)s  a deja ete effectuee avec une liste de numeros d'ordre dont le premier numero etait le meme que celui de la liste actuelle. on arrete l'impression afin d'eviter l'ecrasement des fichiers ecrits.
-"""),
-
-33: _("""
- probleme a l'ouverture du fichier resultat ensight  %(k1)s  pour l'impression du cham_gd  %(k2)s 
-"""),
-
-34: _("""
- probleme a l'ouverture du fichier resultat ensight  %(k1)s  pour l'impression du concept  %(k2)s 
-"""),
-
-35: _("""
- code  %(k1)s  inconnu
-"""),
-
-36: _("""
- le champ de:  %(k1)s  a des elements ayant des sous-points. ces elements ne seront pas traites.
-"""),
-
-37: _("""
- vraiment desole
-"""),
-
-38: _("""
- le vecteur est "axe_z" nul.
-"""),
-
-39: _("""
- le coefficient de goodman n'est pas calculable
-"""),
-
-40: _("""
- le coefficient de gerber n'est pas calculable
-"""),
-
-41: _("""
- pour calculer le dommage de lemaitre-sermage il faut definir  le comportement domma_lemaitre dans defi_materiau
-"""),
-
-42: _("""
- pour calculer le dommage de lemaitre_sermage il faut definir  le comportement elas_fo dans defi_materiau
-"""),
-
-43: _("""
- le materiau est obligatoire pour le calcul du dommage par taheri_manson
-"""),
-
-44: _("""
- une fonction doit etre introduite sous le mot cle taheri_fonc
-"""),
-
-45: _("""
- une nappe doit etre introduite sous le mot cle taheri_nappe
-"""),
-
-
-
-
-
-
-
-
-47: _("""
- la courbe de manson_coffin est necessaire pour le calcul du dommage taheri_manson_coffin
-"""),
-
-48: _("""
- le materiau est obligatoire pour le calcul du dommage par taheri_mixte
-"""),
-
-49: _("""
- la courbe de manson_coffin est necessaire pour le calcul du dommage taheri_mixte
-"""),
-
-50: _("""
- la courbe de wohler est necessaire pour le calcul du dommage taheri_mixte
-"""),
-
-51: _("""
- l'option de calcul " %(k1)s " n'existe pas dans la structure de donnees %(k2)s 
-"""),
-
-52: _("""
- le champ " %(k1)s " pour l'option de calcul " %(k2)s ", n'a pas ete notee dans la structure de donnees %(k3)s 
-"""),
-
-53: _("""
- la dimension du probleme est invalide : il faut : 1d,2d ou 3d.
-"""),
-
-54: _("""
- nombre de noeuds superieur au maxi autorise : 27.
-"""),
-
-55: _("""
- objet &&gilire.indirect inexistant. probleme a la lecture des points 
-"""),
-
-56: _("""
- type de maille :  %(k1)s  inconnu de pre_gibi.
-"""),
-
-57: _("""
- nombre d objets superieur au maximum autorise : 99999.
-"""),
-
-58: _("""
- bug !!!
-"""),
-
-59: _("""
- le maillage gibi est  peut etre errone :  il est ecrit : "niveau rreur n_err"  ou n_err est >0 .on continue quand meme,  mais si vous avez des problemes plus loin ...
-"""),
-
-60: _("""
+60 : _("""
  arret sur erreur(s)
 """),
 
-61: _("""
- erreur dans la recuperation du nume.prno
-"""),
-
-62: _("""
- probleme dans la recuperation du numero de bloc auquel appartient la ligne courante.
-"""),
-
-63: _("""
- les seuls types de valeurs acceptes pour les resu_elem sont les reels et les complexes, le descripteur de type  %(k1)s  est inadequat.
-"""),
-
-64: _("""
- les seuls types de s.d. autorises sont "matr_asse" , "matr_elem" "vect_elem" et "resu_elem", le type donne  %(k1)s  n'est pas reconnu .
-"""),
-
-65: _("""
- la valeur du grain d'impression est  %(k1)s  alors que les seules valeurs possibles sont "noeud" ou "valeur"  ou "maille".
-"""),
-
-66: _("""
- la valeur du grain d'impression est  %(k1)s  alors que les seules valeurs possibles sont "noeud" et "valeur" .
-"""),
-
-67: _("""
- probleme dans le descripteur de la matrice: l'indicateur de symetrie ne correspond ni a une matrice  symetrique, ni a une matrice  non-symetrique . 
-"""),
-
-68: _("""
- probleme dans le descripteur de la matrice: l'indicateur type de valeur de la matrice ne correspond ni a une matrice reelle, ni a une matrice  complexe . 
-"""),
-
-69: _("""
- probleme a l ouverture du fichier
-"""),
-
-70: _("""
- probleme a la fermeture du fichier
-"""),
-
-71: _("""
- maillage introuvable ?
-"""),
-
-72: _("""
- med:erreur mdnoma numero  %(k1)s 
-"""),
-
-73: _("""
- le champ est ecrit dans le fichier !
-"""),
-
-74: _("""
+74 : _("""
  la variable  %(k1)s  n'existe pas
 """),
 
-75: _("""
+75 : _("""
  pas d'impression du champ
 """),
 
-76: _("""
+76 : _("""
   -> Il y a des groupes de noeuds dans le maillage %(k1)s.
      Ils  n'apparaitront pas dans le fichier géométrie ENSIGHT.
      Seuls des groupes de mailles peuvent y etre intégrés.
 """),
 
-77: _("""
- incompatibilite entre les grels
+77 : _("""
+  incompatibilité entre les GREL
 """),
 
-78: _("""
- nec trop grand
+7: _("""
+  le nombre de couches est supérieur à 1 
 """),
 
-79: _("""
-  nombre de couches > 1 
+80 : _("""
+ on traite les TRIA7 QUAD9 en oubliant le noeud centre
 """),
 
-80: _("""
- on traite les tria7 quad9 en oubliant le noeud centre
+8: _("""
+ élément PYRA5 non disponible dans IDEAS
 """),
 
-81: _("""
-  : inoa=0
+8: _("""
+ élément PYRA13 non disponible dans IDEAS
 """),
 
-82: _("""
- ecriture impossible pour  %(k1)s  au format med
+86 : _("""
+ on traite les TRIA7 QUAD9 HEXA27 en oubliant le noeud centre
+ et les SEG4 en oubliant les 2 noeuds centraux.
 """),
 
-83: _("""
- certaines composantes selectionnees ne font pas parties du ligrel
+87 : _("""
+ on ne sait pas imprimer le champ de type:  %(k1)s 
+ champ :  %(k2)s 
 """),
 
-84: _("""
- element pyran5 non disponible dans ideas
+88 : _("""
+  on ne sait pas imprimer au format ENSIGHT le champ  %(k1)s
+  correspondant à la grandeur : %(k2)s
+  il faut imprimer des champs aux noeuds à ce format.
 """),
 
-85: _("""
- element pyran13 non disponible dans ideas
-"""),
-
-86: _("""
- on traite les tria7 quad9 hexa27 en oubliant le noeud centre
-"""),
-
-87: _("""
- on ne sait pas imprimer le champ de type:  %(k1)s  champ :  %(k2)s 
-"""),
-
-88: _("""
-  on ne sait pas imprimer au format ensight le champ  %(k1)s  correspondant a la grandeur : %(k2)s . il faut imprimer des champs aux noeuds a ce format.
-"""),
-
-89: _("""
- 1  %(k1)s 
-"""),
-
-90: _("""
+90 : _("""
  on ne sait pas imprimer le champ  %(k1)s  au format  %(k2)s 
 """),
 
-91: _("""
- debut de l'ecriture med de  %(k1)s 
-"""),
-
-92: _("""
- impossible de determiner un nom de champ med.
-"""),
-
-93: _("""
- pas d ecriture pour  %(k1)s 
+97 : _("""
+ on ne sait pas imprimer les champs de type " %(k1)s "
 """),
 
-94: _("""
- issu de  %(k1)s 
+98 : _("""
+ le champ:  %(k1)s  a des éléments ayant des sous-points.
+ il est écrit avec un format différent.
 """),
 
-95: _("""
- type  %(k1)s  inconnu pour med.
+99 : _("""
+ le champ:  %(k1)s  a des éléments ayant des sous-points.
+ ces éléments ne seront pas écrits.
 """),
 
-96: _("""
- fin de l'ecriture med de  %(k1)s 
-"""),
-
-97: _("""
- on ne sait pas imprimer les champs de type " %(k1)s "   on est vraiment desole.
-"""),
-
-98: _("""
- le champ:  %(k1)s  a des elements ayant des sous-points. il est ecrit avec un format different.
-"""),
-
-99: _("""
- le champ:  %(k1)s  a des elements ayant des sous-points. ces elements ne seront pas ecrits.
-"""),
 }
index 729aae9a4d21684a7ccc3bd4372578d223b00082..350344867d3f74ae7982afc8c54fe59861d065ae 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF prepost2 Messages  DATE 30/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF prepost2 Messages  DATE 10/12/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-2: _("""
+2 : _("""
 Modele inconnu, pas d'impression du champ  %(k1)s 
 """),
 
-3: _("""
+3 : _("""
 On ne sait pas ecrire des champs par element aux points de gauss au format CASTEM
 """),
 
-4: _("""
+4 : _("""
  erreur programmation
 """),
 
-5: _("""
-Ce champ existe déjà dans le fichier MED. On ne peut pas le créer de nouveau.
-
-Nom MED du champ : "%(k1)s"
-
-  -> Risque & Conseil :
-      Si vous essayez d'imprimer les différentes composantes d'un champ,
-      ne faites qu'un seul IMPR_RESU avec la liste des composantes à
-      retenir derrière le mot-clé NOM_CMP.
-      Pour la visualisation dans Salomé (Scalar Map par exemple),
-      sélectionner la composante dans Scalar Range/Scalar Mode.
-"""),
-
-6: _("""
- med: erreur efchac numero  %(k1)s 
-"""),
-
-7: _("""
- veritable ecriture des tableaux de valeurs
-"""),
-
-8: _("""
- med: erreur efchre numero  %(k1)s 
-"""),
-
-9: _("""
- med: erreur efouvr numero  %(k1)s 
-"""),
-
-10: _("""
- med: erreur efnpro numero  %(k1)s 
-"""),
-
-11: _("""
- probleme dans la lecture du nom du profil.
-"""),
-
-12: _("""
- probleme dans la lecture des valeurs du profil.
-"""),
-
-13: _("""
- med: erreur efferm numero  %(k1)s 
-"""),
-
-14: _("""
- med: erreur efpfle numero  %(k1)s 
-"""),
-
-15: _("""
- 1.3. type de champ inconnu :  %(k1)s 
-"""),
-
-16: _("""
- creation des tableaux de valeurs a ecrire avec :
-"""),
-
-17: _("""
- renumerotation impossible avec plus d'un sous-point
-"""),
-
-18: _("""
+18 : _("""
  la programmation ne permet pas plus de 150 cmps.
 """),
 
-19: _("""
- le le nombre de cmps de la grandeur du champ depasse 500 augmenter la dimension de 4 tableaux statiques
+19 : _("""
+ Le nombre de cmps de la grandeur du champ dépasse 500.
+ Augmenter la dimension de 4 tableaux statiques
 """),
 
-20: _("""
+20 : _("""
   impr_resu format ensight : la composante  %(k1)s  du cham_gd  %(k2)s  n'est portee par aucun noeud du maillage et ne sera pas imprimee
 """),
 
-21: _("""
+21 : _("""
   impr_resu format ensight : la composante  %(k1)s  du champ  %(k2)s  du concept  %(k3)s  n'est portee par aucun noeud du maillage et ne sera pas imprimee
 """),
 
-22: _("""
+22 : _("""
   impr_resu format ensight : les trois composantes  %(k1)s   %(k2)s   %(k3)s  du cham_gd  %(k4)s  ne sont portees par aucun noeud du maillage et le vecteur ensight correspondant ne sera pas imprime
 """),
 
-23: _("""
+23 : _("""
   impr_resu format ensight : les trois composantes  %(k1)s   %(k2)s   %(k3)s  du champ  %(k4)s  du concept  %(k5)s  ne sont portees par aucun noeud du maillage et le vecteur ensight correspondant ne sera pas imprime
 """),
 
-24: _("""
+24 : _("""
  impression de la composante  %(k1)s  du champ  %(k2)s  sous forme d'une variable scalaire ensight  %(k3)s . la composante  %(k4)s  n'est pas portee par certains noeuds du maillage et des valeurs nulles sont affectees a ces noeuds dans les fichiers  %(k5)s 
 """),
 
-25: _("""
+25 : _("""
  impression des 3 composantes  %(k1)s   %(k2)s  et  %(k3)s  du champ  %(k4)s  sous forme d'une variable vectorielle ensight  %(k5)s . une ou plusieurs de ces composantes ne sont pas portees par certains noeuds du maillage et des valeurs nulles sont affectees a ces noeuds pour ces composantes dans les fichiers  %(k6)s 
 """),
 
-26: _("""
+26 : _("""
  probleme a l'ouverture du fichier de valeurs ensight  %(k1)s  pour l'impression de la partie reelle du cham_gd  %(k2)s 
 """),
 
-27: _("""
+27 : _("""
  probleme a l'ouverture du fichier de valeurs ensight  %(k1)s  pour l'impression de la partie relle du champ  %(k2)s  du concept %(k3)s 
 """),
 
-28: _("""
+28 : _("""
  probleme a l'ouverture du fichier de valeurs ensight  %(k1)s  pour l'impression de la partie imaginaire du cham_gd  %(k2)s 
 """),
 
-29: _("""
+29 : _("""
  probleme a l'ouverture du fichier de valeurs ensight  %(k1)s  pour l'impression de la partie imaginaire du champ  %(k2)s  du concept %(k3)s 
 """),
 
-30: _("""
+30 : _("""
  probleme a l'ouverture du fichier de valeurs ensight  %(k1)s .r : ce fichier existe deja !! l'impression du meme champ ouconcept resultat est demandee deux fois ou une meme composante est selectionnee 2 fois sous le mot-cle nom_cmp
 """),
 
-31: _("""
+31 : _("""
  probleme a l'ouverture du fichier de valeurs ensight  %(k1)s  pour l'impression du cham_gd  %(k2)s 
 """),
 
-32: _("""
+32 : _("""
  probleme a l'ouverture du fichier de valeurs ensight  %(k1)s  pour l'impression du champ  %(k2)s  du concept  %(k3)s 
 """),
 
-33: _("""
+33 : _("""
  probleme a l'ouverture du fichier de valeurs ensight  %(k1)s  : ce fichier existe deja !! l'impression du meme champ ouconcept resultat est demandee deux fois ou une meme composante est selectionnee 2 fois sous le mot-cle nom_cmp
 """),
 
-
-
-
-
-
-
-
-35: _("""
+35 : _("""
    desole on ne sait pas ecrire les champs aux noeuds de representation constante et a valeurs complexes au format  %(k1)s 
 """),
 
-36: _("""
+36 : _("""
    desole on ne sait pas ecrire le champ aux noeuds  %(k1)s  au format  %(k2)s 
 """),
 
-37: _("""
+37 : _("""
  le maillage  %(k1)s  associe au cham_gd  %(k2)s  est different du maillage  %(k3)s  en operande de la commande !!!! attention !!!!
 """),
 
-38: _("""
+38 : _("""
  le maillage  %(k1)s  associe au champ  %(k2)s  du concept  %(k3)s  est different du maillage  %(k4)s  en operande de la commande !!!! attention !!!!
 """),
 
-39: _("""
+39 : _("""
  probleme a l'ouverture du fichier d'avertissement  %(k1)s 
 """),
 
-40: _("""
+40 : _("""
  aucune des composantes demandees sous le mot-cle nom_cmp pour l'impression du cham_gd  %(k1)s  n'est presente dans la grandeur  %(k2)s 
 """),
 
-41: _("""
+41 : _("""
  aucune des composantes demandees sous le mot-cle nom_cmp pour l'impression du champ  %(k1)s  du concept  %(k2)s  n'est presente dans la grandeur  %(k3)s 
 """),
 
-42: _("""
+42 : _("""
   impr_resu format ensight : la composante  %(k1)s  du cham_gd  %(k2)s  n'est pas portee par les noeuds du maillage et ne sera pas imprimee
 """),
 
-43: _("""
+43 : _("""
   impr_resu format ensight : la composante  %(k1)s  du champ  %(k2)s  du concept  %(k3)s  n'est pas portee par les noeuds du maillage et ne sera pas imprimee
 """),
 
-44: _("""
+44 : _("""
   impr_resu format ensight : aucune des trois composantes  %(k1)s   %(k2)s   %(k3)s  du cham_gd  %(k4)s  n'est portee par les noeuds du maillage et le vecteur ensight correspondant ne sera pas imprime
 """),
 
-45: _("""
+45 : _("""
   impr_resu format ensight : aucune des trois composantes  %(k1)s   %(k2)s   %(k3)s  du champ  %(k4)s  du concept  %(k5)s  n'est portee par les noeuds du maillage et le vecteur ensight correspondant ne sera pas imprime
 """),
 
-46: _("""
+46 : _("""
   numero d'ordre  %(k1)s  non licite 
 """),
 
-47: _("""
+47 : _("""
   le numero d'ordre suivant est desormais considere comme le premier numero d'ordre demande
 """),
 
-48: _("""
+48 : _("""
   pour certains numeros d'ordre le champ  %(k1)s  n'est pas present dans la sd_resultat  %(k2)s ==> des fichiers de valeurs vides seront generes afin de respecter le format ensight.
 """),
 
-49: _("""
+49 : _("""
  le nombre de cmps de la grandeur du champ depasse 500 augmenter la dimension du tableau ivari
 """),
 
-50: _("""
+50 : _("""
  une meme composante est donnee 2 fois sous le mot-cle nom_cmp lors de l'impression au format ensight par impr_resu
 """),
 
-51: _("""
+51 : _("""
  type de structure non traite:  %(k1)s 
 """),
 
-52: _("""
+52 : _("""
  on imprime que des champs elno
 """),
 
-53: _("""
+53 : _("""
  nbcmp different
 """),
 
-54: _("""
+54 : _("""
  composante inconnue %(k1)s 
 """),
 
-55: _("""
- attention, il faut specifier les noms des composantes du tenseur pour pouvoir les visualiser separement avec gmsh
+55 : _("""
+ L'ordre des composantes établi lorsque que vous avez renseigné le mot-clé 
+ NOM_CMP est différent de celui du catalogue Aster:
+    - ordre des composantes fournies     : %(k1)s %(k2)s %(k3)s %(k4)s %(k5)s %(k6)s
+    - ordre des composantes du catalogue : %(k7)s %(k8)s %(k9)s %(k10)s %(k11)s %(k12)s
 """),
 
-56: _("""
+56 : _("""
  on imprime que des champs "elga" ou "elem"
 """),
 
-57: _("""
+57 : _("""
  nbsp different de 1
 """),
 
-58: _("""
+58 : _("""
  pas de correspondance
 """),
 
-59: _("""
+59 : _("""
  aucun champ trouve, pas d'impression au format "gmsh"
 """),
 
-60: _("""
+60 : _("""
  on ne sait pas imprimer au format "gmsh" ce type de champ:  %(k1)s 
 """),
 
-61: _("""
+61 : _("""
  erreur de programmation : nbcmp different de 1 ou 3.
 """),
 
-62: _("""
+62 : _("""
  on ne peut pas traiter des elements a plus de 99 noeuds !
 """),
 
-63: _("""
+63 : _("""
  erreur de programation
 """),
 
-64: _("""
+64 : _("""
  seg4 element inexistant dans castem, converti en seg2
 """),
 
-65: _("""
+65 : _("""
  tria7 element inexistant dans castem, converti en tria6
 """),
 
-66: _("""
+66 : _("""
  quad9 element inexistant dans castem, converti en quad8
 """),
 
-67: _("""
+67 : _("""
  les champs n'ont pas la meme grandeur
 """),
 
-68: _("""
+68 : _("""
  les champs n'ont pas la meme numerotation
 """),
 
-69: _("""
+69 : _("""
  les champs n'ont pas le meme type de valeurs
 """),
 
-70: _("""
+70 : _("""
    desole on ne sait pas ecrire les champs aux noeuds de representation constante au format ideas
 """),
 
-71: _("""
+71 : _("""
  element noeud non disponible dans ensight
 """),
 
-72: _("""
+72 : _("""
  element  %(k1)s  non disponible dans ensight
 """),
 
-73: _("""
+73 : _("""
  les elements tria7 seront reduits a des tria6
 """),
 
-74: _("""
+74 : _("""
  les elements quad9 seront reduits a des quad8
 """),
 
-75: _("""
+75 : _("""
  les elements penta15 seront reduits a des penta6
 """),
 
-76: _("""
+76 : _("""
  il y a des groupes de noeuds dans le maillage  %(k1)s  qui n'apparaitront pas dans le fichier geometrie ensight: seuls des groupes de mailles peuvent y etre integres
 """),
 
-77: _("""
+77 : _("""
  la dimension du probleme est invalide : il faut : 1d, 2d, 3d.
 """),
 
-78: _("""
+78 : _("""
  hexa27 element inexistant dans ideas, converti en hexa20
 """),
 
-79: _("""
+79 : _("""
  tria7 element inexistant dans ideas, converti en tria6
 """),
 
-80: _("""
+80 : _("""
  quad9 element inexistant dans ideas, converti en quad8
 """),
 
-81: _("""
+81 : _("""
  seg4 element inexistant dans ideas, converti en seg2
 """),
 
-82: _("""
+82 : _("""
  element pyram5 non disponible dans ideas
 """),
 
-83: _("""
+83 : _("""
  element pyram13 non disponible dans ideas
 """),
 
-84: _("""
- code invalide : icod2
-"""),
-
-85: _("""
- description du fichier med :  %(k1)s 
-"""),
-
-86: _("""
- med: erreur effide numero  %(k1)s 
-"""),
-
-87: _("""
- ce maillage est deja present dans le fichier.
-"""),
-
-88: _("""
- ouverture du fichier med en mode  %(k1)s  %(k2)s 
-"""),
-
-89: _("""
- med: erreur efmaac numero  %(k1)s 
-"""),
-
-90: _("""
- med: erreur effamc numero  %(k1)s 
-"""),
-
-91: _("""
- med: erreur effame numero  %(k1)s 
-"""),
-
-92: _("""
- med: famille de  %(k1)s , erreur effame numero  %(k2)s 
-"""),
-
-93: _("""
+93 : _("""
  on ne sait pas ecrire les mailles de type  %(k1)s 
 """),
 
-94: _("""
- med: erreur efcone numero  %(k1)s 
-"""),
-
-95: _("""
- med: erreur efnome numero  %(k1)s 
-"""),
-
-96: _("""
- med: erreur efnume numero  %(k1)s 
-"""),
-
-97: _("""
- med: erreur efcooe numero  %(k1)s 
-"""),
-
-98: _("""
- med: erreur efngau numero  %(k1)s 
-"""),
-
-99: _("""
- med: erreur efgaui numero  %(k1)s 
-"""),
 }
index b7a2144812cfec9319d01a9354628974aefe3856..bf2f270bcf41bc7a1db154198d5caae5196d96bc 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF prepost3 Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF prepost3 Messages  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- med: erreur efgaul numero  %(k1)s 
-"""),
-
-2: _("""
- med: erreur efgaue numero  %(k1)s 
-"""),
-
-3: _("""
- ecriture des localisations des points de gauss
-"""),
-
-4: _("""
+4 : _("""
   le nombre de noeuds selectionnes est superieur au nombre de noeuds du maillage. on va tronquer la liste.
 """),
 
-5: _("""
+5 : _("""
  chaine de caracteres trop longues : imprimer moins de champs
 """),
 
-6: _("""
+6 : _("""
  type inconnu" %(k1)s "
 """),
 
-7: _("""
+7 : _("""
  le maillage  %(k1)s  a deja ete ecrit au format ensight: le contenu du fichier  %(k2)s  sera ecrase.
 """),
 
-8: _("""
+8 : _("""
  probleme a l'ouverture du fichier " %(k1)s " pour impression du maillage  %(k2)s  au format ensight
 """),
 
-9: _("""
+9 : _("""
  type de base inconnu:  %(k1)s 
 """),
 
-10: _("""
- soit le fichier n'existe pas, soit c'est une mauvaise version de hdf (utilise par med).
-"""),
-
-11: _("""
- pas de maillage dans  %(k1)s 
-"""),
-
-12: _("""
- maillage  %(k1)s  inconnu dans  %(k2)s 
-"""),
-
-13: _("""
- instant inconnu pour ce champ et ces supports dans le fichier.
-"""),
-
-14: _("""
- champ inconnu.
-"""),
-
-15: _("""
- il manque des composantes.
-"""),
-
-16: _("""
- aucune valeur a cet instant.
-"""),
-
-17: _("""
- aucune valeur a ce nro d ordre.
-"""),
-
-18: _("""
- mauvais nombre de valeurs.
-"""),
-
-19: _("""
- lecture impossible.
-"""),
-
-20: _("""
- absence de numerotation des mailles  %(k1)s  dans le fichier med
-"""),
-
-21: _("""
- grandeur inconnue
-"""),
-
-22: _("""
- composante inconnue pour la grandeur
-"""),
-
-23: _("""
- trop de composantes pour la grandeur
-"""),
-
-24: _("""
- lecture impossible pour  %(k1)s  au format med
-"""),
-
-25: _("""
- modele obligatoire pour lire un cham_elem
-"""),
-
-26: _("""
- med: erreur efchrl numero  %(k1)s 
-"""),
-
-27: _("""
- nom de composante tronquee a 8 caracteres ( %(k1)s  >>>  %(k2)s )
-"""),
-
-28: _("""
- impossible de trouver la composante aster associee a  %(k1)s 
-"""),
-
-29: _("""
- pour lire_resu / format=ideas le maillage doit normalement avoir ete lu au format ideas.
-"""),
-
-30: _("""
- on a trouve plusieurs champs pour le meme dataset
-"""),
-
-31: _("""
- on n'a pas trouve le numero d'ordre a l'adresse indiquee
-"""),
-
-32: _("""
- on n'a pas trouve l'instant a l'adresse indiquee
-"""),
-
-33: _("""
- on n'a pas trouve la frequence a l'adresse indiquee
-"""),
-
-34: _("""
- on n'a pas trouve dans le fichier unv le type de champ
-"""),
-
-35: _("""
- on n'pas trouve dans le fichier unv le nombre de composantes a lire
-"""),
-
-36: _("""
- on n'pas trouve dans le fichier unv la nature du champ (reel ou complexe)
-"""),
-
-37: _("""
- le type de champ demande est different du type de champ a lire
-"""),
-
-38: _("""
- le champ demande n'est pas dememe nature que le champ a lire (reel/complexe)
-"""),
-
-39: _("""
- le mot cle modele est obligatoire pour un cham_elem
+29 : _("""
+ pour LIRE_RESU / FORMAT=IDEAS
+ le maillage doit normalement avoir été lu au format IDEAS.
 """),
 
-40: _("""
- pb correspondance noeud ideas
+30 : _("""
+ on a trouve plusieurs champs pour le même DATASET
 """),
 
-41: _("""
le champ de type elga n'est pas  supporte
+31 : _("""
on n'a pas trouvé le numéro d'ordre à l'adresse indiquée
 """),
 
-42: _("""
- probleme dans la lecture du nombre de champs
+32 : _("""
+ on n'a pas trouvé l'instant à l'adresse indiquée
 """),
 
-43: _("""
- probleme dans la lecture du nombre de composantes
+33 : _("""
+ on n'a pas trouvé la fréquence à l'adresse indiquée
 """),
 
-44: _("""
- probleme dans la lecture du nom du champ et des ses composantes
+34 : _("""
+ on n'a pas trouvé dans le fichier UNV le type de champ
 """),
 
-45: _("""
- le champ  %(k1)s n existe pas dans le fichier med
+35 : _("""
+ on n'a pas trouvé dans le fichier UNV le nombre de composantes à lire
 """),
 
-46: _("""
- med: erreur efnpdt numero  %(k1)s 
+36 : _("""
+ on n'a pas trouvé dans le fichier UNV la nature du champ
+ (réel ou complexe)
 """),
 
-47: _("""
- med: erreur efpdti numero  %(k1)s 
+37 : _("""
+ le type de champ demandé est différent du type de champ à lire
 """),
 
-48: _("""
- med: on ne traite pas les maillages distants
+38 : _("""
+ le champ demande n'est pas de même nature que le champ à lire
+ (réel/complexe)
 """),
 
-49: _("""
- probleme a la fermeture
+39 : _("""
+ le mot cle MODELE est obligatoire pour un CHAM_ELEM
 """),
 
-50: _("""
- probleme dans le diagnostic.
+40 : _("""
+ pb correspondance noeud IDEAS
 """),
 
-51: _("""
- med: erreur efnval numero  %(k1)s 
+41 : _("""
+ le champ de type ELGA n'est pas supporté
 """),
 
-52: _("""
- probleme dans la lecture du nombre de maillages
-"""),
-
-53: _("""
- probleme dans la lecture du nom du maillage.
-"""),
-
-54: _("""
- attention le maillage n'est pas de type non structure
-"""),
-
-55: _("""
- le maillage ' %(k1)s ' est inconnu dans le fichier.
-"""),
-
-56: _("""
- attention il s'agit d'un maillage structure
-"""),
-
-57: _("""
- ==> transfert impossible.
-"""),
-
-58: _("""
- mauvaise definition de noresu.
-"""),
-
-59: _("""
- mauvaise definition de nomsym.
-"""),
-
-60: _("""
- mauvaise definition de nopase.
-"""),
-
-61: _("""
- mauvais dimensionnement de nomast.
-"""),
-
-62: _("""
- impossible de determiner un nom de maillage med
-"""),
-
-63: _("""
+63 : _("""
  on attend 10 ou 12 secteurs
 """),
 
-64: _("""
+64 : _("""
  ******* percement tube *******
 """),
 
-65: _("""
+65 : _("""
  pour la variable d'acces "noeud_cmp", il faut un nombre pair de valeurs.
 """),
 
-66: _("""
- le modele et le maillage introduits ne sont pas coherents
-"""),
-
-67: _("""
- il faut donner le maillage pour une impression au format "castem".
+66 : _("""
+ le modèle et le maillage introduits ne sont pas cohérents
 """),
 
-68: _("""
- vous voulez imprimer           sur un meme fichier le maillage et un champ ce qui est            incompatible avec le format gmsh
+6: _("""
+ il faut donner le maillage pour une impression au format "CASTEM".
 """),
 
-69: _("""
- le mot cle  'partie' est obligatoire.
+68 : _("""
+ vous voulez imprimer sur un même fichier le maillage et un champ
+ ce qui est incompatible avec le format GMSH
 """),
 
-70: _("""
- le mot cle "info_maillage" est reserve au format med
+69 : _("""
+ L'impression d'un champ complexe nécessite l'utilisation du mot-clé PARTIE.
+ Ce mot-clé permet de choisir la partie du champ à imprimer (réelle ou imaginaire).
 """),
 
-71: _("""
+71 : _("""
  le mot cle "info_resu" est reserve au format resultat
 """),
 
-72: _("""
+72 : _("""
  l'impression avec selection sur des entites topologiques n'a pas de sens au format ensight : les valeurs de tous les noeuds du maillage seront donc imprimees.
 """),
 
-73: _("""
+73 : _("""
  l'impression avec selection sur des entites topologiques n'a pas de sens au format castem  : toutes les valeurs sur tout le maillage seront donc imprimees.
 """),
 
-
-
-
-
-
-75: _("""
- fichier gibi cree par sort format non supporte dans cette version
+75 : _("""
+ fichier GIBI créé par SORT FORMAT non supporté dans cette version
 """),
 
-76: _("""
- version de gibi non supporte, la lecture peut echouer !
+76 : _("""
+ version de GIBI non supportée, la lecture peut échouer
 """),
 
-77: _("""
- fichier gibi errone
+77 : _("""
+ fichier GIBI erroné
 """),
 
-78: _("""
- le fichier maillage gibi est vide
+78 : _("""
+ le fichier maillage GIBI est vide
 """),
 
-79: _("""
- cette commande ne fait que completer un resultat_compose deja existant. il faut donc que le resultat de la commande :  %(k1)s  soit identique a l'argument "resultat" :  %(k2)s 
+79 : _("""
+ cette commande ne fait que compléter un résultat composé déjà existant.
+ il faut donc que le résultat de la commande :  %(k1)s
+ soit identique à l'argument "RESULTAT" :  %(k2)s 
 """),
 
-80: _("""
- pour un resultat de type " %(k1)s ", on ne traite que l'option ..._noeu_...
+80 : _("""
+ pour un résultat de type " %(k1)s ", on ne traite que l'option ..._NOEU_...
 """),
 
-81: _("""
+81 : _("""
  lmat =0
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-84: _("""
- il faut autant de cmp en i et j
-"""),
-
-85: _("""
- il faut autant de cmp que de noeud
+84 : _("""
+ il faut autant de composantes en i et j
 """),
 
-
-
-
-
-
-87: _("""
- y a un bug 5
+85 : _("""
+ il faut autant de composantes que de noeuds
 """),
 
-88: _("""
- y a un bug 6
+92 : _("""
+ mot clé "TEST_NOOK" non validé avec le mot clé facteur "INTE_SPEC".
 """),
 
-89: _("""
- y a un bug 7
-"""),
-
-90: _("""
- y a un bug 8
-"""),
-
-91: _("""
- y a un bug 9
-"""),
-
-92: _("""
- mot cle "test_nook" non valide avec le mot cle facteur "inte_spec".
-"""),
-
-93: _("""
+93 : _("""
  la fonction n'existe pas.
 """),
 
-94: _("""
- il faut definir deux parametres pour une nappe.
+94 : _("""
+ il faut définir deux paramètres pour une nappe.
 """),
 
-95: _("""
- pour le parametre donne on n'a pas trouve la fonction.
+95 : _("""
+ pour le paramètre donné on n'a pas trouvé la fonction.
 """),
 
-96: _("""
- la methode 'wohler' ne peut pas etre utilisee avec l'option %(k1)s 
-"""),
-
-97: _("""
- une courbe de wohler doit etre definie dans defi_materiau
-"""),
-
-98: _("""
- la methode  'manson_coffin' ne peut pas etre utilisee avec l'option %(k1)s 
-"""),
-
-99: _("""
- une courbe de manson_coffin doit etre definie dans defi_materiau
-"""),
 }
index 53b6f5e103521afdd291c6154313b20d5684242b..b48cbcfc21b0c5106f8cee291d60aef91aee314d 100644 (file)
-#@ MODIF prepost4 Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF prepost4 Messages  DATE 09/10/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  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.
+# COPYRIGHT (C) 1991 - 2007  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.        
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- la methode 'taheri_manson' ne peut pas etre utilisee avec l'option %(k1)s
+: _("""
+ l'option  %(k1)s n'a pas été calculée pour la SD  %(k2)s
 """),
 
-2: _("""
- le nom de la fonction  nappe dsigm(depsi,depsimax) doit etre present sous le mot cle 'taheri_nappe'
+: _("""
+ le champ " %(k1)s " ( %(k2)s ) n'a pas été noté dans la SD  %(k3)s
 """),
 
-3: _("""
- le nom de la fonctiondsigm(depsi) doit etre present sous le mot cle 'taheri_fonc'
+: _("""
+ "TUBE_NEUF" n'a de sens que pour une table d'usure existante
 """),
 
-4: _("""
- la methode 'taheri_mixte' ne peut pas etre utilisee avec l'option %(k1)s
+: _("""
+ angle initial différent de -180. degrés.
 """),
 
-5: _("""
- l'option  %(k1)s n'a  pas ete calculee dans la sd  %(k2)s
-"""),
-
-6: _("""
- le champ " %(k1)s " ( %(k2)s ) n'a pas ete note dans la sd  %(k3)s
-"""),
-
-7: _("""
- "tube_neuf" n'a de sens que pour une table d'usure existante
-"""),
-
-8: _("""
- angle initial different de -180. degres.
-"""),
-
-9: _("""
+9 : _("""
  les angles ne sont pas croissants.
 """),
 
-10: _("""
- angle final different de 180. degres.
+10 : _("""
+ angle final différent de 180. degrés.
 """),
 
-11: _("""
- rayon mobile obligatoire avec             secteur.
+11 : _("""
+ rayon mobile obligatoire avec secteur.
 """),
 
-12: _("""
- rayon obstacle obligatoire avec           secteur.
+12 : _("""
+ rayon obstacle obligatoire avec secteur.
 """),
 
-13: _("""
+13 : _("""
  la table usure en sortie est differente de celle en entree
 """),
 
-14: _("""
- le nombre de secteurs en sortie est different de celui en entree
+14 : _("""
+ le nombre de secteurs en sortie est différent de celui en entree
 """),
 
-15: _("""
+15 : _("""
  probleme extraction pour la table  %(k1)s
 """),
 
-16: _("""
+16 : _("""
  attention : le calcul du dommage n'a de sens que pour des dsp en contraintes
 """),
 
-17: _("""
+17 : _("""
  aucune valeur de moment presente
 """),
 
-18: _("""
+18 : _("""
  y a un bug: recup frequences
 """),
 
-19: _("""
+19 : _("""
  il faut au moins un group_ma_radier
 """),
 
-20: _("""
+20 : _("""
  rigidite de translation non nulle
 """),
 
-21: _("""
+21 : _("""
  rigidite de rotation non nulle
 """),
 
-22: _("""
+22 : _("""
  nombres de composantes raideurs et mode differents
 """),
 
-23: _("""
+23 : _("""
  nombres de group_ma et amor_interne differents
 """),
 
-24: _("""
+24 : _("""
  nombres de composantes amortissements et mode differents
 """),
 
-25: _("""
- option sief_elga non developpee
-"""),
-
-26: _("""
+26 : _("""
  le type du concept resultat  n'est ni evol_elas, ni evol_noli.
 """),
 
-27: _("""
+27 : _("""
  vous avez probablement archive l etat initial dans la commande stat_non_line. cela correspond au numero d ordre 0. nous ne tenons pas compte du resultat a ce numero d ordre pour le calcul de de la fatigue.
 """),
 
-28: _("""
+28 : _("""
  les champs de contraintes aux points de gauss sigm_noeu_depl ou sief_noeu_elga sief_noeu_elga n'ont pas ete calcules.
 """),
 
-29: _("""
+29 : _("""
  les champs de  contraintes aux points de gauss n'existent pas.
 """),
 
-30: _("""
+30 : _("""
  le champ simple qui contient les valeurs des contraintes n existe pas.
 """),
 
-31: _("""
+31 : _("""
  le critere de fatemi et socie est prevu pour fonctionner apres un calcul elastoplastique, son utilisation apres meca_statique n'est pas prevue.
 """),
 
-32: _("""
+32 : _("""
  le champ de contraintes aux points de gauss sief_elga ou sief_elga_depl n'a pas ete calcule.
 """),
 
-33: _("""
+33 : _("""
  le champ de deformations aux points de gauss epsi_elga_depl n'a pas ete calcule.
 """),
 
-34: _("""
+34 : _("""
  les champs de  deformations aux points de gauss n'existent pas.
 """),
 
-35: _("""
+35 : _("""
  le champ simple qui contient les valeurs des deformations n existe pas.
 """),
 
-36: _("""
+36 : _("""
  les champs de contraintes aux noeuds sigm_noeu_depl ou sief_noeu_elga n'ont pas ete calcules.
 """),
 
-37: _("""
+37 : _("""
  les champs de  contraintes aux noeuds n'existent pas.
 """),
 
-38: _("""
+38 : _("""
  le champ de contraintes aux noeuds sief_noeu_elga n'a pas ete calcule.
 """),
 
-39: _("""
+39 : _("""
  le champ de deformations aux noeuds epsi_noeu_depl n'a pas ete calcule.
 """),
 
-40: _("""
+40 : _("""
  le champ de  contraintes aux noeuds n'existe pas.
 """),
 
-41: _("""
+41 : _("""
  le champ de  deformations aux noeuds n'existe pas.
 """),
 
-42: _("""
- la donnee d'une courbe de wohler est obligatoire
-"""),
-
-43: _("""
- la donnee du moment spectral d'ordre 4 est obligatoire pour le comptage des pics de contraintes
-"""),
-
-44: _("""
- la valeur du moment spectral d'ordre 0 (lambda_0) est certainement nulle
-"""),
-
-45: _("""
- la valeur du moment spectral d'ordre 2 (lambda_2) est nulle
-"""),
-
-46: _("""
- la valeur du moment spectral d'ordre 4 (lambda_4) est nulle
-"""),
-
-47: _("""
+47 : _("""
  inst_init plus grand que inst_fin
 """),
 
-48: _("""
- l'histoire de chargement doit avoir meme discretisation pour toutes les composantes
-"""),
-
-49: _("""
- loi de dommage non compatible
-"""),
-
-50: _("""
- l'histoire de la deformation plastique cumulee doit avoir meme discretisation que l'histoire des contraintes
-"""),
-
-51: _("""
- l'histoire de la temperature doit avoir meme discretisation que l'histoire des contraintes
-"""),
-
-52: _("""
- methode de comptage inconnue
-"""),
-
-53: _("""
- nombre de cycles nul
-"""),
-
-54: _("""
- l'utilisation de manson_coffin est reserve a des histoires de chargements en deformations
-"""),
-
-55: _("""
- la courbe de manson_coffin doit etre donnee dans defi_materiau
-"""),
-
-56: _("""
- les lois de taheri sont reservees pour des chargements en deformations
-"""),
-
-57: _("""
+57 : _("""
   erreur donnees.
 """),
 
-58: _("""
- presence de point(s) que dans un secteur.
-"""),
-
-59: _("""
- aucun cercle n'est  circonscrit aux quatre points.
-"""),
-
-60: _("""
- le decalage se trouve necessairement cote revetement. le decalage doit etre negatif
-"""),
-
-61: _("""
- hors bornes definies dans cesmat ou cmp non affectee.
-"""),
-
-62: _("""
- les mailles attachees au noeud traite ne sont pas affectees du meme materiau.
-"""),
-
-63: _("""
- pour calculer le dommage max il faut renseigner cisa_plan_crit dans la commande defi_materiau
-"""),
-
-64: _("""
- nous ne pouvons  pas recuperer la valeur du parametre a du critere de matake, cf. commande:  defi_materiau, operande: cisa_plan_crit.
-"""),
-
-65: _("""
- nous ne pouvons  pas recuperer la valeur du parametre b du critere de matake, cf. commande:  defi_materiau, operande: cisa_plan_crit.
-"""),
-
-66: _("""
- nous ne pouvons pas recuperer la valeur du coefficient de passage flexion-torsion, cf. commande:  defi_materiau, operande: cisa_plan_crit.
-"""),
-
-67: _("""
- nous ne pouvons  pas recuperer la valeur du parametre a du critere de dang_van_modi_ac, cf. commande:  defi_materiau, operande: cisa_plan_crit.
-"""),
-
-68: _("""
- nous ne pouvons  pas recuperer la valeur du parametre b du critere de dang_van_modi_ac, cf. commande:  defi_materiau, operande: cisa_plan_crit.
-"""),
-
-69: _("""
- nous ne pouvons  pas recuperer la valeur du coefficient de passage cisaillement-traction, cf. commande:  defi_materiau, operande: cisa_plan_crit.
-"""),
-
-70: _("""
- nous ne pouvons  pas recuperer la valeur du parametre a du critere domm_maxi, de la commande:  defi_materiau, operande: cisa_plan_crit.
-"""),
-
-71: _("""
- nous ne pouvons  pas recuperer la valeur du parametre b du critere domm_maxi, de la commande:  defi_materiau, operande: cisa_plan_crit.
-"""),
-
-72: _("""
- nous ne pouvons pas recuperer la valeur du coefficient de passage cisaillement-traction, de la commande:  defi_materiau, operande: cisa_plan_crit.
-"""),
-
-73: _("""
- nous ne pouvons  pas recuperer la valeur du parametre a du critere dang_van_modi_av, de la commande:  defi_materiau, operande: cisa_plan_crit.
+58 : _("""
+ présence de point(s) que dans un secteur.
 """),
 
-74: _("""
nous ne pouvons  pas recuperer la valeur du parametre b du critere dang_van_modi_av, de la commande:  defi_materiau, operande: cisa_plan_crit.
+59 : _("""
aucun cercle n'est circonscrit aux quatre points.
 """),
 
-75: _("""
- nous ne pouvons  pas recuperer la valeur du parametre a du critere fatemi_socie, de la commande:  defi_materiau, operande: cisa_plan_crit.
+60 : _("""
+ le décalage se trouve nécessairement coté revêtement
+ le décalage doit être négatif
 """),
 
-76: _("""
- le champ demande n'est pas prevu
+76 : _("""
+ le champ demandé n'est pas prévu
 """),
 
-77: _("""
+77 : _("""
  nom_cham:  %(k1)s  interdit.
 """),
 
-78: _("""
+78 : _("""
  methode non programmee pour les hexa, penta et pyram
 """),
 
-79: _("""
+79 : _("""
  probleme de convergence pour calculer la nouvelle carte de taille
 """),
 
-
-
-
-
-
-
-
-81: _("""
- lunule, bug !
-"""),
-
-82: _("""
+82 : _("""
  type  %(k1)s  non implante.
 """),
 
-83: _("""
+83 : _("""
  profondeur > rayon du tube
 """),
 
-84: _("""
- pas d'informations dans le "resu_gene" sur l'option "choc".
+84 : _("""
+ pas d'informations dans le "RESU_GENE" sur l'option "choc".
 """),
 
-85: _("""
+85 : _("""
  modele non valide.
 """),
 
-86: _("""
+86 : _("""
   seuil / v0  > 1
 """),
 
-87: _("""
+87 : _("""
   ***** arret du calcul *****
 """),
 
-88: _("""
- nno > 27
-"""),
-
-89: _("""
+89 : _("""
  type non traite  %(k1)s
 """),
 
-90: _("""
- les tables tabl_meca_rev et tabl_meca_mdb n ont pas les memes dimensions
+90 : _("""
+ les tables TABL_MECA_REV et TABL_MECA_MDB n'ont pas les mêmes dimensions
 """),
 
-91: _("""
- les tables n ont pas les memes instants de calculs
+91 : _("""
+ les tables n'ont pas les mêmes instants de calculs
 """),
 
-92: _("""
- les tables n ont pas les memes dimensions
+92 : _("""
+ les tables n'ont pas les mêmes dimensions
 """),
 
-93: _("""
- volume use trop grand pour la modelisation
+93 : _("""
+ volume usé trop grand pour la modélisation
 """),
 
-94: _("""
+94 : _("""
 Elément inconnu.
    Type d'élément Gibi          : %(i1)d
    Nombre de sous-objet         : %(i2)d
@@ -409,30 +259,19 @@ La ligne lue dans le fichier doit ressembler 
 %(i1)8d%(i2)8d%(i3)8d%(i4)8d%(i5)8d
 """),
 
-95: _("""
+95 : _("""
 On a lu un objet dit composé (car type d'élément = 0) qui serait
 composé de 0 sous-objet !
 """),
 
-96: _("""
+96 : _("""
  Type de concept invalide.
 """),
 
-97: _("""
+97 : _("""
  Erreur Utilisateur :
- La maille de peau : %(k1)s ne peut pas etre réorientée.
+ La maille de peau : %(k1)s ne peut pas être réorientée.
  Car elle est inserrée entre 2 mailles "support" placées de part et d'autre : %(k2)s et %(k3)s.
-
 """),
 
-
-
-
-
-
-
-
-
-
-
 }
index 4663764056a15da0c6ce66dc305f966b7eff5908..b4a0c7f35f36846000c3328e78782d5e062ead68 100644 (file)
-#@ MODIF prepost5 Messages  DATE 23/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF prepost5 Messages  DATE 28/01/2008   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
+1 : _("""
  L'option %(k1)s est deja calculee pour le numero d'ordre %(k2)s.
  On la recalcule car les donnees peuvent etre differentes.
 """),
 
-2: _("""
+2 : _("""
 Champ inexistant SIEF_ELGA ou SIEF_ELGA_DEPL numero d'ordre %(k2)s pour le calcul de l'option %(k3)s
 """),
 
-3: _("""
+3 : _("""
 Champ inexistant DEPL numero d'ordre %(k2)s pour le calcul de l'option %(k3)s
 """),
 
-4: _("""
+4 : _("""
 Champ inexistant %(k1)s numero d'ordre %(k2)s pour le calcul de l'option %(k3)s
 """),
 
-5: _("""
+5 : _("""
 Option illicite pour le resultat %(k1)s numero d'ordre %(k2)s pour le calcul de l'option %(k3)s
 """),
 
-6: _("""
+6 : _("""
 Numero d'ordre trop grand %(k1)s pour le calcul de l'option %(k2)s
 """),
 
-7: _("""
+7 : _("""
 Option illicite pour le resultat %(k1)s numero d'ordre trop grand %(k2)s pour le calcul de l'option %(k3)s
 """),
 
-8: _("""
+8 : _("""
+
  la taille memoire   necessaire au vecteur de travail dans   lequel nous stockons les composantes   u et v du vecteur tau est trop importante   par rapport a la place disponible.
- taille disponible :  %(i1)d 
- taille necessaire :  %(i2)d 
+ taille disponible :  %(i1)d
+ taille necessaire :  %(i2)d
 """),
 
-9: _("""
+9 : _("""
+
  La commande POST_ZAC ne tolère comme variable de commande que la température.
  """),
 
-10: _("""
+10 : _("""
  le noeud traite  n'est associe a aucune maille volumique.
- numero du noeud =  %(i1)d 
- nombre de mailles attachees au noeud =  %(i2)d 
-"""),
-
-11: _("""
- Vous utilisez le mot clé TEMP_CALCULEE de la commande AFFE_CHAR_MECA
- avec POST_ZAC. Utilisez AFFE_VARC dans la commande AFFE_MATERIAU à la place.
-"""),
-
-12: _("""
- le noeud milieu : %(k1)s 
- n'est pas supprime car il appartient  a une maille qui reste quadratique. 
-"""),
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-16: _("""
- appel erronenumero d'ordre %(i1)d code retour de rsexch : %(i2)d 
- pb cham_no %(k1)s 
-"""),
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-19: _("""
- nombre de noeud(s) elimine(s) du maillage  %(i1)d 
+ numero du noeud =  %(i1)d
+ nombre de mailles attachees au noeud =  %(i2)d
 """),
 
-20: _("""
- nombre de maille(s) eliminee(s) du maillage  %(i1)d 
+12 : _("""
+ le noeud milieu : %(k1)s
+ n'est pas supprime car il appartient  a une maille qui reste quadratique.
 """),
 
-21: _("""
- le numero du groupe de mailles est trop grand:  %(i1)d 
-  le numero du groupe doit etre inferieur a  %(i2)d 
+16 : _("""
+ appel erronenumero d'ordre %(i1)d code retour de rsexch : %(i2)d
+ pb cham_no %(k1)s
 """),
 
-22: _("""
- fichier med :  %(k1)s maillage :  %(k2)s erreur efouvr numero  %(i1)d 
+19 : _("""
+ nombre de noeud(s) elimine(s) du maillage  %(i1)d
 """),
 
-23: _("""
- fichier med :  %(k1)s champ :  %(k2)s erreur efferm numero  %(i1)d 
-"""),
-
-24: _("""
- fichier med :  %(k1)s champ :  %(k2)s retour de mdexch : existc =  %(i1)d 
-"""),
-
-25: _("""
-  on ne trouve pas la composante  %(k1)s  dans la grandeur  %(k2)s 
-"""),
-
-
-
-
-
-
-
-
-27: _("""
- l objet  %(k1)s  n existe pas. %(k2)s veuillez renseigner le modele. %(k3)s 
+20 : _("""
+ nombre de maille(s) eliminee(s) du maillage  %(i1)d
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-30: _("""
-  on ne trouve pas la maille  %(k1)s 
+21 : _("""
+ le numero du groupe de mailles est trop grand:  %(i1)d
+  le numero du groupe doit etre inferieur a  %(i2)d
 """),
 
-31: _("""
-  on ne trouve pas le groupe  %(k1)s 
+25 : _("""
+  on ne trouve pas la composante  %(k1)s  dans la grandeur  %(k2)s
 """),
 
-32: _("""
-  le groupe  %(k1)s  ne contient aucune maille  %(k2)s 
+3: _("""
+  on ne trouve pas la maille  %(k1)s
 """),
 
-33: _("""
- fichier med :  %(k1)s maillage :  %(k2)s 
+3: _("""
+  on ne trouve pas le groupe  %(k1)s
 """),
 
-
-
-
-
-
-
-
-35: _("""
- fichier med :  %(k1)s maillage :  %(k2)s erreur efferm numero  %(i1)d 
+32 : _("""
+  le groupe  %(k1)s  ne contient aucune maille  %(k2)s
 """),
 
-36: _("""
- fichier med :  %(k1)s erreur efouvr numero  %(i1)d 
+3: _("""
+  on ne trouve pas le noeud : %(k1)s
 """),
 
-37: _("""
- fichier med :  %(k1)s erreur efferm numero  %(i1)d 
+40 : _("""
+  le groupe  %(k1)s ne contient aucun noeud  %(k2)s
 """),
 
-38: _("""
-  on ne trouve pas le noeud : %(k1)s 
+41 : _("""
+  le parametre  %(k1)s n'existe pas %(k2)s
 """),
 
-
-
-
-
-
-
-
-40: _("""
-  le groupe  %(k1)s ne contient aucun noeud  %(k2)s 
+45 : _("""
+ noeud inconnu dans le fichier  ideas  noeud numero :  %(i1)d
 """),
 
-41: _("""
-  le parametre  %(k1)s n'existe pas %(k2)s 
+4: _("""
+ element inconnu dans le fichier ideas element numero :  %(i1)d
 """),
 
-42: _("""
-  valeurs lues dans le fichier        : %(i1)d 
- valeurs non affectees dans le champ : %(i2)d 
+54 : _("""
+ probleme dans  nomta traitement de l'instant  %(r1)f
+  recuperation de  %(k1)s
+  pour le secteur  %(i1)d
 """),
 
-43: _("""
- profil med :  %(k1)s erreur efnpfl numero  %(i1)d 
+57 : _("""
+ probleme dans  nomta traitement de l'instant  %(r1)f
+  recuperation de  %(k1)s
 """),
 
-44: _("""
- profil med :  %(k1)s erreur efpfll numero  %(i1)d 
+58 : _("""
+ probleme dans  nomta traitement de l'instant  %(r1)f
+  recuperation "numeli" pour  %(k1)s
 """),
 
-45: _("""
- noeud inconnu dans le fichier  ideas  noeud numero :  %(i1)d 
+59 : _("""
+ probleme dans  nomta traitement de l'instant  %(r1)f
+  recuperation "numeli" pour le secteur  %(i1)d
 """),
 
-46: _("""
- element inconnu dans le fichier ideas element numero :  %(i1)d 
+61 : _("""
+ la composante  %(k1)s  n'existe dans aucun des champs %(k2)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-50: _("""
- fichier med :  %(k1)s erreur efnmaa numero  %(i1)d 
-"""),
-
-51: _("""
- fichier med :  %(k1)s maillage numero  %(i1)d erreur efmaai numero  %(i2)d 
-"""),
-
-52: _("""
- fichier med :  %(k1)s maillage numero  %(i1)d nomamd est declare a  %(i2)d 
- le nom de maillage est :  %(k2)s 
- de longueur  %(i3)d 
-"""),
-
-
-
-
-
-
-
-
-54: _("""
- probleme dans  nomta traitement de l'instant  %(r1)f 
-  recuperation de  %(k1)s 
-  pour le secteur  %(i1)d 
-"""),
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-57: _("""
- probleme dans  nomta traitement de l'instant  %(r1)f 
-  recuperation de  %(k1)s 
-"""),
-
-58: _("""
- probleme dans  nomta traitement de l'instant  %(r1)f 
-  recuperation "numeli" pour  %(k1)s 
-"""),
-
-59: _("""
- probleme dans  nomta traitement de l'instant  %(r1)f 
-  recuperation "numeli" pour le secteur  %(i1)d 
-"""),
-
-
-
-
-
-
-
-
-61: _("""
- la composante  %(k1)s  n'existe dans aucun des champs %(k2)s 
-"""),
-
-
-
-
-
-
-
-
-
-
-
-64: _("""
+64 : _("""
  la valeur d'amortissement reduit est trop grande
- la valeur d'amortissement :  %(r1)f 
-  du mode propre  %(i1)d 
-  est tronquee au seuil :  %(r2)f 
+ la valeur d'amortissement :  %(r1)f
+  du mode propre  %(i1)d
+  est tronquee au seuil :  %(r2)f
 """),
 
+67 : _("""
 
-
-
-
-
-
-
-
-
-67: _("""
  la taille memoire   necessaire au vecteur de travail   est trop importante   par rapport a la place disponible.
- taille disponible :  %(i1)d 
- taille necessaire :  %(i2)d 
+ taille disponible :  %(i1)d
+ taille necessaire :  %(i2)d
 """),
 
-68: _("""
+68 : _("""
+
  la taille du vecteur  contenant les caracteristiques des   paquets de mailles est trop petite.
- nb de paquets maxi :  %(i1)d 
- nb de paquets reels:  %(i2)d 
+ nb de paquets maxi :  %(i1)d
+ nb de paquets reels:  %(i2)d
 """),
 
+70 : _("""
 
-
-
-
-
-
-
-70: _("""
  la taille du vecteur  contenant les caracteristiques des   paquets de noeuds est trop petite.
- nb de paquets maxi :  %(i1)d 
- nb de paquets reels:  %(i2)d 
+ nb de paquets maxi :  %(i1)d
+ nb de paquets reels:  %(i2)d
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-73: _("""
- appel errone  resultat :  %(k1)s   archivage numero :  %(i1)d 
-   code retour de rsexch :  %(i2)d 
-   probleme champ :  %(k2)s 
+73 : _("""
+ appel errone  resultat :  %(k1)s   archivage numero :  %(i1)d
+   code retour de rsexch :  %(i2)d
+   probleme champ :  %(k2)s
 """),
 
-74: _("""
- on ne trouve pas l'instant  %(r1)f  dans la table  %(k1)s 
+74 : _("""
+ on ne trouve pas l'instant  %(r1)f  dans la table  %(k1)s
 """),
 
-75: _("""
- on trouve   plusieurs instants  %(r1)f  dans la table  %(k1)s 
+75 : _("""
+ on trouve   plusieurs instants  %(r1)f  dans la table  %(k1)s
 """),
 
-76: _("""
+76 : _("""
  noeud non contenu dans une  maille sachant calculer l" option
- noeud numero :  %(i1)d 
+ noeud numero :  %(i1)d
+"""),
+
+77 : _("""
+ *** banque de donnees *** pour le type de geometrie  %(k1)s
+  le couple de materiaux  %(k2)s
+  ne se trouve pas dans la banque. %(k3)s
+"""),
+
+78 : _("""
+ le calcul du rayon n'est pas assez precis.cupn0 =  %(r1)f
+  cvpn0 =  %(r2)f
+ cupn1 =  %(r3)f
+  cvpn1 =  %(r4)f
+ cupn2 =  %(r5)f
+  cvpn2 =  %(r6)f
+ flag =  %(i1)d
+ cuon1 =  %(r7)f
+  cuon2 =  %(r8)f
+ cuon3 =  %(r9)f
+ cvon1 =  %(r10)f
+  cvon2 =  %(r11)f
+ cvon3 =  %(r12)f
+ rayon =  %(r13)f
+  raymin =  %(r14)f
+ (rayon - raymin) =  %(r15)f
+ ((rayon-raymin)/raymin) =  %(r16)f
+"""),
+
+79 : _("""
+ ngr different de nbgrel ngr   = %(i1)d  nbgrel= %(i2)d
 """),
 
-77: _("""
- *** banque de donnees *** pour le type de geometrie  %(k1)s 
-  le couple de materiaux  %(k2)s 
-  ne se trouve pas dans la banque. %(k3)s 
-"""),
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 }
diff --git a/Aster/Cata/cataSTA9/Messages/prepost6.py b/Aster/Cata/cataSTA9/Messages/prepost6.py
new file mode 100644 (file)
index 0000000..bd66712
--- /dev/null
@@ -0,0 +1,120 @@
+#@ MODIF prepost6 Messages  DATE 10/12/2007   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg = {
+
+3 : _("""
+ le volume differe du volume use mais le nombre d'iteration
+  est superieur a  %(i1)d 
+      volume use:  %(r1)f 
+  volume calcule:  %(r2)f 
+"""),
+
+4 : _("""
+ verifier les parametres d'usure pour le secteur  %(i1)d 
+"""),
+
+5 : _("""
+ verifier les parametres d'usure pour le secteur  %(i1)d 
+"""),
+
+6 : _("""
+ composante %(k1)s / point  %(i1)d 
+"""),
+
+7 : _("""
+   nombre de valeurs        =  %(i1)d    
+     %(r1)f, %(r2)f, ... 
+"""),
+
+8 : _("""
+   nombre de pics extraits   =  %(i1)d
+     %(r1)f, %(r2)f, ... 
+"""),
+
+9 : _("""
+   nombre de cycles detectes =  %(i1)d 
+"""),
+
+10 : _("""
+   %(i1)d  /  %(r1)f   %(r2)f 
+"""),
+
+11 : _("""
+   dommage en ce point/cmp  =  %(r1)f 
+"""),
+
+27 : _("""
+ parametres de calcul du dommagenombre de numeros d'ordre  =  %(i1)d 
+ nombre de points de calcul =  %(i2)d 
+"""),
+
+28 : _("""
+ calcul     du      dommage en %(k1)s points  de   calcul  du    dommage %(k2)s 
+ composante(s) grandeur equivalente %(k3)s 
+ methode  d'extraction  des    pics %(k4)s 
+ methode  de  comptage  des  cycles %(k5)s 
+ methode  de  calcul    du  dommage %(k6)s 
+"""),
+
+29 : _("""
+ maille:  %(k1)s 
+"""),
+
+30 : _("""
+ des mailles de peau ne s'appuient sur aucune maille support
+    maille:  %(k1)s 
+"""),
+
+31 : _("""
+
+     ===== GROUP_MA ASTER / PHYSICAL GMSH =====
+
+"""),
+
+32 : _("""
+
+  Le GROUP_MA GMSH GM10000 contient %(i1)d éléments :
+"""),
+
+33 : _("""
+       %(i1)d éléments de type %(k1)s
+"""),
+
+34 : _("""
+    La composante %(k1)s que vous avez renseignée ne fait pas partie
+    des composantes du champ à imprimer.
+"""),
+
+35 : _("""
+    Le type de champ %(k1)s n'est pas autorisé avec les champs 
+    élémentaires %(k2)s.
+    L'impression du champ sera effectué avec le type SCALAIRE.
+"""),
+
+36 : _("""
+ Veuillez utiliser IMPR_GENE pour l'impression 
+ de résultats en variables généralisées.
+"""),
+
+}
diff --git a/Aster/Cata/cataSTA9/Messages/proba0.py b/Aster/Cata/cataSTA9/Messages/proba0.py
new file mode 100644 (file)
index 0000000..8ae4221
--- /dev/null
@@ -0,0 +1,78 @@
+#@ MODIF proba0 Messages  DATE 25/02/2008   AUTEUR ZENTNER I.ZENTNER 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+  Il faut BORNE_INF < BORNE_SUP
+  BORNE_INF = %(r1)f
+  BORNE_SUP = %(r2)f
+"""),
+
+2: _("""
+  VALE_MOY trop grand ou trop petit
+  BORNE_INF = %(r1)f
+  VALE_MOY  = %(r2)f
+  BORNE_SUP = %(r3)f
+"""),
+
+3: _("""
+  BORNE SUP très grande, problème de précision possible,
+  vérifiez la distribution des valeurs générées.
+"""),
+
+4: _("""
+  On doit avoir : VALE_MOY > BORNE_INF 
+  VALE_MOY  = %(r1)f
+  BORNE_INF = %(r2)f
+"""),
+
+5: _("""
+  Erreur : ALPHA < 1
+"""),
+
+6: _("""
+  Erreur : UNIF < 0
+"""),
+
+7: _("""
+  Erreur : GAMDEV(ALPHA) < 0
+"""),
+
+8: _("""
+  Il faut autant d'indices en I et J.
+"""),
+
+9: _("""
+  Il faut autant de composantes en I et J.
+"""),
+
+10: _("""
+  Il faut autant de composantes que de noeuds.
+"""),
+
+11: _("""
+  Nombre de tirages superieur a la taille de l'echantilon.
+"""),
+
+
+
+}
diff --git a/Aster/Cata/cataSTA9/Messages/rupture0.py b/Aster/Cata/cataSTA9/Messages/rupture0.py
new file mode 100644 (file)
index 0000000..3a2fe38
--- /dev/null
@@ -0,0 +1,553 @@
+#@ MODIF rupture0 Messages  DATE 18/03/2008   AUTEUR CNGUYEN C.NGUYEN 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+Interpolation hors du domaine (prolongement constant utilisé).
+"""),
+
+2: _("""
+Le label %(k1)s doit etre présent dans la table %(k2)s.
+"""),
+
+3: _("""
+Création de la table  %(k1)s.
+"""),
+
+5: _("""
+Il faut définir ELAS dans DEFI_MATERIAU.
+"""),
+
+6: _("""
+La température en fond de fissure, nécessaire pour le calcul des proprietés
+matériaux et donc des facteurs d'intensité des contraintes, n'est pas connue.
+Le calcul se poursuite en prenant la température de réference du materiau
+(TEMP = %(r1)f).
+-> Risque et Conseil :
+Quand les propriétés matériau dépendent de la température, il faut fournir 
+en entrée de POST_K1_K2_K3 le champ de température utilisé pour le calcul 
+mécanique, sous le mot clé EVOL_THER.
+"""),
+
+9: _("""
+Dans le cas d'une SD RESULTAT de type DYNA_TRANS,
+le mot-cle EXCIT est obligatoire.
+Veuillez le renseigner.
+"""),
+
+10: _("""
+Modélisation non implantée.
+"""),
+
+11: _("""
+Problème à la récupération des noeuds du fond de fissure.
+-> Risque et Conseil :
+Vérifier que le concept %(k1)s indiqué sous le mot clé FOND_FISS a été 
+correctement crée par l'opérateur DEFI_FOND_FISS.
+"""),
+
+12: _("""
+Type de mailles du fond de fissure non défini.
+-> Risque et Conseil :
+Pour une modélisation 3D, les mailles de votre fond de fissure
+doivent etre de type SEG2 ou SEG3.
+Veuillez revoir la création de votre fond de fissure 
+(opérateur DEFI_FOND_FISS). 
+"""),
+
+13: _("""
+Le group_no %(k1)s n'est pas dans le maillage.
+-> Risque et Conseil :
+Veuillez vérifier les données fournies au mot-clé GROUP_NO.
+"""),
+
+14: _("""
+Le noeud  %(k1)s  n'appartient pas au maillage :  %(k2)s
+-> Risque et Conseil :
+Veuillez vérifier les données fournies au mot-clé SANS_GROUP_NO.
+"""),
+
+15: _("""
+Le noeud %(k1)s n'appartient pas au fond de fissure.
+-> Risque et Conseil :
+Veuillez vérifier les données fournies au mot-clé GROUP_NO ou NOEUD.
+"""),
+
+16: _("""
+Le mot clé RESULTAT est obligatoire pour TYPE_MAILLAGE = LIBRE.
+"""),
+
+17: _("""
+Le nombre de noeuds NB_NOEUD_COUPE doit etre supérieur à 3.
+-> Risque et Conseil :
+Le calcul s'est poursuivi avec la valeur par défaut (=5, cf doc U4.82.05)
+
+"""),
+
+18: _("""
+Problème à la récupération du modèle dans la sd résultat fournie.
+-> Risque et Conseil :
+Veuillez vérifier que le concept fourni au mot-clé RESULTAT correspond
+au résultat à considérer.
+"""),
+
+19: _("""
+Problème à la récupération des noeuds de la lèvre sup : 
+-> Risque et Conseil :
+Pour un calcul avec POST_K1_K2_K3, la lèvre supérieure de la fissure doit 
+être obligatoirement définie dans DEFI_FOND_FISS à l'aide du mot-clé
+LEVRE_SUP. Vérifier la définition du fond de fissure.
+"""),
+
+20: _("""
+Problème à la récupération des noeuds de la lèvre inf : 
+-> Risque et Conseil :
+Pour un calcul avec POST_K1_K2_K3, la lèvre inférieure de la fissure doit
+être obligatoirement définie dans DEFI_FOND_FISS à l'aide du mot-clé
+LEVRE_INF. Vérifier la définition du fond de fissure.
+"""),
+
+21: _("""
+Les noeuds ne sont pas en vis-à-vis dans le plan perpendiculaire
+au noeud %(k1)s.
+-> Risque et Conseil :
+Pour interpoler les sauts de déplacement, les noeuds doivent être par défaut
+en vis-à-vis deux à deux sur les lèvres. Si ce n'est pas le cas, utilisez
+l'option TYPE_MAILLE='LIBRE' dans POST_K1_K2_K3.
+"""),
+
+22: _("""
+Il manque des points dans le plan défini par la lèvre
+supérieure et perpendiculaire au fond %(k1)s.
+-> Risque et Conseil :
+"""),
+
+23: _("""
+Vérifier les tangentes extremités ou
+"""),
+
+24: _("""
+Augmenter PREC_NORM dans DEFI_FOND_FISS.
+"""),
+
+25: _("""
+Augmenter ABSC_CURV_MAXI.
+"""),
+
+26: _("""
+Il manque des points dans le plan défini par la lèvre
+inférieure et perpendiculaire au fond  %(k1)s.
+-> Risque et Conseil :
+"""),
+
+27: _("""
+Pour un résultat de type MODE_MECA,
+l'option de calcul doit etre K_G_MODA.
+-> Risque et Conseil :
+Veuillez fournir au mot-clé OPTION l'option K_G_MODA
+et vérifier que le concept fourni au mot-clé RESULTAT
+est de type MODE_MECA.
+"""),
+
+28: _("""
+Le cas de charge %(k1)s n'a pas été trouvé dans la SD Résultat %(k2)s.
+-> Risque et Conseil :
+Veuillez vérifier les données fournies au mot-clé NOM_CAS.
+"""),
+
+29: _("""
+Le mot-clé 'FISSURE' est obligatoire avec l'option  %(k1)s.
+Veuillez le renseigner.
+"""),
+
+30: _("""
+Calcul possible pour aucun noeud du fond.
+-> Risque et Conseil :
+Veuillez vérifier les données, notamment celles du mot-clé DIRECTION.
+"""),
+
+32: _("""
+Différence entre la normale au plan déduite de VECT_K1 et la normale 
+au plan de la fissure calculée pour le noeud %(i1)d :
+  VECT_K1 : (%(r4)f,%(r5)f,%(r6)f)
+  Vecteur normal calculé à partir de la définition de la fissure : (%(r1)f,%(r2)f,%(r3)f)
+-> Risque et Conseil :
+On poursuit le calcul mais si l'écart entre les deux vecteurs est trop important, 
+le calcul risque d'échouer ou de conduire à des résultats peu précis.
+Vérifier absolument le VECT_K1 fourni ou supprimer ce mot clé pour que la normale
+au plan soit calculée automatiquement.
+"""),
+
+33: _("""
+Problème dans la récupération du saut de déplacement sur les lèvres.
+-> Risque et Conseil :
+Il y a plusieurs causes possibles :
+- vérifiez que le résultat correspond bien à un calcul sur des éléments x-fem;
+- si le calcul correspond à un calcul X-FEM avec contact sur les lèvres de la
+  fissure,vérifiez que le maillage fourni est bien le maillage linéaire initial;
+- vérifiez que le paramètre ABSC_CURV_MAXI est cohérent avec la taille de la
+  fissure : les segments pour l'interpolation du déplacement des lèvres, 
+  perpendiculaires au fond de fissure et de longueur ABSC_CURV_MAXI, ne doivent
+  pas "sortir" de la matière.
+"""),
+
+34: _("""
+ Le nombre de noeuds NB_NOEUD_COUPE doit etre supérieur à 3 : 
+ on prend la valeur par défaut.
+"""),
+
+35: _("""
+Les mots-clés TABL_DEPL_SUP et TABL_DEPL_INF sont obligatoires
+si SYME_CHAR=SANS.
+"""),
+
+37: _("""
+Le numéro d'ordre %(i1)d n'a pas été trouvé dans la table.
+"""),
+
+38: _("""
+Pas d'instant trouvé dans la table pour l'instant %(r1)f.
+"""),
+
+39: _("""
+Plusieurs instants trouvés dans la table pour l'instant %(r1)f.
+"""),
+
+40: _("""
+ABSC_CURV non croissants pour %(k1)s.
+"""),
+
+42: _("""
+Différence de points entre la lèvre supérieure et la lèvre inférieure.
+"""),
+
+43: _("""
+Pour traiter le noeud %(k1)s:
+ Nombre de points - lèvre supérieure : %(i1)d
+ Nombre de points - lèvre inférieure : %(i2)d
+"""),
+
+44: _("""
+Les noeuds ne sont pas en vis-à-vis.
+-> Risque et Conseil :
+Pour interpoler les sauts de déplacement, les noeuds doivent être par défaut en 
+vis-à-vis deux à deux sur les lèvres. Si ce n'est pas le cas, utilisez l'option 
+TYPE_MAILLE='LIBRE' dans POST_K1_K2_K3.
+
+"""),
+
+46: _("""
+Il faut au moins trois noeuds dans le plan défini par les lèvres
+et perpendiculaire au fond de fissure.
+-> Risque et Conseil :
+"""),
+
+47: _("""
+Noeud %(k1)s 
+"""),
+
+48: _("""
+Le mot-clé 'FOND_FISS' est obligatoire avec l'option  %(k1)s.
+Veuillez le renseigner.
+"""),
+
+49: _("""
+Déplacement normal du noeud %(k1)s non nul
+et SYME_CHAR = %(k2)s.
+-> Risque et Conseil :
+Vérifier les conditions aux limites et VECT_K1.
+"""),
+
+50: _("""
+Nombre de modes différent entre la base modale
+et %(k1)s : on prend le minimum des deux %(i1)d.
+"""),
+
+51: _("""
+Le numéro d'ordre %(i1)d n'appartient pas au résultat %(k1)s.
+"""),
+
+54: _("""
+Aucun instant ou numéro d'ordre trouvé.
+"""),
+
+55: _("""
+-> Attention: En présence d'une SD Résultat de type mult_elas, les mots-clés
+EXCIT et NOM_CAS sont obligatoires.
+-> Risque et Conseil :
+Risque de résultats faux si un des chargements impacte le calcul de G et de K
+(par exemple force de pression sur les lèvres de la fissure,force volumique...)
+"""),
+
+56 : _("""
+CALC_G - option CALC_K_G : le calcul est impossible sur un point de rayon nul
+(point sur l'axe de rotation).
+-> Risque et Conseil :
+Modifier les couronnes R_INF et R_SUP pour qu'elles soient toutes les deux plus
+petites que le rayon du fond de fissure. De manière générale en axisymétrie, le
+calcul de K est d'autant plus précis que le rayon des couronnes est petit devant
+le rayon du fond de fissure.
+"""),
+
+57 : _("""
+Pour l'option CALC_G en 3D, le champ THETA doit être calculé directement
+dans l'opérateur CALC_G.
+-> Risque et Conseil :
+Dans le mot-clé facteur THETA, supprimez le mot-clé THETA et renseignez les 
+mots-clés FOND_FISS, R_SUP, R_INF, MODULE, et DIRECTION pour la détermination
+automatique du champ theta.
+"""),
+
+59 : _("""
+Le champ de THETA est inexistant dans la structure de données  %(k1)s
+de type THETA_GEOM.
+-> Risque et Conseil :
+Veuillez revoir la création du champ theta (opérateur CALC_THETA).
+"""),
+
+60 : _("""
+Mélange de mailles de type SEG2 et SEG3 dans la définition du fond de fissure.
+-> Risque et Conseil :
+Les mailles du fond de fissure doivent toutes être du meme type. 
+Modifiez le maillage ou définissez plusieurs fonds de fissure consécutifs.
+"""),
+
+61 : _("""
+Le groupe de noeuds  %(k1)s définissant le fond de fissure n'est pas ordonné.
+-> Risque et Conseil :
+Il faut ordonner les noeuds du fond de fissure. 
+Les options SEGM_DROI_ORDO et NOEUD_ORDO de l'opérateur 
+DEFI_GROUP/CREA_GROUP_NO peuvent etre utilisées.
+."""),
+
+62 : _("""
+Arret sur erreur utilisateur : deux GROUP_NO consécutifs incohérents dans la 
+définition du fond de fissure.
+-> Risque et Conseil :
+Les noeuds de chaque groupe doivent etre ordonnés et le dernier noeud d'un
+groupe identique au premier noeud du groupe suivant dans la liste.
+"""),
+
+63 : _("""
+Les mailles du fond de fissure doivent etre du type segment (SEG2 ou SEG3).
+"""),
+
+64 : _("""
+Arret sur erreur utilisateur : deux mailles ou groupes de mailles du fond de
+fissure sont non consécutives dans la numérotation des noeuds.
+"""),
+
+65 : _("""
+Détection d'une maille de type %(k1)s dans la définition des lèvres de la
+fissure (%(k2)s).
+-> Risque et Conseil :
+Les mailles des lèvres doivent etre du type quadrangle ou triangle. 
+Vérifiez que les mailles définies correspondent bien aux faces des éléments
+3D qui s'appuient sur la lèvre.
+"""),
+
+66 : _("""
+La liste de noeuds définissant le fond de fissure n'est pas ordonnée. 
+-> Risque et Conseil :
+Veuillez vérifier l'ordre des noeuds.
+"""),
+
+67 : _("""
+Arret sur erreur utilisateur : le fond de fissure possède un noeud
+répété deux fois (noeud  %(k1)s). 
+-> Risque et Conseil :
+Veuillez revoir la définition du fond dans FOND_FISS ou FOND_FERME.
+"""),
+
+68 : _("""
+Les mailles de FOND_INF et de FOND_SUP sont de type différent.
+  Type de mailles pour FOND_SUP : %(k1)s
+  Type de mailles pour FOND_INF : %(k2)s
+"""),
+
+69: _("""
+Les noeuds %(k1)s de FOND_INF et %(k2)s de FOND_SUP ne sont pas en vis à vis. 
+-> Risque et Conseil :
+Vérifiez que les deux groupes correspondent bien à des noeuds coincidents
+géométriquement et que les groupes de noeuds sont ordonnés dans le meme sens. 
+"""), 
+
+70 : _("""
+Erreur utilisateur : la lèvre supérieure possède une maille répétée 2 fois : 
+maille  %(k1)s. 
+-> Risque et Conseil :
+Veuillez revoir les données.
+"""),
+
+71 : _("""
+Erreur utilisateur : la lèvre inférieure possède une maille répétée 2 fois : 
+maille  %(k1)s. 
+-> Risque et Conseil :
+Veuillez revoir les données.
+"""),
+
+72 : _("""
+Le noeud %(k1)s du fond de fissure n'est rattaché à aucune maille surfacique
+de la lèvre supérieure.
+-> Risque et Conseil :
+Veuillez vérifier les groupes de mailles.
+"""), 
+
+73 : _("""
+Erreur utilisateur : la lèvre inférieure et la lèvre supérieure ont une maille
+surfacique en commun. Maille en commun : %(k1)s
+-> Risque et Conseil :
+Revoir les données.
+"""),
+
+74: _("""
+Le noeud %(k1)s du fond de fissure n'est rattaché à aucune maille
+surfacique de la lèvre inférieure.
+-> Risque et Conseil :
+Veuillez vérifier les groupes de mailles.
+"""), 
+
+75 : _("""
+Détection d'une maille de type %(k1)s dans la définition des lèvres de la
+fissure (%(k2)s).
+-> Risque et Conseil :
+Les mailles des lèvres doivent etre linéiques. Vérifiez que les mailles 
+définies correspondent bien aux faces des éléments 2D qui s'appuient
+sur la lèvre.
+"""),
+
+76: _("""
+Le noeud %(k1)s du fond de fissure n'appartient à aucune des mailles
+de la lèvre supérieure. 
+-> Risque et Conseil :
+Veuillez revoir les données.
+"""), 
+
+77: _("""
+Le noeud %(k1)s du fond de fissure n'appartient à aucune des mailles
+de la lèvre inférieure. 
+-> Risque et Conseil :
+Veuillez revoir les données.
+"""), 
+
+78: _("""
+La tangente à l'origine n'est pas orthogonale à la normale :
+   Normale aux lèvres de la fissure : %(r1)f %(r2)f %(r3)f
+   Tangente à l'origine (= direction de propagation) :  %(r4)f %(r5)f %(r6)f
+-> Risque et Conseil :
+La tangente à l'origine est nécessairement dans le plan de la fissure, 
+donc orthogonale à la normale fournie. Vérifier les données.
+"""), 
+
+79: _("""
+La tangente à l'extrémité n'est pas orthogonale à la normale :
+   Normale aux lèvres de la fissure : %(r1)f %(r2)f %(r3)f
+   Tangente à l'origine (= direction de propagation) :  %(r4)f %(r5)f %(r6)f
+-> Risque et Conseil :
+La tangente à l'extrémité est nécessairement dans le plan de la fissure, 
+donc orthogonale à la normale fournie. Vérifier les données.
+"""), 
+
+81: _("""
+Il faut donner la direction de propagation en 2D
+La direction par défaut n'existe plus.
+-> Risque et Conseil :
+Veuillez renseigner le mot-clé DIRECTION.
+"""), 
+
+83: _("""
+Cette combinaison de lissage n'est pas programmée pour l'option : %(k1)s.
+-> Risque et Conseil :
+Veuillez consulter la doc U4.82.03 pour déterminer une combinaison de lissage
+licite avec l'option désirée.
+"""), 
+
+84: _("""
+Le degré des polynomes de Legendre doit etre inférieur ou égal au nombre
+de noeuds du fond de fissure lorsque le lissage de G est de type
+LEGENDRE et le lissage de THETA de type LAGRANGE.
+"""), 
+
+85: _("""
+Le lissage de G doit etre de type LEGENDRE si le lissage de THETA
+est de type LEGENDRE.
+-> Risque et Conseil :
+Veuillez redéfinir le mot-clé LISSAGE_G.
+"""), 
+
+87: _("""
+Si la méthode LAGRANGE_REGU est utilisée pour le lissage, 
+alors le lissage de G et de theta doivent etre de type LAGRANGE_REGU.
+"""),
+
+90: _("""
+L'usage des polynomes de Legendre dans le cas d'un fond de fissure clos
+est interdit.
+-> Risque et Conseil :
+Veuillez redéfinir le mot-clé LISSAGE_THETA.
+"""), 
+
+91: _("""
+Aucune direction de propagation n'est fournie par l'utilisateur, la direction est
+calculée à partir de la normale au fond de fissure.
+-> Risque et Conseil :
+Il n'y a aucun moyen de vérifier que la direction de propagation est dans le bon sens, ce
+qui peut inverser le signe du G calculé. Il est préférable de préciser la direction de
+propagation sous le mot clé DIRECTION ou de définir la fissure à partir des mailles de ses
+lèvres.
+"""), 
+
+92: _("""
+Le mot-clef BORNES est obligatoire avec l'option  %(k1)s  !
+"""), 
+
+93: _("""
+Accès impossible au champ : %(k1)s pour le numéro d'ordre : %(i1)d
+"""), 
+
+94: _("""
+La direction de propagation de la fissure et la normale au fond de fissure
+ne sont pas orthogonales.
+-> Risque et Conseil :
+Si la fissure est plane, la normale et la direction de propagation sont
+nécessairement orthogonales, sinon les résultats sont faux: vérifier la
+mise en données dans DEFI_FOND_FISS et CALC_G.
+Si la fissure n'est pas plane, on ne peut pas utiliser le mot-clé NORMALE
+dans DEFI_FOND_FISS: définissez la fissure à partir des mailles de ses lèvres.
+"""), 
+
+95: _("""
+Accès impossible au mode propre champ : %(k1)s pour le numéro d'ordre : %(i1)d.
+"""), 
+
+96: _("""
+Option non disponible actuellement.
+"""), 
+
+98: _("""
+Récupération impossible de la normale dans le fond de fissure FOND_FISS.
+-> Risque et Conseil :
+Un problème a du se produire lors de la création de la structure de données 
+FOND_FISS. Vérifiez les données dans DEFI_FOND_FISS.
+"""), 
+}
diff --git a/Aster/Cata/cataSTA9/Messages/rupture1.py b/Aster/Cata/cataSTA9/Messages/rupture1.py
new file mode 100644 (file)
index 0000000..b4ddcdf
--- /dev/null
@@ -0,0 +1,233 @@
+#@ MODIF rupture1 Messages  DATE 04/02/2008   AUTEUR GALENNE E.GALENNE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+L'option de lissage 'LAGRANGE_REGU' n'a pas été développée lorsque
+le nombre de noeuds d'un fond de fissure fermé est pair.
+-> Risque et Conseil :
+Veuillez utiliser une autre option de lissage
+(par exemple, le lissage 'LAGRANGE' pour le champ theta)
+"""),
+
+2: _("""
+%(k1)s n'est pas un GROUP_NO ou un GROUP_MA.
+"""),
+
+6: _("""
+Le rayon R_SUP (ou R_SUP_FO) doit obligatoirement etre supérieur au rayon
+R_INF (resp. R_INF_FO).
+-> Risque et Conseil :
+Veuillez revoir votre mise en données.
+"""),
+
+7: _("""
+Problème dans RINF et RSUP.
+-> Risque et Conseil :
+Veuillez revoir les valeurs fournies aux mots-clés R_INF ou R_INF_FO 
+ou R_SUP ou R_SUP_FO.
+"""),
+
+8: _("""
+Le groupe %(k1)s n'appartient pas au maillage : %(k2)s
+"""),
+
+9: _("""
+Le fond de fissure n'est pas complet.
+-> Risque et Conseil :
+Veuillez revoir la mise en données de l'opérateur DEFI_FOND_FISS.
+"""),
+
+10: _("""
+Le fond de fissure ne doit etre défini que par un noeud.
+-> Risque et Conseil :
+Veuillez revoir le contenu du mot-clé GROUP_NO ou NOEUD ou FOND_FISS.
+"""),
+
+11: _("""
+Il faut un mot clé parmis FOND_FISS ou FISSURE pour l'option %(k1)s
+Veuillez le renseigner.
+"""),
+
+12: _("""
+Aucun champ initial trouvé.
+"""),
+
+13: _("""
+%(k1)s : champ initial impossible avec cette option.
+"""),
+
+14: _("""
+Nombre de bornes erroné.
+-> Risque et Conseil :
+On doit en avoir autant que de numéros d'ordre.
+"""),
+
+15: _("""
+Le résultat n'est pas un EVOL_NOLI.
+"""),
+
+16: _("""
+Le champ %(k1)s n'a pas été trouvé.
+"""),
+
+17: _("""
+L'association: lissage du champ THETA par les polynomes de Lagrange
+               lissage de G autre que par des polynomes de Lagrange
+n'est pas possible.
+-> Risque et Conseil :
+Veuillez consulter la documentation U4.82.03 pour déterminer une
+association satisfaisante.
+"""),
+
+19: _("""
+Il faut définir la normale au fond de fissure.
+-> Risque et Conseil :
+Veuillez revoir la mise en données de l'opérateur DEFI_FOND_FISS
+(mot-clé NORMALE).
+"""),
+
+20: _("""
+Une déformation initiale est présente dans la charge. Ceci est incompatible 
+avec la contrainte initiale sigma_init.
+-> Risque et Conseil :
+On ne peut pas faire de calcul en introduisant simultanément une contrainte
+initiale ET une déformation initiale. Veuillez revoir les données.
+"""),
+
+21: _("""
+Seule une loi de comportement élastique isotrope est valide pour
+le calcul de DG.
+"""),
+
+22: _("""
+Le calcul de DG n'a pas été étendu à la plasticité !
+"""),
+
+23: _("""
+CALC_G - option CALC_G : détection de chargements non nuls sur l'axe, 
+le calcul est impossible.
+-> Risque et Conseil :
+En 2D-axi, le calcul de G n'est pas possible pour les éléments de l'axe de
+symétrie si un chargement est imposé sur ceux-ci.
+Modifier les couronnes R_INF et R_SUP pour qu'elles soient toutes les deux
+plus petites que le rayon du fond de fissure. 
+"""),
+
+24: _("""
+L'option CALC_K_G est incompatible avec les comportements incrémentaux,
+avec les comportements non linéaires et avec la déformation GREEN.
+"""),
+
+25: _("""
+Il faut affecter les éléments de bord (E et NU) pour le calcul des fic.
+-> Risque et Conseil :
+Veuillez revoir la mise en données des opérateurs DEFI_MATERIAU
+et AFFE_MATERIAU.
+"""),
+
+26: _("""
+La masse volumique RHO n'a pas été définie.
+-> Risque et Conseil :
+Pour l'option K_G_MODA, il est indispensable de fournir la masse volumique
+du matériau considéré. Veuillez revoir la mise en données de l'opérateur
+DEFI_MATERIAU.
+"""),
+
+27: _("""
+L'option est incompatible avec les comportements incrémentaux ainsi
+qu'avec la déformation Green.
+"""),
+
+28: _("""
+Le champ de nom symbolique %(k1)s existe déjà dans la SD RESULTAT  %(k1)s.
+"""),
+
+29: _("""
+Arret sur erreur(s) 'utilisateur': deux mailles du fond de fissure sont
+non consécutives dans la numérotation des noeuds.
+-> Risque et Conseil :
+Veuillez revoir l'ordre des mailles fournies au mot-clé MAILLE.
+"""),
+
+30: _("""
+Il faut donner 3 composantes de la direction.
+-> Risque et Conseil :
+Si vous utilisez CALC_THETA/THETA_2D ou CALG_G/THETA en 2d, veuillez fournir
+une valeur nulle pour la 3eme composante.
+"""),
+
+31: _("""
+Option non opérationnelle:
+Seule l'option COURONNE est à utiliser dans le cas ou
+on emploie le mot clé THETA_3D ou THETA_2D.
+"""),
+
+32: _("""
+Option inexistante:
+Seule l'option BANDE est à utiliser dans le cas ou on emploie
+le mot clé THETA_BANDE .
+"""),
+
+33: _("""
+La tangente à l'origine n'est pas orthogonale à la normale au plan de la fissure.
+Normale au plan :  (%(r1)f,%(r2)f,%(r3)f)
+-> Risque et Conseil :
+La tangente à l'origine DTAN_ORIG est nécessairement dans le plan de la fissure, 
+donc orthogonale à la normale au plan, calculée à partir des fonctions de niveaux
+(level set) qui définissent la fissure. Vérifier les données.
+"""),
+
+34: _("""
+La tangente à l'extrémité n'est pas orthogonale à la normale au plan de la fissure.
+Normale au plan :  (%(r1)f,%(r2)f,%(r3)f)
+-> Risque et Conseil :
+La tangente à l'extrémité DTAN_EXTR est nécessairement dans le plan de la fissure, 
+donc orthogonale à la normale au plan, calculée à partir des fonctions de niveaux
+(level set) qui définissent la fissure. Vérifier les données.
+"""),
+
+35: _("""
+Les directions normales au plan de la fissure entre les points %(i1)d et %(i2)d successifs du fond forment un angle 
+supérieur à 10 degrés.
+-> Risque et Conseils
+L'interpolation des sauts de déplacements est basée sur les champs singuliers 
+correspondants à une fissure plane. La fissure utilisée ici est trop irrégulière et 
+il y a donc un risque d'obtenir des résultats imprécis.
+"""),
+
+36: _("""
+La tangente à l'origine n'est pas orthogonale à la normale au plan de la fissure 
+défini par VECT_K1.
+-> Risque et Conseil :
+La tangente à l'origine DTAN_ORIG est nécessairement dans le plan de la fissure, 
+donc orthogonale au VECT_K1 fourni. Vérifier les données.
+"""),
+
+37: _("""
+La tangente à l'extrémité n'est pas orthogonale à la normale au plan de la fissure 
+défini par VECT_K1.
+-> Risque et Conseil :
+La tangente à l'extrémité DTAN_EXTR est nécessairement dans le plan de la fissure, 
+donc orthogonale au VECT_K1 fourni. Vérifier les données.
+"""),
+}
index 42b56b82865a9af706d6fa45e15aab37ab79deb9..0acb9c5070132f14c41e26940c5c2ff0a4a93675 100644 (file)
-#@ MODIF sdveri Messages  DATE 09/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sdveri Messages  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  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.
+# COPYRIGHT (C) 1991 - 2007  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.        
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
- 1: _("""
- Impossible d'importer le catalogue de la structure de données '%(k1)s'
-"""),
-
-
-17: _("""
- Erreur de programmation :
- Vérification d'une structure de donnée :
- L'objet JEVEUX '%(k1)s' a un LONMAX incorrect.
- LONMAX attendu : %(i1)d
- LONMAX trouvé  : %(i2)d
-"""),
-
-18: _("""
- Erreur de programmation :
- Vérification d'une structure de donnée :
- La collection JEVEUX '%(k1)s' n'a pas le bon nombre d'objets (NUTIOC)
-"""),
-
-19: _("""
- Erreur de programmation :
- Vérification d'une structure de donnée :
- Le  pointeur de noms JEVEUX '%(k1)s' n'a pas la bonne longueur (NOMUTI)
-"""),
-
-20: _("""
- Erreur de programmation :
- Vérification d'une structure de donnée :
- L'objet JEVEUX '%(k1)s' devrait etre de type entier
-"""),
-
-21: _("""
- Erreur de programmation :
- Vérification d'une structure de donnée :
- L'objet JEVEUX '%(k1)s' devrait etre de type réel
-"""),
-
-22: _("""
- Erreur de programmation :
- Vérification d'une structure de donnée :
- L'objet JEVEUX '%(k1)s' devrait etre de type complexe
-"""),
-
-
-
-
+cata_msg = {
 
-
-24: _("""
- Erreur de programmation :
- Vérification d'une structure de donnée :
- L'objet JEVEUX '%(k1)s' devrait etre de type '%(k2)s'.
+1 : _("""
+ Impossible d'importer le catalogue de la structure de données '%(k1)s'
 """),
 
-25: _("""
- Erreur de programmation :
- Vérification d'une structure de donnée :
- La vérification '%(k1)s' n'est pas programmée.
+2 : _("""
+ Objet %(k1)s inexistant.
 """),
 
-26: _("""
Erreur de programmation :
- Vérification d'une structure de donnée :
- L'objet '%(k1)s' est obligatoire dans la SD mais il n'existe pas.
+: _("""
Arguments incohérents :
+      Nom des paramètres : %(k1)s
+   Valeur des paramètres : %(k2)s
 """),
 
-27: _("""
- Erreur de programmation :
-   Vérification d'une structure de donnée :
-   L'objet JEVEUX '%(k1)s' a un champ DOCU incorrect.
-   Le champ DOCU attendu est : '%(k2)s'
-   Le champ DOCU trouvé  est : '%(k3)s'
+5 : _("""
+ Arguments invalide : 'nomres' vide !
 """),
 
-
-
-
-30: _("""
+30 : _("""
  Erreur de programmation (catalogue des SD) :
    Vérification d'une structure de donnée :
    certains objets JEVEUX sont incorrects :
 """),
 
-31: _("""
+31 : _("""
       Objet : '%(k1)s'    Message : %(k2)s
 """),
 
-32: _("""
+32 : _("""
       Fin Message 30
 """),
 
-
-
-40: _("""
+40 : _("""
  Erreur de programmation (catalogue des SD) :
    Vérification d'une structure de donnée :
    Les objets suivants sont interdits dans les SD de type : %(k1)s
 """),
 
-41: _("""
+41 : _("""
    Objet '%(k1)s'   INTERDIT
 """),
 
-42: _("""
+42 : _("""
       Fin Message 40
 """),
 
-45: _("""
-      Erreur dans le Python : voir traceback ci-dessous
+45 : _("""
+      Erreur Python : voir traceback ci-dessous
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 }
diff --git a/Aster/Cata/cataSTA9/Messages/seisme.py b/Aster/Cata/cataSTA9/Messages/seisme.py
new file mode 100644 (file)
index 0000000..7136efd
--- /dev/null
@@ -0,0 +1,155 @@
+#@ MODIF seisme Messages  DATE 05/11/2007   AUTEUR VIVAN L.VIVAN 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+
+ 1: _("""
+ le noeud %(k1)s n'appartient pas au maillage: %(k2)s
+"""),
+
+ 2: _("""
+ le groupe de noeuds %(k1)s n'appartient pas au maillage: %(k2)s
+"""),
+
+ 3: _("""
+ le noeud %(k1)s n'est pas un noeud support.
+"""),
+
+ 4: _("""
+ le vecteur directeur du spectre est nul.
+"""),
+
+ 5: _("""
+ cas du MONO_APPUI: vous avez déjà donné un spectre pour cette direction.
+"""),
+
+ 6: _("""
+ erreur(s) rencontrée(s) lors de la lecture des supports.
+"""),
+
+ 7: _("""
+ vous avez déjà donné un spectre pour le support %(k1)s
+"""),
+
+ 8: _("""
+ on ne peut pas traiter du MONO_APPUI et du MULTI_APPUI simultanément.
+"""),
+
+ 9: _("""
+ on n'a pas pu extraire le premier champ des modes mécaniques.
+"""),
+
+10: _("""
+ correction statique non prise en compte pour l'option: %(k1)s
+"""),
+
+11: _("""
+ trop d'amortissements modaux
+   nombre d'amortissement: %(i1)d
+   nombre de mode        : %(i2)d
+"""),
+
+12: _("""
+ amortissement non diagonal, on ne sait pas traiter.
+"""),
+
+13: _("""
+ il manque des amortissements modaux
+   nombre d'amortissements: %(i1)d
+   nombre de modes        : %(i2)d
+"""),
+
+14: _("""
+ on ne peut pas demander de réponse secondaire sans la réponse primaire
+"""),
+
+15: _("""
+ analyse spectrale :
+   la base modale utilisée est               : %(k1)s
+   le nombre de vecteurs de base est         : %(i1)d
+   la règle de combinaison modale est        : %(k2)s
+   les options de calcul demandées sont      : %(k3)s """
+   ),
+
+16: _("""
+                                               %(k1)s """
+   ),
+
+17: _("""
+   la nature de l'excitation est             : %(k1)s """
+   ),
+
+18: _("""
+   la règle de combinaison des réponses
+   directionnelles est                       : %(k1)s """
+   ),
+
+19: _("""
+   la règle de combinaison des contributions
+   de chaque mouvement d'appui est           : %(k1)s """
+   ),
+
+20: _("""
+ erreur dans les données
+   la masse de la structure n'existe pas dans la table: %(k1)s
+"""),
+
+21: _("""
+ il faut au moins 2 occurences de DEPL_MULT_APPUI pour la combinaison des appuis.
+"""),
+
+22: _("""
+ COMB_DEPL_APPUI: il faut au moins définir 2 cas derrière le mot clé LIST_CAS.
+"""),
+
+23: _("""
+ données incompatibles
+   pour la direction   : %(k1)s
+   nombre de blocage   : %(i1)d
+   nombre d'excitations: %(i2)d
+"""),
+
+24: _("""
+ données incompatibles
+   pour les modes mécaniques : %(k1)s
+   il manque l'option        : %(k2)s
+"""),
+
+25: _("""
+  problème stockage
+    option de calcul: %(k1)s
+    occurence       : %(i1)d
+    nom du champ    : %(k3)s
+"""),
+
+26: _("""
+  problème stockage
+    option de calcul: %(k1)s
+    direction       : %(k2)s
+    nom du champ    : %(k3)s
+"""),
+
+27: _("""
+"""),
+
+}
+
index 36796454cf2b8dec9de60222d43cf867872211f3..26455ea94b33849c55dbe2d66426812c68e9c6ea 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sensibilite Messages  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF sensibilite Messages  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# RESPONSABLE ABBAS M.ABBAS
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
+1 : _("""
  Type de dérivation voulu : %(i1)d 
  Ce type n'est pas implanté.
 """),
 
-2: _("""
+2 : _("""
  On veut dériver %(k1)s par rapport à %(k2)s. 
  Cela n'est pas disponible.
 """),
 
-3: _("""
+3 : _("""
  La dérivée de %(k1)s par rapport à %(k2)s est introuvable.
 """),
 
-4: _("""
+4 : _("""
  Le champ de theta sensibilité est inexistant dans la sd %(k1)s
 """),
 
-5: _("""
+5 : _("""
  On ne sait pas dériver ce type de structures : %(k1)s.
 """),
 
-6: _("""
+6 : _("""
  Le paramètre de sensibilité doit etre un champ theta.
 """),
 
-7: _("""
+7 : _("""
  Cette option est indisponible en sensibilité lagrangienne.
 """),
 
-8: _("""
+8 : _("""
  Pour l'occurrence numéro %(i1)d ,
  la dérivée du champ %(k1)s de %(k2)s par rapport à %(k3)s est introuvable.
 """),
 
-9: _("""
+9 : _("""
  On ne sait pas trouver le type de la dérivation par rapport à %(k1)s.
 """),
 
-10: _("""
+10 : _("""
  Initialisation de la table associée à la table %(k1)s et au paramètre sensible %(k2)s
  connue sous le nom de concept %(k3)s 
 """),
 
-11: _("""
+11 : _("""
  Le calcul de sensibilité n'est pas encore disponible pour les chargements de type epsi_init
 """),
 
-12: _("""
+12 : _("""
  Il y a vraisemblablement %(i1)d modes propres multiples.
  Le calcul des sensibilités se limite actuellement aux modes propres simples
 """),
 
-13: _("""
+13 : _("""
  On ne peut pas dériver avec une charge complexe en entrée de dyna_line_harm.
 """),
 
-14: _("""
- La sensibilité en mécanique ne fonctionne pas encore avec un chargement thermique
-"""),
-
-15: _("""
+15 : _("""
  Le comportement %(k1)s n'est pas autorisé en sensibilité
 """),
 
-16: _("""
+16 : _("""
  EXICHA différent de 0 et 1
 """),
 
-22: _("""
- L'option sensibilité lagrangienne non opérationnelle en non lineaire
+2: _("""
+ Pour faire une reprise avec un calcul de sensibilité, il faut renseigner "evol_noli" dans "etat_init"
 """),
 
-21: _("""
- Pour faire une reprise avec un calcul de sensibilité, il faut renseigner "evol_noli" dans "etat_init"
+2: _("""
+ L'option sensibilité lagrangienne non opérationnelle en non lineaire
 """),
 
-31: _("""
+31 : _("""
  L'option sensibilité n'est pas opérationnelle en séchage
 """),
 
-32: _("""
+32 : _("""
  L'option sensibilité n'est pas opérationnelle en hydratation
 """),
 
-35: _("""
+35 : _("""
  L'option sensibilité n'est pas opérationnelle pour le comportement %(k1)s
 """),
 
-36: _("""
+36 : _("""
  L'option sensibilité n'est pas opérationnelle pour le type d'élément %(k1)s
 """),
 
-37: _("""
+37 : _("""
  L'option sensibilité n'est pas opérationnelle pour la modélisation %(k1)s
 """),
 
-38: _("""
+38 : _("""
  pb determination sensibilité de rayonnement
 """),
 
-39: _("""
+39 : _("""
  pb determination sensibilité materiau ther_nl
 """),
 
-41: _("""
+41 : _("""
  Déplacements initiaux imposés nuls pour les  calculs de sensibilité
 """),
 
-42: _("""
+42 : _("""
  Vitesses initiales imposées nulles pour les  calculs de sensibilité
 """),
 
-51: _("""
+51 : _("""
  Dérivation de g : un seul paramètre sensible par appel à CALC_G. 
 """),
 
-52: _("""
+52 : _("""
  Actuellement, on ne sait dériver que les 'POU_D_E'.
 """),
 
-53: _("""
+53 : _("""
  En thermoélasticité, le calcul des dérivées de g est pour le moment incorrect.
 """),
 
-54: _("""
+54 : _("""
  Avec un chargement en déformations (ou contraintes) initiales, le calcul
  des dérivées de g est pour le moment incorrect.
 """),
 
-55: _("""
+55 : _("""
  Le calcul de derivée n'a pas été étendu à la plasticité.
 """),
 
-56: _("""
- Pas de calcul de sensibilité accessible.
-"""),
-
-57: _("""
- Valeur incorrecte pour le nom du concept ou du paramètre sensible.
- Ils doivent etre de type chaines de caractères de moins de 8 caractères.
-                 Nom du concept : '%(k1)s'
-      Nom du paramètre sensible : '%(k2)s'
-"""),
-
-58: _("""
-                 Nom du concept : '%(k1)s'
-      Nom du paramètre sensible : '%(k2)s'
-                    
-           Nom composé (dérivé) : '%(k3)s'
-
-"""),
-
-59: _("""
-            Liste des mots-clés : %(k1)s
-              Liste des valeurs : %(k2)s
-   Liste des mots-clés facteurs : %(k3)s
-
-"""),
-
-
-
-
-71: _("""
+71 : _("""
  Dérivation par rapport au paramètre sensible : %(k1)s 
 """),
 
-72: _("""
+72 : _("""
  Le résultat est insensible au paramètre %(k1)s.
 """),
 
-73: _("""
+73 : _("""
  Le type de la dérivation est %(k1)s 
 """),
 
-80: _("""
- mauvaise valeur pour %(k1)s : il doit etre positif ou nul mais on a donné %(i1)d 
-"""),
-
-81: _("""
+81 : _("""
  la structure nosimp est introuvable dans la memorisation inpsco
 """),
 
-82: _("""
- choix=/prefixe/e/renc/remc/s svp et non pas %(k1)s.
-"""),
-
-83: _("""
- la chaine pref passe en argument est trop courte pour mettre la chaine prefix =  %(k1)s 
-"""),
-
-84: _("""
- mauvaise valeur pour %(k1)s : il faut entre %(i1)d et %(i2)d mais on a donné %(i3)d 
-"""),
-
-85: _("""
- probleme de declaration : la chaine %(k1)s est de longueur  %(i1)d 
- on veut y mettre %(k2)s de longueur  %(i2)d 
-"""),
-
-86: _("""
- choix=/e/l svp et non pas %(k1)s.
-"""),
-
-87: _("""
- La fonction numéro %(i1)d est deja memorisee sous le nom %(k1)s 
-"""),
-
-88: _("""
- La chaine %(k1)s est de longueur  %(i1)d 
- Pour un concept, pas plus de 8 caractères svp.
-"""),
-
-89: _("""
- Mauvaise valeur pour choix ; il faut 1,2 ou 3, mais pas  %(i1)d 
-"""),
-
-90: _("""
- La dérivée de %(k1)s par rapport à %(k2)s est déja nommée.
-"""),
-
-91: _("""
+91 : _("""
  Le pas de temps adaptatif n'est pas approprié pour le calcul de sensibilité
  par rapport au paramètre materiau 
 """),
 
-92: _("""
+92 : _("""
  On ne peut pas dériver les concepts de type %(k1)s
 """),
 
-93: _("""
+93 : _("""
  On ne peut pas dériver avec un vect_asse en entree de dyna_line_harm.
 """),
 
-94: _("""
- La structure %(k1)s  apparait plusieurs fois en tant que derivée.
-"""),
-
-95: _("""
+95 : _("""
  Seuls sont possibles :
 """),
 
-96: _("""
+96 : _("""
  Les sous-types de sensibilité pour l'influence de %(k1)s sont %(k2)s et %(k3)s
  C'est incohérent.
 """),
 
-97: _("""
-Mémorisation des données de la sensibilité :
-   
-   Les listes des mots-clés, des valeurs et mots-clés facteurs doivent etre de meme longueur.
-"""),
-
-98: _("""
- Dans le programme %(k1)s, le paramètre de sensibilité %(k2)s est introuvable.   
-"""),
-
-99: _("""
- Impossible de trouver un sous-type de sensibilité pour l'influence de %(k1)s 
-"""),
-
 }
index ad62eb9a49d4ce3c51294ad823ebcffc768fc042..ff49c8e8b7b73fc8b809a16b61ddf7334e39508a 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF soustruc Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF soustruc Messages  DATE 08/04/2008   AUTEUR MEUNIER S.MEUNIER 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -23,7 +23,7 @@ def _(x) : return x
 cata_msg={
 
 1: _("""
- les 2 maillages ne sont pas du meme type : 2d (ou 3d).
+ les 2 maillages ne sont pas du meme type : 2D (ou 3D).
 """),
 
 2: _("""
@@ -35,55 +35,65 @@ cata_msg={
 """),
 
 4: _("""
- le group_ma :  %(k1)s  est en double. on ignore le second.
+ le GROUP_MA :  %(k1)s  est en double. on ignore le second.
 """),
 
 5: _("""
- le group_no :  %(k1)s  est en double. on ignore le second.
+ le GROUP_NO :  %(k1)s  est en double. on ignore le second.
 """),
 
 6: _("""
- le noeud: %(k1)s  n'a pas les memes coordonnees dans les maillages:  %(k2)s  et  %(k3)s 
+ le noeud: %(k1)s  n'a pas les memes coordonnées dans les maillages:  %(k2)s  et  %(k3)s 
 """),
 
 7: _("""
- matrice de rigidite non inversible (modes rigides ???) - attention : criteres de choc non calcules
+ matrice de rigidité non inversible (modes rigides ???) 
+ - attention : critères de choc non calculés
 """),
 
 8: _("""
- matrice de rigidite : pivot quasi-nul (modes rigides ???) - attention : criteres de choc non calcules
+ matrice de rigidité : pivot quasi-nul (modes rigides ???) 
+ - attention : critères de choc non calculés
 """),
 
 9: _("""
- mot-clef "definition" interdit :le macr_elem:  %(k1)s  est deja defini.
+ mot-clef "DEFINITION" interdit :
+ le MACR_ELEM :  %(k1)s  est déja défini.
 """),
 
 10: _("""
- mot-clef "rigi_meca" interdit :il est deja calcule.
+ mot-clef "RIGI_MECA" interdit :
+ il est deja calculé.
 """),
 
 11: _("""
- mot-clef "rigi_meca" interdit :le resultat :  %(k1)s  existe deja.
+ mot-clef "RIGI_MECA" interdit :
+ le resultat :  %(k1)s  existe deja.
 """),
 
 12: _("""
- mot-clef "mass_meca" interdit :il faut avoir fait "definition" et "rigi_meca".
+ mot-clef "MASS_MECA" interdit :
+ il faut avoir fait "DEFINITION" et "RIGI_MECA".
 """),
 
 13: _("""
- mot-clef "mass_meca" interdit :il est deja calcule.
+ mot-clef "MASS_MECA" interdit :
+ il est deja calculé.
 """),
 
 14: _("""
- mot-clef "cas_charge" interdit :il faut avoir fait "definition" et "rigi_meca".
+ mot-clef "CAS_CHARGE" interdit :
+ il faut avoir fait "DEFINITION" et "RIGI_MECA".
 """),
 
 15: _("""
- cet operateur modifie un maillage existant. le resultat doit etre identique au concept donne dans l'argument maillage.
+ cet opérateur modifie un maillage existant
+ le resultat doit etre identique au concept donné dans l'argument MAILLAGE.
 """),
 
 16: _("""
- maillages avec super mailles : utiliser operation : sous-stru
+ maillages avec super mailles :
+ utiliser OPERATION = SOUS-STRU
 """),
 
 17: _("""
@@ -103,11 +113,12 @@ cata_msg={
 """),
 
 21: _("""
- critere inconnu
+ critère inconnu
 """),
 
 22: _("""
- noeud eloignes a la normale au segment
+ noeud %(k1)s trop éloigné de la normale au segment
+ distance = %(r1)f
 """),
 
 23: _("""
@@ -313,7 +324,7 @@ cata_msg={
 """),
 
 72: _("""
- erreur programmeur 2
+ indicateur de diagonalité de la matrice spectrale : %(r1)f 
 """),
 
 73: _("""
@@ -364,19 +375,68 @@ cata_msg={
   champ inexistant  base  %(k1)s  nom_cham  %(k2)s  nume_ordre  %(i1)d 
 """),
 
+85: _("""
+  au noeud de choc:  %(k1)s 
+"""),
 
+86: _("""
+ noeud   %(k1)s   en dehors du segment %(k2)s   abscisse curviligne %(r1)f 
+"""),
 
+87: _("""
+ trop de noeuds dans le group_no  noeud utilise:  %(k1)s 
+"""),
 
+88: _("""
+  verifier votre maillage 
+"""),
 
+89: _("""
+  coordonnee x < 0 pour le noeud  %(k1)s  maille  %(k2)s 
+"""),
 
+90: _("""
+"""),
 
+91: _("""
+   
+"""),
 
-86: _("""
- noeud   %(k1)s   en dehors du segment %(k2)s   abscisse curviligne %(r1)f 
+92: _("""
 """),
 
-87: _("""
- trop de noeuds dans le group_no  noeud utilise:  %(k1)s 
+93: _("""
+    pour le mode no : %(i1)d taux de flexibilite locale   :  %(r1)f 
+ souplesse locale             :  %(r2)f 
+ taux effort tranchant local  :  %(r3)f 
+"""),
+
+94: _("""
+   -- bilan noeud de choc : %(k1)s  taux de restit flexibilite      :  %(r1)f 
+  taux de restit effort tranchant :  %(r2)f 
+"""),
+
+95: _("""
+  ( souplesse statique - souplesse locale )/ souplesse choc :  %(r1)f 
+"""),
+
+96: _("""
+  souplesse locale / souplesse choc :  %(r1)f 
+"""),
+
+97: _("""
+   
+"""),
+
+98: _("""
+ !! attentionplus petite val sing def stat :  %(r1)f !! nous la forcons a :  %(r2)f 
+"""),
+
+99: _("""
+ ---- conditionnement def stat :  %(r1)f 
 """),
 
 }
diff --git a/Aster/Cata/cataSTA9/Messages/soustruc2.py b/Aster/Cata/cataSTA9/Messages/soustruc2.py
new file mode 100644 (file)
index 0000000..3435503
--- /dev/null
@@ -0,0 +1,38 @@
+#@ MODIF soustruc2 Messages  DATE 10/07/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+  !!! mode no : %(i1)d 
+    lineairement dependant a def. statiqueval sing min :  %(r1)f 
+    !! nous la forcons a :  %(r2)f 
+"""),
+
+2: _("""
+  pour le mode no : %(i1)d participation :  %(r1)f 
+"""),
+
+3: _("""
+"""),
+
+}
diff --git a/Aster/Cata/cataSTA9/Messages/spectral0.py b/Aster/Cata/cataSTA9/Messages/spectral0.py
new file mode 100644 (file)
index 0000000..493113a
--- /dev/null
@@ -0,0 +1,73 @@
+#@ MODIF spectral0 Messages  DATE 26/03/2008   AUTEUR BODEL C.BODEL 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1: _("""
+Nombre de fonctions erroné pour une matrice hermitienne.
+"""),
+
+2: _("""
+%(k1)s: FREQ_MAX < FREQ_MIN
+"""),
+
+3: _("""
+Erreur dans les indices.
+"""),
+
+4: _("""
+Le fichier %(k1)s est introuvable.
+"""),
+
+5: _("""
+La dimension DIM n est pas précisée dans le fichier lu.
+"""),
+
+6: _("""
+Nombre de fonctions incorrect.
+"""),
+
+7: _("""
+Erreur dans les données de fonctions.
+"""),
+
+8: _("""
+Pas de calcul absolu avec TRAN_GENE.
+"""),
+
+9: _("""
+Le fichier IDEAS est vide ou ne contient pas le data set demande
+"""),
+
+10: _("""
+Un des data sets 58 contient une donnee qui n'est pas un inter-spectre
+"""),
+
+11: _("""
+On ne traite pas les cas ou les abscisses frequentielles ne sont pas reglierement espacees
+"""),
+
+12: _("""
+Le mot-cle format correspond au format du fichier source, qui peut etre 'ASTER' ou 'IDEAS' (pour lire les DS58)
+"""),
+
+
+}
diff --git a/Aster/Cata/cataSTA9/Messages/stanley.py b/Aster/Cata/cataSTA9/Messages/stanley.py
new file mode 100644 (file)
index 0000000..1f5700a
--- /dev/null
@@ -0,0 +1,208 @@
+#@ MODIF stanley Messages  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg = {
+
+1 : _("""
+Redéfinition du DISPLAY vers %(k1)s.
+"""),
+
+2 : _("""
+Stanley fonctionne en mode validation de non-regression.
+"""),
+
+3 : _("""
+Aucune variable d'environnement DISPLAY définie !
+%(k1)s ne pourra pas fonctionner. On l'ignore.
+
+Si vous etes en Interactif, cochez le bouton Suivi Interactif
+dans ASTK.
+
+Vous pouvez également préciser votre DISPLAY dans les arguments
+de la commande STANLEY :
+
+STANLEY(DISPLAY='adresse_ip:0.0');
+"""),
+
+4 : _("""
+Une erreur est intervenue. Raison : %(k1)s
+"""),
+
+5 : _("""
+Cette action n'est pas réalisable: %(k1)s
+"""),
+
+6 : _("""
+En mode DISTANT, la variable %(k1)s est obligatoire. On abandonne.
+"""),
+
+7 : _("""
+Le parametre 'machine_gmsh_exe' ou 'machine_visu' n'est pas renseigné, 
+il faut ouvrir le fichier manuellement.
+"""),
+
+8 : _("""
+Lancement terminé.
+"""),
+
+9 : _("""
+Exécution de %(k1)s
+"""),
+
+10 : _("""
+Erreur de lancement de la commande!
+"""),
+
+11 : _("""
+Dans le mode WINDOWS, la variable %(k1)s est obligatoire. On abandonne.
+"""),
+
+12 : _("""
+Les fichiers de post-traitement sont copiés.
+Veuillez maintenant ouvrir manuellement skin.pos avec GMSH.
+"""),
+
+13 : _("""
+Le fichier de post-traitement est copie.
+Veuillez maintenant ouvrir manuellement fort.33.pos avec GMSH.
+"""),
+
+14 : _("""
+Impossible de contacter le serveur SALOME! Vérifier qu'il est bien lancé.
+"""),
+
+15 : _("""
+Impossible de récupérer le nom de la machine locale! 
+Solution alternative : utiliser le mode DISTANT en indiquant l'adresse IP
+ou le nom de la machine dans la case 'machine de salome'.
+"""),
+
+16 : _("""
+Pour visualisation dans Salome, la variable %(k1)s est obligatoire. On abandonne.
+"""),
+
+17 : _("""
+Pour visualisation dans Salome, la variable machine_salome_port est obligatoire. 
+On abandonne.
+"""),
+
+18 : _("""
+Erreur : mode WINDOWS non implémenté
+"""),
+
+19 : _("""
+Erreur: il est possible que Stanley ne puisse pas contacter Salome (machine salome definie : %(k1)s). 
+Vous pouvez modifier la machine Salome dans les parametres dans Stanley. 
+"""),
+
+20 : _("""
+Execution terminée.
+"""),
+
+21 : _("""
+Le module python "pylotage" semble etre absent, ou mal configuré, 
+on désactive le mode Salome de Stanley.
+"""),
+
+22 : _("""
+Impossible d'affecter la variable [%(k1)s / %(k2)s].
+"""),
+
+23 : _("""
+Lecture du fichier d'environnement : %(k1)s
+"""),
+
+24 : _("""
+Il n'y a pas de fichier d'environnement. 
+On démarre avec une configuration par défaut.
+"""),
+
+25 : _("""
+Le fichier d'environnement n'a pas la version attendue. 
+On continue mais en cas de problème, effacer le repertoire ~/%(k1)s et relancer.
+"""),
+
+26 : _("""
+Le fichier d'environnement n'est pas exploitable (par exemple c'est une ancienne version).
+On démarre avec une configuration par défaut.
+"""),
+
+27 : _("""
+On initialise une configuration par défaut.
+"""),
+
+28 : _("""
+Nouveaux paramètres sauvegardés dans : %(k1)s
+"""),
+
+29 : _("""
+Impossible de sauvegarder les paramètres dans : %(k1)s
+"""),
+
+30 : _("""
+La visualisation aux points de Gauss n'est pas permise avec la sensibilité.
+"""),
+
+31 : _("""
+Problème : %(k1)s
+"""),
+
+32 : _("""
+Impossible d'ouvrir en écriture le fichier %(k1)s
+"""),
+
+33 : _("""
+Attention : on ne peut pas tracer un champ aux points de Gauss sur la déformée...
+"""),
+
+34 : _("""
+Le champ est tracé avec la déformée.
+"""),
+
+35 : _("""
+Concept ignoré : %(k1)s
+"""),
+
+36 : _("""
+Il y a plusieurs concepts %(k1)s stockés dans la structure de donnée résultat.
+"""),
+
+37 : _("""
+Tous les concepts Aster nécessaires à Stanley n'ont pas été calculés. 
+Il manque :
+%(k1)s
+"""),
+
+38 : _("""
+Stanley - Erreur lors de l'appel à la commande Aster:
+
+%(k1)s
+Raison:
+%(k2)s
+"""),
+
+40 : _("""
+Stanley - Projection aux points de Gauss: type de résultat non développé
+%(k1)s
+"""),
+
+}
index 6eb72e5d88672657dfa6216a2dbab7d64651443a..f7e6c15e540a7f8d9c06bd2969c030ce3a5bb358 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF stbtrias Messages  DATE 20/02/2007   AUTEUR LEBOUVIER F.LEBOUVIER 
+#@ MODIF stbtrias Messages  DATE 11/09/2007   AUTEUR DURAND C.DURAND 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -23,46 +23,49 @@ def _(x) : return x
 cata_msg={
 
 1: _("""
- le fichier ideas est vide, ou ne contient pas de datatset traite par l'interface
+ le fichier IDEAS est vide
+ ou ne contient pas de DATASET traite par l'interface
 """),
 
 2: _("""
- couleur inconnu
+ couleur inconnue
 """),
 
 3: _("""
-  attention le dataset 2420 apparait plusieurs fois.
+  attention le DATASET 2420 apparait plusieurs fois.
 """),
 
 4: _("""
-  attention le dataset 18 apparait plusieurs fois.
+  attention le DATASET 18 apparait plusieurs fois.
 """),
 
 5: _("""
- groupe  %(k1)s  de longueur superieure a 8 (troncature du nom)
+ groupe  %(k1)s  de longueur supérieure à 8 (troncature du nom)
 """),
 
 6: _("""
- le nom du groupe est invalide:  %(k1)s  : non traite
+ le nom du groupe est invalide:  %(k1)s  : non traité
 """),
 
 7: _("""
- le nom du groupe  %(k1)s  est tronque :  %(k2)s 
+ le nom du groupe  %(k1)s  est tronqué :  %(k2)s 
 """),
 
 8: _("""
- le nom du groupe ne peut commencer par coul_ : non traite
+ le nom du groupe ne peut commencer par COUL_ : non traité
 """),
 
 9: _("""
-  aucun systeme de coordonnes n'est defini
+  aucun système de coordonnés n'est défini
 """),
 
 10: _("""
-  attention systeme de coordonnes autre que cartesien non relu dans aster.
+  attention système de coordonnées autre que cartésien non relu dans ASTER.
 """),
 
 11: _("""
-  attention votre maillage utiliseplusieurs systemes de coordonnees.verifier qu'ils sont tous identiques car asterne gere qu'un systeme de coordonne cartesien unique.
+  attention votre maillage utilise plusieurs systèmes de coordonnées
+  vérifiez qu'ils sont tous identiques
+  ASTER ne gère qu'un système de coordonnéez cartesien unique.
 """),
 }
diff --git a/Aster/Cata/cataSTA9/Messages/subdivise.py b/Aster/Cata/cataSTA9/Messages/subdivise.py
new file mode 100644 (file)
index 0000000..9cffdc8
--- /dev/null
@@ -0,0 +1,103 @@
+#@ MODIF subdivise Messages  DATE 19/12/2007   AUTEUR ABBAS M.ABBAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  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.
+# ======================================================================
+
+def _(x) : return x
+
+# Pour la méthode de subdivision
+
+cata_msg={
+
+# Plus de messages pour développeur ==> ASSERT
+
+# Messages utilisateurs
+10: _("""Le nombre maximale d'itérations autorisées ITER_GLOB_* est atteint. 
+La méthode de subdivision ne peut pas faire d'extrapolation.
+La subdivision UNIFORME est déclenchée.
+Cela peut etre du à une oscillation de l'erreur ou à une divergence.
+   Nombre d'intervalle             = <%(i1)d>
+   Niveau de subdivision           = <%(i2)d>
+   Ratio sur le premier intervalle = <%(r1)E>
+   Pas de Temps actuel             = <%(r2)E>"""),
+
+11: _("""La méthode de subdivision ne peut pas faire d'extrapolation.
+Il n'y a pas de convergence et la méthode de subdivision trouve un nombre
+d'itération à convergence < au nombre donné sous le mot clé CONVERGENCE.
+La subdivision UNIFORME est déclanchée.
+   Nombre d'intervalle             = <%(i1)d>
+   Niveau de subdivision           = <%(i2)d>
+   Ratio sur le premier intervalle = <%(r1)E>
+   Pas de Temps actuel             = <%(r2)E>"""),
+
+12: _("""Le nombre maximal de niveau de subdivision est atteint.
+      SUBD_NIVEAU doit etre >= <%(i1)d>
+      SUBD_NIVEAU est de     = <%(i2)d>
+Conseil :
+   Augmenter SUBD_NIVEAU. Il est également possible d'ajuster SUBD_PAS_MINI pour
+   imposer un incrément de temps en-dessous duquel on ne peut plus subdiviser.
+   Si les 2 mots clefs SUBD_NIVEAU et SUBD_PAS_MINI sont utilisés la subdivision
+   s'arrete dès que l'un des 2 critères est vérifié."""),
+
+13: _("""Méthode de subdivision : %(k1)s"""),
+
+14: _("""La subdivision est forcée, méthode UNIFORME.
+   Nombre d'intervalle             = <%(i1)d>
+   Niveau de subdivision           = <%(i2)d>
+   Ratio sur le premier intervalle = <%(r1)E>
+   Pas de Temps actuel             = <%(r2)E>"""),
+
+15: _("""Le pas minimal de la subdivision est atteint.
+   Pas de Temps actuel          = <%(r1)E>
+   Pas de Temps minimum imposé  = <%(r2)E>
+   Niveau de subdivision        = <%(i1)d>
+   Méthode de subdivision       = <%(k1)s>
+Conseil :
+   Diminuer SUBD_PAS_MINI. Il est également possible d'ajuster SUBD_NIVEAU pour
+   indiquer le nombre successif de subdivision d'un pas de temps.
+   Si les 2 mots clefs SUBD_NIVEAU et SUBD_PAS_MINI sont utilisés la subdivision
+   s'arrete dès que l'un des 2 critères est vérifié."""),
+
+16: _("""Méthode extrapolation, convergence prévue en %(i1)d iterations pour un maximum
+d'itérations autorisé de %(i2)d."""),
+
+17: _("""Itération n %(i1)d, poursuite autorisée."""),
+
+18: _("""Subdivision du pas de temps en %(i1)d intervalles. Le ratio sur le premier
+intervalle est de %(r1)e.
+   Niveau de subdivision = <%(i2)d>
+   Pas de Temps actuel   = <%(r2)E>"""),
+
+}
index 52eb45afaac8abc15cd61a8e2e77a2f19ecefd60..e3a5269c677284fa0b4f5ce19e6068be15b6ed0d 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF supervis Messages  DATE 07/06/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF supervis Messages  DATE 19/05/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -22,25 +22,33 @@ def _(x) : return x
 
 cata_msg={
 
+1 : _("""
+ L'utilisation du mot-clé PAR_LOT='NON' permet d'accéder en lecture et en écriture
+ au contenu des concepts Aster. De ce fait, votre étude est exclue du périmètre
+ qualifié de Code_Aster puisque toutes ses étapes ne peuvent être certifiées.
 
-
-
-
+ Conseils :
+   - Il n'y a pas particulièrement de risque de résultat faux... sauf si votre
+     programmation l'introduit.
+   - Distinguez le calcul lui-même (qui doit sans doute passer en PAR_LOT='OUI')
+     des post-traitements (qui nécessiteraient le mode PAR_LOT='NON') qui peuvent
+     être réalisés en POURSUITE.
+"""),
 
 2: _("""
  Arret sur erreur(s) utilisateur
 """),
 
 3: _("""
- Erreur programmeur : JEMARQ/JEDEMA non apparies.
+ Erreur programmeur : JEMARQ/JEDEMA non appariés.
 """),
 
 4: _("""
- Commande n  %(k1)s  :  "%(k2)s"  :   %(k3)s  erreur(s) detectee(s)
+ Commande n  %(k1)s  :  "%(k2)s"  :   %(k3)s  erreur(s) détectée(s)
 """),
 
 5: _("""
- Erreur(s) à l'exécution de "%(k1)s" : arret immediat du programme.
+ Erreur(s) à l'exécution de "%(k1)s" : arret immédiat du programme.
 """),
 
 6: _("""
@@ -48,11 +56,12 @@ cata_msg={
 """),
 
 7: _("""
- Le concept " %(k1)s " est inconnu. Il n'est ni parmi les créés, ni parmi ceux à créer.
+ Le concept " %(k1)s " est inconnu.
+ Il n'est ni parmi les créés, ni parmi ceux à créer.
 """),
 
 8: _("""
- Un nom de concept intermediaire doit commencer par '.' ou '_' et non :  %(k1)s
+ Un nom de concept intermédiaire doit commencer par '.' ou '_' et non :  %(k1)s
 """),
 
 9: _("""
@@ -60,15 +69,31 @@ cata_msg={
 """),
 
 10: _("""
-   - le concept  "%(k1)s" est detruit des bases de donnees.
+   - le concept  "%(k1)s" est détruit des bases de données.
 """),
 
 11: _("""
- Impossible d'allouer la mémoire jeveux demandée
+ Impossible d'allouer la mémoire JEVEUX demandée : %(i1)d Moctets.
+
+ En général, cette erreur se produit car la mémoire utilisée hors du fortran
+ (jeveux) est importante.
+
+ Causes possibles :
+   - le calcul produit de gros objets Python dans une macro-commande ou
+     dans le jeu de commande lui-même,
+   - le calcul appelle un solveur (MUMPS par exemple) ou un outil externe
+     qui a besoin de mémoire hors jeveux,
+   - utilisation de jeveux dynamique,
+   - ...
+
+ Solution :
+   - distinguer la mémoire limite du calcul (case "Mémoire totale" de astk)
+     de la mémoire réservée à jeveux (case "dont Aster"), le reste étant
+     disponible pour les allocations dynamiques.
 """),
 
 12: _("""
- Exécution de jeveux en mode debug
+ Exécution de JEVEUX en mode DEBUG
 """),
 
 13: _("""
@@ -107,10 +132,6 @@ cata_msg={
   Erreur(s) fatale(s) lors de la lecture des catalogues
 """),
 
-22: _("""
-L'argument du mot cle "NOM" sous le mot clé facteur "CODE" est tronqué à 8 caractères. Le nom de code est donc "%(k1)s".
-"""),
-
 23: _("""
  Debug JXVERI demandé
 """),
@@ -121,6 +142,8 @@ L'argument du mot cle "NOM" sous le mot cl
 
 25: _("""
  Mémoire gestion : "COMPACTE"
+ Ce mode de gestion peut augmenter sensiblement le temps système de certaines commandes,
+ les lectures/écritures sur les bases Jeveux étant beaucoup plus fréquentes
 """),
 
 26: _("""
@@ -136,7 +159,7 @@ L'argument du mot cle "NOM" sous le mot cl
 """),
 
 29: _("""
- Trop de noms definis dans la liste argument de "FICHIER"
+ Trop de noms définis dans la liste argument de "FICHIER"
 """),
 
 30: _("""
@@ -152,7 +175,7 @@ L'argument du mot cle "NOM" sous le mot cl
 """),
 
 33: _("""
- Erreur fatale  **** appel a commande "superviseur".
+ Erreur fatale  **** appel à commande "superviseur".
 """),
 
 34: _("""
@@ -167,11 +190,6 @@ L'argument du mot cle "NOM" sous le mot cl
  Le concept de nom '%(k1)s' n'existe pas
 """),
 
-
-
-
-
-
 38: _("""
  Il n'y a plus de temps pour continuer
 """),
@@ -189,8 +207,6 @@ L'argument du mot cle "NOM" sous le mot cl
 Le message d'alarme '%(k1)s' a été émis %(i1)d fois, il ne sera plus affiché.
 """),
 
-
-
 43: _("""
  Debug SDVERI suspendu
 """),
@@ -203,8 +219,6 @@ Le message d'alarme '%(k1)s' a 
  Debug JEVEUX suspendu
 """),
 
-
-
 47: _("""
  Debug JXVERI suspendu
 """),
@@ -218,48 +232,194 @@ Le message d'alarme '%(k1)s' a 
 """),
 
 50: _("""
- la commande a un numero non appelable dans cette version.
- le numero errone est  %(i1)d 
+ la commande a un numéro non appelable dans cette version.
+ le numero erroné est  %(i1)d
+"""),
+
+52: _("""
+ fin de lecture (durée  %(r1)f  s.) %(k1)s
 """),
 
+53: _("""
+ vous ne pouvez utiliser plus de  %(i1)d
+ niveaux de profondeur pour des appels par la procédure %(k1)s
+"""),
 
+55: _("""
+ Appels récursifs de messages d'erreur ou d'alarme.
+"""),
 
+56: _("""
+ Incohérence entre le catalogue et le corps de la macro.
+"""),
 
+57: _("""
+   Impossible d'importer '%(k1)s' dans Messages.
+   Le fichier %(k1)s.py n'existe pas dans le répertoire 'Messages'
+   ou bien la syntaxe du fichier est incorrecte.
 
+   Merci de signaler cette anomalie.
 
+   Traceback :
+   %(k2)s
+"""),
 
+60: _("""
+ la procédure a un numéro non appelable dans cette version.
+ le numero errone est  %(i1)d
+"""),
 
-52: _("""
- fin de lecture (duree  %(r1)f  s.) %(k1)s 
+61: _("""
+  La commande a un numéro non appelable dans cette version
+  Le numéro erroné est : %(i1)d
 """),
 
-53: _("""
- vous ne pouvez utiliser plus de  %(i1)d 
- niveaux de profondeur pour des appels par la  procedure %(k1)s 
+62: _("""
+  Les messages d'erreurs précédent concerne la commande :
 """),
 
+63: _("""
+     ARRET PAR MANQUE DE TEMPS CPU
+     Les commandes suivantes sont ignorees, on passe directement dans FIN
+     La base globale est sauvegardee
+     Temps consomme de la reserve CPU        :  %(r1).2f s\n
+"""),
 
+64: _("""
+  Valeur initiale du temps CPU maximum =   %(i1)d secondes
+  Valeur du temps CPU maximum passé aux commandes =   %(i2)d secondes
+  Réserve CPU prévue = %(i3)d secondes
+"""),
 
+65: _("""
+   %(k1)s   %(k2)s   %(k3)s   %(k4)s
+"""),
 
+66: _("""
+   %(k1)s   %(k2)s   %(k3)s   %(k4)s   %(k5)s
+"""),
 
+67: _("""
+ Passage numéro %(i1)d
+"""),
 
-55 : _("""
Appels récursifs de messages d'erreur ou d'alarme.
+68: _("""
information sur les concepts devant etre créés.
 """),
 
-56 : _("""
- Incohérence entre le catalogue et le corps de la macro.
+69: _("""
+   %(k1)s   %(k2)s   %(k3)s   %(k4)s
 """),
 
-57 : _("""
-   Impossible d'importer '%(k1)s' dans Messages.
-   Le fichier %(k1)s.py n'existe pas dans le répertoire 'Messages'
-   ou bien la syntaxe du fichier est incorrecte.
-   
-   Merci de signaler cette anomalie.
-   
-   Traceback :
-   %(k2)s
+70: _("""
+   %(k1)s   %(k2)s   %(k3)s   %(k4)s   %(k5)s
+"""),
+
+71: _("""
+ rappel sur les executions précédentes
+   - il a ete executé %(i1)d procédures et opérateurs.
+"""),
+
+72: _("""
+   - l'execution précédente s'est terminée correctement.
+"""),
+
+73: _("""
+
+   - l'execution précédente s'est terminée en erreur dans la procédure %(k1)s.
+"""),
+
+74: _("""
+
+   - l'execution précédente s'est terminée en erreur dans l'opérateur %(k1)s.
+"""),
+
+75: _("""
+     le concept %(k1)s de type %(k2)s  est peut-etre errone.
+"""),
+
+76: _("""
+   - l'execution precedente s'est terminee prematurement dans l'operateur %(k1)s.
+"""),
+
+77: _("""
+     le concept %(k1)s de type %(k2)s  a ete néanmoims validé par l'opérateur
+"""),
+
+78: _("""
+     Message attache au concept  %(k1)s
+"""),
+
+79: _("""
+     Pas de message attache au concept %(k1)s
+"""),
+
+80: _("""
+
+"""),
+
+81: _("""
+ %(k1)s nom symbolique inconnu
+  - nombre de valeurs attendues %(i1)d
+  - valeurs attendues : %(k1)s, %(k2)s,...
+"""),
+
+82: _("""
+ L'argument du mot cle "CAS"  est errone.
+ Valeur lue %(k1)s
+ nombre de valeurs attendues %(i1)d
+ valeurs attendues : %(k1)s,%(k2)s, ...
+"""),
+
+83: _("""
+
+ le nombre d'enregistrements (nmax_enre) et leurs longueurs (long_enre) conduisent a un
+fichier
+ dont la taille maximale en octets (%(i1)d) est superieure a limite autorisee :  %(i2)d
+
+"""),
+
+84: _("""
+ Nom symbolique errone pour un fichier de sortie
+ Valeur lue %(k1)s
+ - nombre de valeurs attendues %(i2)d
+ - valeurs attendues           %(k2)s, %(k3)s
+
+"""),
+
+85: _("""
+ information sur les concepts existants.
+"""),
+
+86: _("""
+ Erreur a la relecture du fichier pick.1 : aucun objet sauvegardé ne sera récupéré.
+"""),
+
+87: _("""
+Types incompatibles entre glob.1 et pick.1 pour le concept de nom %(k1)s.
+"""),
+
+88: _("""
+Concept de nom %(k1)s et de type %(k2)s introuvable dans la base globale"
+"""),
+
+# on ne veut pas émettre d'alarme mais que le message se voit, donc on fait la mise en forme ici !
+89 : _("""
+   !-----------------------------------------------------------------------!
+   !   Liste des alarmes émises lors de l'exécution du calcul.             !
+   !                                                                       !
+   !   Les alarmes que vous avez choisies d'ignorer sont précédées de (*). !
+   !   Nombre d'occurrences pour chacune des alarmes :                     !
+"""),
+        
+90 : _("""   !      %(k1)3s %(k2)-20s émise %(i1)4d fois                         !
+"""),
+
+91 : _("""   !-----------------------------------------------------------------------!
+
+"""),
+
+92 : _("""   !          aucune alarme                                                !
 """),
 
 }
index 122458456a8ecb9c1e4543e81d5adb9d5ddd8c26..45fbb1cb89a8c2dc4d2fbb41052968e6ebcd7078 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF table0 Messages  DATE 20/02/2007   AUTEUR LEBOUVIER F.LEBOUVIER 
+#@ MODIF table0 Messages  DATE 25/02/2008   AUTEUR ZENTNER I.ZENTNER 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
+1 : _("""
 Erreur dans les données. Le paramètre %(k1)s n'existe pas dans la table.
 """),
 
+2 : _("""
+Paramètre %(k1)s inexistant dans la table %(k2)s.
+"""),
+
+3 : _("""
+Opération RENOMME. Erreur : %(k1)s
+"""),
+
+4 : _("""
+Paramètre %(k1)s inexistant dans la table %(k2)s.
+"""),
+
+5 : _("""
+Paramètre %(k1)s inexistant dans la table %(k2)s.
+"""),
+
+6 : _("""
+Le fichier %(k1)s existe déjà, on écrit à la suite.
+"""),
+
+7 : _("""
+Paramètre absent de la table : %(k1)s.
+"""),
+
+8 : _("""
+Paramètres absents de la table (ou de NOM_PARA) : %(k1)s.
+"""),
+
+10 : _("""
+NUME_TABLE=%(i1)d incorrect : il n'y a que %(i2)d blocs de tables dans le fichier.
+"""),
+
+11 : _("""
+Nombre de champs incorrect ligne %(i1)d.
+"""),
+
+12 : _("""
+On attend %(i1)d paramètres.
+"""),
+
+13 : _("""
+On a lu %(i1)d champs dans le fichier.
+"""),
+
+14 : ("""
+Les listes NOM_PARA et VALE doivent avoir le meme cardinal.
+"""),
+
+15 : ("""
+Les listes DEFA et PARA_NOCI doivent avoir le meme cardinal.
+"""),
+
 }
diff --git a/Aster/Cata/cataSTA9/Messages/test0.py b/Aster/Cata/cataSTA9/Messages/test0.py
new file mode 100644 (file)
index 0000000..23dc39e
--- /dev/null
@@ -0,0 +1,56 @@
+#@ MODIF test0 Messages  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg={
+1 : _("""
+Expression régulière invalide : %(k2)s
+
+Exception retournée :
+   %(k1)s
+"""),
+
+2 : _("""
+Le fichier n'a pas été fermé : %(k1)s
+"""),
+
+3 : _("""
+TEST_FICHIER impossible, fichier inexistant : %(k1)s
+"""),
+
+4 : _("""
+
+     Nom du fichier   : %(k3)s
+
+                       -----------------------------------------------------------------------
+                       |             FICHIER              |            REFERENCE             |
+   -------------------------------------------------------------------------------------------
+   | Nombre de valeurs |            %(i1)6d                |            %(i2)6d                |
+   | Somme des valeurs |      %(r1)20.13e        |      %(k4)20s        |
+   | md5sum des textes | %(k1)-32s | %(k2)-32s |
+   -------------------------------------------------------------------------------------------
+
+"""),
+
+}
+
+
+
diff --git a/Aster/Cata/cataSTA9/Messages/unilater.py b/Aster/Cata/cataSTA9/Messages/unilater.py
new file mode 100644 (file)
index 0000000..07b0997
--- /dev/null
@@ -0,0 +1,35 @@
+#@ MODIF unilater Messages  DATE 19/12/2007   AUTEUR ABBAS M.ABBAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg = {
+
+51 : _("""
+Il y a plusieurs charges contenant des liaisons unilatérales.
+"""),
+
+
+75: _("""
+Pour le mot-clef LIAISON_UNILATER.
+La composante %(k2)s est inexistante sur le noeud %(k1)s
+"""),
+
+}
index b68ff17c19fa90dda8780ebd2e86575cc38e2aec..b6ca09f0996d1d09db41495568c800f604f5ca65 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF utilifor Messages  DATE 20/02/2007   AUTEUR LEBOUVIER F.LEBOUVIER 
+#@ MODIF utilifor Messages  DATE 18/09/2007   AUTEUR DURAND C.DURAND 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -22,36 +22,17 @@ def _(x) : return x
 
 cata_msg={
 
-1: _("""
- number of terms .le. 0
-"""),
-
-2: _("""
- nombre de termes .gt. 1000
-"""),
-
-3: _("""
- x en dehors de l'intervalle (-1,+1)
-"""),
-
 4: _("""
- x trop grand 
-"""),
-
-5: _("""
- nombre de coefficients inferieur a 1
-"""),
-
-6: _("""
- serie de chebyshev trop courte pour la precision
+ X trop grand 
 """),
 
 7: _("""
- probleme dans la resolution du systeme sous contraint vsrsrr
+ problème dans la résolution du système sous contraint VSRSRR
 """),
 
 8: _("""
- la programmation prevoit que les entiers sont codes sur plus de 32 bits. ce qui n'est pas le cas sur votre machine
+ la programmation prévoit que les entiers sont codés sur plus de 32 bits
+ ce qui n'est pas le cas sur votre machine
 """),
 
 9: _("""
index 744616223f836fd8436bfba5c917b705c2b0956f..f19902b96c2da9d5916bc20f84dfa72aa6073f3d 100644 (file)
-#@ MODIF utilitai Messages  DATE 29/09/2006   AUTEUR VABHHTS J.PELLET 
+#@ MODIF utilitai Messages  DATE 08/02/2008   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  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.        
+# COPYRIGHT (C) 1991 - 2007  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.
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
+1 : _("""
  le nombre de grels du ligrel du modele est nul.
 """),
 
-2: _("""
+2 : _("""
  il ne faut pas demander 'tr' derriere cara si le type d'element discret ne prend pas en compte la rotation
 """),
 
-3: _("""
+3 : _("""
  "*" est illicite dans une liste.
 """),
 
-4: _("""
+4 : _("""
   %(k1)s  n'est pas une option reconnu.
 """),
 
-5: _("""
+5 : _("""
  vecteur axe de norme nulle
 """),
 
-6: _("""
+6 : _("""
  axe non colineaire a v1v2
 """),
 
-7: _("""
+7 : _("""
  pb norme de axe
 """),
 
-8: _("""
- erreur dans fointc
-"""),
-
-9: _("""
+9 : _("""
  dimension  %(k1)s  inconnue.
 """),
 
-10: _("""
+10 : _("""
  maillage obligatoire.
 """),
 
-11: _("""
- on ne peut pas creer un champ de vari_r avec le mot cle facteur affe (voir u2.01.09)
+11 : _("""
+ on ne peut pas créer un champ de VARI_R avec le mot cle facteur AFFE
+ (voir u2.01.09)
 """),
 
-12: _("""
- mot cle affe/noeud interdit ici.
+12 : _("""
+ mot clé AFFE/NOEUD interdit ici.
 """),
 
-13: _("""
- mot cle affe/group_no interdit ici.
+13 : _("""
+ mot clé AFFE/GROUP_NO interdit ici.
 """),
 
-14: _("""
- type scalaire non traite :  %(k1)s 
+14 : _("""
+ type scalaire non traité :  %(k1)s
 """),
 
-15: _("""
- incoherence entre nombre de composantes et nombre de valeurs
+15 : _("""
+ incohérence entre nombre de composantes et nombre de valeurs
 """),
 
-16: _("""
- il faut champ de fonctions svp
+16 : _("""
+ il faut donner un champ de fonctions
 """),
 
-17: _("""
- les parametres doivent etre reels
+17 : _("""
+ les parametres doivent être réels
 """),
 
-18: _("""
- maillages diff.
+18 : _("""
+ maillages différents
 """),
 
-19: _("""
- erreur pgmeur: augmenter nbpumx.
+20 : _("""
+ le champ  %(k1)s n'est pas de type réel
 """),
 
-20: _("""
- le champ  %(k1)s n'est pas de type reel
+2: _("""
+ on ne traite que des "CHAM_NO" ou des "CHAM_ELEM".
 """),
 
-21: _("""
- on ne traite que des "cham_no" ou des "cham_elem".
-"""),
 
-22: _("""
- unknown parameter (dvlp)
-"""),
 
-23: _("""
+
+
+
+23 : _("""
  on ne trouve aucun champ.
 """),
 
-24: _("""
- le nom symbolique:  %(k1)s  est illicite pour ce resultat
+24 : _("""
+ le nom symbolique:  %(k1)s  est illicite pour ce résultat
 """),
 
-25: _("""
- le champ cherche n'a pas encore ete calcule.
+25 : _("""
+ le champ cherché n'a pas encore été calculé.
 """),
 
-26: _("""
- pas la meme numerotation sur les cham_nos.
+26 : _("""
+ pas la meme numerotation sur les CHAM_NO.
 """),
 
-27: _("""
+27 : _("""
  il faut donner un maillage.
 """),
 
-28: _("""
- champ non-assemblable en cham_no:  %(k1)s 
+28 : _("""
+ champ non-assemblable en CHAM_NO:  %(k1)s
 """),
 
-29: _("""
- champ non-assemblable en cham_elem (elga):  %(k1)s 
+29 : _("""
+ champ non-assemblable en CHAM_ELEM (ELGA):  %(k1)s
 """),
 
-30: _("""
- a faire ??
+30 : _("""
+ Pour l'operation "ASSE", la commande ne permet pas de créer de champs CHAM_ELEM/ELEM
 """),
 
-31: _("""
+31 : _("""
  nom_cmp2 et nom_cmp de longueur differentes.
 """),
 
 32: _("""
- grandeur incorrecte pour: %(k1)s 
+ Grandeur incorrecte pour le champ : %(k1)s
+ grandeur proposée :  %(k2)s
+ grandeur attendue :  %(k3)s
 """),
 
-33: _("""
+33 : _("""
  le mot-cle 'coef_c' n'est applicable que pour un champ de type complexe
 """),
 
-34: _("""
+34 : _("""
  developpement non realise pour les champs aux elements. vraiment desole !
 """),
 
-35: _("""
+35 : _("""
  le champ  %(k1)s n'est pas de type complexe
 """),
 
-36: _("""
+36 : _("""
  on ne traite que des cham_no reels ou complexes. vraiment desole !
 """),
 
-37: _("""
+37 : _("""
  acces "r8" interdit ici.
 """),
 
-38: _("""
+38 : _("""
  acces interdit
 """),
 
-39: _("""
+39 : _("""
  genre :  %(k1)s  non prevu.
 """),
 
-40: _("""
- structure de donnees inexistante : %(k1)s 
+40 : _("""
+ structure de donnees inexistante : %(k1)s
 """),
 
-41: _("""
- duplcation "maillage" du .ltnt, objet inconnu:  %(k1)s 
+41 : _("""
+ duplcation "maillage" du .ltnt, objet inconnu:  %(k1)s
 """),
 
-42: _("""
- type de sd. inconnu :  %(k1)s 
+42 : _("""
+ type de sd. inconnu :  %(k1)s
 """),
 
-43: _("""
- numerotation absente  probleme dans la matrice  %(k1)s 
+43 : _("""
+ numerotation absente  probleme dans la matrice  %(k1)s
 """),
 
-44: _("""
+44 : _("""
   erreur dans la  recuperation  du nombre de noeuds !
 """),
 
-45: _("""
+45 : _("""
  type non connu.
 """),
 
-46: _("""
+46 : _("""
  la fonction doit s appuyee sur un maillage pour lequel une abscisse curviligne a ete definie.
 """),
 
-47: _("""
+47 : _("""
   le mot cle : %(k1)s n est pas autorise.
 """),
 
-48: _("""
- erreur dans la dimension du vecteur .erre. cf diinit
-"""),
-
-49: _("""
- la question : " %(k1)s " est inconnue
+49 : _("""
+  DISMOI :
+  la question : " %(k1)s " est inconnue
 """),
 
-50: _("""
- cham_elem inexistant:  %(k1)s 
+50 : _("""
+ CHAM_ELEM inexistant:  %(k1)s
 """),
 
-51: _("""
- il n y a pas de nume_ddl pour ce cham_no
+51 : _("""
+ il n y a pas de NUME_DDL pour ce CHAM_NO
 """),
 
-52: _("""
+52 : _("""
  type de charge inconnu
 """),
 
-53: _("""
- suffixe inconu:  %(k1)s 
+53 : _("""
+ suffixe inconu:  %(k1)s
 """),
 
-54: _("""
+54 : _("""
  trop d objets
 """),
 
-55: _("""
- champ inexistant: %(k1)s 
+55 : _("""
+ champ inexistant: %(k1)s
 """),
 
-56: _("""
+56 : _("""
  le champ : " %(k1)s " n est pas un champ
 """),
 
-57: _("""
-  la question n'a pas de reponse sur une grandeur de type matrice gd_1 x gd_2
-"""),
-
-58: _("""
- situation imprevue.
+57 : _("""
+  DISMOI :
+  la question n'a pas de réponse sur une grandeur de type matrice gd_1 x gd_2
 """),
 
-59: _("""
+59 : _("""
+  DISMOI :
   la question n'a pas de sens sur une grandeur de type matrice gd_1 x gd_2
 """),
 
-60: _("""
-  la question n'a pas de sens sur une grandeur de type composee
+60 : _("""
+  DISMOI :
+  la question n'a pas de sens sur une grandeur de type composée
 """),
 
-61: _("""
- imprevu
+6: _("""
+ phenomene inconnu :  %(k1)s
 """),
 
-62: _("""
- on ne sait pas associer de phenomene a ce ligrel :  %(k1)s 
-"""),
-
-63: _("""
- phenomene inconnu :  %(k1)s 
-"""),
-
-64: _("""
- probleme dismoi.
-"""),
-
-65: _("""
+65 : _("""
  le type de concept : " %(k1)s " est inconnu
 """),
 
-66: _("""
- le phenomene :  %(k1)s  est inconnu.
+66 : _("""
+ le phénomène :  %(k1)s  est inconnu.
 """),
 
-67: _("""
- 2
+6: _("""
+ type de resultat inconnu:  %(k1)s  pour l'objet :  %(k2)s
 """),
 
-68: _("""
- type de resultat inconnu:  %(k1)s  pour l'objet :  %(k2)s 
+6: _("""
+ le resultat composé ne contient aucun champ
 """),
 
-69: _("""
- le resulat compose ne contient aucun champ
+70 : _("""
+ TYPE_MAILLE inconnu.
 """),
 
-70: _("""
- type_maille inconnu.
+7: _("""
+ mauvaise recuperation de NEMA
 """),
 
-71: _("""
- mauvaise recuperation de nema
-"""),
-
-72: _("""
+72 : _("""
  on ne traite pas les noeuds tardifs
 """),
 
-73: _("""
+73 : _("""
  grandeur inexistante
 """),
 
-74: _("""
+74 : _("""
  composante de grandeur inexistante
 """),
 
-75: _("""
- probleme avec la reponse  %(k1)s 
+75 : _("""
+ probleme avec la reponse  %(k1)s
 """),
 
-76: _("""
+76 : _("""
  les conditions aux limites autres que des ddls bloques ne sont pas admises
 """),
 
-77: _("""
- unite logique  %(k1)s , probleme lors du close 
+77 : _("""
+ unite logique  %(k1)s , probleme lors du close
 """),
 
-78: _("""
-  erreur dans la  recuperation  du maillage!
+78 : _("""
+  erreur dans la  recuperation  du maillage
 """),
 
-79: _("""
-  erreur dans la  recuperation  du nombre de mailles !
+79 : _("""
+  erreur dans la récuperation du nombre de mailles
 """),
 
-80: _("""
-  gruopage :                                                            groupe_ma non present !
+80 : _("""
+  groupe_ma non présent
 """),
 
-81: _("""
-  erreur a l'appel de metis plus aucune unite logique libre !
+81 : _("""
+  erreur à l'appel de METIS
+  plus aucune unité logique libre
 """),
 
-82: _("""
+82 : _("""
  methode d'integration inexistante.
 """),
 
-83: _("""
+83 : _("""
  interpolation par defaut "lineaire"
 """),
 
-84: _("""
+84 : _("""
  interpolation  %(k1)s  non implantee
 """),
 
-85: _("""
+85 : _("""
  recherche " %(k1)s " inconnue
 """),
 
-86: _("""
+86 : _("""
  l'intitule " %(k1)s " n'est pas correct.
 """),
 
-87: _("""
+87 : _("""
  le noeud " %(k1)s " n'est pas un noeud de choc.
 """),
 
-88: _("""
+88 : _("""
  nom de sous-structure et d'intitule incompatible
 """),
 
-89: _("""
+89 : _("""
  le noeud " %(k1)s " n'est pas un noeud de choc de l'intitule.
 """),
 
-90: _("""
+90 : _("""
  le noeud " %(k1)s " n'est pas compatible avec le nom de la sous-structure.
 """),
 
-91: _("""
+91 : _("""
  le parametre " %(k1)s " n'est pas un parametre de choc.
 """),
 
-92: _("""
+92 : _("""
  le noeud " %(k1)s " n'existe pas.
 """),
 
-93: _("""
+93 : _("""
  la composante " %(k1)s " du noeud " %(k2)s " n'existe pas.
 """),
 
-94: _("""
- type de champ inconnu  %(k1)s 
+94 : _("""
+ type de champ inconnu  %(k1)s
 """),
 
-95: _("""
- "interp_nume" et ("inst" ou "list_inst") non compatibles
+95 : _("""
+ "INTERP_NUME" et ("INST" ou "LIST_INST") non compatibles
 """),
 
-96: _("""
- "interp_nume" et ("freq" ou "list_freq") non compatibles
+96 : _("""
+ "INTERP_NUME" et ("FREQ" ou "LIST_FREQ") non compatibles
 """),
 
-97: _("""
- erreur 0
+9: _("""
+ objet %(k1)s inexistant
 """),
 
-98: _("""
- 1bis
-"""),
-
-99: _("""
- erreur 1
-"""),
 }
index c600ea6ac927fae5deb0152989bf3b5591961950..ad392cf41365af70caccee673769dd6ae3fa2dce 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF utilitai2 Messages  DATE 17/04/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF utilitai2 Messages  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-2: _("""
- erreur 2
-"""),
-
-3: _("""
- erreur 3
-"""),
-
-4: _("""
+4 : _("""
  probleme pour recuperer les variables d'acces
 """),
 
-5: _("""
+5 : _("""
  on ne traite que des variables d'acces reelles
 """),
 
-6: _("""
+6 : _("""
  on ne traite que des parametres reels
 """),
 
-7: _("""
+7 : _("""
  unite logique inexistante
 """),
 
-8: _("""
+8 : _("""
  fonction a une seule variable admis
 """),
 
-9: _("""
- developpement non implante.
-"""),
-
-10: _("""
+10 : _("""
  on n'imprime pas encore de fonction de type " %(k1)s "      desole. 
 """),
 
-11: _("""
+11 : _("""
  on ne sait pas imprimer une fonction de type " %(k1)s "      desole. 
 """),
 
-12: _("""
+12 : _("""
  interpolation sur parametres non permise
 """),
 
-13: _("""
+13 : _("""
  interpolation " %(k1)s " inconnue
 """),
 
-14: _("""
+14 : _("""
  " %(k1)s " type de fonction inconnu
 """),
 
-15: _("""
- pour l'instant, on ne traite pas les formules complexes
-"""),
-
-16: _("""
+16 : _("""
  interpolation non permise
 """),
 
-17: _("""
+17 : _("""
  on ne connait pas ce type d'interpolation:  %(k1)s 
 """),
 
-
-
-
-
-29: _("""
- a faire 1 ...
-"""),
-
-30: _("""
- a faire 2 ...
-"""),
-
-31: _("""
+31 : _("""
  on ne trouve pas l'equation  %(k1)s  dans le "prof_chno"
 """),
 
-
-
-
-
-
-
-
-33: _("""
- le champ nuro cree par nurota comporte d'autres valeurs que 0 ou 1
-"""),
-
-34: _("""
- il y a un bug angles nautiques
-"""),
-
-35: _("""
+35 : _("""
  il y a un bug
 """),
 
-36: _("""
+36 : _("""
  group_ma_interf: un element n'est ni tria3 ni tria6 ni quad4 ni quad8
 """),
 
-37: _("""
+37 : _("""
  group_ma_flu_str: un element n'est ni tria3 ni tria6 ni quad4 ni quad8
 """),
 
-38: _("""
+38 : _("""
  group_ma_flu_sol: un element n'est ni tria3 ni tria6 ni quad4 ni quad8
 """),
 
-39: _("""
+39 : _("""
  group_ma_sol_sol: un element n'est ni tria3 ni tria6 ni quad4 ni quad8
 """),
 
-40: _("""
- erreur : lmat est nul.
-"""),
-
-41: _("""
+41 : _("""
  on ne traite que les matrices symetriques.
 """),
 
-42: _("""
+42 : _("""
  on ne traite que les matrices reelles.
 """),
 
-43: _("""
- option inconnue.
-"""),
-
-44: _("""
- il y un bug.
-"""),
-
-45: _("""
+45 : _("""
  manque une maille tardive
 """),
 
-46: _("""
- developpement non realise.
-"""),
-
-47: _("""
+47 : _("""
  le fichier " %(k1)s " n'est relie a aucune unite logique.
 """),
 
-48: _("""
- type base inconnu : %(k1)s 
-"""),
-
-49: _("""
- la l_table n'existe pas
-"""),
-
-50: _("""
- nombre de bornes errone : on doit en avoir autant que de numeros d'ordre
-"""),
-
-51: _("""
- mot-clef <signes> obligatoire avec option calc_k_max !
-"""),
-
-52: _("""
+52 : _("""
  ajout de l'option "sief_elga_depl", les charges sont-elles correctes ?
 """),
 
-53: _("""
+53 : _("""
  nombre max d'iterations atteint
 """),
 
-54: _("""
+54 : _("""
  la dimension d'espace doit etre <= 3 
 """),
 
-55: _("""
+55 : _("""
  les points du nuage de depart sont tous en (0.,0.,0.).
 """),
 
-56: _("""
+56 : _("""
  le nuage de depart est vide.
 """),
 
-57: _("""
+57 : _("""
  les points du nuage de depart sont tous confondus.
 """),
 
-58: _("""
+58 : _("""
  les points du nuage de depart sont tous alignes.
 """),
 
-59: _("""
+59 : _("""
  les points du nuage de depart sont tous coplanaires.
 """),
 
-60: _("""
+60 : _("""
  methode inconnue :  %(k1)s 
 """),
 
-61: _("""
+61 : _("""
  le descripteur_grandeur de compor ne tient pas sur un seul entier_code
 """),
 
-62: _("""
+62 : _("""
  erreur dans etenca
 """),
 
-63: _("""
+63 : _("""
  la composante relcom n'a pas ete affectee pour la grandeur compor
 """),
 
-64: _("""
+64 : _("""
  le ddl :  %(k1)s n'existe pas dans la grandeur :  %(k2)s 
 """),
 
-65: _("""
+65 : _("""
  incompatibilite sur la description des ddls de la grandeur
 """),
 
-66: _("""
+66 : _("""
  pas assez de valeurs dans la liste.
 """),
 
-67: _("""
+67 : _("""
  il faut des triplets de valeurs.
 """),
 
-68: _("""
+68 : _("""
  il n'y a pas un nombre pair de valeurs.
 """),
 
-69: _("""
+69 : _("""
  nombre de valeurs different  pour "noeud_para" et "vale_y" 
 """),
 
-70: _("""
+70 : _("""
  il manque des valeurs dans  %(k1)s  ,liste plus petite que  %(k2)s 
 """),
 
-71: _("""
+71 : _("""
  interpolation "log" et valeurs negatives sont incompatibles !
 """),
 
-72: _("""
+72 : _("""
  parametres non croissants
 """),
 
-73: _("""
+73 : _("""
  deux fonctions differentes affectee a la meme valeur de parametre.
 """),
 
-74: _("""
+74 : _("""
  deux listes de valeurs differentes affectee a la meme valeur de parametre.
 """),
 
-75: _("""
+75 : _("""
  les listes nume_lign et liste_x doivent contenir le meme nombre de termes
 """),
 
-76: _("""
+76 : _("""
  les noms des paramètres doivent etre différents
 """),
 
-78: _("""
+77 : _("""
+ les listes d'abscisses et d'ordonnées doivent etre de memes longueurs
+"""),
+
+78 : _("""
  fonction incompatible avec  %(k1)s 
 """),
 
-79: _("""
+79 : _("""
  les noms de chaque parametre doivent etre differents
 """),
 
-80: _("""
+80 : _("""
  un seul nume_ordre !!!
 """),
 
-81: _("""
- il faut le meme nombre.
-"""),
-
-82: _("""
+82 : _("""
  la fonction ne doit avoir qu'une ou deux variables
 """),
 
-83: _("""
+83 : _("""
  les noeuds debut et fin n appartiennent pas au maillage.
 """),
 
-84: _("""
+84 : _("""
  la fonction doit s appuyee sur un maillage pour lequel une abscisse curviligne est definie.
 """),
 
-85: _("""
+85 : _("""
  mauvaise definition des noeuds debut et fin
 """),
 
-86: _("""
+86 : _("""
  le nombre de champs a lire est superieur a 100
 """),
 
-87: _("""
+87 : _("""
   -> Le maillage doit etre issu d'IDEAS pour garantir la cohérence entre
      le maillage et les résultats lus.
 
@@ -332,51 +257,40 @@ cata_msg={
      que celui lu par aster (LIRE_MAILLAGE).
 """),
 
-88: _("""
+88 : _("""
   le mot cle modele est obligatoire pour un champ de type cham_elem
 """),
 
-89: _("""
+89 : _("""
   le format ensight n'accepte que le champ pres
 """),
 
-90: _("""
+90 : _("""
  nflag etant egal a 0, on ne peut pas avoir plus d'un instant.
 """),
 
-91: _("""
+91 : _("""
  element non prevu  %(k1)s 
 """),
 
-92: _("""
- nom_cham_med ? (svp)
-"""),
-
-93: _("""
- evol_ther - champ temp uniqmt
+93 : _("""
+ evol_ther - champ temp uniquement
 """),
 
-94: _("""
+94 : _("""
  champ non prevu :  %(k1)s 
 """),
 
-95: _("""
+95 : _("""
   %(k1)s  et  %(k2)s  : nombre de composantes incompatible.
 """),
 
-96: _("""
- champ med introuvable :  %(k1)s 
-"""),
-
-97: _("""
+97 : _("""
  aucun champ lu.
 """),
 
-98: _("""
+98 : _("""
  on n'a pas lu tous les champs.
 """),
 
-99: _("""
- erreur dans la donnee de la s.d.  %(k1)s  a imprimer, il ne s'agit ni d'un matr_elem, ni d'un vect_elem car le .liste_resu n'existe pas.
-"""),
 }
index 41d03d7197ace41d3977ef3e6f5dbd3d26f4561d..42c47d36b68c3833b5b6c51a31b5db6dddb32e11 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF utilitai3 Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF utilitai3 Messages  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2007  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     
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- erreur dans la donnee de la s.d.  %(k1)s  a imprimer, il ne s'agit ni d'un matr_elem, ni d'un vect_elem.
-"""),
-
-2: _("""
+2 : _("""
  l utilisation de cette commande n est legitime que si la configuration etudiee est du type "faisceau_trans"
 """),
 
-3: _("""
+3 : _("""
  erreur dvp_1
 """),
 
-4: _("""
+4 : _("""
  le nom d'un parametre ne peut pas depasser 16 caracteres
 """),
 
-5: _("""
+5 : _("""
  le parametre  %(k1)s  n 'existe pas
 """),
 
-6: _("""
+6 : _("""
  seuls les parametres de types reel, entier ou complexe sont traites
 """),
 
-7: _("""
+7 : _("""
  erreur dvp_2
 """),
 
-8: _("""
+8 : _("""
  code retour non nul detecte
 """),
 
-9: _("""
+9 : _("""
  maillage autre que seg2                                ou poi1 
 """),
 
-10: _("""
+10 : _("""
  mailles ponctuelles                           plexus poi1 ignorees
 """),
 
-11: _("""
+11 : _("""
  le format doit etre ideas
 """),
 
-12: _("""
+12 : _("""
  le maillage doit etre issu d'ideas
 """),
 
-13: _("""
+13 : _("""
   maillage non issu d'ideas
 """),
 
-14: _("""
+14 : _("""
  avec le 2414, on ne traite pas les nume_ordre
 """),
 
-15: _("""
+15 : _("""
  pb lecture du fichier ideas
 """),
 
-16: _("""
- nom_med ? (svp)
-"""),
-
-17: _("""
+17 : _("""
  format  %(k1)s  inconnu.
 """),
 
-18: _("""
+18 : _("""
  nom_cmp_idem est curieux :  %(k1)s 
 """),
 
-19: _("""
+19 : _("""
  probleme maillage <-> modele
 """),
 
-20: _("""
+20 : _("""
  le champ de meta_elno_temp:etat_init(num_init) n'existe pas.
 """),
 
-21: _("""
+21 : _("""
  maillage et modele incoherents.
 """),
 
-22: _("""
+22 : _("""
  pour type_resu:'el..' il faut renseigner le mot cle modele.
 """),
 
-23: _("""
+23 : _("""
  option:  %(k1)s non prevue pour les elements du modele.
 """),
 
-24: _("""
+24 : _("""
  option=  %(k1)s  incompatible avec type_cham=  %(k2)s 
 """),
 
-25: _("""
+25 : _("""
  operation=  %(k1)s  seulement type_cham= 'noeu_geom_r' 
 """),
 
-26: _("""
+26 : _("""
  operation=  %(k1)s  incompatible avec type_cham=  %(k2)s 
 """),
 
-27: _("""
+27 : _("""
  grandeurs differentes pour : %(k1)s et : %(k2)s 
 """),
 
-28: _("""
+28 : _("""
  il existe des doublons dans la liste d'instants de rupture
 """),
 
-29: _("""
+29 : _("""
  il faut donner plus d'un instant de rupture
 """),
 
-30: _("""
+30 : _("""
  il manque des temperatures  associees aux bases de resultats (mot-cle tempe)
 """),
 
-31: _("""
+31 : _("""
  le parametre m de weibull doit etre le meme pour toutes les bases resultats !
 """),
 
-32: _("""
+32 : _("""
  le parametre sigm_refe de weibull doit etre le meme pour toutes les bases resultats !
 """),
 
-33: _("""
+33 : _("""
  aucun numero d'unite logique n'est associe a  %(k1)s 
 """),
 
-34: _("""
+34 : _("""
  aucun numero d'unite logique n'est disponible 
 """),
 
-35: _("""
+35 : _("""
  action inconnue:  %(k1)s 
 """),
 
-36: _("""
+36 : _("""
  arret de la procedure de recalage : le parametre m est devenu trop petit (m<1) , verifiez vos listes d'instants de rupture
 """),
 
-37: _("""
+37 : _("""
  les parametres de la nappe ont ete reordonnees.
 """),
 
-38: _("""
+38 : _("""
  type de fonction non connu (ordonn)
 """),
 
-39: _("""
+39 : _("""
  points confondus.
 """),
 
-40: _("""
+40 : _("""
  impossibilite, la maille  %(k1)s  doit etre de type "seg2" ou "seg3"et elle est de type :  %(k2)s 
 """),
 
-41: _("""
+41 : _("""
  nbma different de nbel
 """),
 
-42: _("""
+42 : _("""
  le contour n est pas ferme
 """),
 
+43 : _("""
+ le mot-clé "reuse" n'existe que pour l'opération "ASSE"
+"""),
 
-
-
-
-
-
-
-44: _("""
+44 : _("""
  nbma different de nbe
 """),
 
-45: _("""
+45 : _("""
  nj2 different de nj0
 """),
 
-46: _("""
+46 : _("""
  le groupe de mailles " %(k1)s " n'existe pas.
 """),
 
-47: _("""
+47 : _("""
  le groupe  %(k1)s  ne contient aucune maille.
 """),
 
-48: _("""
+48 : _("""
  on ne traite que des problemes 2d.
 """),
 
-49: _("""
+49 : _("""
  la maille " %(k1)s " n'existe pas.
 """),
 
-50: _("""
+50 : _("""
  on doit donner un resultat de type "evol_ther" apres le mot-cle "lapl_phi"  du mot-facteur "cara_poutre" dans la commande post_elem pour calculer la constante de torsion.
 """),
 
-51: _("""
+51 : _("""
  le nombre d'ordres du resultat  %(k1)s  necessaire pour calculer la constante de torsion doit etre egal a 1.
 """),
 
-52: _("""
+52 : _("""
  on n'arrive pas a recuperer le champ de temperatures du resultat  %(k1)s 
 """),
 
-53: _("""
+53 : _("""
  la table "cara_geom" n'existe pas.
 """),
 
-54: _("""
+54 : _("""
  on doit donner un resultat de type "evol_ther" apres le mot-cle "lapl_phi_y"  du mot-facteur "cara_poutre" dans la commande post_elem pour calculer les coefficients de cisaillement et les coordonnees du centre de torsion.
 """),
 
-55: _("""
+55 : _("""
  on doit donner un resultat de type "evol_ther" apres le mot-cle "lapl_phi_z"  du mot-facteur "cara_poutre" dans la commande post_elem pour calculer les coefficients de cisaillement et les coordonnees du centre de torsion.
 """),
 
-56: _("""
+56 : _("""
  le nombre d'ordres du resultat  %(k1)s  necessaire pour calculer les coefficients de cisaillement et les coordonnees du centre de torsion doit etre egal a 1.
 """),
 
-57: _("""
+57 : _("""
  on doit donner un resultat de type "evol_ther" apres le mot-cle "lapl_phi"  du mot-facteur "cara_poutre" dans la commande post_elem pour calculer la constante de gauchissement.
 """),
 
-58: _("""
+58 : _("""
  le nombre d'ordres du resultat  %(k1)s  necessaire pour calculer la constante de gauchissement doit etre egal a 1.
 """),
 
-59: _("""
+59 : _("""
  il faut donner le nom d'une table issue d'un premier calcul avec l'option "cara_geom" de  post_elem apres le mot-cle "cara_geom" du mot-facteur "cara_poutre".
 """),
 
-60: _("""
+60 : _("""
  il faut obligatoirement definir l'option de calcul des caracteristiques de poutre apres le mot-cle "option" du mot-facteur "cara_poutre" de la commande post_elem.
 """),
 
-61: _("""
+61 : _("""
  l'option  %(k1)s n'est pas admise apres le mot-facteur "cara_poutre".
 """),
 
-62: _("""
+62 : _("""
  il faut donner le nom d'un resultat de type evol_ther apres le mot-cle lapl_phi du mot-facteur "cara_poutre".
 """),
 
-63: _("""
+63 : _("""
  il faut donner le nom d'un resultat de type evol_ther apres le mot-cle lapl_phi_y du mot-facteur "cara_poutre".
 """),
 
-64: _("""
+64 : _("""
  il faut donner le nom d'un resultat de type evol_ther apres le mot-cle lapl_phi_z du mot-facteur "cara_poutre".
 """),
 
-65: _("""
+65 : _("""
  y a un bug 12
 """),
 
-66: _("""
+66 : _("""
  y a un bug 13
 """),
 
-67: _("""
+67 : _("""
  y a un bug 14
 """),
 
-68: _("""
+68 : _("""
  on attend un concept "mode_meca" ou "evol_elas" ou "evol_ther" ou "dyna_trans" ou "evol_noli"
 """),
 
-69: _("""
+69 : _("""
  champ de vitesse donne.
 """),
 
-70: _("""
+70 : _("""
  champ de deplacement donne.
 """),
 
-71: _("""
+71 : _("""
  option masse coherente.
 """),
 
-72: _("""
+72 : _("""
  calcul avec masse diagonale
 """),
 
-73: _("""
+73 : _("""
  type de champ inconnu.
 """),
 
-
-
-
-
-
-
-
-75: _("""
+75 : _("""
  on attend un concept "mode_meca" ou "evol_elas" ou "mult_elas" ou "evol_ther" ou "dyna_trans" ou "evol_noli"
 """),
 
-76: _("""
+76 : _("""
  pour calculer les indicateurs globaux d'energie, il faut donner un resultat issu de stat_non_line .
 """),
 
-77: _("""
+77 : _("""
  on attend un resultat de type "evol_noli" .
 """),
 
-78: _("""
+78 : _("""
  le resultat  %(k1)s  doit comporter la relation de comportement au numero d'ordre  %(k2)s  .
 """),
 
-79: _("""
+79 : _("""
  le resultat  %(k1)s  doit comporter un champ de variables internes au numero d'ordre  %(k2)s  .
 """),
 
-80: _("""
+80 : _("""
  impossibilite : le volume du modele traite est nul. 
 """),
 
-81: _("""
+81 : _("""
  impossibilite : le volume du group_ma  %(k1)s  est nul. 
 """),
 
-82: _("""
+82 : _("""
  impossibilite : le volume de la maille  %(k1)s  est nul. 
 """),
 
-83: _("""
+83 : _("""
  erreur: les options de calcul doivent etre identiques pour toutes les occurrences du mot clef facteur
 """),
 
-84: _("""
+84 : _("""
  on attend un concept "evol_noli"
 """),
 
-85: _("""
+85 : _("""
  erreur: le champ sief_elga n'existe pas
 """),
 
-86: _("""
+86 : _("""
  erreur: le champ vari_elga n'existe pas
 """),
 
-87: _("""
+87 : _("""
  erreur: le champ depl_elno n'existe pas
 """),
 
-88: _("""
+88 : _("""
  erreur: le champ epsg_elga_depl n'existe pas
 """),
 
-89: _("""
+89 : _("""
  les 2 nuages : %(k1)s  et  %(k2)s  doivent avoir le meme nombre de coordonnees.
 """),
 
-90: _("""
+90 : _("""
  les 2 nuages : %(k1)s  et  %(k2)s  doivent avoir la meme grandeur associee.
 """),
 
-91: _("""
+91 : _("""
  il manque des cmps sur :  %(k1)s 
 """),
 
-92: _("""
+92 : _("""
  l'interpolation n'est pas encore faite en complexe.
 """),
 
-93: _("""
+93 : _("""
  seuls les types "reel" et "complexe" sont autorises.
 """),
 
+94 : _("""
+ MINMAX est toujours calculé sur TOUT le modèle pour les champs aux noeuds.
+"""),
+
 }
index de42b0b60eaf3a15c6d2a4dcbc45303bd4a50d7c..059c7f394f249b66ff4cc76e09bca028c5f18a16 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF utilitai4 Messages  DATE 04/04/2007   AUTEUR ABBAS M.ABBAS 
+#@ MODIF utilitai4 Messages  DATE 08/02/2008   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -349,9 +349,10 @@ cata_msg={
   concept  %(k1)s non existant 
 """),
 
-95: _("""
- l'objet de nom " %(k1)s " est inconnu.
-"""),
+
+
+
+
 
 96: _("""
   expression incorrecte 
index 7f17be08f586ab5846cf61e7d7c59fbca4d4f48f..1582760010f62c95645ee05dbe201060a32e04bb 100644 (file)
-#@ MODIF utilitai5 Messages  DATE 06/04/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF utilitai5 Messages  DATE 02/06/2008   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  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.
+# COPYRIGHT (C) 1991 - 2007  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.        
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
+cata_msg = {
 
-1: _("""
- nombre en dehors de (-1,1)
-"""),
-
-2: _("""
+2 : _("""
  asin/acos svp
 """),
 
-3: _("""
+3 : _("""
  selection de ddl : choix < %(k1)s > inconnu
 """),
 
-4: _("""
+4 : _("""
  argument d'appel invalide :  typf =  %(k1)s
 """),
 
-5: _("""
+5 : _("""
  argument d'appel invalide :  acces =  %(k1)s
 """),
 
-6: _("""
+6 : _("""
  argument d'appel invalide :  autor =  %(k1)s
 """),
 
-7: _("""
+7 : _("""
  redefinition de l'unite logique  %(k1)s  non autorisee
 """),
 
-8: _("""
+8 : _("""
  nombre maximum d'unites logiques ouvertes atteint  %(k1)s
 """),
 
-9: _("""
+9 : _("""
  argument d'appel invalide :  unit =  %(k1)s
 """),
 
-10: _("""
+10 : _("""
  aucun numero d'unite logiquedisponible
 """),
 
-11: _("""
+11 : _("""
  unite logique  %(k1)s  associee au nom  %(k2)s  et au fichier  %(k3)s
 """),
 
-12: _("""
+12 : _("""
  vous devez d'abord le fermer pour l'associer au nom  %(k1)s
 """),
 
-13: _("""
+13 : _("""
  unite logique  %(k1)s  deja utilisee en acces  %(k2)s  par le fichier  %(k3)s
 """),
 
-14: _("""
+14 : _("""
  vous devez d'abord le fermer
 """),
 
-15: _("""
+15 : _("""
  unite logique  %(k1)s  deja utilisee en mode binaire par le fichier  %(k2)s
 """),
 
-16: _("""
+16 : _("""
  vous devez d'abord fermer le fichier associe
 """),
 
-17: _("""
+17 : _("""
  unite logique  %(k1)s  deja utilisee par le fichier  %(k2)s  associee au nom  %(k3)s
 """),
 
-18: _("""
+18 : _("""
  unite logique  %(k1)s , probleme lors de l'open  %(k2)s
 """),
 
-19: _("""
+19 : _("""
  unite logique  %(k1)s , probleme lors du positionnement
 """),
 
-20: _("""
+20 : _("""
  unite logique  %(k1)s , probleme lors de l'inquire
 """),
 
-21: _("""
+21 : _("""
  nombre d'unites logiques ouvertes superieur a //k4b
 """),
 
-22: _("""
+22 : _("""
  unite logique  %(k1)s , probleme lors du close de la reservation.
 """),
 
-23: _("""
+23 : _("""
  la redefinition de l'unite logique  %(k1)s  n'est pas autorisee
 """),
 
-24: _("""
+24 : _("""
  type d'acces inconnu " %(k1)s ", unite  %(k2)s
 """),
 
-25: _("""
+25 : _("""
  fichier non nomme, unite  %(k1)s
 """),
 
-26: _("""
+26 : _("""
  fichier non ouvert, unite  %(k1)s
 """),
 
-27: _("""
+27 : _("""
  rewind impossible, unite  %(k1)s
 """),
 
-28: _("""
+28 : _("""
  positionnement inconnu " %(k1)s ", unite  %(k2)s
 """),
 
-29: _("""
+29 : _("""
  les champs de type " %(k1)s " sont interdits.(a faire ...)
 """),
 
-30: _("""
+30 : _("""
  composante  %(k1)s inexistante pour la grandeur  %(k2)s
 """),
 
-31: _("""
+31 : _("""
  la maille: %(k1)s n'appartient pas au maillage: %(k2)s
 """),
 
-32: _("""
+32 : _("""
  le champ: %(k1)s n'est pas un champ par elements aux noeuds.
 """),
 
-
-
-
-
-
-
-
-34: _("""
+34 : _("""
  la maille: %(k1)s n'est pas affectee dans le ligrel: %(k2)s
 """),
 
-35: _("""
+35 : _("""
  la maille:  %(k1)s  possede un type d'element ignorant le cham_elem teste.
 """),
 
-36: _("""
+36 : _("""
  num. de sous-point > max
 """),
 
-37: _("""
+37 : _("""
  num. de point > max
 """),
 
-38: _("""
+38 : _("""
  l'element n'admet pas la composante  %(k1)s
 """),
 
-39: _("""
+39 : _("""
  determination de la localisation des points de gauss
 """),
 
-40: _("""
type de donnees inconnu :  %(k1)s
+40 : _("""
LIRE_RESU ne sait pas lire les structures de données de type %(k1) s
 """),
 
-41: _("""
+41 : _("""
  xous :  %(k1)s  non prevu.
 """),
 
-42: _("""
+42 : _("""
  chaine sch1 trop longue >24
 """),
 
-43: _("""
+43 : _("""
  ipos hors de l intervalle (0 24)
 """),
 
-44: _("""
+44 : _("""
  longueur totale > 24
 """),
 
-45: _("""
+45 : _("""
  on demande un nombre de composantes negatif pour  %(k1)s
 """),
 
-46: _("""
+46 : _("""
  on demande des composantes inconnues pour  %(k1)s
 """),
 
-47: _("""
+47 : _("""
  mot-clef :  %(k1)s  inconnu.
 """),
 
-48: _("""
+48 : _("""
  composante inexistante dans le champ:  %(k1)s
 """),
 
-49: _("""
+49 : _("""
  type de champ non traite:  %(k1)s
 """),
 
-
-
-
-
-
-
-
-52: _("""
+52 : _("""
  mauvaise valeur pour fonree
 """),
 
-53: _("""
+53 : _("""
  pas de composantes
 """),
 
-54: _("""
+54 : _("""
  l"argument "indi" est non valide
 """),
 
-55: _("""
+55 : _("""
  l"appel a uttcpu ne peut etre effectue avec la valeur "debut" pour l"argument para
 """),
 
-56: _("""
+56 : _("""
  l"appel a uttcpu ne peut etre effectue avec la valeur "fin" pour l"argument para
 """),
 
-57: _("""
+57 : _("""
  l"appel a uttcpu ne peut etre effectue avec la valeur  %(k1)s  pour l"argument para
 """),
 
-58: _("""
+58 : _("""
  (uttrif) type de fonction non connu.
 """),
 
-59: _("""
+59 : _("""
  il existe au moins un noeud qui n appartient pas au groupe de mailles.
 """),
 
-60: _("""
+60 : _("""
  un sous-domaine  est non-connexe
 """),
 
-
-
-
-
-
-
-88: _("""
+88 : _("""
  L'option " %(k1)s " est à recalculer
 """),
 
-89: _("""
+89 : _("""
  Erreur de programmation : contacter l'assistance
 """),
 
-90: _("""
+90 : _("""
  On ne trouve pas le VALE_PARA_FONC exact dans la liste de la nappe
 """),
 
-91: _("""
+91 : _("""
  %(k1)s n'est pas un champ de résultat.
 """),
 
-92: _("""
+92 : _("""
  Interpolation LOG et complexe en ordonnées sont incompatibles !
 """),
 
-93: _("""
+93 : _("""
  Le stockage dans la SD résultat du modèle, du champ materiau 
  et des caractéristiques élémentaires  n'est pas possible 
  pour une SD résultat de type %(k1)s. 
 """),
 
-94: _("""
+94 : _("""
  Le stockage de la SD charge dans la SD résultat n'est pas
  possible pour une SD résultat de type %(k1)s. 
 """),
 
-95: _("""
+95 : _("""
   le noeud %(k1)s ne supporte pas la composante %(k2)s 
 """),
 
-96: _("""
+96 : _("""
   le noeud %(k1)s le noeud %(k2)s ne supporte pas la composante %(k3)s 
 """),
 
-97: _("""
+97 : _("""
  le type de champ  %(k1)s n''est pas accepte.  %(k2)s 
  veuillez consulter la %(k3)s 
  doc u correspondante %(k4)s 
 """),
 
-
-
-
-
-
-
-
-
-
-
 }
index e8857d5464d1919a25acdb541e210292c281dbc2..07864f907dc43a8ac3844140276a18a1bef4144a 100644 (file)
-#@ MODIF utilitai6 Messages  DATE 15/05/2007   AUTEUR GNICOLAS G.NICOLAS 
+#@ MODIF utilitai6 Messages  DATE 08/02/2008   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.
+# 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.        
 # ======================================================================
 
 def _(x) : return x
 
-cata_msg={
-1: _("""
+cata_msg = {
+
+1 : _("""
 
- la grandeur introduite en operande  ne figure pas dans le catalogue des grandeurs
+ la grandeur introduite en opérande  ne figure pas dans le catalogue des grandeurs
  grandeur %(k1)s
 """),
 
-2: _("""
+2 : _("""
 
  incoherence dans les donnees:  on cherche a creer un champ de valeurs fonctions  alors que la grandeur n''est pas de type fonction
  grandeur de la commande :  %(k1)s
 """),
 
-3: _("""
+3 : _("""
 
- la liste de composantes et la liste  des valeurs n''ont pas la meme dimension
+ la liste de composantes et la liste  des valeurs n'ont pas la même dimension
  occurence de affe numero  %(i1)d
 """),
 
-4: _("""
- une composante n''appartient pas a la grandeur
+4 : _("""
+ une composante n'appartient pas à la grandeur
  occurence de affe numero  %(i1)d
  grandeur   :  %(k1)s
  composante :  %(k2)s
 """),
 
-5: _("""
+5 : _("""
 
- le nume_ddl en entree ne s''appuie  pas sur la meme grandeur que celle de la commande
+ le nume_ddl en entree ne s'appuie  pas sur la même grandeur que celle de la commande
  grandeur associee au nume_ddl %(k1)s
  grandeur de la commande :  %(k2)s
 """),
 
-6: _("""
+6 : _("""
  on a affecte la fonction  %(k1)s  pour la composante  %(k2)s
 """),
 
-7: _("""
+7 : _("""
  on a affecte la valeur  %(r1)f  pour la composante  %(k1)s
 """),
 
-8: _("""
+8 : _("""
 
- on cherche a affecter sur un noeud une  composante qui n''est pas dans le profil  noeud d''entree
+ on cherche a affecter sur un noeud une  composante qui n'est pas dans le profil  noeud d'entree
  noeud : %(k1)s
  composante : %(k2)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-11: _("""
- une composante n''appartient pas a la grandeurgrandeur   :  %(k1)s
+11 : _("""
+ une composante n'appartient pas à la grandeur
+ grandeur   :  %(k1)s
  composante :  %(k2)s
 """),
 
-12: _("""
+12 : _("""
  variable inconnue: variable :  %(k1)s  pour le resultat :  %(k2)s
 """),
 
-13: _("""
+13 : _("""
  probleme rencontre lors de la recherche de la variable :  %(k1)s
          debut :  %(k2)s
            fin :  %(k3)s
 """),
 
-14: _("""
+14 : _("""
  interpolation non permise. valeur a interpoler: %(r1)f
      borne inferieure: %(r2)f
      borne superieure: %(r3)f
 """),
 
-15: _("""
- il faut donner :   - une maille ou un group_ma %(k1)s
-    - un noeud ou un group_no ou un point. %(k2)s
+15 : _("""
+ il faut donner :   - une maille ou un GROUP_MA %(k1)s
+    - un noeud ou un GROUP_NO ou un point. %(k2)s
 """),
 
-16: _("""
+16 : _("""
  interpolation impossible instant a interpoler:  %(r1)f
 """),
 
-17: _("""
+17 : _("""
  interpolation impossible  instant a interpoler:  %(r1)f
   borne inferieure:  %(r2)f
 """),
 
-18: _("""
+18 : _("""
  interpolation impossible  instant a interpoler:  %(r1)f  borne superieure: %(r2)f
 """),
 
-19: _("""
+19 : _("""
  cham_no inexistant pour l''acces %(k1)s sur le resultat %(k2)s
  pour le nume_ordre %(i1)d
  instant a interpoler %(r1)f
 """),
 
-
-
-
-
-
-25: _("""
+25 : _("""
  cham_elem inexistant pour l''acces %(k1)s sur le resultat %(k2)s
  pour le nume_ordre %(i1)d
  instant a interpoler %(r1)f
 """),
 
-
-
-
-
-
-
-
-27: _("""
+27 : _("""
  il sera tronque:  %(k1)s
 """),
 
 
-36: _("""
- erreur de programmationtype de fonction inconnu  %(k1)s
-"""),
 
-37: _("""
+
+
+37 : _("""
  erreur  la fonction  %(k1)s  a  %(i1)d
   arguments, le maximum exploitable est  %(i2)d
 """),
 
-38: _("""
+38 : _("""
  il y a   %(i1)d  parametre(s) identique(s) dans la  %(k1)s
  definition de la nappe. %(k2)s
 """),
 
-39: _("""
- erreur dans les donnees   interface de type :  %(k1)s  non valable %(k2)s
+39 : _("""
+ erreur dans les données   interface de type :  %(k1)s  non valable %(k2)s
 """),
 
-40: _("""
- erreur dans les donneeson ne retrouve pas le noeud  %(k1)s
+40 : _("""
+ erreur dans les données, on ne retrouve pas le noeud  %(k1)s
   dans la numerotation %(k2)s
 """),
 
-41: _("""
- erreur dans les donnees   le noeud :  %(k1)s
+41 : _("""
+ erreur dans les données   le noeud :  %(k1)s
   n''appartient pas au maillage  %(k2)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-44: _("""
- trop d''amortissements modaux   nombre d''amortissements :  %(i1)d
+44 : _("""
+ trop d'amortissements modaux   nombre d'amortissements :  %(i1)d
     nombre de modes :  %(i2)d
 """),
 
-
-
-
-
-
-
-
-47: _("""
+47 : _("""
  erreur dans la recherche du noeud      nom du noeud :  %(k1)s
     nom du maillage :  %(k2)s
 """),
 
-48: _("""
- methode de newtonexposant de la loi   = %(r1)f
+48 : _("""
+ methode de newton exposant de la loi   = %(r1)f
  nombre d''iterations = %(i1)d
  residu fonction = %(r2)f
  residu f/df = %(r3)f
  precision = %(r4)f
 """),
 
-49: _("""
- erreurs sur les donneesnombre de mots-cles :  %(i1)d
- nombre de valeurs   :  %(i2)d
-"""),
-
-50: _("""
- erreurs sur les donneesnombre de mots-cles :  %(i1)d
- nombre de mots-cles facteurs :  %(i2)d
-"""),
-
-51: _("""
- pas de champ correspondant  a l''instant demande.resultat  %(k1)s
- , acces "inst_init" : %(r1)f
+51 : _("""
+ pas de champ correspondant  à l'instant demandé.
+ resultat  %(k1)s , acces "INST_INIT" : %(r1)f
 """),
 
-52: _("""
- plusieurs champs correspondant  a l''instant demande.resultat  %(k1)s
- , acces "inst_init" : %(r1)f
- , nombre : %(i1)d
+52 : _("""
+ plusieurs champs correspondant  a l'instant demande.
+ resultat  %(k1)s
+ acces "INST_INIT" : %(r1)f
+ nombre : %(i1)d
 """),
 
-53: _("""
+53 : _("""
 
- le premier instant de rupture  n''est pas dans la liste des instants de calcul
+ le premier instant de rupture  n'est pas dans la liste des instants de calcul
  premier instant de rupture =  %(r1)f
  premier instant de calcul =  %(r2)f
 """),
 
-54: _("""
+54 : _("""
 
  le dernier instant de rupture  n''est pas dans la liste des instants de calcul
  dernier instant de rupture =  %(r1)f
  dernier instant de calcul =  %(r2)f
 """),
 
-55: _("""
- parametres initiaux de weibullexposant de la loi      = %(r1)f
+55 : _("""
+ parametres initiaux de weibull
+ exposant de la loi      = %(r1)f
  volume de reference     = %(r2)f
  contrainte de reference = %(r3)f
 """),
 
-56: _("""
- statistiques recalage :nombre d''iterations = %(i1)d
+56 : _("""
+ statistiques recalage :nombre d'iterations = %(i1)d
  convergence atteinte = %(r1)f
 """),
 
-57: _("""
+57 : _("""
  les abscisses  %(k1)s %(k2)s ne sont pas monotones. %(k3)s
 """),
 
-58: _("""
+58 : _("""
  les abscisses  %(k1)s %(k2)s ont ete reordonnees. %(k3)s
 """),
 
-59: _("""
+59 : _("""
  l'ordre des abscisses  %(k1)s %(k2)s a ete inverse. %(k3)s
 """),
 
-60: _("""
- homogeneite du champ de materiaux pour weibull
+60 : _("""
+ homogénéité du champ de matériaux pour weibull
  nombre de rc weibull trouvees =  %(i1)d
  les calculs sont valables pour  un seul comportement weibull %(k1)s
  on choisit la premiere relation du type weibull %(k2)s
 """),
 
-61: _("""
- parametres de la rc weibull_foexposant de la loi      = %(r1)f
+61 : _("""
+ paramètres de la rc weibull_fo
+ exposant de la loi      = %(r1)f
  volume de reference     = %(r2)f
- &contrainte de reference conventionnelle
-      &= %(r3)f
+ contrainte de référence conventionnelle = %(r3)f
 """),
 
-62: _("""
- parametres de la rc weibullexposant de la loi      = %(r1)f
+62 : _("""
+ parametres de la rc weibull
+ exposant de la loi      = %(r1)f
  volume de reference     = %(r2)f
  contrainte de reference = %(r3)f
 """),
 
-68: _("""
- type de numerotation non connue numerotation: %(k1)s
+68 : _("""
+ type de numérotation non connue numérotation: %(k1)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-71: _("""
- il faut donner :   - une maille ou un group_ma %(k1)s
-    - un noeud ou un group_noou un point %(k2)s
+71 : _("""
+ il faut donner :   - une maille ou un GROUP_MA %(k1)s
+    - un noeud, un GROUP_NO ou un point %(k2)s
 """),
 
-72: _("""
- trop de mailles dans le group_ma  maille utilisee:  %(k1)s
+72 : _("""
+ trop de mailles dans le GROUP_MA  maille utilisée:  %(k1)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-77: _("""
+77 : _("""
 Concept résultat %(k1)s : le numéro d'ordre %(i1)d est inconnu.
 """),
 
-78: _("""
+78 : _("""
 Concept résultat %(k1)s : le numéro d'archivage %(i1)d est supérieur au max %(i2)d.
 """),
 
-79: _("""
+79 : _("""
 Concept résultat %(k1)s : le numéro de rangement %(i1)d est supérieur au max %(i2)d.
 """),
 
-80: _("""
+80 : _("""
 Concept résultat %(k1)s : la variable %(k2)s est inconnue pour le type %(k3)s.
 """),
 
-81: _("""
+81 : _("""
  parametre inconnu: parametre :  %(k1)s  pour le resultat :  %(k2)s
 """),
 
-82: _("""
+82 : _("""
  pas de champs trouve pour la frequence  %(r1)f
 """),
 
-83: _("""
+83 : _("""
  plusieurs champs trouves pour la frequence  %(r1)f
  nombre de champs trouves  %(i1)d
 """),
 
-84: _("""
- le "nom_para_resu"  %(k1)s n''est pas un parametre du resultat  %(k2)s
+84 : _("""
+ le "NOM_PARA_RESU"  %(k1)s n'est pas un paramètre du résultat  %(k2)s
 """),
 
-89: _("""
- erreur dans les donneesparametre n''existe pas:  %(k1)s
+89 : _("""
+ erreur dans les données, le paramètre  %(k1)s n'existe pas
 """),
 
-90: _("""
- erreur dans les donneesparametre non trouve:  %(k1)s
+90 : _("""
+ erreur dans les donnees, le paramètre %(k1)s n'est pas trouvé 
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-93: _("""
- le parametre  %(k1)s n''existe pas dans la table %(k2)s
+93 : _("""
+ le paramètre  %(k1)s n'existe pas dans la table %(k2)s
  .il est necessaire. %(k3)s
  veuillez consulter la documentaion  de la commande. %(k4)s
 """),
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-99: _("""
- erreur dans les donneesparametre :  %(k1)s   plusieurs valeurs trouvees %(k2)s
+99 : _("""
+ erreur dans les données
+ parametre :  %(k1)s   plusieurs valeurs trouvees %(k2)s
  pour le parametre  %(k3)s
  et le parametre  %(k4)s
 """),
index dc7d020ebc820cfc2f6d99a40caedbb95e547d06..6eff3f8cb24d8a9dd22723bf4e9314714e18519f 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF utilitai7 Messages  DATE 14/05/2007   AUTEUR BODEL C.BODEL 
+#@ MODIF utilitai7 Messages  DATE 19/06/2007   AUTEUR VIVAN L.VIVAN 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -22,52 +22,61 @@ def _(x) : return x
 
 cata_msg={
 
-
-
-
-
-
+1: _("""
+ Erreur dans les données, le paramètre %(k1)s n'existe pas dans la table %(k2)s 
+"""),
 
 2: _("""
erreur dans les donneespas de tri sur les complexes,  parametre:  %(k1)s 
 Erreur dans les données, pas de tri sur les complexes, paramètre:  %(k1)s 
 """),
 
-
-
-
-
-
-
+3: _("""
+  Erreur dans les données, on n'a pas trouvé de ligne dans la table %(k1)s pour le paramètre %(k2)s
+"""),
 
 4: _("""
-  numero d''occurrence invalide   %(i1)d pour le mot cle facteur %(k1)s 
+  Le numéro d'occurrence est invalide %(i1)d pour le mot clé facteur %(k1)s 
 """),
 
 5: _("""
- le numero  de la composante (pour vari_r) est trop grand.maille: %(k1)s 
- num. cmp maxi: %(i1)d 
- num. cmp demandee: %(i2)d 
+  Le numéro de la composante (pour VARI_R) est trop grand.
+    MAILLE : %(k1)s 
+    NUME_MAXI : %(i1)d 
+    NUME_CMP demandé : %(i2)d 
 """),
 
 6: _("""
- Le schéma d'intégration temporelle %(k1)s et le paramètre %(k2)s sont incompatibles.
 Le schéma d'intégration temporelle %(k1)s et le paramètre %(k2)s sont incompatibles.
 """),
 
 7: _("""
Le paramètre %(k1)s ne fait pas partie des choix possibles.
 Le paramètre %(k1)s ne fait pas parti des choix possibles.
 """),
 
 8: _("""
- L'utilisation de la macro pour un concept de type dyna_harmo n'est pas encore prevue
+ L'utilisation de la macro pour un concept de type DYNA_HARMO n'est pas encore prévue
  """),
 
 9: _("""
- Si on utilise l'option normale pour les changements de repere, il faut donner
- une equation supplementaire avec le mot-cle VECT_X ou VECT_Y
+ Si on utilise l'option normale pour les changements de repère, il faut donner
+ une équation supplémentaire avec le mot-clé VECT_X ou VECT_Y
  """),
 
+10: _("""
+ Seuls les champs de type ELGA (champs par élément aux points de Gauss)
+ sont autorisés pour NOM_CHAM de POST_ELEM/INTEGRALE.
+"""),
+
+11: _("""
+  Erreur dans les données, problème lors du traitement du mot clé facteur FILTRE
+  
+  -> Risque & Conseil :
+   soit le paramètre n'existe pas
+   soit aucune ligne ne correspond au paramètre donné
+"""),
+
 99: _("""
- Arret dans le programme %(k1)s.
 Arret dans le programme %(k1)s.
 """),
 
 }
diff --git a/Aster/Cata/cataSTA9/Messages/utilitai8.py b/Aster/Cata/cataSTA9/Messages/utilitai8.py
new file mode 100644 (file)
index 0000000..2c929de
--- /dev/null
@@ -0,0 +1,246 @@
+#@ MODIF utilitai8 Messages  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg = {
+
+1 : _("""
+ Rien que des constantes pour une nappe.
+ Nombre de fonctions constantes %(i1)d
+"""),
+
+2 : _("""
+ Paramètres différents.
+ fonction %(k1)s de paramètre %(k2)s au lieu de %(k3)s
+"""),
+
+3 : _("""
+ Le nombre de paramètres  %(i1)d  est différent du nombre de fonctions  %(i2)d
+"""),
+
+4 : _("""
+ Il n'y a pas un nombre pair de valeurs, "DEFI_FONCTION" occurence  %(i1)d
+"""),
+
+5 : _("""
+ Les abscisses de la fonction  %(k1)s ont ete réordonnées.
+"""),
+
+6 : _("""
+ L'ordre des abscisses de la fonction numéro  %(i1)d a ete inversé .
+"""),
+
+7 : _("""
+ Appel erroné
+  archivage numéro :  %(i1)d
+  code retour de rsexch :  %(i2)d
+"""),
+
+8 : _("""
+ Lecture des champs:
+"""),
+
+9 : _("""
+   Numéro d'ordre :  %(i1)d             inst :  %(r1)g
+"""),
+
+14 : _("""
+ Champ  inexistant  %(k1)s
+"""),
+
+15 : _("""
+  ou  %(k1)s
+"""),
+
+16 : _("""
+  NUME_ORDRE  %(i1)d  on ne calcule pas l'option  %(k1)s
+"""),
+
+17 : _("""
+ pas de NUME_ORDRE trouvé pour le numéro  %(i1)d
+"""),
+
+18 : _("""
+ pas de champs trouvé pour l'instant  %(r1)g
+"""),
+
+19 : _("""
+ Plusieurs pas de temps trouvés  dans l'intervalle de précision
+ autour de l'instant  %(r1)g
+ nombre de pas de temps trouvés  %(i1)d
+ Conseil : modifier le paramètre PRECISION
+"""),
+
+20 : _("""
+ Erreur dans les données :
+ Le paramètre existe déja:  %(k1)s  dans la table:  %(k2)s
+"""),
+
+21 : _("""
+ Erreur dans les données
+ Le type du paramètre:  %(k1)s
+  est différent pour le paramètre:  %(k2)s
+  et le paramètre:  %(k3)s
+"""),
+
+22 : _("""
+  Valeur de M maximale atteinte pour résoudre F(M)=0,
+  Conseil : Vérifiez vos listes d'instants de rupture, M maximal admissible =  %(r1)f
+"""),
+
+23 : _("""
+  Valeur de M minimale atteinte pour résoudre F(M)=0,
+  Conseil : Vérifiez vos listes d'instants de rupture, valeur de M =  %(r1)f
+"""),
+
+24 : _("""
+ Le champ demandé est incompatible avec le type de résultat
+  type de résultat : %(k1)s
+      nom du champ : %(k2)s
+"""),
+
+25 : _("""
+ Le nombre d'astérisques pour les noms de fichiers ensight de pression est trop grand il est limite à 7
+  nombre d'asterisques : %(i1)d
+"""),
+
+26 : _("""
+ Appel erroné  résultat :  %(k1)s   archivage numéro :  %(i1)d
+   code retour de rsexch :  %(i2)d
+   problème champ :  %(k2)s
+"""),
+
+27 : _("""
+ Appel erroné  résultat :  %(k1)s   archivage numéro :  %(i1)d
+   code retour de rsexch :  %(i2)d
+   problème champ :  %(k2)s
+"""),
+
+28 : _("""
+ Fin de fichier dans la lecture des fichiers ensight
+"""),
+
+29 : _("""
+ Erreur dans la lecture du fichier ensight
+"""),
+
+30 : _("""
+  problème pour le fichier:  %(k1)s
+"""),
+
+31 : _("""
+  Option deja calculée:  option  %(k1)s  NUME_ORDRE  %(i1)d
+  On la recalcule car les données peuvent etre différentes
+
+"""),
+
+32 : _("""
+ L'extrapolation ne peut etre faite à gauche (interdit).
+"""),
+
+33 : _("""
+ L'extrapolation ne peut etre faite à droite (interdit).
+"""),
+
+34 : _("""
+ L'interpolation ne peut etre faite car aucun champ de : %(k1)s n'est calcule.
+"""),
+
+35 : _("""
+ La variable d'accès %(k1)s est invalide pour une interpolation.
+"""),
+
+36 : _("""
+ Ce nom de champ est interdit : %(k1)s pour une interpolation.
+"""),
+
+37 : _("""
+ Résultat: %(k1)s nom_cham: %(k2)s  variable d'accès: %(k3)s valeur: %(r1)g
+
+"""),
+
+38 : _("""
+ Plusieurs champs correspondant à l'accès demandé pour la sd_resultat  %(k1)s
+"""),
+
+39 : _("""
+ accès %(k1)s : %(i1)d
+"""),
+
+40 : _("""
+ accès %(k1)s : %(r1)g
+"""),
+
+41 : _("""
+ accès %(k1)s  : %(k1)s
+"""),
+
+46 : _("""
+  nombre : %(i1)d NUME_ORDRE retenus : %(i2)d, %(i3)d, %(i4)d
+"""),
+
+47 : _("""
+ Pas de champ correspondant à un accès demandé pour la sd_resultat  %(k1)s
+"""),
+
+56 : _("""
+ pas de champs pour l'accès  %(k1)s de valeur  %(r1)g
+"""),
+
+57 : _("""
+Erreur utilisateur :
+  Plusieurs champs correspondent à l'accès demandé pour la sd_résultat  %(k1)s
+  - accès "INST"             : %(r1)19.12e
+  - nombre de champs trouvés : %(i1)d
+Conseil:
+  Reserrer la précision avec le mot clé PRECISION
+"""),
+
+58 : _("""
+ Pas de champs pour l'accès  %(k1)s de valeur  %(r1)g
+"""),
+
+59 : _("""
+Erreur utilisateur :
+  Plusieurs champs correspondent à l'accès demandé pour la sd_résultat  %(k1)s
+  - accès "FREQ"             : %(r1)19.12e
+  - nombre de champs trouvés : %(i1)d
+Conseil:
+  Reserrer la précision avec le mot clé PRECISION
+"""),
+
+60 : _("""
+ Erreur dans les données pour le champ  %(k1)s
+"""),
+
+61 : _("""
+ Aucun noeud ne supporte
+"""),
+
+62 : _("""
+ Aucune maille ne supporte
+"""),
+
+63 : _("""
+  les composantes  %(k1)s, %(k2)s, %(k3)s, %(k4)s, ...
+"""),
+
+}
diff --git a/Aster/Cata/cataSTA9/Messages/vide.py b/Aster/Cata/cataSTA9/Messages/vide.py
new file mode 100644 (file)
index 0000000..9ab83a6
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF vide Messages  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg = {
+1 : _(''),
+}
+
diff --git a/Aster/Cata/cataSTA9/Messages/volufini.py b/Aster/Cata/cataSTA9/Messages/volufini.py
new file mode 100644 (file)
index 0000000..df5f4f8
--- /dev/null
@@ -0,0 +1,52 @@
+#@ MODIF volufini Messages  DATE 06/05/2008   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  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.        
+# ======================================================================
+
+def _(x) : return x
+
+cata_msg = {
+
+1 : _("""
+  -> type de maille  %(k1)s incorrect
+  """),
+
+2 : _("""
+  -> le sommet de numero global %(i1)i n appartient pas
+  -> a la maille %(i2)i
+"""),
+
+3 : _("""
+  -> Nombre de voisins %(i1)i trop grand
+"""),
+
+4 : _("""
+  -> Nombre de sommets communs %(i1)i trop grand
+"""),
+
+5 : _("""
+  -> Le nombre de mailles %(i1)i est inferieur a 1
+"""),
+6 : _("""
+  -> Le type de voisinage %(k1)s est inconnu
+"""),
+7 : _("""
+  -> Le type de voisinage %(k1)s a une longueur %(i1)i trop grande
+"""),
+
+}
index a81d2dae36fece50c3dc21f54ef3364b742b9460..27ecb6195e7f037edbb87d68fd127cae03915807 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF xfem Messages  DATE 15/05/2007   AUTEUR GENIAUT S.GENIAUT 
+#@ MODIF xfem Messages  DATE 21/04/2008   AUTEUR GENIAUT S.GENIAUT 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -24,103 +24,137 @@ def _(x) : return x
 cata_msg={
 
 1: _("""
-Pour le DVP : écrasement des valeurs nodales dans xconno.f
-Pour l'utilisateur : les fissures X-FEM sont surement trop proches.
-                     il faut au minimum 2 mailles entre les fissures.
-                     veuillez raffiner le maillage entre les fissures (ou écarter les fissures). 
+  -> Les fissures X-FEM sont surement trop proches.
+     Il faut au minimum 2 mailles entre les fissures.
+  -> Risque & Conseil:
+     Veuillez raffiner le maillage entre les fissures
+     (ou écarter les fissures). 
 """),
 
-2: _("""
- Le nombre de fissures autorisées avec X-FEM est limité à (i1)i
-"""),
+
 
 3: _("""
- Le modele %(k1)s est incompatible avec la methode X-FEM.
- Vérifier qu'il a bien été créé par l'opérateur MODI_MODELE_XFEM. 
+  -> Le modèle %(k1)s est incompatible avec la méthode X-FEM.
+  -> Risque & Conseil:
+     Vérifier qu'il a bien été créé par l'opérateur MODI_MODELE_XFEM. 
 """),
 
 4: _("""
- Il est interdit de melanger dans un modèle les fissures X-FEM avec et sans
- contact. Veuillez rajouter les mots clé CONTACT manquants 
- dans DEFI_FISS_XFEM.
-"""),
-
-5: _("""
-La valeur du parametre %(k1)s (%(i1)d) de la fissure %(k2)s 
-a été changé à 
-%(i2)d (valeur maximale de toutes les fissures du modèle)
+  -> Il est interdit de mélanger dans un modèle les fissures X-FEM 
+     avec et sans contact. 
+  -> Risque & Conseil:
+     Veuillez rajouter les mots clés CONTACT manquants 
+     dans DEFI_FISS_XFEM.
 """),
 
 6: _("""
-DDL_IMPO sur un noeud X-FEM : %(k1)s =  %(r1)f au noeud %(k2)s
+     DDL_IMPO sur un noeud X-FEM : %(k1)s =  %(r1)f au noeud %(k2)s
 """),
 
 7: _("""
-Il y a %(i1)s mailles %(k1)s 
+     Il y a %(i1)s mailles %(k1)s 
 """),
 
 8: _("""
-Le nombre de %(k1)s X-FEM est limité à 10E6. Veuillez reduire la taille du maillage.
+     Le nombre de %(k1)s X-FEM est limité à 10E6. 
+     Risque & Conseil:
+     Veuillez réduire la taille du maillage.
 """),
 
 9: _("""
-erreur de dvt dans %(k2)s : on a trouvé trop de nouveaux %(k1)s à ajouter.
+     L'option K_G_MODA n'est pas autorisée avec une fissure définie 
+     par la commande DEFI_FISS_XFEM (méthode X-FEM).
 """),
 
 10: _("""
-On ne peut pas post-traiter de champs aux points de Gauss avec X-FEM sur des éléments
-dont le nombre de points de Gauss est différent de 1.
+     La direction du champ theta n'a pas été donnée. La direction automatique
+     est une direction variable, basée sur le grandient de la level set tangente.
 """),
 
 11: _("""
-On a trouvé plus de 2 points de fond de fissure, ce qui est impossible en 2d.
-Veuillez revoir la définition des level sets.
+  -> On a trouvé plus de 2 points de fond de fissure, ce qui est impossible en 2d.
+  -> Risque & Conseil:
+     Veuillez revoir la définition des level sets.
 """),
 
 12: _("""
-La prise en compte du contact sur les lèvres des fissures X-FEM n'est possible qu'avec une
-approximation du champ de déplacement linéaire.
-Deux solutions : 
-- soit passer en approximation linéaire (mot-clé DEGRE_DEPL de MODI_MODELE_XFEM)
-- soit ne pas prendre en compte le contact (enlever le mot-clé CONTACT de MODI_MODELE_XFEM)
+  Le gradient de la level set tangente est nul au noeud %(k1)s.
+  Ceci est certainement du à un point singulier dans la définition de la levet set.
+  Il vaut veuiller à ce que ce point singulier ne soit pas inclus dans la couronne
+  d'intégration du champ theta. 
+  Conseil : réduisez la taille de la couronne du champ theta : (mot-clés RSUP et RINF).
 """),
 
 13: _("""
-pb fissure elliptique
+     Dans le modèle, des mailles SEG2 ou SEG3 possèdent des noeuds enrichis par X-FEM.
+     Ceci n'est pas encore possible en 3D.
+     Conseils : si ces mailles sont importantes pour le calcul (charge linéique...), il faut
+     les mettre loin de de la fissure.
+     Si ces mailles ne servent pas pour le calcul, il vaut mieux ne pas les affecter dans le modèle,
+     ou bien les supprimer du maillage.
 """),
 
-18: _("""
-Dimension de l'espace incorrecte. Le modèle doit etre 2D ou 3D et ne pas comporter
-de sous-structures.
+14: _("""
+     On ne peut pas appliquer un cisaillement 2d sur les lèvres d'une fissure X-FEM.
+"""),
+
+15: _("""
+  -> Cette option n'a pas encore été programmée.
+  -> Risque & Conseil:
+     Veuillez utiliser un autre chargement (en pression) ou contacter votre
+     correspondant.
+"""),
+
+16: _("""
+  -> Il n'y a aucun élément enrichi.
+  -> Risque & Conseil:
+     - Si le contact est défini sur les lèvres de la fissure, la modélisation
+       doit etre 3D_XFEM_CONT ou C_PLAN_XFEM_CONT ou D_PLAN_XFEM_CONT.
+     - Si le contact n'est pas défini sur les lèvres de la fissure,
+       la modélisation doit etre 3D ou C_PLAN ou D_PLAN'.
 """),
 
-19: _("""
-Caractéristique de la SD inconnue. Contactez les développeurs.
+18: _("""
+     Dimension de l'espace incorrecte. 
+     Le modèle doit etre 2D ou 3D et ne pas comporter de sous-structures.
 """),
 
 20: _("""
-Le mot-clef ORIE_FOND est indispensable en 3D.
+     Le mot-clef ORIE_FOND est indispensable en 3D.
 """),
 
 21: _("""
-Le mot-clef ORIE_FOND n'est pas nécessaire en 2D.
+     Le mot-clef ORIE_FOND n'est pas nécessaire en 2D.
 """),
 
 22: _("""
-Plus d'une occurrence du mot-clef ORIE_FOND.
+     Plus d'une occurrence du mot-clef ORIE_FOND.
 """),
 
 23: _("""
-Erreur dans le choix de la methode de calcul des level-sets: renseignez FONC_LT/LN ou GROUP_MA_FISS/FOND.
+  -> Erreur dans le choix de la méthode de calcul des level-sets
+  -> Risque & Conseil :
+     Veuillez renseignez FONC_LT/LN ou GROUP_MA_FISS/FOND.
+"""),
+
+25: _("""
+     Le frottement n'est pas pris en compte pour l'approche 
+     <<Grands glissements avec XFEM>>.
+"""),
+
+26: _("""
+     L'approche <<Grands glissements avec XFEM>> fonctionne seulement pour le cas 2D.
 """),
 
-50: _("""
-Le nombre d'aretes coupees par la fissure est superieur au critere de dimensionnement initialement prevu. Contactez les développeurs.
-Note DVP: Il faut augmenter le parametre mxar dans la routine xlagsp.
+27: _("""
+     Seulement les mailles QUAD4 sont prises en compte par l'approche
+     <<Grands glissements avec XFEM>>.
 """),
 
 57: _("""
-Aucune maille de fissure n'a été trouvée. Suite des calculs risquée.
+  -> Aucune maille de fissure n'a été trouvée. 
+  -> Risque & Conseil :
+     Suite des calculs risquée.
 """),
 
 58: _("""
@@ -134,11 +168,15 @@ Aucune maille de fissure n'a 
 """),
 
 59: _("""
-Ne pas utiliser le mot-clef RAYON_ENRI lorsque le fond de fissure est en dehors de la structure.
+     Ne pas utiliser le mot-clef RAYON_ENRI lorsque le fond de fissure
+     est en dehors de la structure.
 """),
 
 60: _("""
-Le point initial de fissure n'est pas un point de bord de fissure, bien que la fissure soit débouchante. assurez-vous de la bonne définition de PFON_INI.
+  -> Le point initial de fissure n'est pas un point de bord de fissure,
+     bien que la fissure soit débouchante
+  -> Risque & Conseil:
+     Assurez-vous de la bonne définition de PFON_INI.
 """),
 
 
index e68ae67c0b7d0e1f605cdf171224600f1daf6c77..1eabad7280bdc77c9894202c1f530933bc8cdbc9 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF xfem2 Messages  DATE 15/05/2007   AUTEUR GENIAUT S.GENIAUT 
+#@ MODIF xfem2 Messages  DATE 18/03/2008   AUTEUR CNGUYEN C.NGUYEN 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
 
+def _(x) : return x
 
+cata_msg = {
 
-def _(x) : return x
+1 : _("""
+     Point : %(r1)f %(r2)f
+  """),
+
+2 : _("""
+  -> Seules les modélisations C_PLAN/D_PLAN sont disponibles pour XFEM.
+  -> Risques et conseils:
+     Veuillez considérer l'une des deux modélisations dans AFFE_MODELE.
+"""),
+
+4 : _("""
+  -> Le type de formulation du contact (DISCRET/CONTINUE/XFEM) doit etre le meme pour
+     toutes les zones de contact.
+  -> Risque & Conseil:
+     Veuillez revoir la mise en données de AFFE_CHAR_MECA/CONTACT.
+"""),
+
+5 : _("""
+  -> Le vecteur TAU1 correspondant à la première direction du frottement dans
+     l'élément XFEM est nul. Ceci signifie que les gradients des level sets
+     sont surement colinéaires en ce point.
+"""),
+
+6 : _("""
+     Multifissuration interdite avec l'opérateur PROPA_XFEM.
+"""),
+
+7 : _("""
+  -> Le contact a été activé dans XFEM (CONTACT_XFEM='OUI' dans MODI_MODELE_XFEM)
+  -> Risque & Conseil:
+     Vous devez également l'activer dans AFFE_CHAR_MECA/CONTACT_XFEM
+"""),
+
+8 : _("""
+  -> Le modèle %(k1)s transmis dans AFFE_CHAR_MECA/CONTACT n'est pas un modèle
+     XFEM. 
+  -> Risque & Conseil:
+     Veuillez utiliser la commande MODI_MODELE_XFEM pour fournir à 
+     AFFE_CHAR_MECA/CONTACT un modèle XFEM.
+"""),
+
+9 : _("""
+  -> Le modèle %(k1)s transmis dans AFFE_CHAR_MECA/CONTACT n'est pas un modèle
+     XFEM avec contact.
+  -> Risque & Conseil:
+     Veuillez activer CONTACT='OUI' dans MODI_MODELE_XFEM.
+"""),
 
-cata_msg={
+11 : _("""
+  -> Le modèle %(k1)s transmis dans AFFE_CHAR_MECA/CONTACT_XFEM n'est pas 
+     le modèle XFEM utilisé dans le AFFE_CHAR_MECA/CONTACT nommé %(k2)s.
+  -> Risque & Conseil:
+     Risques de résultats faux.
+"""),
+
+12 : _("""
+  -> Le modèle %(k1)s transmis dans AFFE_CHAR_MECA/CONTACT_XFEM n'est pas un modèle
+     XFEM. 
+  -> Risque & Conseil:
+     Veuillez utiliser la commande MODI_MODELE_XFEM pour fournir à 
+     AFFE_CHAR_MECA/CONTACT_XFEM un modèle XFEM.
+"""),
+
+13 : _("""
+     Point : %(r1)f %(r2)f %(r3)f
+  """),
+
+14 : _("""
+  -> La discrétisation du fond de fissure est grossière par rapport à la 
+     courbure du fond de fissure.
+  -> Risque & Conseil:
+     - possibilité de résultats faux
+     - il faudrait raffiner le maillage autour du fond de fissure.
+"""),
+
+15 : _("""
+  -> Point de FOND_FISS sans maille de surface rattachée.
+  -> Risque & Conseil:
+     Veuillez revoir la définition des level sets.
+"""),
+
+16 : _("""
+  -> Problème dans l'orientation des normales a fond_fiss.
+  -> Risque & Conseil: 
+     Veuillez vérifier la continuité des mailles de FOND_FISS
+"""),
+
+17 : _("""
+  -> Segment de fond_fiss sans maille de surface rattachée
+  -> Risque & Conseil:
+     Veuillez revoir la définition des level sets.
+"""),
+
+19 : _("""
+  -> Lors de l'orientation des points du fond de fissure, le point du fond de
+     fissure initial (PFON_INI) est trop loin du fond de fissure.
+  -> Risque & Conseil :
+     Le point initial qui en résulte amène surement à une orientation du fond
+     de fissure erronée.
+     Veuillez redéfinir le point du fond de fissure initial (mot clé PFON_INI).
+"""),
+
+20 : _("""
+  -> PFON_INI = PT_ORIGINE
+  -> Risque & Conseil :
+     Veuillez définir deux points différents pour PFON_INI et PT_ORIGINE.
+"""),
 
-1: _("""
-Erreur (i1)i dvt dans la récupération de la topologie des sous-éléments pour la visu.
+21 : _("""
+  -> Problème dans l'orientation du fond de fissure : PT_ORIGIN mal choisi.
+  -> Risque & Conseil : 
+     Veuillez redéfinir PT_ORIGIN.
 """),
 
-5: _("""
-Le vecteur TAU1 correspondant la première direction du frottement dans l'élément XFEM est nul.
-Ceci signifie que les gradients des level sets sont surement colinéaires en ce point.
+22 : _("""
+  -> Tous les points du fond de fissure sont des points de bord.
+  -> Risque & Conseil : 
+     Assurez-vous du bon choix des paramètres d'orientation de fissure
+     et de PFON_INI.
 """),
 
-6: _("""
-Multifissuration interdite avec l'opérateur PROPA_XFEM.
+23 : _("""
+  -> PFON_INI semble etre un point de fin de fissure selon l'orientation choisie.
+  -> Risque & Conseil : 
+     Veuillez vous assurez du bon choix de PFON_INI
 """),
 
-7: _("""
-La structure de données du contact liée à MODI_MODELE_XFEM n'est pas
-celle transmise en argument de MECA_NON_LINE.
+24 : _("""
+  -> La méthode "UPWIND" est en cours d'implémentation.
+  -> Risque & Conseil :
+     Veuillez choisir une autre méthode.
 """),
 
-44: _("""
-Le champ de nom %(k1)s n'a pas été créé car aucun TYPE_ELEM du LIGREL de nom %(k2)s
-ne connait le paramètre de l'option %(k3)s.
-Contactez les développeurs.
+25 : _("""
+  -> La norme du vecteur VECT_ORIE est nulle.
+  -> Risque & Conseil :
+     Veuillez redéfinir VECT_ORIE.
 """),
 
-51: _("""
-Il n'y a aucune maille enrichie.
+39 : _("""
+  -> Deux points du fond de fissure sont très proches ou coincident.
+  -> Risque & Conseil :
+     Vérifier les définitions des level sets et la liste des points du fond
+     de fissure trouvés. Si c'est normal, contactez votre correspondant.
 """),
 
+51 : _("""
+  -> Il n'y a aucune maille enrichie.
+  -> Risque & Conseil:
+     Veuillez vérifier les définitions des level sets.
+  """),
 
 }
index 1c3f94bdf36e53988ecba24ad1e802d16b7cb45a..f7882a1d3987433144a4d40daa87f2610e13afc0 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF __init__ SD  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF __init__ SD  DATE 10/09/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from Accas import ASSD
@@ -29,5 +29,5 @@ except:
 from Noyau.asnom      import SDNom
 from Noyau.ascheckers import Parmi
 from Noyau.asojb      import AsBase, AsVK8, AsVK16, AsVK24, AsVK32, AsVK80, \
-                             AsVI, AsVR, AsVC, AsColl, AsObject, Facultatif, OJBVect
+                             AsVI, AsVL, AsVR, AsVC, AsColl, AsObject, Facultatif, OJBVect, AsPn, AsVect
 
index dacf274466a281ab851ff960179920053e395354..b269b8e498942cbb07857539cae4719445d8e145 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF co_cham_no SD  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF co_cham_no SD  DATE 06/08/2007   AUTEUR TARDIEU N.TARDIEU 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -63,6 +63,38 @@ class cham_no_sdaster(cham_gd_sdaster, sd_cham_no):
       aster.prepcompcham("__DETR__",nchams,ncmp,"NO      ",topo,lgno)
 
       return post_comp_cham_no(valeurs,noeud)
+      
+   def __add__(self, other):
+      from SD.sd_nume_equa import sd_nume_equa
+      from SD.sd_maillage import sd_maillage
+      from SD.co_maillage import maillage_sdaster
+      from Cata.cata import CREA_CHAMP,_F
+      from Noyau.nommage import GetNomConceptResultat
+      # on recupere le type
+      __nume_ddl=sd_nume_equa(self.REFE.get()[1])
+      __gd=__nume_ddl.REFN.get()[1].strip()
+      __type='NOEU_'+__gd
+      # on recupere le nom du maillage
+      __nomMaillage=self.REFE.get()[0].strip()
+      # on recupere l'objet du maillage
+      __maillage=CONTEXT.get_current_step().sds_dict[__nomMaillage]
+      # on recupere le nom a gauche du signe "="
+      toto=GetNomConceptResultat(self)
+      print 50*'#','\n',toto,50*'#','\n'
+      __CHAM = CREA_CHAMP(OPERATION='ASSE',
+                          MAILLAGE=__maillage,
+                          TYPE_CHAM=__type,
+                          INFO=1,
+                          ASSE=(_F(CHAM_GD=self,
+                                   TOUT='OUI',
+                                   CUMUL='OUI',
+                                   COEF_R=1.),
+                                _F(CHAM_GD=other,
+                                   TOUT='OUI',
+                                   CUMUL='OUI',
+                                   COEF_R=1.),  
+                               ))
+      return __CHAM
 
 
 
index 57d24dcb2906870596caca925aa74a761a77e552..aa819719f908919152fdaab834151bc3665c0ad2 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF co_fiss_xfem SD  DATE 13/02/2007   AUTEUR PELLET J.PELLE
+#@ MODIF co_fiss_xfem SD  DATE 15/10/2007   AUTEUR GENIAUT S.GENIAU
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -19,7 +19,7 @@
 # ======================================================================
 
 from SD import *
-from sd_fiss_xfem import sd_fiss_xfem
+from sd_xfem import sd_fiss_xfem
 
 # -----------------------------------------------------------------------------
 class fiss_xfem(ASSD, sd_fiss_xfem):
index 6665f38ba6fb1d244a45b6991ba2e9309f87f580..f4e39ca1028f16fbb3f9d45ef401480389b82713 100644 (file)
@@ -1,27 +1,28 @@
-#@ MODIF co_fonction SD  DATE 30/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF co_fonction SD  DATE 22/04/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 
 import Accas
 from SD import *
-from sd_fonction import sd_fonction
+from sd_fonction import sd_fonction_aster
 
+import os
 import Numeric
 from math import pi
 
@@ -42,7 +43,7 @@ class fonction_class(ASSD):
         objev = '%-19s.PROL' % self.get_name()
         prol = aster.getvectjev(objev)
         if prol == None:
-           UTMESS('F', 'fonction.Parametres', "Objet '%s' inexistant" % objev)
+           UTMESS('F', 'SDVERI_2', valk=[objev])
         dico={
          'INTERPOL'    : [prol[1][0:3],prol[1][4:7]],
          'NOM_PARA'    : prol[2][0:16].strip(),
@@ -74,11 +75,12 @@ class fonction_class(ASSD):
       from Utilitai.Graph import Graph
       gr=Graph()
       gr.AjoutCourbe(Val=self.Valeurs(),
-            Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU']])
+            Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU']],
+            Leg=os.linesep.join(self.TITR.get()) )
       gr.Trace(FORMAT=FORMAT,**kargs)
 
 # -----------------------------------------------------------------------------
-class fonction_sdaster(fonction_class, sd_fonction):
+class fonction_sdaster(fonction_class, sd_fonction_aster):
    def convert(self,arg='real'):
       """
       Retourne un objet de la classe t_fonction
@@ -104,7 +106,7 @@ class fonction_sdaster(fonction_class, sd_fonction):
         vale = '%-19s.VALE' % self.get_name()
         lbl = aster.getvectjev(vale)
         if lbl == None:
-           UTMESS('F', 'fonction.Valeurs', "Objet '%s' inexistant" % vale)
+          UTMESS('F', 'SDVERI_2', valk=[vale])
         lbl = list(lbl)
         dim = len(lbl)/2
         lx = lbl[0:dim]
@@ -143,7 +145,7 @@ class para_sensi(fonction_sdaster):
    pass
 
 # -----------------------------------------------------------------------------
-class fonction_c(fonction_class, sd_fonction):
+class fonction_c(fonction_class, sd_fonction_aster):
    def convert(self,arg='real'):
       """
       Retourne un objet de la classe t_fonction ou t_fonction_c,
@@ -187,7 +189,7 @@ class fonction_c(fonction_class, sd_fonction):
          vale = '%-19s.VALE' % self.get_name()
          lbl = aster.getvectjev(vale)
          if lbl == None:
-            UTMESS('F', 'fonction.Valeurs', "Objet '%s' inexistant" % vale)
+           UTMESS('F', 'SDVERI_2', valk=[vale])
          lbl = list(lbl)
          dim=len(lbl)/3
          lx=lbl[0:dim]
@@ -221,9 +223,11 @@ class fonction_c(fonction_class, sd_fonction):
       if self.par_lot() :
          raise Accas.AsException("Erreur dans fonction_c.Trace en PAR_LOT='OUI'")
       from Utilitai.Graph import Graph
+      para = self.Parametres()
       gr=Graph()
       gr.AjoutCourbe(Val=self.Valeurs(),
-       Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU'],'IMAG'])
+         Lab=[para['NOM_PARA'], '%s_R' % para['NOM_RESU'], '%s_I' % para['NOM_RESU']],
+         Leg=os.linesep.join(self.TITR.get()) )
       gr.Trace(FORMAT=FORMAT,**kargs)
    def __call__(self,val):
       ### Pour EFICAS : substitution de l'instance de classe
@@ -231,11 +235,11 @@ class fonction_c(fonction_class, sd_fonction):
       if isinstance(val, ASSD):
          val=val.valeur
       ###
-      __ff=self.convert()
+      __ff=self.convert(arg='complex')
       return __ff(val)
 
 # -----------------------------------------------------------------------------
-class nappe_sdaster(fonction_class, sd_fonction):
+class nappe_sdaster(fonction_class, sd_fonction_aster):
    def convert(self):
       """
       Retourne un objet de la classe t_nappe, représentation python de la nappe
@@ -271,7 +275,7 @@ class nappe_sdaster(fonction_class, sd_fonction):
       # les cles de dicv sont 1,...,N (indice du parametre)
       lpar=aster.getvectjev(nsd+'.PARA')
       if lpar == None:
-         UTMESS('F', 'fonction.Valeurs', "Objet '%s' inexistant" % (nsd+'.PARA'))
+         UTMESS('F', 'SDVERI_2', valk=[nsd+'.PARA'])
       lval=[]
       for k in range(len(dicv)):
          lbl=dicv[k+1]
@@ -292,22 +296,22 @@ class nappe_sdaster(fonction_class, sd_fonction):
       objev = '%-19s.PROL' % self.get_name()
       prol=aster.getvectjev(objev)
       if prol == None:
-         UTMESS('F', 'fonction.Parametres', "Objet '%s' inexistant" % objev)
+         UTMESS('F', 'SDVERI_2', valk=[objev])
       dico={
          'INTERPOL'      : [prol[1][0:3],prol[1][4:7]],
          'NOM_PARA'      : prol[2][0:16].strip(),
          'NOM_RESU'      : prol[3][0:16].strip(),
          'PROL_DROITE'   : TypeProl[prol[4][1]],
          'PROL_GAUCHE'   : TypeProl[prol[4][0]],
-         'NOM_PARA_FONC' : prol[5][0:4].strip(),
+         'NOM_PARA_FONC' : prol[6][0:4].strip(),
       }
       lparf=[]
-      nbf=(len(prol)-6)/2
+      nbf=(len(prol)-7)/2
       for i in range(nbf):
          dicf={
-            'INTERPOL_FONC'    : [prol[6+i*2][0:3],prol[6+i*2][4:7]],
-            'PROL_DROITE_FONC' : TypeProl[prol[7+i*2][1]],
-            'PROL_GAUCHE_FONC' : TypeProl[prol[7+i*2][0]],
+            'INTERPOL_FONC'    : [prol[7+i*2][0:3],prol[7+i*2][4:7]],
+            'PROL_DROITE_FONC' : TypeProl[prol[8+i*2][1]],
+            'PROL_GAUCHE_FONC' : TypeProl[prol[8+i*2][0]],
          }
          lparf.append(dicf)
       return [dico,lparf]
@@ -323,5 +327,7 @@ class nappe_sdaster(fonction_class, sd_fonction):
       lv=self.Valeurs()[1]
       dp=self.Parametres()[0]
       for lx,ly in lv:
-         gr.AjoutCourbe(Val=[lx,ly], Lab=[dp['NOM_PARA_FONC'],dp['NOM_RESU']])
+         gr.AjoutCourbe(Val=[lx,ly], Lab=[dp['NOM_PARA_FONC'],dp['NOM_RESU']],
+            Leg=os.linesep.join(self.TITR.get()) )
       gr.Trace(FORMAT=FORMAT,**kargs)
+
index 05d5cd39ca27897fc221092b4099527237e2caa9..0479d2e106f1cdf42ea192e05e1a1670cec4523b 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF co_listr8 SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF co_listr8 SD  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -33,7 +33,7 @@ class listr8_sdaster(ASSD, sd_listr8):
          vale='%-19s.VALE' % self.get_name()
          t_vale = aster.getvectjev(vale)
          if t_vale == None:
-            UTMESS('F', 'listr8.Valeurs', "Objet '%s' inexistant" % vale)
+            UTMESS('F', 'SDVERI_2', valk=[vale])
          return list(t_vale)
       else:
          raise Accas.AsException("Erreur dans listr8.Valeurs en PAR_LOT='OUI'")
index 4f9c25bad56815b6819a8bad978103c4a5848ceb..c95560a43dafaa16ea37988060cb165255f63d3f 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF co_macr_elem_dyna SD  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF co_macr_elem_dyna SD  DATE 17/01/2008   AUTEUR ZENTNER I.ZENTNER 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -24,17 +24,33 @@ from sd_macr_elem_dyna import sd_macr_elem_dyna
 
 import Numeric
 
+def VALE_triang2array(vect_VALE, dim, typ):
+   """Conversion (par recopie) de l'objet .VALE decrivant une matrice pleine
+   par sa triangulaire sup en Numeric.array plein.
+   """
+   triang_sup = Numeric.array(vect_VALE)
+   assert dim*(dim+1)/2 == len(triang_sup), \
+         'Matrice non pleine : %d*(%d+1)/2 != %d' % (dim, dim, len(triang_sup))
+
+   valeur = Numeric.zeros([dim, dim], typ)
+   for i in range(1, dim+1):
+     for j in range(1, i+1):
+       k = i*(i-1)/2 + j
+       valeur[j-1, i-1]=triang_sup[k-1]
+   valeur = valeur + Numeric.transpose(valeur)
+   for i in range(dim):
+      valeur[i, i] = 0.5 * valeur[i, i]
+
+   return valeur
+
 # -----------------------------------------------------------------------------
 class macr_elem_dyna(ASSD, sd_macr_elem_dyna):
    def NBRE_MODES(self) :
       """ retourne le nombre de modes total, dynamiques et d'interface """
       if self.par_lot() :
          raise Accas.AsException("Erreur dans macr_elem_dyna.NBRE_MODES en PAR_LOT='OUI'")
-      nommacr=self.get_name()
-      ncham=nommacr+(8-len(nommacr))*' '
-      ncham=nommacr+(8-len(nommacr))*' '+'.MAEL'
-      nombase=aster.getvectjev(ncham+'_REFE')[0]
-      nbmode=Numeric.array(aster.getvectjev(nombase[0:8]+(19-len(nombase[0:8]))*' '+'.UTIL'))
+      nombase = self.MAEL_REFE.get()[0]
+      nbmode=Numeric.array(aster.getvectjev('%-19s' % nombase[0:8] + '.UTIL'))
       nbmodtot=nbmode[1]
       nbmoddyn=nbmode[2]
       nbmodint=nbmode[3]
@@ -51,32 +67,21 @@ class macr_elem_dyna(ASSD, sd_macr_elem_dyna):
       if self.par_lot() :
          raise Accas.AsException("Erreur dans macr_elem_dyna.EXTR_MATR_GENE en PAR_LOT='OUI'")
 
-      nommacr=self.get_name()
       if (typmat=='MASS_GENE') :
-         ext='.MAEL_MASS'
+         macr_elem = self.MAEL_MASS
       elif (typmat=='RIGI_GENE') :
-         ext='.MAEL_RAID'
+         macr_elem = self.MAEL_RAID
       elif (typmat=='AMOR_GENE') :
-         ext='.MAEL_AMOR'
+         macr_elem = self.MAEL_AMOR
       else:
          raise Accas.AsException("Le type de la matrice est incorrect")
-      ncham=nommacr+(8-len(nommacr))*' '+ext
-      desc=Numeric.array(aster.getvectjev(ncham+'_DESC'))
 
+      desc=Numeric.array(macr_elem.DESC.get())
       # On teste si le DESC du vecteur existe
       if (desc==None):
-         raise Accas.AsException("L'objet matrice n'existe pas ou \
-         est mal cree par Code Aster")
+         raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
 
-      tmp=Numeric.array(aster.getvectjev(ncham+'_VALE'))
-      matrice=Numeric.zeros([desc[1],desc[1]],Numeric.Float)
-      for j in range(desc[1]+1):
-         for i in range(j):
-            k=j*(j-1)/2+i
-            matrice[j-1,i]=tmp[k]
-      matrice=(matrice+Numeric.transpose(matrice))
-      for i in range(desc[1]):
-         matrice[i,i]=0.5*matrice[i,i]
+      matrice = VALE_triang2array(macr_elem.VALE.get(), desc[1], Numeric.Float)
       return matrice
 
    def RECU_MATR_GENE(self,typmat,matrice) :
@@ -88,46 +93,38 @@ class macr_elem_dyna(ASSD, sd_macr_elem_dyna):
          Attributs ne retourne rien """
       if self.par_lot() :
          raise Accas.AsException("Erreur dans macr_elem_dyna.RECU_MATR_GENE en PAR_LOT='OUI'")
-      from Utilitai.Utmess import UTMESS
-
-      # avertissement generique
-      UTMESS('A','RECU_MATR_GENE',' ATTENTION, VOUS ALLEZ ECRASER DES CONCEPTS EXISTANTS')
 
       nommacr=self.get_name()
       if (typmat=='MASS_GENE') :
-         ext='.MAEL_MASS'
+         macr_elem = self.MAEL_MASS
       elif (typmat=='RIGI_GENE') :
-         ext='.MAEL_RAID'
+         macr_elem = self.MAEL_RAID
       elif (typmat=='AMOR_GENE') :
-         ext='.MAEL_AMOR'
+         macr_elem = self.MAEL_AMOR
       else:
-         raise Accas.AsException("Le type de la matrice \
-                                 est incorrect")
-      ncham=nommacr+(8-len(nommacr))*' '+ext
-      desc=Numeric.array(aster.getvectjev(ncham+'_DESC'))
+         raise Accas.AsException("Le type de la matrice est incorrect")
+      nom_vale = macr_elem.VALE.nomj()
+      desc=Numeric.array(macr_elem.DESC.get())
 
       # On teste si le DESC de la matrice jeveux existe
       if (desc==None):
-         raise Accas.AsException("L'objet matrice n'existe pas ou \
-                                 est mal cree par Code Aster")
+         raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
       Numeric.asarray(matrice)
 
       # On teste si la matrice python est de dimension 2
       if (len(Numeric.shape(matrice))<>2):
-         raise Accas.AsException("La dimension de la matrice \
-                                 est incorrecte")
+         raise Accas.AsException("La dimension de la matrice est incorrecte")
 
       # On teste si les tailles de la matrice jeveux et python sont identiques
       if (tuple([desc[1],desc[1]])<>Numeric.shape(matrice)) :
-         raise Accas.AsException("La dimension de la matrice \
-                                 est incorrecte")
+         raise Accas.AsException("La dimension de la matrice est incorrecte")
       taille=desc[1]*desc[1]/2.0+desc[1]/2.0
       tmp=Numeric.zeros([int(taille)],Numeric.Float)
       for j in range(desc[1]+1):
          for i in range(j):
             k=j*(j-1)/2+i
             tmp[k]=matrice[j-1,i]
-      aster.putvectjev(ncham+'_VALE',len(tmp),tuple((
-      range(1,len(tmp)+1))),tuple(tmp),tuple(tmp),1)
+      aster.putvectjev(nom_vale,len(tmp),tuple((
+         range(1,len(tmp)+1))),tuple(tmp),tuple(tmp),1)
       return
 
index 68301dab51772c7fb64b682dc302de1b3cccd6e5..51f7d70e5e8bcacc70875939d4d186cfbce6b874 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF co_mater SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF co_mater SD  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -42,12 +42,11 @@ class mater_sdaster(ASSD, sd_mater):
       valpar = tuple(valpar)
       nomres = tuple(nomres)
       if len(nompar) != len(valpar):
-         UTMESS('F', 'RCVALE', """Arguments incohérents :
-      Nom des paramètres : %s
-   Valeur des paramètres : %s""" \
-         % (', '.join(nompar), ', '.join([repr(v) for v in valpar])))
+         vk1=', '.join(nompar)
+         vk2=', '.join([repr(v) for v in valpar])
+         UTMESS('F','SDVERI_4',valk=[vk1,vk2])
       if len(nomres) < 1:
-         UTMESS('F', 'RCVALE', 'Argument invalide : "nomres" vide !')
+         UTMESS('F', 'SDVERI_5')
       # appel à l'interface Python/C
       return aster.rcvale(self.nom, phenomene, nompar, valpar, nomres, stop)
 
index e0490b8330d085e98a37bf6c442eda9b752abae6..3d7bbb9af87f7fbce55f7dcbd773d41d027b7be6 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF co_matr_asse_gene SD  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF co_matr_asse_gene SD  DATE 17/01/2008   AUTEUR ZENTNER I.ZENTNER 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -23,6 +23,39 @@ from SD import *
 from sd_matr_asse_gene import sd_matr_asse_gene
 
 import Numeric
+import math
+
+def VALM_triang2array(dict_VALM, dim, typ):
+   """Conversion (par recopie) de l'objet .VALM decrivant une matrice pleine
+   par sa triangulaire inf (et parfois triang sup) en Numeric.array plein.
+   """
+   # stockage symetrique ou non (triang inf+sup)
+   sym = len(dict_VALM) == 1
+   triang_sup = Numeric.array(dict_VALM[1])
+   assert dim*(dim+1)/2 == len(triang_sup), \
+         'Matrice non pleine : %d*(%d+1)/2 != %d' % (dim, dim, len(triang_sup))
+   if sym:
+      triang_inf = triang_sup
+   else:
+      triang_inf = Numeric.array(dict_VALM[2])
+   valeur=Numeric.zeros([dim, dim], typ)
+   for i in range(1, dim+1):
+     for j in range(1, i+1):
+       k = i*(i-1)/2 + j
+       valeur[i-1, j-1]=triang_inf[k-1]
+       valeur[j-1, i-1]=triang_sup[k-1]
+   return valeur
+
+def VALM_diag2array(dict_VALM, dim, typ):
+   """Conversion (par recopie) de l'objet .VALM decrivant une matrice
+   diagonale en Numeric.array plein.
+   """
+   diag = Numeric.array(dict_VALM[1])
+   assert dim == len(diag), 'Dimension incorrecte : %d != %d' % (dim, len(diag))
+   valeur=Numeric.zeros([dim, dim], typ)
+   for i in range(dim):
+      valeur[i,i] =  diag[i]
+   return valeur
 
 # -----------------------------------------------------------------------------
 class matr_asse_gene(ASSD, sd_matr_asse_gene):
@@ -38,30 +71,18 @@ class matr_asse_gene_r(matr_asse_gene):
     if self.par_lot():
        raise Accas.AsException("Erreur dans matr_asse_gene.EXTR_MATR_GENE en PAR_LOT='OUI'")
 
-    ncham=self.get_name()
-    ncham=ncham+(8-len(ncham))*' '
-    desc=Numeric.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.DESC'))
+    desc=Numeric.array(self.DESC.get())
     # On teste si le DESC de la matrice existe
     if (desc==None):
-       raise Accas.AsException("L'objet matrice n'existe pas ou \
-                                est mal cree par Code Aster")
+       raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
     # Si le stockage est plein
     if desc[2]==2 :
-      tmp=Numeric.array(aster.getcolljev(ncham+(19-len(ncham))*' '+'.VALM')[1])
-      valeur=Numeric.zeros([desc[1],desc[1]],Numeric.Float)
-      for j in range(desc[1]+1):
-        for i in range(j):
-          k=j*(j-1)/2+i
-          valeur[j-1,i]=tmp[k]
-      valeur=(valeur+Numeric.transpose(valeur))
-      for i in range(desc[1]):
-        valeur[i,i]=0.5*valeur[i,i]
+       valeur = VALM_triang2array(self.VALM.get(), desc[1], Numeric.Float)
+
     # Si le stockage est diagonal
     elif desc[2]==1 :
-      tmp=Numeric.array(aster.getcolljev(ncham+(19-len(ncham))*' '+'.VALM')[1])
-      valeur=Numeric.zeros([desc[1],desc[1]],Numeric.Float)
-      for i in range(desc[1]):
-        valeur[i,i]=tmp[i]
+       valeur = VALM_diag2array(self.VALM.get(), desc[1], Numeric.Float)
+
     # Sinon on arrete tout
     else:
       raise KeyError
@@ -73,19 +94,13 @@ class matr_asse_gene_r(matr_asse_gene):
         Attributs ne retourne rien """
     if self.par_lot():
        raise Accas.AsException("Erreur dans matr_asse_gene.RECU_MATR_GENE en PAR_LOT='OUI'")
-    from Utilitai.Utmess import UTMESS
-
-    # avertissement generique
-    UTMESS('A','RECU_MATR_GENE',' ATTENTION, VOUS ALLEZ ECRASER DES CONCEPTS EXISTANTS')
 
     ncham=self.get_name()
-    ncham=ncham+(8-len(ncham))*' '
-    desc=Numeric.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.DESC'))
+    desc=Numeric.array(self.DESC.get())
 
     # On teste si le DESC de la matrice existe
     if (desc==None):
-       raise Accas.AsException("L'objet matrice n'existe pas ou \
-                                est mal cree par Code Aster")
+       raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
     Numeric.asarray(matrice)
 
     # On teste si la dimension de la matrice python est 2
@@ -104,14 +119,14 @@ class matr_asse_gene_r(matr_asse_gene):
         for i in range(j):
           k=j*(j-1)/2+i
           tmp[k]=matrice[j-1,i]
-      aster.putcolljev(ncham+(19-len(ncham))*' '+'.VALM',len(tmp),tuple((\
+      aster.putcolljev('%-19s.VALM' % ncham,len(tmp),tuple((\
       range(1,len(tmp)+1))),tuple(tmp),tuple(tmp),1)
     # Si le stockage est diagonal
     elif desc[2]==1 :
       tmp=Numeric.zeros(desc[1],Numeric.Float)
       for j in range(desc[1]):
           tmp[j]=matrice[j,j]
-      aster.putcolljev(ncham+(19-len(ncham))*' '+'.VALM',len(tmp),tuple((\
+      aster.putcolljev('%-19s.VALM' % ncham,len(tmp),tuple((\
       range(1,len(tmp)+1))),tuple(tmp),tuple(tmp),1)
     # Sinon on arrete tout
     else:
@@ -128,32 +143,20 @@ class matr_asse_gene_c(matr_asse_gene):
     if self.par_lot():
        raise Accas.AsException("Erreur dans matr_asse_gene_c.EXTR_MATR_GENE en PAR_LOT='OUI'")
 
-    ncham=self.get_name()
-    ncham=ncham+(8-len(ncham))*' '
-    desc=Numeric.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.DESC'))
-    if (desc==None):
-       raise Accas.AsException("L'objet matrice n'existe pas ou \
-       est mal cree par Code Aster ")
+    desc = Numeric.array(self.DESC.get())
+    if desc == None:
+       raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster ")
     # Si le stockage est plein
-    if desc[2]==2 :
-      tmp=Numeric.array(aster.getcolljev(ncham+(19-len(ncham))*' '+'.VALM')[1])
-      valeur=Numeric.zeros([desc[1],desc[1]],Numeric.Complex)
-      for j in range(desc[1]+1):
-        for i in range(j):
-          k=j*(j-1)/2+i
-          valeur[j-1,i]=tmp[k]
-      valeur=(valeur+Numeric.transpose(valeur))
-      for i in range(desc[1]):
-        valeur[i,i]=0.5*valeur[i,i]
+    if desc[2] == 2 :
+       valeur = VALM_triang2array(self.VALM.get(), desc[1], Numeric.Complex)
+
     # Si le stockage est diagonal
     elif desc[2]==1 :
-      tmp=Numeric.array(aster.getcolljev(ncham+(19-len(ncham))*' '+'.VALM')[1])
-      valeur=Numeric.zeros([desc[1],desc[1]],Numeric.Complex)
-      for i in range(desc[1]):
-        valeur[i,i]=tmp[i]
+       valeur = VALM_diag2array(self.VALM.get(), desc[1], Numeric.Complex)
+
     # Sinon on arrete tout
     else:
-      raise KeyError
+       raise KeyError
     return valeur
 
   def RECU_MATR_GENE(self,matrice) :
@@ -162,20 +165,14 @@ class matr_asse_gene_c(matr_asse_gene):
         Attributs ne retourne rien """
     if self.par_lot():
        raise Accas.AsException("Erreur dans matr_asse_gene_c.RECU_MATR_GENE en PAR_LOT='OUI'")
-    from Utilitai.Utmess import UTMESS
-
-    # avertissement generique
-    UTMESS('A','RECU_MATR_GENE',' ATTENTION, VOUS ALLEZ ECRASER DES CONCEPTS EXISTANTS')
 
     Numeric.asarray(matrice)
     ncham=self.get_name()
-    ncham=ncham+(8-len(ncham))*' '
-    desc=Numeric.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.DESC'))
+    desc=Numeric.array(self.DESC.get())
 
     # On teste si le DESC de la matrice existe
     if (desc==None):
-       raise Accas.AsException("L'objet matrice n'existe pas ou \
-       est mal cree par Code Aster")
+       raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
     Numeric.asarray(matrice)
 
     # On teste si la dimension de la matrice python est 2
@@ -196,7 +193,7 @@ class matr_asse_gene_c(matr_asse_gene):
           k=j*(j-1)/2+i
           tmpr[k]=matrice[j-1,i].real
           tmpc[k]=matrice[j-1,i].imag
-      aster.putvectjev(ncham+(19-len(ncham))*' '+'.VALM',len(tmpr),tuple((\
+      aster.putvectjev('%-19s.VALM' % ncham, len(tmpr), tuple((\
                        range(1,len(tmpr)+1))),tuple(tmpr),tuple(tmpc),1)
     # Si le stockage est diagonal
     elif desc[2]==1 :
@@ -205,7 +202,7 @@ class matr_asse_gene_c(matr_asse_gene):
       for j in range(desc[1]):
           tmpr[j]=matrice[j,j].real
           tmpc[j]=matrice[j,j].imag
-      aster.putvectjev(ncham+(19-len(ncham))*' '+'.VALM',len(tmpr),tuple((\
+      aster.putvectjev('%-19s.VALM' % ncham,len(tmpr),tuple((\
                        range(1,len(tmpr)+1))),tuple(tmpr),tuple(tmpc),1)
     # Sinon on arrete tout
     else:
index ee866302c61526f38b7daeaac323f243530c77f0..584df23ebeb4765b24899aa1a4add8479dceaba9 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF co_table SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF co_table SD  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -33,15 +33,15 @@ class table_sdaster(ASSD, sd_table):
       tabnom = aster.getvectjev(tblp)
       #tabnom = self.TBLP.get()
       if tabnom == None:
-         UTMESS('F', 'TABLE[]', "Objet '%s' inexistant" % tblp)
+         UTMESS('F','SDVERI_2',valk=[tblp])
       for i in range(len(tabnom)) :
          if tabnom[i]==requete: break
       resu=aster.getvectjev(tabnom[i+2])
       if resu == None:
-         UTMESS('F', 'TABLE[]', "Objet '%s' inexistant" % tabnom[i+2])
+         UTMESS('F','SDVERI_2',valk=[tabnom[i+2]])
       exist=aster.getvectjev(tabnom[i+3])
       if exist == None:
-         UTMESS('F', 'TABLE[]', "Objet '%s' inexistant" % tabnom[i+3])
+         UTMESS('F','SDVERI_2',valk=[tabnom[i+3]])
       if key[1]>len(resu) or exist[key[1]-1]==0:
          raise KeyError
       else:
diff --git a/Aster/Cata/cataSTA9/SD/co_table_container.py b/Aster/Cata/cataSTA9/SD/co_table_container.py
new file mode 100644 (file)
index 0000000..71bad13
--- /dev/null
@@ -0,0 +1,29 @@
+#@ MODIF co_table_container SD  DATE 12/02/2008   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  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.        
+# ======================================================================
+
+from SD import *
+from co_table import table_sdaster
+from sd_table_container import sd_table_container
+
+# -----------------------------------------------------------------------------
+class table_container(table_sdaster,sd_table_container):
+   """Table contenant les colonnes NOM_OBJET, TYPE_OBJET et NOM_SD.
+   """
+
index d57496dd2741109075006778ab75d892f1454714..ae36e17ea8ee3367456f9c36b491f1443c17719f 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF co_vect_asse_gene SD  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF co_vect_asse_gene SD  DATE 14/01/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -45,10 +45,6 @@ class vect_asse_gene(ASSD, sd_cham_gene):
          Attributs ne retourne rien """
       if self.par_lot():
          raise Accas.AsException("Erreur dans vect_asse_gene_r.RECU_VECT_GENE en PAR_LOT='OUI'")
-      from Utilitai.Utmess import UTMESS
-
-      # avertissement generique
-      UTMESS('A','RECU_VECT_GENE',' ATTENTION, VOUS ALLEZ ECRASER DES CONCEPTS EXISTANTS')
 
       Numeric.asarray(vecteur)
       ncham=self.get_name()
@@ -85,10 +81,6 @@ class vect_asse_gene(ASSD, sd_cham_gene):
          Attributs ne retourne rien """
       if self.par_lot():
          raise Accas.AsException("Erreur dans vect_asse_gene_c.RECU_VECT_GENE en PAR_LOT='OUI'")
-      from Utilitai.Utmess import UTMESS
-
-      # avertissement generique
-      UTMESS('A','RECU_VECT_GENE',' ATTENTION, VOUS ALLEZ ECRASER DES CONCEPTS EXISTANTS')
 
       Numeric.asarray(vecteur)
       ncham=self.get_name()
index b418df69bfadabb27886508bc6ff1f1de3226888..85552eb9807042420d050cabad3352b14161bfc7 100644 (file)
@@ -1,25 +1,26 @@
-#@ MODIF sd_carte SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_carte SD  DATE 10/07/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
 from SD.sd_titre import sd_titre
+from SD.sd_util import *
 
 
 
@@ -29,8 +30,51 @@ class sd_carte(sd_titre):
 
     DESC = AsVI(docu='CART', )
     NOMA = AsVK8(lonmax=1, )
-    NOLI = AsVK24()
-    VALE = AsObject(genr='V', xous='S', type=Parmi('C', 'K', 'R'), ltyp=Parmi(16, 24, 8), )
-    LIMA = AsColl(acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+    VALE = AsVect(type=Parmi('C', 'K', 'R'), ltyp=Parmi(16, 24, 8), )
+
+    NOLI = Facultatif(AsVK24())
+    LIMA = Facultatif(AsColl(acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', ))
+
+
+    def exists(self):
+        return self.NOMA.exists
+
+
+    def check_NOMA(self,checker):
+        if not self.exists() : return
+        noma=self.NOMA.get_stripped()
+
+        # faut-il vérifier le sd_maillage de chaque sd_carte ?   AJACOT_PB  (meme question que pour sd_cham_no)
+        #  - cela risque de couter cher
+        #  - cela pose un problème "import circulaire" avec sd_maillage -> sd_carte => import ici
+        # from SD.sd_maillage import sd_maillage
+        # sd2=sd_maillage(noma[0]); sd2.check(checker)
+        # Rem : si on vérifie le sd_maillage, il me semble que sdll503a se plante (RuntimeError: maximum recursion depth exceeded)
+
+
+    def check_DESC(self,checker):
+        if not self.exists() : return
+        desc=self.DESC.get()
+        numgd    =desc[0]
+        n_gd_max =desc[1]
+        n_gd_edit=desc[2]
+        assert numgd      > 0 , desc
+        assert n_gd_max   > 0 , desc
+        assert n_gd_edit  >=0 , desc  # AJACOT_PB : j'aurais préféré  n_gd_edit > 0
+                                      # mais acearp.f crée parfois des cartes "vides" (zzzz200a)
+        assert n_gd_edit  <= n_gd_max , desc
+        for kedit in range(n_gd_edit) :
+            code=desc[3+2*kedit]
+            assert abs(code) in (1,2,3) , (code, kedit, desc)
+
+
+    def check_VALE(self,checker):
+        if not self.exists() : return
+        n1=self.VALE.lonmax
+        desc=self.DESC.get()
+        n_gd_max =desc[1]
+        numgd    =desc[0]
+        ncmp_max=len(sdu_licmp_gd(numgd))
+        assert n1==ncmp_max*n_gd_max , (n1, ncmp_max, n_gd_max)
 
 
index ced947ab34b69f8ae252ad0d8aa77cc26ed9c5a4..d5fd1595e7b9213e1cbed1da2a65a57ae7f77f2b 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF sd_cham_elem SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_cham_elem SD  DATE 18/03/2008   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
@@ -29,11 +29,21 @@ class sd_cham_elem(sd_titre):
     nomj = SDNom(fin=19)
     CELD = AsVI(docu='CHML', )
     CELV = AsObject(genr='V', xous='S', type=Parmi('C', 'I', 'K', 'R'), ltyp=Parmi(4,8,16), )
-    CELK = AsVK24(lonmax=6, )
+    CELK = AsVK24(lonmax=7, )
+
+
+    def exists(self):
+        # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+        return self.CELK.exists
+
+    def check_1(self, checker):
+        if not self.exists() : return
+        celk=self.CELK.get_stripped()
+        sd2=sd_ligrel(celk[0]); sd2.check(checker)
+        assert celk[1] != '' , celk
+        assert celk[2] in ('ELNO','ELGA','ELEM') , celk
+        assert celk[4] in ('','INF','MOY','SUP') , celk
+        assert celk[5] != '' , celk
+        assert celk[6] in ('MPI_COMPLET','MPI_INCOMPLET') , celk
 
-    # indirection vers le LIGREL :
-    def check_cham_elem_i_LIGREL(self, checker):
-        if not self.CELK.get() : return
-        nom=self.CELK.get()[0]
-        sd2=sd_ligrel(nom); sd2.check(checker)
 
index 906b33b067b467263af2bdfe42d559876b48275a..43cca8eeb7d971ad192b88d97b38fdbf0eafb831 100644 (file)
@@ -1,24 +1,25 @@
-#@ MODIF sd_cham_gene SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_cham_gene SD  DATE 27/11/2007   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
+from SD.sd_nume_ddl_gene import sd_nume_ddl_gene
 
 class sd_cham_gene(AsBase):
     nomj = SDNom(fin=19)
@@ -27,3 +28,18 @@ class sd_cham_gene(AsBase):
     DESC = AsVI(docu='VGEN', )
 
 
+    def exists(self):
+        # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+        return self.REFE.exists
+
+    # indirection vers NUME_DDL_GENE:
+    def check_REFE(self, checker):
+        if not self.exists() : return
+        refe = self.REFE.get_stripped()
+        # ce test fait planter les verif de SD issues de DYNA_TRAN_MODAL + RECU_GENE
+        # op0037 cree un refe[1]='$TRAN_GENE' bidon 
+        if refe[1] == '$TRAN_GENE': return
+        if refe[1] :
+            sd2 = sd_nume_ddl_gene(refe[1]) ; sd2.check(checker)
+
+
index f99146dbd9d2e5142eaebfcbfb43a1571c5490df..42ed3f331a2e15df3504f403c3d6276bb94e7279 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_cham_mater SD  DATE 23/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_cham_mater SD  DATE 28/01/2008   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 from SD import *
 
 from SD.sd_carte import sd_carte
+from SD.sd_champ import sd_champ
+from SD.sd_mater import sd_mater
+from SD.sd_compor import sd_compor
 from SD.sd_util import *
 
 
+# Remarque :
+#------------
+# la sd_cham_mater est produite par la seule commande AFFE_MATERIAU.
+# C'est pourquoi, on fera appel parfois pour la décrire au vocabulaire de cette
+# commande.
+
+
+
 class sd_cham_mater_varc(AsBase):
 #----------------------------------
+# la sd_cham_mater_varc est la partie de la sd_cham_mater correspondant aux variables de commande
+# (mot clé AFFE_VARC)
+
     nomj = SDNom(fin=8)
     CVRCNOM  = AsVK8()
     CVRCGD   = AsVK8()
@@ -34,7 +48,7 @@ class sd_cham_mater_varc(AsBase):
     CVRCCMP  = AsVK8()
 
     def exists(self):
-        return self.CVRCVARC.get()
+        return self.CVRCVARC.exists
 
     # indirection via CVRCVARC:
     def check_cham_mater_i_CVRCVARC(self, checker):
@@ -43,25 +57,41 @@ class sd_cham_mater_varc(AsBase):
         for nom in lnom :
            nom2=self.nomj()[:8]+'.'+nom+'.1'
            sd2=sd_carte(nom2)  ; sd2.check(checker)
+
            nom2=self.nomj()[:8]+'.'+nom+'.2'
            sd2=sd_carte(nom2)  ; sd2.check(checker)
 
+           # dans le cas de la temperature, on cree parfois des cartes sous-terraines
+           # (lorsque l'on indique VALE_REF sans donner de CHAMP_GD/EVOL) :
+           if nom.strip()=='TEMP':
+               desc=sd2.DESC.get()
+               ngdmax=desc[1]
+               ngdedi=desc[2]
+               vale=sd2.VALE.get_stripped()
+               ncmp=len(vale)/ngdmax
+               assert len(vale)==ncmp*ngdmax, (ngdmax, ncmp, vale)
+               for kedit in range(ngdedi):
+                   assert vale[ncmp*kedit+0]=='TEMP' , (vale, kedit,ncmp)
+                   if vale[ncmp*kedit+1]=='CHAMP' :
+                      sd3=sd_champ(vale[ncmp*kedit+2]) ; sd3.check(checker)
+
+
     # vérification des objets .CVRC* :
     def check_CVRC(self, checker):
         if not self.exists() : return
-        xcmp=self.CVRCCMP.get()
-        xnom=self.CVRCNOM.get()
-        xgd=self.CVRCGD.get()
-        xvarc=self.CVRCVARC.get()
-        xdef=self.CVRCDEF.get()
-
-        # Les 5 objets ont la meme longueur > 0 :
-        nbcvrc=len(xnom)
+        cvrccmp=self.CVRCCMP.get()
+        cvrcnom =self.CVRCNOM.get_stripped()
+        cvrcgd  =self.CVRCGD.get_stripped()
+        cvrcvarc=self.CVRCVARC.get_stripped()
+        cvrcdef =self.CVRCDEF.get()
+
+        # Les 6 objets ont la meme longueur > 0 :
+        nbcvrc=len(cvrcnom)
         assert nbcvrc > 0, (self)
-        assert len(xcmp)  == nbcvrc , (xcmp,xnom,self)
-        assert len(xgd)   == nbcvrc , (xgd,xnom,self)
-        assert len(xvarc) == nbcvrc , (xvarc,xnom,self)
-        assert len(xdef)  == nbcvrc , (xdef,xnom,self)
+        assert len(cvrccmp)  == nbcvrc , (cvrccmp,cvrcnom,self)
+        assert len(cvrcgd)   == nbcvrc , (cvrcgd,cvrcnom,self)
+        assert len(cvrcvarc) == nbcvrc , (cvrcvarc,cvrcnom,self)
+        assert len(cvrcdef)  == nbcvrc , (cvrcdef,cvrcnom,self)
 
         # Les 4 objets sont "non blancs" :
         sdu_tous_non_blancs(self.CVRCCMP,checker)
@@ -69,21 +99,86 @@ class sd_cham_mater_varc(AsBase):
         sdu_tous_non_blancs(self.CVRCGD,checker)
         sdu_tous_non_blancs(self.CVRCVARC,checker)
 
-        # les noms des CRVC doievent etre differents:
+        # les noms des CRVC doivent etre differents:
         sdu_tous_differents(self.CVRCNOM,checker)
 
 
+
+
 class sd_cham_mater(AsBase):
-#----------------------------------
+#=============================
     nomj = SDNom(fin=8)
-    champ_mat = sd_carte(SDNom(nomj='.CHAMP_MAT', fin=19))
 
-    # La carte TEMPE_REF n'existe pas si AFFE_VARC/NOM_VARC='TEMP' :
-    # (voir routine cmtref.f)
-    TEMPE_REF = Facultatif(sd_carte())
+    # CHAMP_MAT est une carte contenant la liste des noms de matériaux
+    # affectées sur les mailles du maillage.
+    CHAMP_MAT = sd_carte()
 
     # si AFFE_VARC :
     varc = Facultatif(sd_cham_mater_varc(SDNom(nomj='')))
 
+    # si AFFE_COMPOR :
+    # COMPOR est une carte définissant les sd_compor affectés
+    # sur les mailles du maillage
+    COMPOR = Facultatif(sd_carte())
+
+
+    def check_CHAMP_MAT(self,checker) :
+    #----------------------------------
+        # on vérifie que la carte .CHAMP_MAT contient bien des noms de matériau.
+        vale=self.CHAMP_MAT.VALE.get_stripped()
+        desc=self.CHAMP_MAT.DESC.get()
+        numgd    =desc[0]
+        n_gd_edit=desc[2]
+        assert sdu_nom_gd(numgd) == 'NEUT_F', (desc,sdu_nom_gd(numgd))
+        ncmp_max=len(sdu_licmp_gd(numgd))
+        assert ncmp_max==30 , ncmp_max
+
+        for kedit in range(n_gd_edit):
+            v1=vale[kedit*ncmp_max:(kedit+1)*ncmp_max]
+            ktref=None
+            for k1 in range(len(v1)) :
+                x1=v1[k1]
+                if x1 == '' : continue
+
+                # cas particulier : 'TREF=>', '25.0'
+                if x1=='TREF=>' :
+                    ktref=k1
+                    continue
+                if ktref :
+                    assert k1 == ktref+1 , (k1, ktref)
+                    # on doit retrouver la valeur de TREF :
+                    try :
+                        tref=float(x1)
+                    except :
+                        assert 0 , ' On doit trouver la valeur de TREF: '+x1
+                    continue
+
+                # cas général : x1 est un nom de sd_mater
+                sd2=sd_mater(x1) ; sd2.check(checker)
+
+
+    def check_COMPOR(self,checker) :
+    #----------------------------------
+        # on vérifie (un peu)  la carte .COMPOR (si elle existe)
+        desc=self.COMPOR.DESC.get()
+        if not desc : return
+        vale=self.COMPOR.VALE.get_stripped()
+        numgd    =desc[0]
+        n_gd_edit=desc[2]
+        assert sdu_nom_gd(numgd) == 'COMPOR', (desc,sdu_nom_gd(numgd))
+        ncmp_max=len(sdu_licmp_gd(numgd))
+
+        for kedit in range(n_gd_edit):
+            v1=vale[kedit*ncmp_max:(kedit+1)*ncmp_max]
+            assert v1[3]=='COMP_INCR'   , v1
+            sd2=sd_compor(v1[5].split('.')[0].strip()) ; sd2.check(checker)
+
+            for x1 in v1[7:] :
+                assert x1=='' , v1
+
+
+
+
+
 
 
index 172d5efd6eeae4e2f37c7921e329692b9dff4105..7a1333dee3685a04cf9a9900de6e02b8ca966ffe 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_cham_no SD  DATE 09/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_cham_no SD  DATE 28/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -27,7 +27,7 @@ from SD.sd_nume_equa import sd_nume_equa
 class sd_cham_no(sd_titre):
 #------------------------------------
     nomj = SDNom(fin=19)
-    VALE = AsObject(genr='V', ltyp=Parmi(4,8,16,24), type=Parmi('C', 'I', 'K', 'R'), xous='S', docu=Parmi('', '2', '3'), )
+    VALE = AsVect(ltyp=Parmi(4,8,16,24), type=Parmi('C', 'I', 'K', 'R'), docu=Parmi('', '2', '3'), )
     REFE = AsVK24()
     DESC = AsVI(docu='CHNO', )
 
@@ -44,12 +44,13 @@ class sd_cham_no(sd_titre):
         # faut-il vérifier le sd_maillage de chaque sd_cham_no ?   AJACOT_PB
         #  - cela risque de couter cher
         #  - cela pose un problème "import circulaire" avec sd_maillage -> sd_cham_no => import ici
-        #  - cela pose un problème de boucle infinie : sd_maillage -> sd_cham_no -> sd_maillage -> ...
-        #from SD.sd_maillage import sd_maillage
-        #sd2 = sd_maillage(lnom[0]) ; sd2.check(checker)
+        from SD.sd_maillage import sd_maillage
+        sd2 = sd_maillage(lnom[0])
+        sd2.check(checker)
 
         # j'aurai préféré : sd_prof_chno que sd_nume_equa (mais sslv111b !) AJACOT_PB :
         if lnom[1].strip() :
+            if checker.names.has_key(lnom[1][:14]+'.NUME.DEEQ'):  return
             sd2 = sd_nume_equa(lnom[1]) ; sd2.check(checker)
 
 
index d0b434e32512d3c8a5726c13b15bfcece3dbd8e1..ab214a1041ff5234da9e7ef7805739b76bdc3f7b 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_champ SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_champ SD  DATE 17/07/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -19,7 +19,6 @@
 # ======================================================================
 
 from SD import *
-import aster
 
 from SD.sd_cham_no import sd_cham_no
 from SD.sd_cham_elem import sd_cham_elem
index cc0868c824ffc920d8466dbec77acc00cad6e0c1..23f6964f94511ccce8a19607b1b00464594c01d4 100644 (file)
@@ -1,32 +1,99 @@
-#@ MODIF sd_char_cine SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_char_cine SD  DATE 08/10/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
+from SD.sd_modele import sd_modele
+from SD.sd_fonction import sd_fonction
+
 
 class sd_char_cine(AsBase):
-    nomj = SDNom(fin=8)
-    CITH_MODEL_NOMO = Facultatif(AsVK8(SDNom(nomj='.CITH.MODEL.NOMO'), lonmax=1, ))
-    VALF = Facultatif(AsVK8(SDNom(debut=19), ))
-    VALE = Facultatif(AsVR(SDNom(debut=19), ))
-    CIME_MODEL_NOMO = Facultatif(AsVK8(SDNom(nomj='.CIME.MODEL.NOMO'), lonmax=1, ))
-    DEFI = AsVI(SDNom(debut=19), )
-    TYPE = AsVK8(lonmax=1, )
+#===========================
+    nomj = SDNom(fin=19)
+
+    AFCK = AsVK8(lonmax=3)
+    AFCI = AsVI()
+    AFCV = Facultatif(OJBVect(type=Parmi('C','R','K')))
+
+
+
+    def exists(self):
+        # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+        return self.AFCK.exists
+
+
+    def u_veri1(self):   # retourne (CIME/CITH/CIAC, RE/CX/FO/FT)
+    #---------------------------------------------------------------
+        afck=self.AFCK.get()
+        l1=afck[0].strip().split('_') ; assert len(l1)==2 , afck
+        phen, tsca= l1[0], l1[1]
+        assert phen in ('CIME', 'CITH', 'CIAC'), afck
+        assert tsca in ('RE', 'CX', 'FO', 'FT'), tsca
+        return phen, tsca
+
+
+    def check_AFCK(self,checker):
+    #---------------------------------------------
+        phen, tsca = self.u_veri1()
+        afck=self.AFCK.get()
+        nomo=afck[1].strip()
+        sd2=sd_modele(nomo); sd2.check(checker)
+        if afck[2].strip() != '' : assert phen=='CIME' and tsca=='FT', afck
+
+
+    def check_AFCI(self,checker):
+    #---------------------------------------------
+        phen, tsca = self.u_veri1()
+        afci=self.AFCI.get()
+        nbloc=afci[0]
+        assert len(afci)==3*nbloc+1 , afci
+        for k in range(nbloc) :
+            nuno =afci[3*k +1]
+            nucmp=afci[3*k +2]
+            assert afci[3*k +3] == 0 , (k,afci)
+            assert nuno > 0 , (k,afci)
+            assert nucmp> 0 , (k,afci)
+
+
+    def check_AFCV(self,checker):
+    #-------------------------------------------------
+        phen, tsca = self.u_veri1()
+        afci=self.AFCI.get()
+        nbloc=afci[0]
+        if not self.AFCV.exists :
+            assert tsca=='FT',tsca
+            afck=self.AFCK.get()
+            assert afck[2].strip() != '' , afck
+        else :
+            tsca2 = self.AFCV.type.strip()
+            assert self.AFCV.lonmax == nbloc , (nbloc,self.AFCV.lonmax)
+
+            if tsca == 'RE' :
+                assert tsca2=='R', tsca2
+            if tsca in ('FO', 'FT') :
+                assert tsca2=='K' , tsca2  # champ de fonctions
+            if tsca=='CX' :
+                assert tsca2=='C', tsca2
 
+            # vérification des fonctions :
+            if tsca in ( 'FO', 'FT')  :  # 'FO' : fonction ; 'FT' : il existe une fonction de 'INST'
+                afcv  = self.AFCV.get()
+                for fonc in afcv :
+                    sd2=sd_fonction(fonc); sd2.check(checker)
 
index f4588c6a124b10bf8e1bd827820f0a559a4bd128..d14300cfd153a6aaa6748e1291e87b67d43e1e5f 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_char_contact SD  DATE 09/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_char_contact SD  DATE 01/04/2008   AUTEUR ABBAS M.ABBAS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # ======================================================================
 
 from SD import *
+from SD.sd_champ import sd_champ
+from SD.sd_xfem import sd_modele_xfem, sd_contact_xfem
 
 class sd_char_contact(AsBase):
     nomj      =SDNom(fin=16)
 
+    FORMCO    = Facultatif(AsVI())
+
+    def exists(self):
+        # retourne True si la SD semble exister.
+        return self.FORMCO.exists
+
+
+    def formulation_xfem(self):
+        if not self.exists() : return False
+        iform = self.FORMCO.get()[0]
+        return iform == 3
+
+    def contact_xfem_actif(self):
+        if not self.formulation_xfem() : return False
+        return self.XNBASC.exists
+
     BAMACO    = Facultatif(AsVI())
     BANOCO    = Facultatif(AsVI())
     CARACF    = Facultatif(AsVR())
     COMAFO    = Facultatif(AsVR())
+    JEUSUR    = Facultatif(AsVR())
     CONVCO    = Facultatif(AsVI())
-    DIRCO     = Facultatif(AsVR())
+    DIRNOR    = Facultatif(AsVR())
+    DIRAPP    = Facultatif(AsVR())
     ECPDON    = Facultatif(AsVI())
-    FORMCO    = Facultatif(AsVI())
+    CARFRO    = Facultatif(AsVR())
     FROTE     = Facultatif(AsVR())
     JEUCON    = Facultatif(AsVR())
     JEUCOQ    = Facultatif(AsVR())
@@ -60,16 +80,66 @@ class sd_char_contact(AsBase):
     PNOMACO   = Facultatif(AsVI())
     PRANOCO   = Facultatif(AsVI())
     PSSNOCO   = Facultatif(AsVI())
+    PSANOFR   = Facultatif(AsVI())
     PSUMACO   = Facultatif(AsVI())
     PSUNOCO   = Facultatif(AsVI())
     PZONECO   = Facultatif(AsVI())
     RANOCO    = Facultatif(AsVI())
     SANSNQ    = Facultatif(AsVI())
     SSNOCO    = Facultatif(AsVI())
+    SANOFR    = Facultatif(AsVI())
     SYMECO    = Facultatif(AsVI())
     TABFIN    = Facultatif(AsVR())
     TANDEF    = Facultatif(AsVR())
     TANPOU    = Facultatif(AsVR())
     TOLECO    = Facultatif(AsVR())
-    XFEM      = Facultatif(AsVI())
+    xfem      = Facultatif(AsVI())
     XFIMAI    = Facultatif(AsVK8())
+    XNBASC    = Facultatif(AsVK24())
+    XNRELL    = Facultatif(AsVK24())
+    TANINI    = Facultatif(AsVR())
+    NORMCO    = Facultatif(AsVR())
+    TANGCO    = Facultatif(AsVR())  
+    EXCLFR    = Facultatif(AsVR())  
+    MODELX    = Facultatif(AsVK8(lonmax=1,))
+
+    # si contact xfem :
+    xfem      = Facultatif(sd_contact_xfem(SDNom(nomj='')))
+
+
+    # indirection vers les champs de .XNBASC :
+    # Question à Mickael :
+    #   la fonction suivante ne serait-elle pas mieux placée dans la classe sd_contact_xfem ?
+    def check_char_contact_xfem_XNBASC(self, checker):
+        if not self.contact_xfem_actif() : return
+        lnom  = self.XNBASC.get()
+        nbnom = self.XNBASC.lonuti
+        for k in range(nbnom) :
+            nom = lnom[k]
+            if not nom.strip(): continue
+            sd2 = sd_champ(nom)
+            sd2.check(checker)
+
+
+    # indirection vers les champs de .XNRELL :
+    # On ne vérifie rien pour l'instant
+    # Question à Mickael :
+    #   la fonction suivante ne serait-elle pas mieux placée dans la classe sd_contact_xfem ?
+    def check_char_contact_xfem_XNRELL(self, checker):
+        if not self.contact_xfem_actif() : return
+        lnom  = self.XNRELL.get()
+        nbnom = self.XNRELL.lonuti
+        for k in range(nbnom) :
+            nom = lnom[k]
+            oo  = AsObject(SDNom(nomj=nom,debut=0),genr='V', xous='S', type=Parmi('I','R'))
+            oo.check(checker)
+
+
+    # Verification MODELE xfem
+    def check_char_contact_xfem_MODELX(self, checker):
+        if not self.contact_xfem_actif() : return
+        nom = self.MODELX.get()[0]
+        sd2 = sd_modele_xfem(nom)
+        sd2.check(checker)
+
+
index c74c4a25d4b0470d1cfefa87e52090c040d160b4..1048b1771b8f30ec678ec62a71d6cd612e27c1ca 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF sd_char_meca SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_char_meca SD  DATE 01/04/2008   AUTEUR ABBAS M.ABBAS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
@@ -25,45 +25,82 @@ from SD.sd_carte import sd_carte
 from SD.sd_char_unilate import sd_char_unilate
 from SD.sd_char_contact import sd_char_contact
 
+
+class sd_char_gf_xx(AsBase):
+    nomj = SDNom(fin=19)
+    VALE = AsVR()
+    NCMP = AsVK8()
+
+
+class sd_char_grflu(AsBase):
+    nomj = SDNom(fin=19)
+
+    ABSC = AsVR()
+    APPL = AsVI()
+    GEOM = AsVR()
+    LIMA = AsVI()
+    LINO = AsVI()
+    NOMA = AsVK8()
+    VDIR = AsVR()
+
+
+class sd_char_chme(AsBase):
+    nomj = SDNom(fin=13)
+
+    MODEL_NOMO = AsVK8(SDNom(nomj='.MODEL.NOMO'), lonmax=1, )
+
+    LIGRE = Facultatif(sd_ligrel())
+
+    CIMPO = Facultatif(sd_carte())
+    CMULT = Facultatif(sd_carte())
+    EPSIN = Facultatif(sd_carte())
+    F1D1D = Facultatif(sd_carte())
+    F1D2D = Facultatif(sd_carte())
+    F1D3D = Facultatif(sd_carte())
+    F2D2D = Facultatif(sd_carte())
+    F2D3D = Facultatif(sd_carte())
+    F3D3D = Facultatif(sd_carte())
+    FCO2D = Facultatif(sd_carte())
+    FCO3D = Facultatif(sd_carte())
+    FELEC = Facultatif(sd_carte())
+    FL101 = Facultatif(sd_carte())
+    FL102 = Facultatif(sd_carte())
+    FLUX  = Facultatif(sd_carte())
+    FORNO = Facultatif(sd_carte())
+    IMPE  = Facultatif(sd_carte())
+    ONDE  = Facultatif(sd_carte())
+    PESAN = Facultatif(sd_carte())
+    PRESS = Facultatif(sd_carte())
+    ROTAT = Facultatif(sd_carte())
+    SIGIN = Facultatif(sd_carte())
+    VNOR  = Facultatif(sd_carte())
+
+    # si GRAPPE_FLUIDE :
+    GRFLU = Facultatif(sd_char_grflu())
+    GF_AS = Facultatif(sd_char_gf_xx())
+    GF_DH = Facultatif(sd_char_gf_xx())
+    GF_GR = Facultatif(sd_char_gf_xx())
+    GF_MA = Facultatif(sd_char_gf_xx())
+    GF_MC = Facultatif(sd_char_gf_xx())
+    GF_PC = Facultatif(sd_char_gf_xx())
+    GF_TG = Facultatif(sd_char_gf_xx())
+
+    VEASS = Facultatif(AsVK8(lonmax=1, ))
+    EVOL_CHAR  = Facultatif(AsVK8(SDNom(nomj='.EVOL.CHAR'), lonmax=1, ))
+    TEMPE_TEMP = Facultatif(AsVK8(SDNom(nomj='.TEMPE.TEMP'), lonmax=1, ))
+
+
 class sd_char_meca(AsBase):
     nomj = SDNom(fin=8)
 
     TYPE            = AsVK8(lonmax=1)
-    CHME_MODEL_NOMO = AsVK8(SDNom(nomj='.CHME.MODEL.NOMO'), lonmax=1, )
-
-    chme_ligre = Facultatif(sd_ligrel(SDNom(nomj='.CHME.LIGRE')))
-
-    chme_cimpo = Facultatif(sd_carte(SDNom(nomj='.CHME.CIMPO')))
-    chme_cmult = Facultatif(sd_carte(SDNom(nomj='.CHME.CMULT')))
-    chme_epsin = Facultatif(sd_carte(SDNom(nomj='.CHME.EPSIN')))
-    chme_f1d1d = Facultatif(sd_carte(SDNom(nomj='.CHME.F1D1D')))
-    chme_f1d2d = Facultatif(sd_carte(SDNom(nomj='.CHME.F1D2D')))
-    chme_f1d3d = Facultatif(sd_carte(SDNom(nomj='.CHME.F1D3D')))
-    chme_f2d2d = Facultatif(sd_carte(SDNom(nomj='.CHME.F2D2D')))
-    chme_f2d3d = Facultatif(sd_carte(SDNom(nomj='.CHME.F2D3D')))
-    chme_f3d3d = Facultatif(sd_carte(SDNom(nomj='.CHME.F3D3D')))
-    chme_fco2d = Facultatif(sd_carte(SDNom(nomj='.CHME.FCO2D')))
-    chme_fco3d = Facultatif(sd_carte(SDNom(nomj='.CHME.FCO3D')))
-    chme_felec = Facultatif(sd_carte(SDNom(nomj='.CHME.FELEC')))
-    chme_fl101 = Facultatif(sd_carte(SDNom(nomj='.CHME.FL101')))
-    chme_fl102 = Facultatif(sd_carte(SDNom(nomj='.CHME.FL102')))
-    chme_flux  = Facultatif(sd_carte(SDNom(nomj='.CHME.FLUX')))
-    chme_forno = Facultatif(sd_carte(SDNom(nomj='.CHME.FORNO')))
-    chme_impe  = Facultatif(sd_carte(SDNom(nomj='.CHME.IMPE')))
-    chme_onde  = Facultatif(sd_carte(SDNom(nomj='.CHME.ONDE')))
-    chme_pesan = Facultatif(sd_carte(SDNom(nomj='.CHME.PESAN')))
-    chme_press = Facultatif(sd_carte(SDNom(nomj='.CHME.PRESS')))
-    chme_rotat = Facultatif(sd_carte(SDNom(nomj='.CHME.ROTAT')))
-    chme_sigin = Facultatif(sd_carte(SDNom(nomj='.CHME.SIGIN')))
-    chme_vnor  = Facultatif(sd_carte(SDNom(nomj='.CHME.VNOR')))
-
-    unilate = Facultatif(sd_char_unilate(SDNom(nomj='.UNILATE')))
-    contact = Facultatif(sd_char_contact(SDNom(nomj='.CONTACT')))
-
-    CHME_EVOL_CHAR = Facultatif(AsVK8(SDNom(nomj='.CHME.EVOL.CHAR'), lonmax=1, ))
-    CHME_VEASS = Facultatif(AsVK8(SDNom(nomj='.CHME.VEASS'), lonmax=1, ))
+
+    CHME = Facultatif(sd_char_chme())
+
+    UNILATE = Facultatif(sd_char_unilate())
+    CONTACT = Facultatif(sd_char_contact())
+
     TRANS01 = Facultatif(AsVR(lonmax=6, ))
-    CHME_TEMPE_TEMP = Facultatif(AsVK8(SDNom(nomj='.CHME.TEMPE.TEMP'), lonmax=1, ))
     TRANS02 = Facultatif(AsVR(lonmax=6, ))
     LISMA01 = Facultatif(AsVI(lonmax=12, ))
     LISMA02 = Facultatif(AsVI(lonmax=12, ))
index 782b9b0504c9ada85b0784c96f9fcd447f447c7d..37cadd6d429f87f09bf17c56c9af84698f7b2ea1 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF sd_char_ther SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_char_ther SD  DATE 17/07/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
@@ -24,28 +24,47 @@ from SD.sd_ligrel import sd_ligrel
 from SD.sd_cham_elem import sd_cham_elem
 from SD.sd_carte import sd_carte
 from SD.sd_champ import sd_champ
+from SD.sd_fonction import sd_fonction
+
+
+class sd_char_chth(AsBase):
+#--------------------------------
+    nomj = SDNom(fin=13)
+
+    CONVE_VALE = Facultatif(AsVK8(SDNom(nomj='.CONVE.VALE'), lonmax=1))
+    MODEL_NOMO = AsVK8(SDNom(nomj='.MODEL.NOMO'), lonmax=1)
+    LIGRE      = Facultatif(sd_ligrel())
+
+    SOURE = Facultatif(sd_champ(SDNom(nomj='.SOURE')))  # pour l'instant : sd_carte ou sd_cham_elem
+
+    CIMPO = Facultatif(sd_carte())
+    CMULT = Facultatif(sd_carte())
+    COEFH = Facultatif(sd_carte())
+    FLUNL = Facultatif(sd_carte())
+    FLUR2 = Facultatif(sd_carte())
+    FLURE = Facultatif(sd_carte())
+    GRAIN = Facultatif(sd_carte())
+    HECHP = Facultatif(sd_carte())
+    RAYO  = Facultatif(sd_carte())
+    T_EXT = Facultatif(sd_carte())
+
+
+    # parfois, TEMP_IMPO crée une carte de sd_fonction :
+    # il faut alors vérifier ces sd_fonction
+    def check_CIMPO_FONC(self, checker):
+        if self.CIMPO.VALE.ltyp != 24 : return
+        vale=self.CIMPO.VALE.get()
+        for x in vale :
+            if x.strip()=='' : continue
+            nomfon=x[:19]
+            sd2=sd_fonction(nomfon) ; sd2.check(checker)
+
 
 
 class sd_char_ther(AsBase):
 #--------------------------------
     nomj = SDNom(fin=8)
-
-    CHTH_CONVE_VALE = Facultatif(AsVK8(SDNom(nomj='.CHTH.CONVE.VALE'), lonmax=1))
-    CHTH_MODEL_NOMO = AsVK8(SDNom(nomj='.CHTH.MODEL.NOMO'), lonmax=1)
-    TYPE            = AsVK8(lonmax=1)
-    chth_ligre      = Facultatif(sd_ligrel(SDNom(nomj='.CHTH.LIGRE')))
-
-    chth_soure = Facultatif(sd_champ(SDNom(nomj='.CHTH.SOURE')))  # pour l'instant : sd_carte ou sd_cham_elem
-
-    chth_cimpo = Facultatif(sd_carte(SDNom(nomj='.CHTH.CIMPO')))
-    chth_cmult = Facultatif(sd_carte(SDNom(nomj='.CHTH.CMULT')))
-    chth_coefh = Facultatif(sd_carte(SDNom(nomj='.CHTH.COEFH')))
-    chth_flunl = Facultatif(sd_carte(SDNom(nomj='.CHTH.FLUNL')))
-    chth_flur2 = Facultatif(sd_carte(SDNom(nomj='.CHTH.FLUR2')))
-    chth_flure = Facultatif(sd_carte(SDNom(nomj='.CHTH.FLURE')))
-    chth_grain = Facultatif(sd_carte(SDNom(nomj='.CHTH.GRAIN')))
-    chth_hechp = Facultatif(sd_carte(SDNom(nomj='.CHTH.HECHP')))
-    chth_rayo  = Facultatif(sd_carte(SDNom(nomj='.CHTH.RAYO')))
-    chth_t_ext = Facultatif(sd_carte(SDNom(nomj='.CHTH.T_EXT')))
+    TYPE      = AsVK8(lonmax=1)
+    CHTH      = sd_char_chth()
 
 
index e23f01a4e8cdbf7b6c63cae930072fd0c57de986..330ce99631bc8d4ca2f70b6fa45afff80852e40d 100644 (file)
@@ -1,34 +1,34 @@
-#@ MODIF sd_char_unilate SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_char_unilate SD  DATE 22/10/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
 
 class sd_char_unilate(AsBase):
     nomj = SDNom(fin=16)
-    COEFD = AsVR()
-    COEFG = AsVR()
     DIMECU = AsVI()
     LISNOE = AsVI()
     POINOE = AsVI()
     METHCU = AsVI(lonmax=1,)
     PARACU = AsVR(lonmax=1,)
     CMPGCU = AsVK8()
+    COEFD = AsVect(ltyp=8, type=Parmi('K','R'))
+    COEFG = AsVect(ltyp=8, type=Parmi('K','R'))
 
 
index 0dd66b3c529ebf959411499a6ca0c4380764c9ce..b7ed032f56b5c96c312f2c637e41b3eee0398f7a 100644 (file)
@@ -1,24 +1,31 @@
-#@ MODIF sd_compor SD  DATE 23/04/2007   AUTEUR PROIX J-M.PROIX 
+#@ MODIF sd_compor SD  DATE 19/11/2007   AUTEUR PROIX J-M.PROIX 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
+from SD.sd_mater import sd_mater
+
+# Remarque :
+#------------
+# la sd_compor est produite par la seule commande DEFI_COMPOR.
+# C'est pourquoi, on fera appel parfois pour la décrire au vocabulaire de cette
+# commande.
 
 class sd_compor(AsBase):
     nomj = SDNom(fin=8)
@@ -27,3 +34,154 @@ class sd_compor(AsBase):
     CPRR = Facultatif(AsVR())
 
 
+    def check_tout(self,checker) :
+    #-------------------------------
+        cpri=self.CPRI.get()
+        type=cpri[0]
+        assert type in (1,2,3) , CPRI
+        if type == 1 :
+            self.monocristal(cpri,checker)
+        if type == 2 :
+            self.polycristal(cpri,checker)
+        if type == 3 :
+            self.multifibres(cpri,checker)
+
+
+
+    def monocristal(self,cpri,checker) :
+    #------------------------------------
+        nboccm=cpri[4]
+        nvi   =cpri[2]
+        nbsys=(nvi-9)/3
+        assert nvi==9+3*nbsys , (nvi, nbsys, cpri)
+        cprk=self.CPRK.get_stripped()
+
+        # vérif existence et longueur
+        assert len(cpri)==7, cpri
+        assert len(cprk)==5*nboccm+1, (cpri,cprk)
+        assert not self.CPRR.get()
+
+        # vérif CPRI :
+        #-------------
+        assert cpri[1] == 1   ,cpri
+        assert cpri[2] == nvi ,cpri
+        assert cpri[3] == 1   ,cpri
+        assert cpri[4] > 0    ,cpri
+        assert cpri[5] == 1   ,cpri
+        assert cpri[6] == nvi ,cpri
+
+        # vérif CPRK :
+        #-------------
+        elas=cprk[5*nboccm]
+        assert elas in ('ELAS', 'ELAS_ORTH')  ,cprk
+        for k in range(nboccm):
+            famil     =cprk[5*k+0]
+            mater     =cprk[5*k+1]
+            ecoul     =cprk[5*k+2]
+            ecro_isot =cprk[5*k+3]
+            ecro_cine =cprk[5*k+4]
+            sd2=sd_mater(mater) ; sd2.check(checker)
+            assert famil in ('BASAL','BCC24','PRISMATIQUE','OCTAEDRIQUE','PYRAMIDAL1',
+                            'PYRAMIDAL2','CUBIQUE1','CUBIQUE2','MACLAGE','JOINT_GRAIN',
+                            'RL','UNIAXIAL')
+            assert ecoul in ('ECOU_VISC1','ECOU_VISC2','ECOU_VISC3')
+            assert ecro_isot in ('ECRO_ISOT1','ECRO_ISOT2')
+            assert ecro_cine in ('ECRO_CINE1','ECRO_CINE2')
+
+
+
+    def polycristal(self,cpri,checker) :
+    #------------------------------------
+        nbphases=cpri[1]
+        assert nbphases > 0 , cpri
+        lgcprk  =cpri[6+3*nbphases-2]
+        assert lgcprk > 0 , cpri
+        cprk=self.CPRK.get_stripped()
+        cprr=self.CPRR.get()
+
+        # vérif existence et longueur
+        #------------------------------
+        assert len(cpri)==6+3*nbphases, (cpri,nbphases)
+        assert len(cprr)==2+4*nbphases, (cpri,cprr,nbphases)
+        assert len(cprk)==lgcprk, (cpri,cprk)
+
+        # vérif CPRI :
+        #-------------
+        nvitot=cpri[2]
+        assert nvitot >= 0        ,cpri
+        nbmono=cpri[3]
+        assert nbmono > 0         ,cpri
+        nbpara  =cpri[6+3*nbphases-1]
+        assert nbpara in (0,1,2)  ,cpri
+        for k in range(nbphases):
+            nbfam1 = cpri[4+3*k+0]
+            numono = cpri[4+3*k+1]
+            nvi1   = cpri[4+3*k+2]
+            assert nbfam1 > 0     ,cpri
+            assert numono > 0  and numono <= nbmono   ,(cpri,nbmono)
+            assert nvi1   >=0     ,cpri
+
+        # vérif CPRR :
+        #-------------
+        frac_tot=0.
+        for k in range(nbphases):
+            frac     =cprr[4*k+0]
+            assert frac >= 0. and frac <= 1.  ,(cprr,k)
+            frac_tot=frac_tot+frac
+            for dir in range(1,4):
+                angl     =cprr[4*k+dir]
+                assert angl >=0. and angl <=360. , (angl,dir)
+        assert frac_tot > 0.99 and frac_tot < 1.01
+
+        # vérif CPRK :
+        #-------------
+        locali   =cprk[0]
+        assert locali in ('BZ','BETA')  ,(locali,cprk)
+        decal=0
+        for k in range(nbmono):
+            mono1 =cprk[0+decal+1]
+            sd2=sd_compor(mono1) ; sd2.check(checker)
+            nbfam1=int(cprk[0+decal+2])
+            assert nbfam1 > 0 , (nbfam1,k,decal,cprk)
+            decal=decal+2+5*nbfam1+1
+            # on pourrait encore vérifier que le .CPRK de mono1 a bien été recopié
+            # mais il faut bien s'arreter ...
+
+
+
+    def multifibres(self,cpri,checker) :
+    #------------------------------------
+        nbgmax=cpri[2]
+        cprk=self.CPRK.get_stripped()
+
+        # vérif existence et longueur
+        assert len(cpri)==3, cpri
+        assert len(cprk)==6*nbgmax+1, (cpri,cprk)
+        assert not self.CPRR.get()
+
+        # vérif CPRI :
+        #-------------
+        assert cpri[1] > 0, cpri
+        assert cpri[2] > 0, cpri
+
+        # vérif CPRK :
+        #-------------
+        mater=cprk[6*nbgmax]
+        assert mater != '', cprk
+        sd2=sd_mater(mater) ; sd2.check(checker)
+        for k in range(nbgmax):
+            grfib1     =cprk[6*k+0]
+            mater1     =cprk[6*k+1]
+            loifib1    =cprk[6*k+2]
+            algo1d     =cprk[6*k+3]
+            deform     =cprk[6*k+4]
+            nbfib=    int(cprk[6*k+5])
+            assert grfib1 != '' , cprk
+            assert mater1 != '' , cprk
+            sd2=sd_mater(mater1) ; sd2.check(checker)
+            assert loifib1 != '' , cprk
+            assert algo1d  in ('ANALYTIQUE','DEBORST') , cprk
+            assert deform  in ('PETIT','PETIT_REAC','REAC_GEOM') , cprk
+            assert nbfib > 0      , cprk
+
+
index 98f4c7bc50c9817a5a71e8e0846bd5e117c7019c..bacae34fa28a264a54daf277debd666ba5a4d750 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_feti SD  DATE 09/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_feti SD  DATE 23/10/2007   AUTEUR BOITEAU O.BOITEAU 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -36,7 +36,11 @@ class sd_feti1(AsBase):
     FETA = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
     FETJ = AsVI()
     FETI = AsVI()
-    FETH = AsVI(lonmax=4, )
+    FETH = AsVI()
+    FCFI = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+    FCFL = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='K', ltyp=24, )
+    FCFM = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+    FCFN = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
 
 
 class sd_feti(AsBase):
index 4167db53c49939f1ef6bcacecb73e8966be86fc7..fb9c0b4f547b81a2b2ad99dea323a219464d495f 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_fonction SD  DATE 09/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_fonction SD  DATE 19/02/2008   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -23,10 +23,26 @@ from SD.sd_titre import sd_titre
 from SD.sd_util import *
 
 
-class sd_fonction(sd_titre):
+#----------------------------------------------------------------
+# définition de 3 classes :
+#  sd_formule        (objets python + jeveux)
+#  sd_fonction_aster (objets jeveux)
+#  sd_fonction       (chapeau des 2 classes précédentes)
+#----------------------------------------------------------------
+
+
+
+class sd_formule(AsBase):
 #--------------------------------------
     nomj = SDNom(fin=19)
-    PROL = AsVK16()
+    PROL = AsVK24(lonmax=6, )
+    NOVA = AsVK8()
+
+
+class sd_fonction_aster(sd_titre):
+#--------------------------------------
+    nomj = SDNom(fin=19)
+    PROL = AsVK24()
     VALE = AsObject(acces='NU', sd_stockage='CONTIG', modelong='VARIABLE', type='R', xous=Parmi('S', 'X'), genr='V', ltyp=8, )
     PARA = Facultatif(AsVR())
 
@@ -43,14 +59,14 @@ class sd_fonction(sd_titre):
         assert prol , self
         typfon= prol[0].strip()
         assert typfon in ('CONSTANT', 'FONCTION', 'FONCT_C', 'NAPPE', 'INTERPRE')  ,prol
-
        #ltabul = True : la fonction est tabulée (et non interpretée)
         ltabul = typfon != 'INTERPRE'
 
         if typfon == 'NAPPE' :
-            assert len(prol) > 6  , (prol,self)
+            assert len(prol) > 7  , (prol,self)
         else :
-            assert len(prol) == 5  , (prol,self)
+            # tester que le prol[5] est bien le nom de la fonction 
+            assert len(prol) == 6  , (prol,self)
 
         if ltabul :  # type d'interpolation
             interp= prol[1].strip()
@@ -70,14 +86,14 @@ class sd_fonction(sd_titre):
             assert prolgd[1] in ('E', 'C', 'L', 'I'), prol
 
         if typfon == 'NAPPE' :
-            nf= (len(prol) - 6)/2
-            assert len(prol)==6+2*nf, prol
+            nf= (len(prol) - 7)/2
+            assert len(prol)==7+2*nf, prol
             # 1er paramètre de la nappe
-            assert prol[5].strip() != ''  , prol
+            assert prol[6].strip() != ''  , prol
 
             for kf in range(nf):
-                interp= prol[5+2*kf+1].strip()
-                prolgd= prol[5+2*kf+2].strip()
+                interp= prol[6+2*kf+1].strip()
+                prolgd= prol[6+2*kf+2].strip()
                 assert interp[:3] in ('NON', 'LIN', 'LOG') , prol
                 assert interp[4:] in ('NON', 'LIN', 'LOG') , prol
                 assert prolgd[0] in ('E', 'C', 'L', 'I'), prol
@@ -131,3 +147,20 @@ class sd_fonction(sd_titre):
             assert sdu_monotone(para) in (1,),(para,self)
         vale=self.VALE.get()
         assert  len(para)==len(vale.keys()),self
+
+
+class sd_fonction(sd_titre):
+#---------------------------
+    nomj = SDNom(fin=19)
+    PROL = AsVK24()
+    NOVA = Facultatif(AsVK8())
+    VALE = Facultatif(AsObject())
+    PARA = Facultatif(AsVR())
+
+    def check_1(self,checker) :
+        nom=self.nomj()[:19]
+        if self.NOVA.exists :
+            sd2=sd_formule(nom) ; sd2.check()
+        else :
+            sd2=sd_fonction_aster(nom) ; sd2.check()
+
index 37aa650cb3d0daaaa0a018ea77eafcee5fc1b27c..5b7a01a3a27266e1193e1084e277677e3c058152 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_fond_fiss SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_fond_fiss SD  DATE 08/01/2008   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -26,6 +26,8 @@ class sd_fond_fiss(AsBase):
     NORMALE = Facultatif(AsVR(lonmax=3, ))
     FOND_______TYPE = AsVK8(SDNom(nomj='.FOND      .TYPE'), lonmax=1, )
     FOND_______NOEU = AsVK8(SDNom(nomj='.FOND      .NOEU'), )
+    FONDSUP____NOEU = Facultatif(AsVK8(SDNom(nomj='.FOND_SUP  .NOEU'), ))
+    FONDINF____NOEU = Facultatif(AsVK8(SDNom(nomj='.FOND_INF  .NOEU'), ))
     DTAN_EXTREMITE = Facultatif(AsVR(lonmax=3, ))
     INFNORM____NOEU = Facultatif(AsVK8(SDNom(nomj='.INFNORM   .NOEU'), ))
     DTAN_ORIGINE = Facultatif(AsVR(lonmax=3, ))
index e5ae2174a5e958f79393851e694229d9bfa3c608..e15034d9195a72d3f68f669dab071ef51a9ff8ee 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF sd_gfibre SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_gfibre SD  DATE 10/07/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
@@ -27,6 +27,24 @@ class sd_gfibre(sd_titre):
     nomj = SDNom(fin=8)
     POINTEUR          = AsVI()
     CARFI             = AsVR()
-    NOMS_GROUPES      = AsVK8()
+    NOMS_GROUPES      = AsPn(ltyp=8)
     NB_FIBRE_GROUPE   = AsVI()
 
+
+    def check_dimension(self,checker) :
+        nbgf=self.NOMS_GROUPES.nommax
+        assert self.NB_FIBRE_GROUPE.lonmax == nbgf
+        assert self.POINTEUR.lonmax == nbgf
+
+
+    def check_CARFI(self,checker) :
+        nbgf=self.NOMS_GROUPES.nommax
+        pointeur=self.POINTEUR.get()
+        nb_fibre=self.NB_FIBRE_GROUPE.get()
+        nbfib_tot=0
+        for igf in range(nbgf) :
+            assert pointeur[igf]==3*nbfib_tot +1 , (igf, nbfib_tot, pointeur[igf])
+            nbfib=nb_fibre[igf]
+            nbfib_tot=nbfib_tot+nbfib
+        assert self.CARFI.lonmax == 3*nbfib_tot , (nbfib_tot,self.CARFI.lonmax)
+
index 75d5878d30da4cd3947d3377f0e60f8174d4880f..1c5721427ddde6480a41247ad50ae889d185e188 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_interf_dyna_clas SD  DATE 09/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_interf_dyna_clas SD  DATE 19/06/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -27,31 +27,87 @@ from SD.sd_util import *
 class sd_interf_dyna_clas(AsBase):
 #---------------------------------------
     nomj = SDNom(fin=8)
-    IDC_NOMS = AsObject(genr='N', xous='S', type='K', ltyp=8, )
-    IDC_DDAC = AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+    IDC_NOMS    = AsObject(genr='N', xous='S', type='K', ltyp=8, )
+    IDC_DDAC    = AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', )
     IDC_DY_FREQ = AsVR(lonmax=1, )
-    IDC_LINO = AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', )
-    IDC_TYPE = AsVK8()
-    IDC_DESC = AsVI(lonmax=5, )
-    IDC_DEFO = AsVI()
-    IDC_REFE = AsVK24(lonmax=3, )
+    IDC_LINO    = AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+    IDC_TYPE    = AsVK8()
+    IDC_DESC    = AsVI(lonmax=5, )
+    IDC_DEFO    = AsVI()
+    IDC_REFE    = AsVK24(lonmax=3, )
 
 
-    def check_interf_dyna_class_1(self,checker):
-        refe=self.IDC_REFE.get()
-        desc=self.IDC_DESC.get()
+    def check_coherence_longueurs(self,checker):
+        noms=self.IDC_NOMS.get()
+        type=self.IDC_TYPE.get()
+        lino=self.IDC_LINO.get()
+        ddac=self.IDC_DDAC.get()
+        nb_intf=len(noms)
+        assert nb_intf > 0 , noms
+        assert len(type) == nb_intf, (nb_intf,type)
+        assert len(lino.keys()) == nb_intf, (nb_intf,lino)
+        assert len(ddac.keys()) == nb_intf, (nb_intf,ddac)
+
 
+    def check_REFE(self,checker):
+        refe=self.IDC_REFE.get()
         sd2=sd_maillage(refe[0]) ; sd2.check(checker)
         sd2=sd_nume_ddl(refe[1]) ; sd2.check(checker)
-        sdu_compare(self.IDC_DESC, checker, refe[2].strip(), '==', '', comment='REFE[2]')
+        assert refe[2].strip() == '' , refe
+
+
+    def check_DESC(self,checker):
+        desc=self.IDC_DESC.get()
+        assert desc[0] == 1 , desc
+        assert desc[1] >2 and desc[1] <10 , desc
+        assert desc[2] >60 and desc[2] <300 , desc
+        assert desc[3] >0 and desc[3] <500 , desc
+        assert desc[4] >0  , desc
+        nomgd=sdu_nom_gd(desc[3]).strip()
+        assert nomgd == 'DEPL_R', (nomgd, desc)
+
+
+    def check_NOMS(self,checker):
+        # il n'y a rien à vérifier : un pointeur de noms contient
+        # toujours des noms "non blancs" et "tous différents"
+        pass
 
-        nomgd=sdu_nom_gd(desc[3])
-        sdu_compare(self.IDC_DESC, checker, nomgd, '==',  'DEPL_R', comment='DESC[3]')
 
-        sdu_compare(self.IDC_DESC, checker, desc[0], '==',  1, comment='DESC[0]')
-        sdu_compare(self.IDC_DESC, checker, desc[4], '>',   0, comment='DESC[4]')
+    def check_TYPE(self,checker):
+        type=self.IDC_TYPE.get()
+        for t1 in type :
+            assert t1.strip() in ('CRAIGB', 'MNEAL', 'CB_HARMO', 'AUCUN'), type
 
+
+    def check_LINO_DDAC(self,checker):
+        lino=self.IDC_LINO.get()
+        ddac=self.IDC_DDAC.get()
+        desc=self.IDC_DESC.get()
+        nbec=desc[1]
+        nb_intf=len(lino.keys())
+
+        for kintf in range(nb_intf) :
+            llino=lino.values()[kintf]
+            lddac=ddac.values()[kintf]
+            nbno=len(llino)
+            assert len(lddac)==nbno*nbec , (lino,ddac)
+            for nuno in llino :
+                assert nuno > 0 , lino
+
+
+    def check_FREQ(self,checker):
         freq=self.IDC_DY_FREQ.get()
-        sdu_compare(self.IDC_DY_FREQ, checker, freq[0], '>',  0., comment='FREQ[0]')
+        assert freq[0] >=0 , freq
+
+
+    def check_DEFO(self,checker):
+        defo=self.IDC_DEFO.get()
+        desc=self.IDC_DESC.get()
+        nbec=desc[1]
+        nbnot=len(defo)/(nbec+2)
+        assert len(defo)==nbnot*(nbec+2), defo
+        for k in range(nbnot) :
+            assert defo[k] > 0 , defo
+
+        assert sdu_monotone(defo[nbnot:2*nbnot]) in (1,0) , (nbnot,nbec,defo)
 
-        # nbint = ??? à finir PB_AJACOT
index 0bf88791e108f3bb068dac42b891e17112272843..f31f652615531d3adebb4860daefd3fc02a67609 100644 (file)
@@ -1,29 +1,30 @@
-#@ MODIF sd_l_charges SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_l_charges SD  DATE 17/07/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
 
 class sd_l_charges(AsBase):
     nomj = SDNom(fin=19)
-    INFC = AsVI(SDNom(debut=19), )
-    LCHA = AsVK24(SDNom(debut=19), )
-    FCHA = AsVK24(SDNom(debut=19), )
+    INFC = AsVI()
+    LCHA = AsVK24()
+    FCHA = AsVK24()
+    FCSS = Facultatif(AsVK24())
 
 
index 26b31e352ed883128094bf5ba2ec0973ea418b6e..46a178fca912021701a5df1649ef15b4d8b93a76 100644 (file)
@@ -1,34 +1,83 @@
-#@ MODIF sd_ligrel SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_ligrel SD  DATE 10/07/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
 
 class sd_ligrel(AsBase):
     nomj = SDNom(fin=19)
-    LGNS = Facultatif(AsVI(SDNom(debut=19), ))
-    NOMA = AsVK8(SDNom(debut=19), lonmax=1, docu=Parmi('ACOU', 'MECA', 'THER'), )
-    NEMA = Facultatif(AsColl(SDNom(debut=19), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', ))
-    LIEL = Facultatif(AsColl(SDNom(debut=19), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', ))
-    PRNS = Facultatif(AsVI(SDNom(debut=19), ))
-    PRNM = Facultatif(AsVI(SDNom(debut=19), ))
-    NBNO = AsVI(SDNom(debut=19), lonmax=1, )
-    REPE = Facultatif(AsVI(SDNom(debut=19), ))
+
+    LGRF = AsVK8(lonmax=1, docu=Parmi('ACOU', 'MECA', 'THER'), )
+    NBNO = AsVI(lonmax=1,)
+    PRNM = AsVI()
+
+    # AU_MOINS_UN : LIEL, SSSA
+    # LIEL : il existe des éléments finis
+    # SSSA : il existe des sous-structures statiques
+    LIEL = Facultatif(AsColl( acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', ))
+    SSSA = Facultatif(AsVI())
+    # ENSEMBLE  : LIEL, REPE
+    REPE = Facultatif(AsVI())
+
+    # si mailles tardives :
+    NEMA = Facultatif(AsColl( acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', ))
+    # si noeuds tardifs :
+    PRNS = Facultatif(AsVI())
+    LGNS = Facultatif(AsVI())
+
+
+    def exists(self):
+        # retourne True si la SD semble exister.
+        return self.LGRF.exists
+
+
+    def check_presence(self,checker):
+        if not self.exists() : return
+        exi_liel=self.LIEL.exists
+        exi_sssa=self.SSSA.exists
+        exi_repe=self.REPE.exists
+        exi_nema=self.NEMA.exists
+        exi_prns=self.PRNS.exists
+        exi_lgns=self.LGNS.exists
+
+        # AU_MOINS_UN : .LIEL, .SSSA
+        assert exi_liel or exi_sssa
+
+        # SI .LIEL AU_MOINS_UN : .REPE, .NEMA
+        if exi_liel :
+            assert exi_repe or exi_nema
+
+        # .REPE => .LIEL
+        if exi_repe : assert exi_liel
+
+        # .NEMA => .LIEL
+        if exi_nema : assert exi_liel
+
+        # noeuds tardifs => .PRNS .LGNS et .NEMA
+        nb_no_tard= self.NBNO.get()[0]
+        if nb_no_tard > 0 :
+            assert exi_prns
+            assert exi_lgns
+            assert exi_nema
+            assert self.LGNS.lonmax >= nb_no_tard   # .LGNS est surdimensionné
+            nbec= self.PRNS.lonmax / nb_no_tard
+            assert self.PRNS.lonmax == nb_no_tard * nbec , (nbec, nb_no_tard)
+            assert nbec >= 1 and nbec < 10 , nbec
 
 
index 86ccd30e8f8dfe47681223d289827601ef6a13e1..a0d2f416fb7301e4146999d0e54c7a9ee9f9d144 100644 (file)
@@ -1,25 +1,26 @@
-#@ MODIF sd_listis SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_listis SD  DATE 22/10/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
 from SD.sd_titre import sd_titre
+from SD.sd_util import *
 
 
 class sd_listis(sd_titre):
@@ -30,3 +31,37 @@ class sd_listis(sd_titre):
     NBPA = AsVI()
     VALE = AsVI()
 
+
+    def check_1(self,checker):
+        nbpa=self.NBPA.get()
+        bint=self.BINT.get()
+        lpas=self.LPAS.get()
+        vale=self.VALE.get()
+
+        # cas général :
+        if len(vale) > 1 :
+            assert len(bint) == len(nbpa)+1
+            assert len(nbpa) == len(lpas)
+
+            n1=0
+            assert  vale[0] == bint[0]
+            for k in range(len(nbpa)) :
+                npas=nbpa[k]
+                assert npas > 0
+                n1 = n1 + npas
+                assert  vale[n1] == bint[k+1]
+
+            assert len(vale) == n1+1
+            assert sdu_monotone(vale) in (1,) , vale
+
+
+        # cas particulier :
+        if len(vale) == 1 :
+            assert len(bint) == 1
+            assert len(nbpa) == 1
+            assert len(lpas) == 1
+            assert  vale[0] == bint[0]
+            assert  nbpa[0] == 0, nbpa
+            assert  lpas[0] == 0, lpas
+
+
index 3b16649c3cf662dd5fc7f65e336373635e2a7d0e..0a31b3922a6463df86f52d1b08be6b0b45f7afd6 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF sd_listr8 SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_listr8 SD  DATE 10/07/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
@@ -31,3 +31,46 @@ class sd_listr8(sd_titre):
     VALE = AsVR()
 
 
+    def proche(self,a,b):
+        # retourne  1  si a est proche de b
+        # retourne -1  si a est loin de b
+        # retourne  0  si a = 0. (ou b = 0.)
+        if  a != 0. and b != 0. :
+           erreur= abs(a-b)/(abs(a)+abs(b))
+           if erreur < 1.e-12 :
+               return 1
+           else :
+               return -1
+        else :
+               return 0
+
+
+    def check_1(self,checker):
+        nbpa=self.NBPA.get()
+        bint=self.BINT.get()
+        lpas=self.LPAS.get()
+        vale=self.VALE.get()
+
+        # cas général :
+        if len(vale) > 1 :
+            assert len(bint) == len(nbpa)+1
+            assert len(nbpa) == len(lpas)
+
+            n1=0
+            assert self.proche(vale[0], bint[0]) in (1,0)
+            for k in range(len(nbpa)) :
+                npas=nbpa[k]
+                assert npas > 0
+                n1 = n1 + npas
+                assert self.proche(vale[n1],bint[k+1]) in (1,0) , (k+1,vale[n1], bint[k+1],)
+
+            assert len(vale) == n1+1
+
+        # cas particulier :
+        if len(vale) == 1 :
+            assert len(bint) == 1
+            assert len(nbpa) == 1
+            assert len(lpas) == 1
+            assert  vale[0] == bint[0]
+
+
index 7e94b73331b60346bf64eca28f0acca79734d58a..05bbea0fb2ff5d2cb8bbbaa931f1040415b53900 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_macr_elem_dyna SD  DATE 09/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_macr_elem_dyna SD  DATE 24/09/2007   AUTEUR DEVESA G.DEVESA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -51,9 +51,6 @@ class sd_macr_elem_dyna(AsBase):
 
     # rigidité, masse, amortissement condensés :
     nume     = sd_nume_ddl_gd(SDNom(nomj=''))
-    KP_EE    = Facultatif(AsVR())
-    MP_EE    = Facultatif(AsVR())
-    AP_EE    = Facultatif(AsVR())
 
     MAEL_RAID = sd_macr_elem_dyna_m()
     MAEL_MASS = sd_macr_elem_dyna_m()
index d61697cfdf9abf96cb32b913acee9c5ac2fe87eb..c9020c1bf0bfbba42497fdfb1336c2c10f19c5c0 100644 (file)
@@ -1,27 +1,28 @@
-#@ MODIF sd_macr_elem_stat SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_macr_elem_stat SD  DATE 27/11/2007   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
 
 from SD.sd_matr_asse_gd import sd_matr_asse_gd
 from SD.sd_stoc_lciel import sd_stoc_lciel
+from SD.sd_proj_mesu import sd_proj_mesu
 
 
 class sd_macr_elem_stat(AsBase):
@@ -33,21 +34,87 @@ class sd_macr_elem_stat(AsBase):
     REFM = AsVK8()
     LINO = AsVI()
     VARM = AsVR(lonmax=2)
-    CONX = Facultatif(AsVI())
+    CONX = Facultatif(AsVI()) # l'objet devient obligatoire dès l'étape de condensation de la rigidité
 
     # rigidité condensée :
     rigimeca = Facultatif(sd_matr_asse_gd(SDNom(nomj='.RIGIMECA', fin=19)))
-    KP_EE    = Facultatif(AsVR())
+    MAEL_RAID_VALE = Facultatif(AsVR())
     PHI_IE   = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='CONSTANT', type='R', ltyp=8))
 
     # masse condensée :
     massmeca = Facultatif(sd_matr_asse_gd(SDNom(nomj='.MASSMECA', fin=19)))
-    MP_EE    = Facultatif(AsVR())
+    MAEL_MASS_VALE = Facultatif(AsVR())
+
+    # amortissement condensé :
+    MAEL_AMOR_VALE = Facultatif(AsVR())
 
     # chargements condensés :
     LICA = Facultatif(AsColl(acces='NO', stockage='DISPERSE', modelong='CONSTANT', type='R', ltyp=8))
     LICH = Facultatif(AsColl(acces='NO', stockage='CONTIG', modelong='CONSTANT', type='K', ltyp=8))
 
+    # si utilisation de PROJ_MESU_MODAL :
+    PROJM = Facultatif(sd_proj_mesu())
+
+
+    def check_longueurs(self, checker):
+    #------------------------------------
+        # vérifs existence, longueurs, ...
+
+        desm=self.DESM.get()
+        refm=self.REFM.get()
+        assert desm[0]==0, desm
+        nbnoe, nbnoi, nddle, nddli, nbchar, nbcas, nlage, nlagl, nlagi  =desm[1:10]
+        assert nbnoe  >  0   ,desm
+        assert nbchar >= 0   ,desm
+
+        # si on n'a pas encore condensé la rigidité, certaines valeurs ne sont pas encore calculées :
+        if self.MAEL_RAID_VALE.exists :
+            assert nbnoi  >  0   ,desm
+            assert nddle  >  1   ,desm
+            assert nddli  >  0   ,desm
+            assert nbcas  >= 0   ,desm
+            assert nlage  >= 0   ,desm
+            assert nlagl  >= 0   ,desm
+            assert nlagi  >= 0   ,desm
+            assert self.CONX.lonmax == 3*(nbnoe+nlage+nlagl)  ,(desm,self.CONX.get())
+            assert refm[5] == 'OUI_RIGI'
+
+        assert self.REFM.lonmax == 9+nbchar    ,(desm,self.REFM.get())
+        assert self.LINO.lonmax == nbnoe       ,(desm,self.LINO.get())
+
+        # rigidité condensée :
+        if self.MAEL_RAID_VALE.exists :
+            assert self.MAEL_RAID_VALE.lonmax ==  (nddle*(nddle+1))/2
+
+            assert self.PHI_IE.exists
+            phi_ie=self.PHI_IE.get()      # on ne sait pas faire autrement que ramener l'objet entier ...
+            nlblph=len(phi_ie[1])/nddli   # nombre de lignes de phi_ie par bloc
+            assert self.PHI_IE.nmaxoc ==  (nddle-1)/nlblph +1 , (nddle, self.PHI_IE.nmaxoc)
+            for ke in phi_ie.keys() :
+                assert len(phi_ie[ke]) == nddli*nlblph  ,(nddli,nlblph,nddle,len(phi_ie[ke]),ke)
+
+        # masse condensée :
+        if self.MAEL_MASS_VALE.exists :
+            assert self.MAEL_MASS_VALE.lonmax ==  (nddle*(nddle+1))/2
+            assert refm[6] == 'OUI_MASS'
+
+        # amortissement condensé : (JP : je ne sais pas si ca peut exister ?)
+        if self.MAEL_AMOR_VALE.exists :
+            assert self.MAEL_AMOR_VALE.lonmax ==  (nddle*(nddle+1))/2
+            assert refm[7] == 'OUI_AMOR'
 
+        # chargements condensés :
+        if nbcas > 0 :
+            assert self.LICA.exists
+            assert self.LICA.nmaxoc >= nbcas
+            lica=self.LICA.get()
+            for k in lica.keys():
+                assert len(lica[k]) == 2*(nddli + nddle)
 
+            assert self.LICH.exists
+            assert self.LICH.nmaxoc == self.LICA.nmaxoc
+            assert self.LICH.nutioc == self.LICA.nutioc
+            lich=self.LICH.get()
+            for k in lich.keys():
+                assert len(lich[k]) >= nbchar + 1
 
index 71341b35eeb1ce427f465da5f6421c0bd69b8084..2ac6be121fe4fc264e8072a5a7abf1e6e5dfad8a 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF sd_maillage SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_maillage SD  DATE 06/05/2008   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
@@ -26,6 +26,13 @@ from SD.sd_carte import sd_carte
 from SD.sd_l_table import sd_l_table
 
 
+class sd_voisinage(AsBase):
+#-------------------------------
+    nomj = SDNom(fin=12)
+    PTVOIS = AsVI()
+    ELVOIS = AsVI()
+
+
 class sd_maillage(sd_titre):
 #-------------------------------
     nomj = SDNom(fin=8)
@@ -33,11 +40,11 @@ class sd_maillage(sd_titre):
     DIME = AsVI(lonmax=6, )
 
     # un sd_maillage a toujours des noeuds :
-    NOMNOE = AsObject(genr='N', xous='S', type='K', ltyp=8, )
-    coordo = sd_cham_no(SDNom(nomj='.COORDO'))
+    NOMNOE = AsPn(ltyp=8)
+    COORDO = sd_cham_no()
 
-    # normalement, un sd_maillage a toujours une "sd_l_table" mais POST_MAIL_XFEM ...
-    lt = Facultatif(sd_l_table(SDNom(nomj='')))
+    # normalement, un sd_maillage a toujours une "sd_l_table" contenant des caractéristiques géométriques :
+    lt = sd_l_table(SDNom(nomj=''))
 
     # si le sd_maillage a des groupes :
     GROUPENO = Facultatif(AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', ))
@@ -46,7 +53,7 @@ class sd_maillage(sd_titre):
     # si le sd_maillage a des mailles :
     CONNEX  = Facultatif(AsColl(acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', ))
     TYPMAIL = Facultatif(AsVI())
-    NOMMAI  = Facultatif(AsObject(genr='N', xous='S', type='K', ltyp=8, ))
+    NOMMAI  = Facultatif(AsPn(ltyp=8))
 
     # si le sd_maillage a des super-mailles :
     NOMACR  = Facultatif(AsVK8())
@@ -57,6 +64,60 @@ class sd_maillage(sd_titre):
     # si le sd_maillage est linéique (tube_GV) :
     abs_curv  = Facultatif(sd_carte(SDNom(nomj='.ABS_CURV')))
 
+    # Lorsque le sd_maillage sert de support a un sd_modele contenant des volumes finis :
+    VGE  = Facultatif(sd_voisinage())
+
     ADAPTATION = Facultatif(AsVI(lonmax=1, ))
     FORM = Facultatif(AsVK32(SDNom(debut=19), lonmax=2, ))
 
+
+    def u_dime(self):
+        dime=self.DIME.get()
+        nb_no    =dime[0]
+        nb_nl    =dime[1]
+        nb_ma    =dime[2]
+        nb_sm    =dime[3]
+        nb_sm_mx =dime[4]
+        dim_coor =dime[5]
+        return nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor
+
+# remarque :  la sd_maillage pouvant etre "volumineuse", on s'interdit (pour des raisons de temps CPU)
+#             de vérifier le contenu des gros objets.
+
+    def check_DIME(self,checker):
+        nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
+        assert nb_sm <= nb_sm_mx , (nb_sm, nb_sm_mx)
+        if nb_nl > 0 : assert nb_sm > 0
+        assert nb_no > 0  , nb_no
+        assert dim_coor in (2,3), dim_coor
+
+
+    def check_NOEUDS(self,checker):
+        nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
+        assert self.NOMNOE.nomuti == nb_no + nb_nl , (nb_no, nb_nl)
+        assert self.COORDO.VALE.lonmax == 3*nb_no , nb_no
+
+
+    def check_MAILLES(self,checker):
+        nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
+        if nb_ma == 0 : return
+        assert self.NOMMAI.nommax  == nb_ma , nb_ma
+        assert self.TYPMAIL.lonmax == nb_ma , nb_ma
+        assert self.CONNEX.nmaxoc  == nb_ma , nb_ma
+
+
+    def check_SSS(self,checker):
+        nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
+        if nb_sm == 0 : return
+        assert self.NOMACR.lonmax  == nb_sm    , nb_sm
+        assert self.PARA_R.lonmax  == 14*nb_sm , nb_sm
+        assert self.SUPMAIL.nmaxoc  == nb_sm    , nb_sm
+
+    def check_TYPL(self,checker):
+        nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
+        if nb_nl == 0 : return
+        assert self.TYPL.lonmax  == nb_nl    , nb_nl
+        typl=self.TYPL.get()
+        for k in typl :
+            assert  k in (-1, -2) , typl
+
index db07aab840e597cf335f14b8c2ab17c87bdef555..2f5443fa061d0f5986d28dbf6ef9a9237b6f1cfb 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_mater SD  DATE 09/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_mater SD  DATE 06/05/2008   AUTEUR MARKOVIC D.MARKOVIC 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 from SD import *
 
 from SD.sd_fonction import sd_fonction
-from SD.sd_compor1 import sd_compor1
 
-class sd_mater_RDEP(AsBase):
+
+
+class sd_mater_XDEP(AsBase):
 #---------------------------
     # on dirait une fonction, mais c'est plutot la concaténation de plusieurs fonctions
-    nomj = SDNom(fin=8)
-    PROL = AsVK16()
+    nomj = SDNom(fin=19)
+    PROL = AsVK24()
     VALE = AsVR()
 
 
+class sd_compor1(AsBase):
+#-----------------------
+    nomj = SDNom(fin=19)
+    VALC = AsVC(SDNom(), )
+    VALK = AsVK8(SDNom(), )
+    VALR = AsVR(SDNom(), )
+
+
+    # parfois, THER_NL crée une sd_fonction pour BETA
+    def check_compor1_i_VALK(self, checker):
+        nom= self.nomj().strip()
+        if nom[8:16]=='.THER_NL' :
+            valk=list(self.VALK.get_stripped())
+            if valk :
+                nbk2=self.VALK.lonuti
+                nbr=self.VALR.lonuti
+                nbc=self.VALC.lonuti
+                nbk=nbk2-nbr-nbc
+                k2=valk.index('BETA')
+                k=k2-nbr-nbc
+                nomfon=valk[nbr+nbc+nbk/2+k]
+                sd2=sd_fonction(nomfon) ; sd2.check(checker)
+        if nom[8:16]=='.GLRC_DA' :
+            valk=list(self.VALK.get_stripped())
+            if valk :
+                nbk2=self.VALK.lonuti
+                nbr=self.VALR.lonuti
+                nbc=self.VALC.lonuti
+                nbk=nbk2-nbr-nbc
+                for fon in ('FMEX1'  ,'FMEX2'  ,'FMEY1'  ,'FMEY2' , 
+                            'DFMEX1' ,'DFMEX2' ,'DFMEY1' ,'DFMEY2',
+                            'DDFMEX1','DDFMEX2','DDFMEY1','DDFMEY2'):
+                    k2=valk.index(fon)
+                    k=k2-nbr-nbc
+                    nomfon=valk[nbr+nbc+nbk/2+k]
+                    sd2=sd_fonction(nomfon) ; sd2.check(checker)
+
+
 class sd_mater(AsBase):
 #----------------------
     nomj = SDNom(fin=8)
     NOMRC = AsVK16(SDNom(nomj='.MATERIAU.NOMRC'), )
-    rdep = Facultatif(sd_mater_RDEP(SDNom(nomj='.&&RDEP')))
+    rdep = Facultatif(sd_mater_XDEP(SDNom(nomj='.&&RDEP')))  # à documenter
+    mzp  = Facultatif(sd_mater_XDEP(SDNom(nomj='.&&MZP' )))  # à documenter
 
     # existence possible de la SD :
     def exists(self):
         return self.NOMRC.exists
 
-    # indirection vers les COMPOR1 de NOMRC :
+    # indirection vers les sd_compor1 de NOMRC :
     def check_mater_i_NOMRC(self, checker):
         lnom = self.NOMRC.get()
         if not lnom: return
@@ -50,6 +90,6 @@ class sd_mater(AsBase):
             nomc1=self.nomj()[:8]+'.'+nom
             comp1 = sd_compor1(nomc1)
 
-            # parfois, comp1 est vide. AJACOT_PB : ssls115g/DEFI_COQU_MULT
+            # parfois, comp1 est vide : ssls115g/DEFI_COQU_MULT
             if comp1.VALK.get() : comp1.check(checker)
 
index 5c21ea1f57fb58e0337ac342140805e8d594dd7d..9a18dfb749cee792857198aa4dc0d25c5be25bb4 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_matr_asse_com SD  DATE 09/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_matr_asse_com SD  DATE 25/03/2008   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -21,6 +21,7 @@
 from SD import *
 from SD.sd_titre import sd_titre
 
+from SD.sd_maillage import sd_maillage
 from SD.sd_nume_ddl import sd_nume_ddl
 from SD.sd_matr_cine import sd_matr_cine
 
@@ -29,12 +30,40 @@ class sd_matr_asse_com(sd_titre):
 #-----------------------------
     nomj = SDNom(fin=19)
 
-    REFA = AsVK24(SDNom(debut=19), lonmax=10, )
-    VALM = AsColl(acces='NU', stockage='DISPERSE', modelong='CONSTANT', type=Parmi('C', 'R'), ltyp=Parmi(16, 8), )
-    UALF = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='CONSTANT', type=Parmi('C', 'R'), ltyp=Parmi(16, 8), ))
-    VALF = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type=Parmi('C', 'R'), ltyp=Parmi(16, 8), ))
+    REFA = AsVK24(lonmax=11,)
+    VALM = AsColl(acces='NU', stockage='DISPERSE', modelong='CONSTANT', type=Parmi('C', 'R'))
+    UALF = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='CONSTANT', type=Parmi('C', 'R')))
+    VALF = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type=Parmi('C', 'R')))
+    WALF = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type=Parmi('C', 'R')))
     CONL = Facultatif(OJBVect(type=Parmi('C', 'R')))
-    LIME = Facultatif(AsVK8(lonmax=1, ))
+    DIGS = Facultatif(OJBVect(type=Parmi('C', 'R'))) # seulement si solveurs LDLT et MULT_FRONT
+    LIME = Facultatif(AsVK24())
     cine = Facultatif(sd_matr_cine(SDNom(nomj='')))
 
+    def exists(self):
+        # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+        return self.REFA.exists
+
+    def check_REFA(self, checker):
+        if not self.exists() : return
+        refa=self.REFA.get_stripped()
+        assert refa[9] in ('NOEU','GENE') , refa
+        lgene = refa[9] == 'GENE'
+        # pour les matrices generalisees, on ne sait pas ce qui est stocké dans refa[0]='' :
+        if not lgene :
+            sd2=sd_maillage(refa[0]) ; sd2.check(checker)
+            sd2=sd_nume_ddl(refa[1]) ; sd2.check(checker)
+        assert refa[2] in ('ELIMF','ELIML','') , refa
+        assert refa[4] in ('FETI','') , refa
+        # pour les matrices generalisees, refa[7] n'est pas toujours rempli :
+        if not lgene :
+            # glute à résorber : j'ajoute '' à la liste permise pour le test yyyy108e :
+            assert refa[7] in ('ASSE','DECT','DECP','') , refa
+        assert refa[8] in ('MS','MR') , refa
+        if refa[8]=='MS' :
+            assert self.VALM.nmaxoc == 1 , (refa,self.VALM.nmaxoc)
+        elif refa[8]=='MR' :
+            assert self.VALM.nmaxoc == 2 , (refa,self.VALM.nmaxoc)
+        assert refa[10] in ('MPI_COMPLET','MPI_INCOMPLET') , refa
+
 
index 4fb519f7a74252a6be1acd2e1237b539e1d5339b..2aeadcdf872890b2d81be6075a37a2da6b3a5620 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_matr_cine SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_matr_cine SD  DATE 14/01/2008   AUTEUR DESOZA T.DESOZA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -28,6 +28,6 @@ class sd_matr_cine(AsBase):
     CCID = AsVI()
     CCJJ = Facultatif(AsVI())
     CCLL = Facultatif(AsVI())
-    CCVA = Facultatif(AsVR())
+    CCVA = Facultatif(AsObject(genr='V', xous='S', type=Parmi('R','C')))
 
 
index d1149e028301fff6bf73e699c831f6166e922526..4ae31b93271974f935ef369860d52658fcaea28a 100644 (file)
@@ -1,45 +1,62 @@
-#@ MODIF sd_matr_elem SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_matr_elem SD  DATE 25/03/2008   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
 from SD.sd_resuelem import sd_resuelem
+from SD.sd_modele import sd_modele
+from SD.sd_cham_mater import sd_cham_mater
+from SD.sd_cara_elem import sd_cara_elem
+
 
 class sd_matr_elem(AsBase):
-    nomj = SDNom(fin=8)
-    LISTE_RESU = AsVK24()
-    REFE_RESU = AsVK24(lonmax=5, )
+    nomj = SDNom(fin=19)
+    RERR = AsVK24(lonmax=5, )
+    RELR = Facultatif(AsVK24())
+    TITR = AsVK80(SDNom(debut=19), optional=True)
+    
+    # indirection par RELR :
+    def check_matr_elem_i_RELR(self, checker):
+        if not self.RELR.exists : return
+        lnom = self.RELR.get_stripped()
+        for nom in lnom:
+            if nom != '' :
+                sd2 = sd_resuelem(nom); sd2.check(checker)
 
 
-    # indirection par LISTE_RESU :
-    def check_matr_elem_i_LISTE_RESU(self, checker):
-        lnom = self.LISTE_RESU.get()
-        if not lnom:
-            checker.err(self, "sd_champ LISTE_RESU absent")
-            return
-        for nom in lnom:
-            if not nom.strip():
-                continue
-            resu1 = sd_resuelem(nom)
-            # parfois, le nom est non ' ' et pourtant le sd_resuelem n'existe pas
-            # Il faudrait corriger cette anomalie.
-            if resu1.NOLI.exists :
-                resu1.check(checker)
+    def check_1(self, checker):
+        refe = self.RERR.get_stripped()
+        assert refe[2] in ('OUI_SOUS_STRUC', 'NON_SOUS_STRUC'), refe
+
+        # existence de RELR :
+        if refe[2] == 'NON_SOUS_STRUC':
+            assert self.RELR.exists
+
+        assert refe[1] != '', refe
+
+        sd2=sd_modele(refe[0]) ; sd2.check(checker)
+
+        if refe[3] != '' :
+            sd2=sd_cham_mater(refe[3]) ; sd2.check(checker)
+
+        if refe[4] != '' :
+            sd2=sd_cara_elem(refe[4]) ; sd2.check(checker)
+
 
 
index eecf07415c1837abf477db7160f35ce6147f8edf..ccad7a4e981d2d5220080e3c573d978a28ccd649 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_melasflu SD  DATE 09/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_melasflu SD  DATE 21/04/2008   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -41,93 +41,110 @@ class sd_melasflu(AsBase):
     FACT = AsVR(SDNom(debut=19), )
     DESC = AsVK16(SDNom(debut=19), lonmax=1, )
 
-    # Critère présence VCN et VEN ????
+    # si FAISCEAU_TRANS + couplage fluide-structure + BASE_MODALE/AMOR_REDUIT_CONN :
     VCN  = Facultatif(AsVR())
     VEN  = Facultatif(AsVR())
+    RAP  = Facultatif(AsVR())
 
-    sd_l_table = Facultatif(sd_l_table(SDNom(nomj=''))) # Si faisceau axial
     sd_table   = sd_table(SDNom(nomj=''))
+    sd_l_table = Facultatif(sd_l_table(SDNom(nomj=''))) # Si FAISCEAU_AXIAL
 
 
     # indirections via .REMF :
     #----------------------------------
     def check_melasflu_i_REMF(self, checker):
-        lnom=self.REMF.get()
-        sd2 = sd_type_flui_stru(lnom[0]) ; sd2.check(checker)
-        sd2 = sd_resultat_dyn(lnom[1]) ; sd2.check(checker)
+        remf=self.REMF.get_stripped()
+        sd2 = sd_type_flui_stru(remf[0]) ; sd2.check(checker)
+        sd2 = sd_resultat_dyn(remf[1]) ; sd2.check(checker)
 
 
     # Vérifications supplémentaires :
     #----------------------------------
     def check_veri1(self, checker):
-        desc=self.DESC.get()
-        numo=self.NUMO.get()
-        fact=self.FACT.get()
-        freq=self.FREQ.get()
-        masg=self.MASG.get()
-        vite=self.VITE.get()
-        vcn=self.VCN.get()
-        ven=self.VEN.get()
-        l_table = sd_l_table(self.nomj) # Si faisceau axial
+        remf=self.REMF.get()
+        desc=self.DESC.get_stripped()
 
         # calcul de itypfl (type d'interaction fluide / structure) :
-        typfl = sd_type_flui_stru(self.REMF.get()[0])
-        itypfl=typfl.FSIC.get()[0]
+        typfl = sd_type_flui_stru(remf[0])
+        itypfl=typfl.FSIC.get()[0]  # 1 -> FAISCEAU_TRANS
+                                    # 3 -> FAISCEAU_AXIAL
+        couplage=typfl.FSIC.get()[1]  # 1 -> prise en compte du couplage
+        assert itypfl > 0 , remf
 
         # calcul de nbmode (nombre de modes) :
-        nbmode=len(numo)
+        nbmode=self.NUMO.lonmax
+        assert nbmode > 0
 
         # calcul de nbvite (nombre de vitesses) :
-        nbvite=len(vite)
+        nbvite=self.VITE.lonmax
+        assert nbvite > 0
 
         # vérification de l'objet .DESC :
         #--------------------------------
-        sdu_compare(self.DESC,checker,desc[0].strip(),'==','DEPL','DESC[1]=="DEPL"')
+        assert len(desc)==1 , desc
+        assert desc[0] == 'DEPL' , desc
 
         # vérification de l'objet .NUMO :
         #--------------------------------
-        sdu_tous_compris(self.NUMO,checker,vmin=1)
+        for x in self.NUMO.get() :
+            assert x >= 1 , numo
 
         # vérification de l'objet .FACT :
         #--------------------------------
         if itypfl==3 :  # faisceau axial
-            sdu_compare(self.FACT,checker,len(fact),'==',3*nbmode*nbvite,'LONMAX(FACT)==3*nbmode*nbvite')
+            assert self.FACT.lonmax == 3*nbmode*nbvite
         else :
-            sdu_compare(self.FACT,checker,len(fact),'==',3*nbmode,'LONMAX(FACT)==3*nbmode')
+            assert self.FACT.lonmax == 3*nbmode
 
         # vérification de l'objet .MASG :
         #--------------------------------
         if itypfl==3 :  # faisceau axial
-            sdu_compare(self.MASG,checker,len(masg),'==',nbmode*nbvite,'LONMAX(MASG)==nbmode*nbvite')
+            assert self.MASG.lonmax == nbmode*nbvite
         else :
-            sdu_compare(self.MASG,checker,len(masg),'==',nbmode,'LONMAX(MASG)==nbmode')
+            assert self.MASG.lonmax == nbmode
 
         # vérification de l'objet .FREQ :
         #--------------------------------
-        sdu_compare(self.FREQ,checker,len(freq),'==',2*nbmode*nbvite,'LONMAX(FREQ)==2*nbmode*nbvite')
+        assert self.FREQ.lonmax == 2*nbmode*nbvite
+
+        # vérification existence .VCN et .VEN:
+        #-------------------------------------
+        if self.VCN.exists : assert self.VEN.exists
+        if self.VEN.exists : assert self.VCN.exists
+        if self.VEN.exists : assert itypfl == 1 and couplage == 1
+        if self.RAP.exists : assert (self.VEN.exists and self.VCN.exists)
 
         # vérification de l'objet .VCN :
         #--------------------------------
-        if vcn :
+        if self.VCN.exists :
             fsvi=typfl.FSVI.get()
-            nbzex=len(fsvi)
-            nbval=1
-            for i in range(nbzex) :
-                nbval=nbval+fsvi[nbzex+i]
-            sdu_compare(self.VCN,checker,len(vcn),'==',nbmode,'LONMAX(VCN)==nbmode*nbval')
+            nbzone=fsvi[1]
+            nbval=0
+            for i in range(nbzone) :
+                nbval=nbval+fsvi[2+nbzone+i]
+            assert self.VCN.lonmax == nbmode*nbval*2
 
         # vérification de l'objet .VEN :
         #--------------------------------
-        if ven :
-            sdu_compare(self.VEN,checker,len(ven),'==',nbmode,'LONMAX(VEN)==nbmode')
+        if self.VEN.exists :
+            assert self.VEN.lonmax == nbmode*2
 
+        # vérification de l'objet .RAP :
+        #--------------------------------
+        if self.RAP.exists :
+            fsvi=typfl.FSVI.get()
+            nbzone=fsvi[1]
+            nbval=0
+            for i in range(nbzone) :
+                nbval=nbval+fsvi[2+nbzone+i]
+            assert self.RAP.lonmax == nbmode*nbval*2
 
         # vérification de la SD table contenant les cham_no :
         #----------------------------------------------------
-        tcham=sd_table(self.nomj)
-        sdu_compare(None,checker,tcham.nb_column(),'==',1,"1 seule colonne dans la table")
+        tcham=self.sd_table
+        assert tcham.nb_column() == 1  , tcham
         col1=tcham.get_column_name('NOM_CHAM')
-        sdu_assert(None, checker, col1, "Manque colonne NOM_CHAM")
+        assert col1, "Il manque la colonne NOM_CHAM"
 
         data=col1.data.get()
         mask=col1.mask.get()
@@ -142,12 +159,16 @@ class sd_melasflu(AsBase):
             if profchno == '':
                 profchno=profchn1
             else:
-                sdu_compare(None,checker,profchn1,'==',profchno,"Tous PROFCHNO identiques")
+                assert profchn1 == profchno  ,(profchn1, profchno)
 
 
         # vérification de la SD l_table :
         #--------------------------------
-        if itypfl==3 :  # faisceau axial
+        if self.sd_l_table.LTNT.exists : assert itypfl == 3   # FAISCEAU_AXIAL
+        if itypfl == 3  : assert self.sd_l_table.LTNT.exists
+
+        if self.sd_l_table.LTNT.exists :
+            l_table = self.sd_l_table
             l_table.check(checker)
 
             # la l_table ne contient qu'une seule table nommée 'MATR_GENE'
index 2ffb0b0f3613d9ec4f387723bcac9c3108b1797f..f89c9a75cabd45530f894a0309f70c88e41f26cd 100644 (file)
@@ -1,26 +1,32 @@
-#@ MODIF sd_mode_cycl SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_mode_cycl SD  DATE 23/10/2007   AUTEUR BODEL C.BODEL 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
+from SD.sd_maillage import sd_maillage
+from SD.sd_interf_dyna_clas import sd_interf_dyna_clas
+from SD.sd_base_modale import sd_base_modale
+from SD.sd_util import *
+
 
 class sd_mode_cycl(AsBase):
+#--------------------------
     nomj = SDNom(fin=8)
     CYCL_TYPE = AsVK8(lonmax=1, )
     CYCL_CMODE = AsVC()
@@ -32,3 +38,57 @@ class sd_mode_cycl(AsBase):
     CYCL_NUIN = AsVI(lonmax=3, )
 
 
+    def u_dime(self) :
+        desc=self.CYCL_DESC.get()
+        nb_mod  = desc[0] ; assert nb_mod   >  0
+        nb_ddl  = desc[1] ; assert nb_ddl   >  0
+        nb_ddli = desc[2] ; assert nb_ddli  >= 0
+        nb_freq = desc[3] ; assert nb_freq  >  0
+        nb_diam=self.CYCL_DIAM.lonmax / 2  ; assert nb_diam > 0
+        assert self.CYCL_DIAM.lonmax == 2*nb_diam
+        return (nb_mod, nb_ddl, nb_ddli, nb_freq, nb_diam)
+
+    def check_REFE(self,checker) :
+        refe=self.CYCL_REFE.get_stripped()
+        sd2=sd_maillage(refe[0]); sd2.check
+        sd2=sd_interf_dyna_clas(refe[1]); sd2.check
+        sd2=sd_base_modale(refe[2]); sd2.check
+
+
+    def check_NUIN(self,checker) :
+        nuin=self.CYCL_NUIN.get()
+        assert nuin[0] >  0 , nuin
+        assert nuin[1] >  0 , nuin
+        assert nuin[2] >= 0 , nuin
+
+
+    def check_NBSC(self,checker) :
+        nbsc=self.CYCL_NBSC.get()
+        assert nbsc[0] > 0 , nbsc
+
+
+    def check_TYPE(self,checker) :
+        type=self.CYCL_TYPE.get_stripped()
+        assert type[0] in ('MNEAL', 'CRAIGB', 'CB_HARMO', 'AUCUN') ,type
+
+
+    def check_CMODE(self,checker) :
+        nb_mod, nb_ddl, nb_ddli, nb_freq, nb_diam = self.u_dime()
+        assert self.CYCL_CMODE.lonmax== nb_diam*nb_freq*(nb_mod+nb_ddl+nb_ddli)
+
+
+    def check_DIAM(self,checker) :
+        diam=self.CYCL_DIAM.get()
+        nb_diam=len(diam)/2
+        for x in diam[:nb_diam] : assert x >= 0 , diam
+        for x in diam[nb_diam:] : assert x >  0 , diam
+        sdu_tous_differents(self.CYCL_DIAM,checker,diam[:nb_diam])
+
+
+    def check_FREQ(self,checker) :
+        nb_mod, nb_ddl, nb_ddli, nb_freq, nb_diam = self.u_dime()
+        freq=self.CYCL_FREQ.get()
+        assert len(freq) == nb_diam*nb_freq ,(self.CYCL_DESC.get(),len(freq))
+        for x in freq : assert x >= 0 , freq
+
+
index 0c17ca07c31ea65ec0a21390769dc121d75043c6..05e38d86d4e5d23399db9f25238a8f5172bf9637 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_modele SD  DATE 09/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_modele SD  DATE 06/05/2008   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 
 from SD import *
 
-from SD.sd_ligrel import sd_ligrel
-from SD.sd_fiss_xfem import sd_fiss_xfem, sd_xfem_com1
+from SD.sd_ligrel    import sd_ligrel
+from SD.sd_maillage  import sd_maillage
 from SD.sd_prof_chno import sd_prof_chno
-
-
-class sd_modele_XFEM(AsBase):
-#-----------------------------
-    nomj = SDNom(fin=8)
-    # Questions aux responsables XFEM :
-    #   - faut-il garder FISS et NFIS ?
-    #   - Est-il normal de modifier les sd_fiss_xfem dans MODI_MODELE_XFEM ?
-
-    CONT   = AsVI()
-    SDCONT = AsVK24()
-    FISS   = AsVK8()
-    NFIS   = AsVI(lonmax=1,)  # nombre de fissures
-    com1   = sd_xfem_com1(SDNom(nomj=''))
-
-    glute_XFEM = Facultatif(sd_prof_chno(SDNom(nomj='.PRCHN00000'))) # fiche 10833
-
-
-    if 0 :
-        # Questions aux responsables XFEM :
-        #   - faut-il garder FISS et NFIS ?
-        #   - Est-il normal de modifier les sd_fiss_xfem dans MODI_MODELE_XFEM ?
-        # indirection vers FISS_XFEM car MODI_MODELE_XFEM modifie FISS_XFEM
-        # (Damijan va corriger cela avec la multi-fissuration)
-        # ATTENTION : Ce bout de programme suppose que FISS est de longueur 1 ce qui contradictoire avec la multi-fissuration)
-        def check_modele_i_FISS(self, checker):
-            if not self.FISS.get() : return
-            nom=self.FISS.get()[0]
-            sd2=sd_fiss_xfem(nom) ; sd2.check(checker)
+from SD.sd_carte     import sd_carte
+from SD.sd_xfem      import sd_modele_xfem
+from SD.sd_l_table   import sd_l_table
 
 
 
@@ -60,13 +34,29 @@ class sd_modele(AsBase):
     nomj = SDNom(fin=8)
 
     MODELE = sd_ligrel()
-    NOEUD_UTIL = AsVI()
     NOEUD = Facultatif(AsVI())
     MAILLE = Facultatif(AsVI())
 
-    # Si modèle avec sous-structures statiques :
-    SSSA = Facultatif(AsVI())
+    # une sd_modele peut avoir une "sd_l_table" contenant des grandeurs caractéristiques de l'étude :
+    lt = Facultatif(sd_l_table(SDNom(nomj='')))
+
+    # Si le modèle vient de MODI_MODELE_XFEM :
+    xfem = Facultatif(sd_modele_xfem(SDNom(nomj='')))
+
+
+    def check_existence(self,checker) :
+        exi_liel=self.MODELE.LIEL.exists
+        exi_maille=self.MAILLE.exists
+        exi_noeud=self.NOEUD.exists
+
+        # si .LIEL => .MAILLE et .NOEUD
+        if exi_liel :
+            assert exi_maille
+            assert exi_noeud
+
 
-    # Si modèle "XFEM" :
-    xfem = Facultatif(sd_modele_XFEM(SDNom(nomj='')))
+    def check_maillage(self,checker) :
+        # on est obligé de checker le maillage pour permettre la creation de la sd_voisinage
+        lgrf=self.MODELE.LGRF.get_stripped()
+        sd2 = sd_maillage(lgrf[0]); sd2.check(checker)
 
index 2ba619aa28d9b53796fed4f770566e80c685a542..5abb1ceb6c6aee0e64a2a65c1719052ef08313b1 100644 (file)
-#@ MODIF sd_modele_gene SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_modele_gene SD  DATE 10/07/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
+from SD.sd_interf_dyna_clas import sd_interf_dyna_clas
+from SD.sd_base_modale import sd_base_modale
+from SD.sd_macr_elem_dyna import sd_macr_elem_dyna
+from SD.sd_util import *
+
+
 
 class sd_modele_gene(AsBase):
+#-----------------------------
     nomj = SDNom(fin=14)
     MODG_LIPR = AsVI(SDNom(nomj='.MODG.LIPR'), )
     MODG_LIDF = AsColl(SDNom(nomj='.MODG.LIDF'), acces='NU', stockage='DISPERSE', modelong='CONSTANT', type='K', ltyp=8, )
     MODG_SSTR = AsColl(SDNom(nomj='.MODG.SSTR'), acces='NU', stockage='CONTIG', modelong='CONSTANT', type='R', ltyp=8, )
     MODG_SSOR = AsColl(SDNom(nomj='.MODG.SSOR'), acces='NU', stockage='CONTIG', modelong='CONSTANT', type='R', ltyp=8, )
-    MODG_SSNO = AsObject(SDNom(nomj='.MODG.SSNO'), genr='N', xous='S', type='K', ltyp=8, )
+    MODG_SSNO = AsPn(SDNom(nomj='.MODG.SSNO'), ltyp=8, )
     MODG_SSME = AsColl(SDNom(nomj='.MODG.SSME'), acces='NU', stockage='CONTIG', modelong='CONSTANT', type='K', ltyp=8, )
     MODG_DESC = AsVI(SDNom(nomj='.MODG.DESC'), lonmax=3, )
     MODG_LIMA = AsColl(SDNom(nomj='.MODG.LIMA'), acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='R', ltyp=8, )
 
 
+
+    def check_dimensions(self,checker) :
+        nb_struc=self.MODG_SSME.nmaxoc
+        nb_liaison=self.MODG_LIDF.nmaxoc
+
+        assert  self.MODG_LIPR.lonmax == 9*nb_liaison
+        assert  self.MODG_LIMA.nmaxoc == 3*nb_liaison
+        assert  self.MODG_LIMA.nutioc == 3*nb_liaison
+
+        assert  self.MODG_SSNO.nomuti == nb_struc
+        assert  self.MODG_SSNO.nommax == nb_struc
+        assert  self.MODG_SSOR.nmaxoc == nb_struc
+        assert  self.MODG_SSOR.nutioc == nb_struc
+        assert  self.MODG_SSTR.nmaxoc == nb_struc
+        assert  self.MODG_SSTR.nutioc == nb_struc
+
+
+    def check_SSME(self,checker) :
+        nb_struc=self.MODG_SSME.nmaxoc
+        ssme=self.MODG_SSME.get()
+        for k in range(nb_struc) :
+            sd2=sd_macr_elem_dyna(ssme[k+1][0].strip()); sd2.check
+
+
+    def check_DESC(self,checker) :
+        desc=self.MODG_DESC.get()
+        nomgd=sdu_nom_gd(desc[2])
+        assert nomgd == 'DEPL_R', (nomgd, desc)
+        assert desc[0] > 2    and desc[0] < 15    , desc
+        assert desc[1] > 2*30 and desc[1] < 15*30 , desc
+
+
+    def check_SSOR(self,checker) :
+        nb_struc=self.MODG_SSME.nmaxoc
+        ssor=self.MODG_SSOR.get()
+        for k in range(nb_struc) :
+            assert len(ssor[k+1]) == 3 , ssor
+
+
+    def check_SSTR(self,checker) :
+        nb_struc=self.MODG_SSME.nmaxoc
+        sstr=self.MODG_SSTR.get()
+        for k in range(nb_struc) :
+            assert len(sstr[k+1]) == 3 , sstr
+
+
+    def check_LIDF(self,checker) :
+        lidf=self.MODG_LIDF.get()
+        nb_liaison=self.MODG_LIDF.nmaxoc
+        for k in range(nb_liaison) :
+            assert len(lidf[k+1]) == 5 , lidf
+            assert lidf[k+1][4].strip() in ('OUI', 'NON') , lidf
+
+
+    def check_LIPR_LIMA(self,checker) :
+        lipr=self.MODG_LIPR.get()
+        lima=self.MODG_LIMA.get()
+        nb_liaison=self.MODG_LIDF.nmaxoc
+        for k in range(nb_liaison) :
+            mat1_nlig=lipr[9*k+0] ; assert mat1_nlig > 0
+            mat1_ncol=lipr[9*k+1] ; assert mat1_ncol > 0
+            mat1_nume=lipr[9*k+2] ; assert mat1_nume == 3*k +1  , (mat1_nume, k)
+            assert len(lima[3*k+1]) == mat1_nlig*mat1_ncol
+
+            mat2_nlig=lipr[9*k+3] ; assert mat2_nlig > 0
+            mat2_ncol=lipr[9*k+4] ; assert mat2_ncol > 0
+            mat2_nume=lipr[9*k+5] ; assert mat2_nume == 3*k +2  , (mat2_nume, k)
+            assert len(lima[3*k+2]) == mat2_nlig*mat2_ncol
+
+            mat3_nlig=lipr[9*k+6] ; assert mat3_nlig > 0
+            mat3_ncol=lipr[9*k+7] ; assert mat3_ncol > 0
+            mat3_nume=lipr[9*k+8] ; assert mat3_nume == 3*k +3  , (mat3_nume, k)
+            assert len(lima[3*k+3]) == mat3_nlig*mat3_ncol
+
index 5261d095c50f47b86f88a33d10397a1002d15da8..8b454e0eb02ee75040bcd1ed2a7fa8a3354a4cec 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_nume_ddl SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_nume_ddl SD  DATE 17/07/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -23,7 +23,6 @@ from SD.sd_solveur import sd_solveur
 
 from SD.sd_nume_ddl_gene import sd_nume_ddl_gene
 from SD.sd_nume_ddl_gd import sd_nume_ddl_gd
-import aster
 
 
 #---------------------------------------------------------------------------------
index 295ae4d910353cd2425065219310a5c561c1fdc6..a9d5db97a0b9e31079fa7a8c9cac38433cfa491c 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF sd_nume_eqge SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_nume_eqge SD  DATE 11/02/2008   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
@@ -23,7 +23,7 @@ from SD import *
 from SD.sd_prof_vgen import sd_prof_vgen
 class sd_nume_eqge(sd_prof_vgen):
     nomj = SDNom(fin=19)
-    REFN = AsVK24(SDNom(debut=19), lonmax=2, )
+    REFN = AsVK24(SDNom(debut=19), lonmax=4, )
     DESC = AsVI(SDNom(debut=19), lonmax=1, )
     NEQU = AsVI(SDNom(debut=19), lonmax=1, )
     ORIG = AsColl(SDNom(debut=19), acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', )
index c95a2315cd4a5c7d87d4b06acb1ec49a98850843..42e3394a0676baf22253c1df066f59ef684066c8 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF sd_nume_equa SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_nume_equa SD  DATE 11/02/2008   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
@@ -25,6 +25,6 @@ class sd_nume_equa(sd_prof_chno):
     nomj = SDNom(fin=19)
     NEQU = Facultatif(AsVI(SDNom(debut=19), lonmax=2, ))
     DELG = Facultatif(AsVI(SDNom(debut=19), ))
-    REFN = Facultatif(AsVK24(SDNom(debut=19), ))
+    REFN = Facultatif(AsVK24(SDNom(debut=19),lonmax=4,  ))
 
 
index 1be3a441f8d3e379ad40c6871fcaef63fa9035bd..17ad678e83ebb4f12912f717a45892365dc74f18 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_prof_vgen SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_prof_vgen SD  DATE 21/02/2008   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -26,5 +26,6 @@ class sd_prof_vgen(AsBase):
     LILI = AsObject(SDNom(debut=19), genr='N', xous='S', type='K', ltyp=8, )
     NUEQ = AsVI(SDNom(debut=19), )
     DEEQ = AsVI(SDNom(debut=19), )
+    DELG = AsVI(SDNom(debut=19), )
 
 
diff --git a/Aster/Cata/cataSTA9/SD/sd_proj_mesu.py b/Aster/Cata/cataSTA9/SD/sd_proj_mesu.py
new file mode 100644 (file)
index 0000000..eb8e744
--- /dev/null
@@ -0,0 +1,87 @@
+#@ MODIF sd_proj_mesu SD  DATE 15/01/2008   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.
+# ======================================================================
+
+from SD import *
+from sd_modele  import sd_modele
+
+
+
+class sd_proj_mesu(AsBase):
+#-------------------------------------
+    nomj = SDNom(fin=18)
+    PJMNO = AsVI()
+    PJMRG = AsVK8()
+    PJMBP = AsVR()
+    PJMRF = AsVK16(lonmax=5)
+
+    # si PROJ_MESU_MODAL :
+    PJMOR = Facultatif(AsVR())
+
+    # si MACR_ELEM_STAT :
+    PJMIG    = Facultatif(AsVR())
+    PJMMM    = Facultatif(AsObject(genr='V',type=Parmi('C', 'R')))
+
+
+    def exists(self):
+    #  retourne .true. si la SD semble exister
+        return self.PJMNO.exists
+
+
+    def check_1(self, checker):
+    #------------------------------------
+        if not self.exists() : return
+
+        nbutil=self.PJMNO.lonuti
+        assert nbutil > 0 , nbutil
+
+        # vérifications communes :
+        assert self.PJMRG.lonmax >= nbutil
+        n1=self.PJMBP.lonmax
+        nbmode=n1/nbutil
+        assert n1==nbutil*nbmode , (nbmode,nbutil,n1)
+        assert self.PJMRF.exists
+        pjmrf=self.PJMRF.get_stripped()
+        sd2=sd_modele(pjmrf[0]) ; sd2.check(checker)
+        assert pjmrf[1] != '' , pjmrf
+        assert pjmrf[2] != '' , pjmrf
+
+        # quel cas de figure : PROJ_MESU_MODAL ou MACR_ELEM_STAT ?
+        lproj=self.PJMOR.exists
+
+        # si PROJ_MESU_MODAL :
+        if lproj :
+            nbcapt=nbutil
+            assert self.PJMOR.lonmax >= 3*nbcapt
+            assert not self.PJMIG.exists
+            assert pjmrf[3] == '' , pjmrf
+            assert pjmrf[4] == '' , pjmrf
+
+        # si MACR_ELEM_STAT :
+        else :
+            nbddle=nbutil
+            assert self.PJMIG.exists
+            assert self.PJMMM.exists
+            n1=self.PJMIG.lonmax
+            nbmoid=n1/nbddle
+            assert n1==nbddle*nbmoid , (nbmodi,nbddle,n1)
+
+            assert pjmrf[3] != '' , pjmrf
+            sd2=sd_proj_mesu(pjmrf[4]) ; sd2.check(checker)
+
index 097e1591fa297ee81b4ca771ef60d1da777e052c..f2e3bd7817db32f1d51c2993fb7b252e35c27fa5 100644 (file)
@@ -1,29 +1,52 @@
-#@ MODIF sd_resuelem SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_resuelem SD  DATE 06/05/2008   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
+from SD.sd_ligrel import sd_ligrel
+
 
 class sd_resuelem(AsBase):
     nomj = SDNom(fin=19)
-    NOLI = AsVK24(SDNom(debut=19), lonmax=2, )
-    RESL = AsColl(SDNom(debut=19), acces='NU', stockage='DISPERSE', modelong='VARIABLE', type=Parmi('C', 'R'), ltyp=Parmi(16, 8), )
-    DESC = AsVI(SDNom(debut=19), docu='RESL', )
+    NOLI = AsVK24(lonmax=4, )
+    DESC = AsVI(docu='RESL', )
+    RESL = AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type=Parmi('C', 'R'))
+    RSVI = Facultatif(AsColl(acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I'))
+
+    def exists(self):
+        # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+        return self.NOLI.exists
 
+    def check_1(self, checker):
+        if not self.exists() : return
+        noli = self.NOLI.get_stripped()
+        sd2=sd_ligrel(noli[0]) ; sd2.check(checker)
+        assert noli[1] != '' , noli
+        assert noli[2] in ('MPI_COMPLET','MPI_INCOMPLET') , noli
+        assert noli[3] in ('','VOISIN_VF') , noli
+        if noli[3]=='VOISIN_VF' : assert self.RSVI.exists
 
+        desc = self.DESC.get()
+        assert desc[0] > 0 and desc[0] < 1000 , desc
+        nbgr=desc[1]
+        assert nbgr > 0  , desc
+        assert len(desc)==nbgr+2, desc
+        assert self.RESL.nmaxoc == nbgr, desc
+        for k in desc :
+            assert k >= 0, desc
index d936900aabdd9dd78beb54613e88478126a59b7d..565f82a4feaadd2928283ef4c969924eceddbd38 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_resultat SD  DATE 09/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_resultat SD  DATE 22/10/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -27,7 +27,6 @@ from SD.sd_l_charges import sd_l_charges
 from SD.sd_char_contact import sd_char_contact
 from sets import Set
 from SD.sd_util import *
-import aster
 
 
 class sd_resultat(sd_titre):
@@ -50,12 +49,6 @@ class sd_resultat(sd_titre):
         return self.ORDR.exists
 
 
-    # glute XFEM :
-    def check_glute_XFEM(self, checker):
-        sd2 = sd_char_contact('&&OP0070.DEFIC')
-        sd2.check(checker)
-
-
     # indirection vers les champs de .TACH :
     def check_resultat_i_TACH(self, checker):
         tach = self.TACH.get()
index 51406bd50c62a5646892ef03d0d6c9d84a989c33..6dab8958d8766e2bc96782d34964bd7c71c9dccf 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF sd_resultat_dyn SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_resultat_dyn SD  DATE 11/02/2008   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
@@ -24,24 +24,28 @@ from SD.sd_resultat import sd_resultat
 from SD.sd_nume_ddl import sd_nume_ddl
 from SD.sd_matr_asse import sd_matr_asse
 from SD.sd_interf_dyna_clas import sd_interf_dyna_clas
+from SD.sd_proj_mesu import sd_proj_mesu
 
 
 class sd_resultat_dyn(sd_resultat):
 #--------------------------------------------------
     nomj = SDNom(fin=8)
-    PROFC_NUME_REFN = Facultatif(AsVK24(SDNom(nomj='.PROFC.NUME.REFN'), lonmax=2, ))
+    PROFC_NUME_REFN = Facultatif(AsVK24(SDNom(nomj='.PROFC.NUME.REFN'), lonmax=4, ))
     REFD = Facultatif(AsVK24(SDNom(debut=19), lonmax=6, )) # n'existe pas dans sdll23a
 
+    # si utilisation de PROJ_MESU_MODAL :
+    PROJM = Facultatif(sd_proj_mesu())
+
 
     # indirection vers les SD de .REFD :
     def check_resultat_dyn_i_REFD(self, checker):
-        lnom = self.REFD.get()
-        if not lnom : return
+        refd = self.REFD.get_stripped()
+        if not refd : return
         for k in 0,1,2 :
-            if lnom[k].strip() :
-                sd2 = sd_matr_asse(lnom[0]); sd2.check(checker)
-        if lnom[3].strip() :
-            sd2 = sd_nume_ddl(lnom[3]); sd2.check(checker)
-        if lnom[4].strip() :
-            sd2 = sd_interf_dyna_clas(lnom[4]); sd2.check(checker)
+            if refd[k] :
+                sd2 = sd_matr_asse(refd[0]); sd2.check(checker)
+        if refd[3] :
+            sd2 = sd_nume_ddl(refd[3]); sd2.check(checker)
+        if refd[4] :
+            sd2 = sd_interf_dyna_clas(refd[4]); sd2.check(checker)
 
index e1ebe65c639f24b874bff5cabbb16c599bec0070..cbb128f32cc03937e8dd4c2722a408b3ae7cbc27 100644 (file)
@@ -1,27 +1,40 @@
-#@ MODIF sd_spectre SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_spectre SD  DATE 19/06/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
 from SD.sd_titre import sd_titre
+from SD.sd_modele import sd_modele
+from SD.sd_cara_elem import sd_cara_elem
+from SD.sd_fonction import sd_fonction
 
 
+types_possibles=[  # liste des divers types de spectres :
+        'SPEC_LONG_COR_1',
+        'SPEC_LONG_COR_2',
+        'SPEC_LONG_COR_3',
+        'SPEC_LONG_COR_4',
+        'SPEC_CORR_CONV_1',
+        'SPEC_CORR_CONV_2',
+        'SPEC_FONC_FORME',
+        'SPEC_EXCI_POINT',]
+
 class sd_spectre(sd_titre):
 #------------------------------------
     nomj = SDNom(fin=19)
@@ -34,4 +47,152 @@ class sd_spectre(sd_titre):
     NNOE = Facultatif(AsVK8())
 
 
+    def u_type(self) :
+        vate=self.VATE.get()
+        type=vate[0].strip()
+        assert type  in  types_possibles
+        return type
+
+
+    def u_nbno(self) :
+        vain=self.VAIN.get()
+        intesp =vain[1]
+        nbno   =vain[2]
+        return (intesp,nbno)
+
+
+    def check_VAIN(self,checker):
+    #-------------------------------
+        vain=self.VAIN.get()
+        itype=vain[0]
+        assert itype in (1,2,3,4,11,21) , vain
+
+        type = self.u_type()
+        if itype==1 : assert type in ('SPEC_LONG_COR_1', 'SPEC_CORR_CONV_1')  ,vain
+        if itype==2 : assert type in ('SPEC_LONG_COR_2', 'SPEC_CORR_CONV_2')  ,vain
+        if itype==3 : assert type in ('SPEC_LONG_COR_3',)   ,vain
+        if itype==4 : assert type in ('SPEC_LONG_COR_4',)   ,vain
+        if itype==11 : assert type in ('SPEC_FONC_FORME',)  ,vain
+        if itype==21 : assert type in ('SPEC_EXCI_POINT',)  ,vain
+
+        if type in ('SPEC_EXCI_POINT','SPEC_FONC_FORME') :
+            assert len(vain)==3, vain
+            assert vain[1] in (0,1) ,vain
+            assert vain[2] >=0 ,vain
+        else :
+            assert len(vain)==1, vain
+
+
+
+    def check_VARE(self,checker):
+    #-------------------------------
+        vare=self.VARE.get()
+        type = self.u_type()
+
+        if type == 'SPEC_FONC_FORME' :
+            assert not vare
+            return
+
+        elif type == 'SPEC_EXCI_POINT' :
+            intesp, nbno= self.u_nbno()
+            if intesp==0 :
+                assert len(vare)==nbno, vare
+            else :
+                assert len(vare)==1, vare
+
+        else :
+            assert len(vare)==12, vare
+
+
+
+    def check_VATE(self,checker):
+    #-------------------------------
+        vate=self.VATE.get_stripped()
+        type = self.u_type()
+
+        if type == 'SPEC_EXCI_POINT' :
+        #---------------------------------
+            intesp, nbno= self.u_nbno()
+            if intesp==0 :
+                assert len(vate)==4+nbno, vate
+            else :
+                assert len(vate)==5, vate
+            sd2=sd_cara_elem(vate[1]) ; sd2.check()
+            sd2=sd_modele(vate[2]) ; sd2.check()
+            if vate[3]=='GRAPPE_2' :
+                assert vate[4] in ('ASC_CEN','ASC_EXC','DES_CEN','DES_EXC')
+            else :
+                for x in vate[4:] :
+                    assert x in ('FORCE','MOMENT')
+
+        elif type == 'SPEC_FONC_FORME' :
+        #---------------------------------
+            intesp, nbno= self.u_nbno()
+            if intesp==0 :
+                nbfonc=len(vate)-4
+                assert nbfonc>0, vate
+            else :
+                assert len(vate)==5, vate
+            sd2=sd_cara_elem(vate[1]) ; sd2.check()
+            sd2=sd_modele(vate[2]) ; sd2.check()
+            if vate[3]=='GRAPPE_1' :
+                assert vate[4] in ('DEBIT_180','DEBIT_300')
+            else :
+                for x in vate[4:] :
+                    sd2=sd_fonction(x) ; sd2.check()
+
+        elif type == 'SPEC_LONG_COR_1' :
+        #---------------------------------
+            sd2=sd_fonction(vate[2]) ; sd2.check()
+            assert vate[3] == 'VISC_CINE'
+
+        elif type == 'SPEC_LONG_COR_2' :
+        #---------------------------------
+            sd2=sd_fonction(vate[2]) ; sd2.check()
+            assert vate[5] == 'BETA'
+
+        elif type == 'SPEC_LONG_COR_3' :
+        #---------------------------------
+            sd2=sd_fonction(vate[2]) ; sd2.check()
+            assert vate[7] == 'BETA_2'
+
+        elif type == 'SPEC_LONG_COR_4' :
+        #---------------------------------
+            sd2=sd_fonction(vate[2]) ; sd2.check()
+            assert vate[5] == 'GAMMA'
+
+        elif type == 'SPEC_CORR_CONV_1' :
+        #---------------------------------
+            assert vate[9] == 'COEF_VITE_FLUI_O'
+            assert vate[10] in ('GENERALE', 'CORCOS', 'AU_YANG')
+
+        elif type == 'SPEC_CORR_CONV_2' :
+        #---------------------------------
+            sd2=sd_fonction(vate[1]) ; sd2.check()
+            assert vate[4] in ('GENERALE', 'CORCOS', 'AU_YANG')
+            assert vate[6] == 'COEF_VITE_FLUI_O'
+
+
+
+    def check_VAVF(self,checker):
+    #-------------------------------
+        vavf=self.VAVF.get_stripped()
+        type = self.u_type()
+
+        if type in ('SPEC_FONC_FORME', 'SPEC_EXCI_POINT') :
+            assert not vavf
+        else :
+            sd2=sd_fonction(vavf[0]) ; sd2.check()
+
+
+
+    def check_NNOE(self,checker):
+    #-------------------------------
+        nnoe=self.NNOE.get()
+        type = self.u_type()
 
+        if type in ('SPEC_FONC_FORME', 'SPEC_EXCI_POINT') :
+            intesp, nbno= self.u_nbno()
+            assert len(nnoe) == nbno
+        else :
+            assert not nnoe
index d867b8cfd58e462f5b76fa7e228cf45efa774b40..f3ba2aba16d0e935585ba24a4ce469c755f09e22 100644 (file)
@@ -1,30 +1,60 @@
-#@ MODIF sd_squelette SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_squelette SD  DATE 19/06/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
 
 from SD.sd_maillage import sd_maillage
+from SD.sd_util import *
+
+
 class sd_squelette(sd_maillage):
+#-------------------------------
     nomj = SDNom(fin=8)
-    INV_SKELETON = AsVI(SDNom(nomj='.INV.SKELETON'), )
-    CORRES = Facultatif(AsVI(lonmax=1271, ))
-    NOMSST = Facultatif(AsVK8(SDNom(debut=17), ))
+    inv_skeleton = AsVI(SDNom(nomj='.INV.SKELETON'), )
+
+    CORRES       = Facultatif(AsVI())
+    NOMSST       = Facultatif(AsVK8(SDNom(debut=17),))
+
+    # ENSEMBLE__ : TRANS , ANGL_NAUT
+    TRANS        = Facultatif(AsVK8(lonmax=3))
+    ANGL_NAUT    = Facultatif(AsVK8(lonmax=3))
+
+
+    def check_SKELETON(self,checker):
+        dime=self.DIME.get()
+        skeleton=self.inv_skeleton.get()
+        nbno=dime[0]
+        assert len(skeleton)==2*nbno, (dime,len(skeleton))
+        for k in skeleton :
+            assert k > 0 , skeleton
+
+
+    def check_TRANS_ANGL_NAUT(self,checker):
+        trans     =self.TRANS.get()
+        angl_naut =self.ANGL_NAUT.get()
+        assert (trans and angl_naut) or ((not trans) and (not angl_naut))
 
 
+    def check_CORRES(self,checker):
+        if not self.CORRES.exists : return
+        dime=self.DIME.get()
+        corres=self.CORRES.get()
+        sdu_tous_differents(self.CORRES,checker)
+        assert len(corres) == dime[0], (dime, len(corres))
index 96dfb7f455c66340b5dcf25fcc22df3485cc3f23..b4c7ec0e778fabf5414914b5acd3dba1e5d4577a 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF sd_surface_1d SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_surface_1d SD  DATE 22/10/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
@@ -29,8 +29,8 @@ class sd_surface_1d(AsBase):
     nomj = SDNom(fin=13)
     sgtel      = sd_reperage_1d(SDNom(nomj='.SGTEL'))
     repom      = sd_reperage_omega(SDNom(nomj=''))
-    CONEX_ORIG = AsVI(SDNom(nomj='.CONEX.ORIG'), lonmax=1, )
-    CONEX_EXTR = AsVI(SDNom(nomj='.CONEX.EXTR'), lonmax=1, )
+    CONEX_ORIG = AsVI(SDNom(nomj='.CONEX.ORIG'))
+    CONEX_EXTR = AsVI(SDNom(nomj='.CONEX.EXTR'))
     DESC       = AsVR(SDNom(debut=13), lonmax=6, )
 
 
diff --git a/Aster/Cata/cataSTA9/SD/sd_table_container.py b/Aster/Cata/cataSTA9/SD/sd_table_container.py
new file mode 100644 (file)
index 0000000..1afe1a1
--- /dev/null
@@ -0,0 +1,81 @@
+#@ MODIF sd_table_container SD  DATE 12/02/2008   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  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.        
+# ======================================================================
+
+from SD import *
+
+from SD.sd_table import sd_table, Colonne
+from SD.sd_vect_elem import sd_vect_elem
+from SD.sd_matr_elem import sd_matr_elem
+from SD.sd_cham_elem import sd_cham_elem
+# --------------------------------------------------------------------
+# sd_table contenant les colonnes nommée "NOM_OBJET","TYPE_OBJET",
+# et "NOM_SD"
+# --------------------------------------------------------------------
+
+
+
+class sd_table_container(sd_table):
+#-------------------------------------
+    nomj = SDNom(fin=19)
+
+    def check_table_container(self, checker):
+
+        # vérification de l'existence de la table     
+        if not self.exists() : 
+           checker.err(self,"La sd_table_container %s ne semble"
+                             +"pas exister" %(nomj))
+
+        # on vérifie la présence des paramètres 
+        # 'NOM_OBJET','TYPE_OBJET','NOM_SD'
+        param=['NOM_OBJET','TYPE_OBJET','NOM_SD']
+        shape = self.TBNP.get()
+        assert 3,shape[0] # la table a exactement 3 paramètres
+        for n in param:
+          col=self.get_column_name(n)
+          if col == None:
+             checker.err(self,"Paramètre %s manquant!" %(n))
+
+          # on vérifie que les colonnes ne sont pas vides 
+          data = col.data.get()
+          if data is not None:
+             if col.data.lonuti != shape[1]:
+                  checker.err(self,"Taille inconsitante %d!=%d" %
+                                (col.data.lonuti,shape[1]))
+
+        
+        # on vérifie le contenu de la colonne NOM_SD
+        col1=self.get_column_name('TYPE_OBJET')
+        col2=self.get_column_name('NOM_SD')
+        nbli=col1.data.lonuti
+        lnom1=col1.data.get_stripped()
+        lnom2=col2.data.get_stripped()
+        for k in range(nbli):
+          if lnom1[k][:9]=='VECT_ELEM':
+             sd5=sd_vect_elem(lnom2[k])
+             sd5.check(checker)
+          elif lnom1[k][:9]=='MATR_ELEM':
+             sd5=sd_matr_elem(lnom2[k])
+             sd5.check(checker)
+          elif lnom1[k][:9]=='CHAM_ELEM':
+             sd5=sd_cham_elem(lnom2[k])
+             sd5.check(checker)
+          else:
+             assert 0,lnom1[k]
+             
index aa27bb7f92bd64f057d2ae6709094500c4262175..a5c682f4817424b3fd4ac7f9826c87a4893ece20 100644 (file)
@@ -1,25 +1,29 @@
-#@ MODIF sd_tran_gene SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_tran_gene SD  DATE 27/11/2007   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
 from SD.sd_titre import sd_titre
+from SD.sd_nume_ddl_gene import sd_nume_ddl_gene
+from SD.sd_matr_asse_gene import sd_matr_asse_gene
+from SD.sd_proj_mesu import sd_proj_mesu
+from SD.sd_util import *
 
 
 class sd_tran_gene(sd_titre) :
@@ -27,35 +31,120 @@ class sd_tran_gene(sd_titre) :
     nomj = SDNom(fin=19)
 
     # objets commencant en 19 :
-    FDEP = Facultatif(AsVK8())
-    ACCE = AsVR()
-    ICHO = Facultatif(AsVI())
-    REDN = Facultatif(AsVK24(lonmax=1, ))
-    INST = AsVR()
-    IPSD = Facultatif(AsVR())
-    DEPL = AsVR()
-    VINT = Facultatif(AsVR())
-    FCHO = Facultatif(AsVR())
+    ACCE = AsVR()  # gros objet
+    VITE = AsVR()  # gros objet
+    DEPL = AsVR()  # gros objet
+
+    INST = AsVR()  # gros objet
+    ORDR = AsVI()  # gros objet
     DESC = AsVI(lonmax=5, )
-    INTI = Facultatif(AsVK8())
-    REDC = Facultatif(AsVI())
-    NCHO = Facultatif(AsVK8())
-    REDD = Facultatif(AsVR())
     REFD = AsVK24(lonmax=6, )
-    VITE = AsVR()
-    FVIT = Facultatif(AsVK8())
-    SST = Facultatif(AsVK8())
-    DLOC = Facultatif(AsVR())
-    ORDR = AsVI()
     PTEM = AsVR()
-    FACC = Facultatif(AsVK8())
+
+    # si CHOC :
+    DLOC = Facultatif(AsVR())
+    ICHO = Facultatif(AsVI())
+    INTI = Facultatif(AsVK8())
+    FCHO = Facultatif(AsVR())
+    NCHO = Facultatif(AsVK8())
+    SST  = Facultatif(AsVK8())
     VCHO = Facultatif(AsVR())
+    VINT = Facultatif(AsVR())
+
+    # si nbexcit > 0 :
+    FACC = Facultatif(AsVK8())
+    FDEP = Facultatif(AsVK8())
+    FVIT = Facultatif(AsVK8())
+    IPSD = Facultatif(AsVR())
+
+    # si RELA_EFFO_DEPL :
+    REDN = Facultatif(AsVK24(lonmax=1, ))
+    REDC = Facultatif(AsVI())
+    REDD = Facultatif(AsVR())
+
+    # si utilisation de PROJ_MESU_MODAL :
+    PROJM = Facultatif(sd_proj_mesu(SDNom(debut=8)))
+
+
+
+
+    def u_dime(self):
+        desc=self.DESC.get()
+        nbmode=desc[1] ; assert nbmode >  0
+        nbchoc=desc[2] ; assert nbchoc >= 0
+        nbrede=desc[3] ; assert nbmode >= 0
+        nbsauv=self.ORDR.lonmax  ; assert nbsauv > 0
+        if self.FACC.exists :
+            nbexcit=self.FACC.lonmax / 2  ; assert nbexcit >= 0
+        else :
+            nbexcit=0
+        return (nbmode, nbchoc, nbsauv, nbexcit, nbrede)
+
+
+    def check_DESC(self,checker):
+        desc=self.DESC.get()
+        assert desc[0] in (1,2,3) , desc
+
+
+    def check_REFD(self,checker):
+        # AJACOT : j'avais cru comprendre des choses ... mais sdld104a me prouve le contraire !
+        # à revoir ?????
+        return
+        refd=self.REFD.get_stripped()
+        assert refd[0] != '' , refd
+        sd2= sd_matr_asse_gene(refd[0]) ; sd2.check()
+        assert refd[1] != '' , refd
+        sd2= sd_matr_asse_gene(refd[0]) ; sd2.check()
+        if refd[2] != '' :
+            sd2= sd_matr_asse_gene(refd[2]) ; sd2.check()
+        assert refd[3] != '' , refd
+        sd2= sd_nume_ddl_gene(refd[3]) ; sd2.check()
+        assert refd[4] == '' , refd
+        # test de refd[5] trop compliqué : je craque !
+
+
+    def check_ORDR_INST_PTEM(self,checker):
+        nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime()
+        assert self.ORDR.lonmax == nbsauv
+        assert self.INST.lonmax == nbsauv
+        assert self.PTEM.lonmax in (1, nbsauv)
+        # sdu_tous_differents(self.ORDR,checker) # AJACOT_PB : j'aimerais bien "tous_différents"
+        # sdu_tous_differents(self.INST,checker) #      mais il y a sdld102a  => fiche à émettre ?
+
+
+    def check_DEPL_VITE_ACCE(self,checker):
+        nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime()
+        assert self.DEPL.lonmax == nbsauv*nbmode
+        assert self.VITE.lonmax == nbsauv*nbmode
+        assert self.ACCE.lonmax == nbsauv*nbmode
+
+
+    def check_CHOC(self,checker):
+        nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime()
+        if nbchoc == 0 : return
+        assert self.DLOC.lonmax == 6*nbsauv*nbchoc
+        assert self.VCHO.lonmax == 3*nbsauv*nbchoc
+        assert self.FCHO.lonmax == 3*nbsauv*nbchoc
+        assert self.INTI.lonmax == nbchoc
+        assert self.ICHO.lonmax == nbsauv*nbchoc
+        assert self.NCHO.lonmax == 2*nbchoc
+        assert self.VINT.lonmax == nbsauv*nbchoc
+        assert self.SST.lonmax  == 2*nbchoc
+
 
-    # objets commencant en 8 :
-    BASEPR = Facultatif(AsVR(SDNom(debut=8)))
-    VNOEUD = Facultatif(AsVI(SDNom(debut=8)))
-    VORIEN = Facultatif(AsVR(SDNom(debut=8)))
-    VRANGE = Facultatif(AsVK8(SDNom(debut=8)))
+    def check_EXCIT(self,checker):
+        nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime()
+        if nbexcit == 0 : return
+        assert self.FACC.lonmax == 2*nbexcit
+        assert self.FDEP.lonmax == 2*nbexcit
+        assert self.FVIT.lonmax == 2*nbexcit
+        #assert self.IPSD.lonmax == nbexcit*neq # JP : neq != nbmode. Que vaut neq ??
 
 
+    def check_RELA_DEPL(self,checker):
+        nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime()
+        if nbrede == 0 : return
+        assert self.REDC.lonmax == nbsauv*nbrede
+        assert self.REDD.lonmax == nbsauv*nbrede
+        assert self.REDN.lonmax == nbrede
 
index 15bf4ffa7b0d81280c673dcf59f75d765672de2a..10ea554c5e2afda24206e62211a4c12d54a594d6 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_util SD  DATE 23/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_util SD  DATE 22/10/2007   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -141,10 +141,8 @@ def sdu_monotone(seqini) :
     decroiss=1
     for k in range(n) :
         if seq[k] != seq2[k] :
-            if 0 : print "AJACOT non croissant ",k,seq[k],seq2[k]
             croiss=0
         if seq[k] != seq3[k] :
-            if 0 : print "AJACOT non décroissant ",k,seq[k],seq2[k]
             decroiss=0
 
     if   croiss==1 and decroiss==1 :
@@ -163,5 +161,26 @@ def sdu_monotone(seqini) :
 
 def sdu_nom_gd(numgd) :
     # retourne le nom de la grandeur de numéro (numgd)
+    assert numgd > 0 and numgd <1000 , numgd
     ptn=aster.getvectjev('&CATA.GD.NOMGD')
     return ptn[numgd-1].strip()
+
+def sdu_licmp_gd(numgd) :
+    # retourne la liste des cmps de la grandeur de numéro (numgd)
+    nomgd=sdu_nom_gd(numgd)
+    nocmp=aster.getcolljev('&CATA.GD.NOMCMP')
+    return nocmp[nomgd.ljust(8)]
+
+
+
+#  3) Utilitaires pour la vérification de l'existence des objets :
+#  -----------------------------------------------------------------------------------------
+
+def sdu_ensemble(lojb) :
+    # vérifie que les objets JEVEUX de lojb existent simultanément :
+    assert len(lojb) > 1 , lojb
+    lexi=[]
+    for obj1 in lojb :
+        lexi.append(obj1.exists)
+    for x in lexi[1:] :
+        assert x==lexi[0] , (lojb,lexi)
index bcadd9d7030781d39d02b0de8dff0aac2c0586dd..0bd1afc8cf126458f3707cc31fe0158322b9e1f3 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF sd_vect_elem SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_vect_elem SD  DATE 25/03/2008   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 from SD import *
@@ -23,7 +23,14 @@ from SD.sd_resuelem import sd_resuelem
 from SD.sd_matr_elem import sd_matr_elem
 
 class sd_vect_elem(sd_matr_elem):
-    nomj = SDNom(fin=8)
-    LISTE_CHAR = Facultatif(AsColl(acces='NO', stockage='CONTIG', modelong='CONSTANT', type='I', ))
+    nomj = SDNom(fin=19)
+    RELC = Facultatif(AsColl(acces='NO', stockage='CONTIG', modelong='CONSTANT', type='I', ))
 
 
+    def check_RELC(self, checker):
+        if not self.RELC.exists : return
+        lchar = self.RELC.get()
+        for nochar in lchar.keys() :
+            for k in lchar[nochar] :
+                assert k in (0,1) , lchar
+
diff --git a/Aster/Cata/cataSTA9/SD/sd_xfem.py b/Aster/Cata/cataSTA9/SD/sd_xfem.py
new file mode 100644 (file)
index 0000000..ef81e21
--- /dev/null
@@ -0,0 +1,141 @@
+#@ MODIF sd_xfem SD  DATE 04/02/2008   AUTEUR GALENNE E.GALENNE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_cham_no   import sd_cham_no
+from SD.sd_cham_elem import sd_cham_elem
+from SD.sd_carte     import sd_carte
+from SD.sd_util      import *
+
+
+
+#-------------------------------
+#       I. sd fiss_xfem
+#-------------------------------
+
+class sd_fiss_xfem(AsBase):
+    nomj = SDNom(fin=8)
+
+# I.1) objets relatifs aux level sets
+
+    LNNO   = sd_cham_no()
+    LTNO   = sd_cham_no()
+    GRLNNO = sd_cham_no()
+    GRLTNO = sd_cham_no()
+    BASLOC = sd_cham_no()
+    FONDFISS        = Facultatif(AsVR())
+    BASEFOND        = Facultatif(AsVR())
+    FONDMULT        = Facultatif(AsVI())
+    CARAFOND        = AsVR()
+
+# I.2) objets relatifs à l'enrichissement
+
+    GROUP_MA_ENRI   = AsVI()
+    GROUP_NO_ENRI   = AsVI()
+    STNO   = sd_cham_no()
+    STNOR  = sd_cham_no()
+
+    MAILFISS_CTIP  = Facultatif(AsVI(SDNom(nomj='.MAILFISS  .CTIP')))
+    MAILFISS_HEAV  = Facultatif(AsVI(SDNom(nomj='.MAILFISS  .HEAV')))
+    MAILFISS_HECT  = Facultatif(AsVI(SDNom(nomj='.MAILFISS  .HECT')))
+    MAILFISS_INDIC = AsVI(SDNom(nomj='.MAILFISS .INDIC'), lonmax=6, )
+    LISNOH         = Facultatif(AsVI())
+
+# I.3) objets relatifs à la propagation
+
+    PRO_MES_EL  = Facultatif(sd_cham_elem(SDNom(nomj='.PRO.MES_EL')))
+    PRO_NORMAL  = Facultatif(sd_cham_elem(SDNom(nomj='.PRO.NORMAL')))
+
+# I.4) objets relatifs au contact
+
+    BASCO  = Facultatif(sd_cham_no())
+    LISCO  = Facultatif(AsVR(SDNom(nomj='.LISCO')))
+    LISEQ  = Facultatif(AsVI(SDNom(nomj='.LISEQ')))
+    LISRL  = Facultatif(AsVI(SDNom(nomj='.LISRL')))
+
+
+# 1.5) vérifications d'existence :
+
+    def check_existence(self,checker) :
+        sdu_ensemble((self.FONDFISS, self.FONDMULT))
+        sdu_ensemble((self.LISRL, self.LISCO))
+        sdu_ensemble((self.PRO_MES_EL.CELD, self.PRO_NORMAL.CELD))
+
+
+#-------------------------------
+#       II. sd modele
+#-------------------------------
+
+class sd_modele_xfem(AsBase):
+    nomj = SDNom(fin=8)
+
+# II.1) objets relatifs aux sous-éléments
+
+    TOPOSE_PIN  = sd_cham_elem(SDNom(nomj='.TOPOSE.PIN'))
+    TOPOSE_CNS  = sd_cham_elem(SDNom(nomj='.TOPOSE.CNS'))
+    TOPOSE_HEA  = sd_cham_elem(SDNom(nomj='.TOPOSE.HEA'))
+    TOPOSE_LON  = sd_cham_elem(SDNom(nomj='.TOPOSE.LON'))
+    TOPOSE_CRI  = Facultatif(sd_cham_elem(SDNom(nomj='.TOPOSE.CRI')))
+
+# II.2) objets relatifs aux facettes de contact
+
+    TOPOFAC_PI  = sd_cham_elem(SDNom(nomj='.TOPOFAC.PI'))
+    TOPOFAC_AI  = sd_cham_elem(SDNom(nomj='.TOPOFAC.AI'))
+    TOPOFAC_CF  = sd_cham_elem(SDNom(nomj='.TOPOFAC.CF'))
+    TOPOFAC_LO  = sd_cham_elem(SDNom(nomj='.TOPOFAC.LO'))
+    TOPOFAC_BA  = sd_cham_elem(SDNom(nomj='.TOPOFAC.BA'))
+
+    TOPOFAC_GM  = sd_cham_elem(SDNom(nomj='.TOPOFAC.GM'))
+    TOPOFAC_GE  = sd_cham_elem(SDNom(nomj='.TOPOFAC.GE'))
+    TOPOFAC_OE  = sd_cham_elem(SDNom(nomj='.TOPOFAC.OE'))
+    TOPOFAC_OM  = sd_cham_elem(SDNom(nomj='.TOPOFAC.OM'))
+
+# II.3) objets concaténés relatifs aux level sets
+
+    LNNO   = sd_cham_no()
+    LTNO   = sd_cham_no()
+    BASLOC = sd_cham_no()
+    STNO   = sd_cham_no()
+
+# II.4) autres objets
+
+    XFEM_CONT   = AsVI(lonmax=1) # contact ou pas
+    FISS   = AsVK8()             # noms des fissures
+    NFIS   = AsVI(lonmax=1,)     # nombre de fissures
+    XMAFIS = sd_carte()          # pour chaque maille : nom de la fissure
+
+
+
+#----------------------------------
+#       III. sd charge de contact
+#----------------------------------
+
+class sd_contact_xfem(AsBase):
+#-------------------------------
+    nomj = SDNom(fin=16)
+
+    CARACF  = AsVR()
+    ECPDON  = AsVI()
+    METHCO  = AsVI()
+
+    XFIMAI  = AsVK8()
+    XNRELL  = AsVK24()
+    XNBASC  = AsVK24()
index 97a69935ac07a278201c06a37052c6c6f9b6cf5a..8e4980be6be5a34623adfeb828c6dfebe457ba77 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF utilsd SD  DATE 02/04/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF utilsd SD  DATE 10/09/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -23,7 +23,7 @@
    Utilitaire sur le catalogue des structures de données.
 """
 
-__revision__ = "$Id: utilsd.py,v 1.1.2.2 2007-06-08 09:15:34 pnoyret Exp $"
+__revision__ = "$Id: utilsd.py,v 1.2.6.3.4.2 2008-10-10 13:32:10 pnoyret Exp $"
 
 import sys
 import os
@@ -46,6 +46,7 @@ def import_sd(nomsd):
       mod = __import__('SD.%s' % nomsd, globals(), locals(), [nomsd])
       klass = getattr(mod, nomsd)
    except (ImportError, AttributeError), msg:
+      print msg
       raise ImportError, "impossible d'importer la SD '%s'" % nomsd
    return klass
 
@@ -59,7 +60,7 @@ def tree(nom, *args):
          l.append('-'*80)
       sd_class = import_sd(sd)
       tmpobj = sd_class(nomj=nom)
-      l.append(tmpobj.info())
+      l.append(tmpobj.dump())
    return os.linesep.join(l)
 
 # -----------------------------------------------------------------------------
index cd179e9ab7885dd0bb37cbc189c9728e3cf306e5..9107d31ceb15ded94946f9a51b6acceb77b266d2 100644 (file)
@@ -1,4 +1,4 @@
-#& MODIF ENTETE  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#& MODIF ENTETE  DATE 12/02/2008   AUTEUR REZETTE C.REZETTE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 
-__version__ = "$Name: V1_12a2 $"
-__Id__ = "$Id: cata.py,v 1.1.2.4 2007-06-14 16:18:46 pnoyret Exp $"
+# faire que la division soit toujours réelle
+from __future__ import division
+
+__version__ = "$Name:  $"
+__Id__ = "$Id: cata.py,v 1.2.6.5.4.3 2008-10-10 13:31:49 pnoyret Exp $"
 
 import Accas
 from Accas import *
@@ -210,6 +213,7 @@ from SD.co_matr_elem import matr_elem, \
 # table :
 from SD.co_table import table_sdaster, table_jeveux
 from SD.co_table_fonction import table_fonction
+from SD.co_table_container import table_container
 
 # -----------------------------------------------------------------------------
 # vect_asse_gene :
@@ -222,9 +226,8 @@ from SD.co_vect_elem import vect_elem, \
                             vect_elem_pres_r, vect_elem_pres_c, \
                             vect_elem_temp_r
 
-#& MODIF COMMUN  DATE 21/05/2007   AUTEUR FERNANDES R.FERNANDES 
+#& MODIF COMMUN  DATE 06/05/2008   AUTEUR MARKOVIC D.MARKOVIC 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
-# RESPONSABLE JMBHH01 J.M.PROIX
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
@@ -241,129 +244,133 @@ from SD.co_vect_elem import vect_elem, \
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE PROIX J.M.PROIX
 def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
            RELATION        =SIMP(statut='o',typ='TXM',defaut="VMIS_ISOT_TRAC",
                                  into=( "ELAS",
 # Spécial Discrets : début
-                                        "DIS_VISC",
-                                        "DIS_ECRO_CINE",
+                                        "DIS_VISC",        # RESP. : FLEJOU J.L.FLEJOU
+                                        "DIS_ECRO_CINE",   # RESP. : FLEJOU J.L.FLEJOU
+                                        "DIS_BILI_ELAS",   # RESP. : FLEJOU J.L.FLEJOU
 # Spécial Discrets : fin
-                                        "ELAS_HYPER",
-                                        "VMIS_ISOT_TRAC",
-                                        "VISC_ISOT_TRAC",
-                                        "VMIS_ISOT_LINE",
-                                        "VISC_ISOT_LINE",
-                                        "VMIS_ISOT_PUIS",
-                                        "VMIS_ECMI_TRAC",
-                                        "VMIS_ECMI_LINE",
-                                        "LABORD_1D",
-                                        "ENDO_FRAGILE",
-                                        "ENDO_ISOT_BETON",
-                                        "ENDO_ORTH_BETON",
-                                        "BETON_REGLE_PR",
-                                        "MAZARS",
-                                        "JOINT_BA",
-                                        "RUPT_FRAG",
-                                        "CZM_EXP_REG",
-                                        "CZM_LIN_REG",
-                                        "CZM_EXP",
-                                        "META_P_IL",
-                                        "META_P_IL_PT",
-                                        "META_P_IL_RE",
-                                        "META_P_IL_PT_RE",
-                                        "META_V_IL",
-                                        "META_V_IL_PT",
-                                        "META_V_IL_RE",
-                                        "META_V_IL_PT_RE",
-                                        "META_P_INL",
-                                        "META_P_INL_PT",
-                                        "META_P_INL_RE",
-                                        "META_P_INL_PT_RE",
-                                        "META_V_INL",
-                                        "META_V_INL_PT",
-                                        "META_V_INL_RE",
-                                        "META_V_INL_PT_RE",
-                                        "META_P_CL",
-                                        "META_P_CL_PT",
-                                        "META_P_CL_RE",
-                                        "META_P_CL_PT_RE",
-                                        "META_V_CL",
-                                        "META_V_CL_PT",
-                                        "META_V_CL_RE",
-                                        "META_V_CL_PT_RE",
-                                        "VMIS_CINE_LINE",
-                                        "VISC_TAHERI",
-                                        "VISCOCHAB",
-                                        "VMIS_CIN1_CHAB",
-                                        "VMIS_CIN2_CHAB",
-                                        "VISC_CIN1_CHAB",
-                                        "VISC_CIN2_CHAB",
-                                        "LMARC",
-                                        "LMARC_IRRA",
-                                        "ROUSSELIER",
-                                        "ROUSS_PR",
-                                        "ROUSS_VISC",
-                                        "VMIS_POU_LINE",
-                                        "VMIS_POU_FLEJOU",
-                                        "ARME",
-                                        "ASSE_CORN",
-                                        "NORTON_HOFF",
-                                        "LEMAITRE",
-                                        "LEMAITRE_IRRA",
-                                        "LEMA_SEUIL",
-                                        "IRRAD3M",
-                                        "ZIRC_CYRA2",
-                                        "VISC_IRRA_LOG",
-                                        "GRAN_IRRA_LOG",
-                                        "ZIRC_EPRI",
-                                        "VENDOCHAB",
-                                        "NADAI_B",
-                                        "DIS_CONTACT",
-                                        "DIS_CHOC",
-                                        "DIS_GRICRA",
-                                        "DIS_GOUJ2E_PLAS",
-                                        "DIS_GOUJ2E_ELAS",
-                                        "GRILLE_ISOT_LINE",
-                                        "GRILLE_CINE_LINE",
-                                        "GRILLE_PINTO_MEN",
-                                        "PINTO_MENEGOTTO",
-                                        "CJS",
-                                        "HUJEUX",
-                                        "CAM_CLAY",
-                                        "BARCELONE",
-                                        "LAIGLE",
-                                        "DRUCKER_PRAGER",
-                                        "HOEK_BROWN",
-                                        "HOEK_BROWN_EFF",
-                                        "HOEK_BROWN_TOT",
-                                        "GRANGER_FP",
-                                        "GRANGER_FP_INDT",
-                                        "GRANGER_FP_V",
-                                        "BAZANT_FD",
-                                        "BETON_UMLV_FP",
-                                        "BETON_DOUBLE_DP",
-                                        "KIT_HH",
-                                        "KIT_HM",
-                                        "KIT_HHM",
-                                        "KIT_THH",
-                                        "KIT_THV",
-                                        "KIT_THM",
-                                        "KIT_THHM",
-                                        "VMIS_ASYM_LINE",
-                                        "KIT_DDI",
-                                        "GLRC_DAMAGE",
-                                        "GLRC_DM",
-                                        "SANS",
-                                        "CORR_ACIER",
-                                        "MONOCRISTAL",
-                                        "POLYCRISTAL",
-                                        "ZMAT",
-                                        "GATT_MONERIE",
-                                        "MULTIFIBRE",
+                                        "ELAS_HYPER",      # RESP. : ABBAS M.ABBAS
+                                        "VMIS_ISOT_TRAC",  # RESP. : PROIX J.M.PROIX
+                                        "VISC_ISOT_TRAC",  # RESP. : PROIX J.M.PROIX
+                                        "VMIS_ISOT_LINE",  # RESP. : PROIX J.M.PROIX
+                                        "VISC_ISOT_LINE",  # RESP. : MICHEL S.MICHEL
+                                        "VMIS_ISOT_PUIS",  # RESP. : PROIX J.M.PROIX
+                                        "VMIS_ECMI_TRAC",  # RESP. : PROIX J.M.PROIX
+                                        "VMIS_ECMI_LINE",  # RESP. : PROIX J.M.PROIX
+                                        "LABORD_1D",       # RESP. : VOLDOIRE F.VOLDOIRE
+                                        "ENDO_FRAGILE",    # RESP. : MICHEL S.MICHEL
+                                        "ENDO_ISOT_BETON", # RESP. : MICHEL S.MICHEL
+                                        "ENDO_ORTH_BETON", # RESP. : MICHEL S.MICHEL
+                                        "BETON_REGLE_PR",  # RESP. : NECS
+                                        "MAZARS",          # RESP. : MICHEL S.MICHEL
+                                        "JOINT_BA",        # RESP. : MICHEL S.MICHEL
+                                        "RUPT_FRAG",       # RESP. : LAVERNE J.LAVERNE
+                                        "CZM_EXP_REG",     # RESP. : LAVERNE J.LAVERNE
+                                        "CZM_LIN_REG",     # RESP. : LAVERNE J.LAVERNE
+                                        "CZM_EXP",         # RESP. : LAVERNE J.LAVERNE
+                                        "META_P_IL",       # RESP. : CANO V.CANO
+                                        "META_P_IL_PT",    # RESP. : CANO V.CANO
+                                        "META_P_IL_RE",    # RESP. : CANO V.CANO
+                                        "META_P_IL_PT_RE", # RESP. : CANO V.CANO
+                                        "META_V_IL",       # RESP. : CANO V.CANO
+                                        "META_V_IL_PT",    # RESP. : CANO V.CANO
+                                        "META_V_IL_RE",    # RESP. : CANO V.CANO
+                                        "META_V_IL_PT_RE", # RESP. : CANO V.CANO
+                                        "META_P_INL",      # RESP. : CANO V.CANO
+                                        "META_P_INL_PT",   # RESP. : CANO V.CANO
+                                        "META_P_INL_RE",   # RESP. : CANO V.CANO
+                                        "META_P_INL_PT_RE",# RESP. : CANO V.CANO
+                                        "META_V_INL",      # RESP. : CANO V.CANO
+                                        "META_V_INL_PT",   # RESP. : CANO V.CANO
+                                        "META_V_INL_RE",   # RESP. : CANO V.CANO
+                                        "META_V_INL_PT_RE",# RESP. : CANO V.CANO
+                                        "META_P_CL",       # RESP. : CANO V.CANO
+                                        "META_P_CL_PT",    # RESP. : CANO V.CANO
+                                        "META_P_CL_RE",    # RESP. : CANO V.CANO
+                                        "META_P_CL_PT_RE", # RESP. : CANO V.CANO
+                                        "META_V_CL",       # RESP. : CANO V.CANO
+                                        "META_V_CL_PT",    # RESP. : CANO V.CANO
+                                        "META_V_CL_RE",    # RESP. : CANO V.CANO
+                                        "META_V_CL_PT_RE", # RESP. : CANO V.CANO
+                                        "META_LEMA_ANI",   # RESP. : CANO V.CANO                                     
+                                        "VMIS_CINE_LINE",  # RESP. : PROIX J.M.PROIX
+                                        "VISC_TAHERI",     # RESP. : TAHERI S.TAHERI
+                                        "VISCOCHAB",       # RESP. : None
+                                        "VMIS_CIN1_CHAB",  # RESP. : PROIX J.M.PROIX
+                                        "VMIS_CIN2_CHAB",  # RESP. : PROIX J.M.PROIX
+                                        "VISC_CIN1_CHAB",  # RESP. : PROIX J.M.PROIX
+                                        "VISC_CIN2_CHAB",  # RESP. : PROIX J.M.PROIX
+                                        "VMIS_CIN2_MEMO",  # RESP. : PROIX J.M.PROIX
+                                        "VISC_CIN2_MEMO",  # RESP. : PROIX J.M.PROIX
+                                        "LMARC",           # RESP. : None
+                                        "LMARC_IRRA",      # RESP. : FERNANDES R.FERNANDES
+                                        "ROUSSELIER",      # RESP. : CANO V.CANO
+                                        "ROUSS_PR",        # RESP. : PARROT A.PARROT
+                                        "ROUSS_VISC",      # RESP. : CANO V.CANO
+                                        "VMIS_POU_LINE",   # RESP. : PROIX J.M.PROIX
+                                        "VMIS_POU_FLEJOU", # RESP. : FLEJOU J.L.FLEJOU
+                                        "ARME",            # RESP. : PEYRARD C.PEYRARD
+                                        "ASSE_CORN",       # RESP. : PEYRARD C.PEYRARD
+                                        "NORTON_HOFF",     # RESP. : MICHEL S.MICHEL
+                                        "LEMAITRE",        # RESP. : DEBONNIERES P.DEBONNIERES
+                                        "LEMAITRE_IRRA",   # RESP. : FERNANDES R.FERNANDES
+                                        "LEMA_SEUIL",      # RESP. : LECLERC S.LECLERC
+                                        "IRRAD3M",         # RESP. : FLEJOU J.L.FLEJOU
+                                        "VISC_IRRA_LOG",   # RESP. : FERNANDES R.FERNANDES
+                                        "GRAN_IRRA_LOG",   # RESP. : FERNANDES R.FERNANDES
+                                        "VENDOCHAB",       # RESP. : None
+                                        "NADAI_B",         # RESP. : None
+                                        "DIS_CHOC",        # RESP. : DEVESA G.DEVESA
+                                        "DIS_GRICRA",      # RESP. : FERNANDES R.FERNANDES
+                                        "DIS_GOUJ2E_PLAS", # RESP. : ANGLES J.ANGLES
+                                        "DIS_GOUJ2E_ELAS", # RESP. : ANGLES J.ANGLES
+                                        "GRILLE_ISOT_LINE",# RESP. : ROSPARS C.ROSPARS
+                                        "GRILLE_CINE_LINE",# RESP. : ROSPARS C.ROSPARS
+                                        "GRILLE_PINTO_MEN",# RESP. : ROSPARS C.ROSPARS
+                                        "PINTO_MENEGOTTO", # RESP. : ROSPARS C.ROSPARS
+                                        "CJS",             # RESP. : CHAVANT C.CHAVANT
+                                        "HUJEUX",          # RESP. : FOUCAULT A.FOUCAULT
+                                        "CAM_CLAY",        # RESP. : ELGHARIB J.ELGHARIB
+                                        "BARCELONE",       # RESP. : ELGHARIB J.ELGHARIB
+                                        "LAIGLE",          # RESP. : ELGHARIB J.ELGHARIB
+                                        "LETK",            # RESP. : ELGHARIB J.ELGHARIB
+                                        "DRUCK_PRAGER",    # RESP. : FERNANDES R.FERNANDES
+                                        "DRUCK_PRAG_N_A",  # RESP. : FERNANDES R.FERNANDES
+                                        "HOEK_BROWN",      # RESP. : CHAVANT C.CHAVANT
+                                        "HOEK_BROWN_EFF",  # RESP. : CHAVANT C.CHAVANT
+                                        "HOEK_BROWN_TOT",  # RESP. : CHAVANT C.CHAVANT
+                                        "GRANGER_FP",      # RESP. : ROSPARS C.ROSPARS
+                                        "GRANGER_FP_INDT", # RESP. : ROSPARS C.ROSPARS
+                                        "GRANGER_FP_V",    # RESP. : ROSPARS C.ROSPARS
+                                        "BETON_UMLV_FP",   # RESP. : LEPAPE Y.LEPAPE
+                                        "BETON_DOUBLE_DP", # RESP. : ELGHARIB J.ELGHARIB
+                                        "KIT_HH",          # RESP. : GRANET S.GRANET
+                                        "KIT_HM",          # RESP. : GRANET S.GRANET
+                                        "KIT_HHM",         # RESP. : GRANET S.GRANET
+                                        "KIT_THH",         # RESP. : GRANET S.GRANET
+                                        "KIT_THV",         # RESP. : GRANET S.GRANET
+                                        "KIT_THM",         # RESP. : GRANET S.GRANET
+                                        "KIT_THHM",        # RESP. : GRANET S.GRANET
+                                        "VMIS_ASYM_LINE",  # RESP. : None
+                                        "KIT_DDI",         # RESP. : CHAVANT C.CHAVANT
+                                        "GLRC_DAMAGE",     # RESP. : MARKOVIC D.MARKOVIC
+                                        "GLRC_DM",         # RESP. : MARKOVIC D.MARKOVIC
+                                        "SANS",            # RESP. : None
+                                        "CORR_ACIER",      # RESP. : LEPAPE Y.LEPAPE
+                                        "MONOCRISTAL",     # RESP. : PROIX J.M.PROIX
+                                        "POLYCRISTAL",     # RESP. : PROIX J.M.PROIX
+                                        "ZMAT",            # RESP. : PROIX J.M.PROIX
+                                        "GATT_MONERIE",    # RESP. : DEBONNIERES P.DEBONNIERES
+                                        "MULTIFIBRE",      # RESP. : FLEJOU J.L.FLEJOU
                                      ) ),
 # Spécial discrets : début
           DIS_VISC       =SIMP(statut='c',typ='I',defaut=12,into=(12,)),
           DIS_ECRO_CINE  =SIMP(statut='c',typ='I',defaut=18,into=(18,)),
+          DIS_BILI_ELAS  =SIMP(statut='c',typ='I',defaut= 6,into=( 6,)),
 # Spécial discrets : fin
           ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
           ELAS_HYPER      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
@@ -384,39 +391,42 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
           MAZARS          =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
           JOINT_BA        =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
           RUPT_FRAG       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-          CZM_EXP_REG      =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
-          CZM_LIN_REG      =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
-          CZM_EXP          =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
-          META_P_IL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-          META_P_IL_PT       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-          META_P_IL_RE       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-          META_P_IL_PT_RE    =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-          META_V_IL          =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-          META_V_IL_PT       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-          META_V_IL_RE       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-          META_V_IL_PT_RE    =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-          META_P_INL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-          META_P_INL_PT      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-          META_P_INL_RE      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-          META_P_INL_PT_RE   =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-          META_V_INL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-          META_V_INL_PT      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-          META_V_INL_RE      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-          META_V_INL_PT_RE   =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-          META_P_CL          =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
-          META_P_CL_PT       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
-          META_P_CL_RE       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
-          META_P_CL_PT_RE    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
-          META_V_CL          =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
-          META_V_CL_PT       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
-          META_V_CL_RE       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
-          META_V_CL_PT_RE    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          CZM_EXP_REG     =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+          CZM_LIN_REG     =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+          CZM_EXP         =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
+          META_P_IL       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_IL_PT    =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_IL_RE    =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_IL_PT_RE =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL_PT    =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL_RE    =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_IL_PT_RE =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL_PT   =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL_RE   =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_INL_PT_RE=SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL_PT   =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL_RE   =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_V_INL_PT_RE=SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          META_P_CL       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_P_CL_PT    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_P_CL_RE    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_P_CL_PT_RE =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL_PT    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL_RE    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_V_CL_PT_RE =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          META_LEMA_ANI   =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
           VMIS_CINE_LINE  =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
           VISCOCHAB       =SIMP(statut='c',typ='I',defaut=28,into=(28,)),
           VMIS_CIN1_CHAB  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
           VMIS_CIN2_CHAB  =SIMP(statut='c',typ='I',defaut=14,into=(14,)),
           VISC_CIN1_CHAB  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
           VISC_CIN2_CHAB  =SIMP(statut='c',typ='I',defaut=14,into=(14,)),
+          VMIS_CIN2_MEMO  =SIMP(statut='c',typ='I',defaut=28,into=(28,)),
+          VISC_CIN2_MEMO  =SIMP(statut='c',typ='I',defaut=28,into=(28,)),
           LMARC           =SIMP(statut='c',typ='I',defaut=20,into=(20,)),
           LMARC_IRRA      =SIMP(statut='c',typ='I',defaut=20,into=(20,)),
           VISC_TAHERI     =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
@@ -432,8 +442,6 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
           LEMA_SEUIL      =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
           IRRAD3M         =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
           LEMAITRE_IRRA   =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-          ZIRC_CYRA2      =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-          ZIRC_EPRI       =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
           VISC_IRRA_LOG   =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
           GRAN_IRRA_LOG   =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
           NADAI_B         =SIMP(statut='c',typ='I',defaut=34,into=(34,)),
@@ -441,25 +449,25 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
           GRILLE_ISOT_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)),
           GRILLE_CINE_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)),
           GRILLE_PINTO_MEN=SIMP(statut='c',typ='I',defaut=16,into=(16,)),
-          DIS_CONTACT     =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
           DIS_CHOC        =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
-          DIS_GRICRA     =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+          DIS_GRICRA      =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
           DIS_GOUJ2E_PLAS =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
           DIS_GOUJ2E_ELAS =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
           PINTO_MENEGOTTO =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
           CJS             =SIMP(statut='c',typ='I',defaut=16,into=(16,)),
-          HUJEUX       =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+          HUJEUX          =SIMP(statut='c',typ='I',defaut=35,into=(35,)),
           CAM_CLAY        =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
           BARCELONE       =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
           LAIGLE          =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
-          DRUCKER_PRAGER  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+          LETK            =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
+          DRUCK_PRAGER    =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+          DRUCK_PRAG_N_A  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
           HOEK_BROWN      =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
           HOEK_BROWN_EFF  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
           HOEK_BROWN_TOT  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
           GRANGER_FP      =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
           GRANGER_FP_INDT =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
           GRANGER_FP_V    =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
-          BAZANT_FD       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
           BETON_DOUBLE_DP =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
           KIT_HH          =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
           KIT_HM          =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
@@ -470,7 +478,7 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
           KIT_THHM        =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
           VMIS_ASYM_LINE  =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
           BETON_UMLV_FP   =SIMP(statut='c',typ='I',defaut=21,into=(21,)),
-          GLRC_DAMAGE     =SIMP(statut='c',typ='I',defaut=21,into=(21,)),
+          GLRC_DAMAGE     =SIMP(statut='c',typ='I',defaut=19,into=(19,)),
           GLRC_DM         =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
           GATT_MONERIE    =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
 
@@ -498,7 +506,9 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
                                        "CAM_CLAY",
                                        "BARCELONE",
                                        "LAIGLE",
-                                       "DRUCKER_PRAGER",
+                                       "LETK",
+                                       "DRUCK_PRAGER",
+                                       "DRUCK_PRAG_N_A",
                                        "HOEK_BROWN_EFF",
                                        "HOEK_BROWN_TOT",
                                        "MAZARS",
@@ -513,16 +523,19 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
                                        "LIQU_GAZ",
 # HYDR
                                        "HYDR_UTIL",
+                                       "HYDR_VGM",
                                        "HYDR",
                                        "HYDR_ENDO",
 # MECA_META
                                        "ACIER",
                                        "ZIRC",
 # MECA KIT_DDI
+                                       "VMIS_CINE_LINE",
                                        "VMIS_ISOT_TRAC",
                                        "VMIS_ISOT_LINE",
                                        "VMIS_ISOT_CINE",
                                        "VMIS_ISOT_PUIS",
+                                       "GLRC_DM",
                                        "GRANGER_FP",
                                        "GRANGER_FP_INDT",
                                        "GRANGER_FP_V",
@@ -533,44 +546,691 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
                                        ),),
 
 
-           GAZ             =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-           LIQU_SATU       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-           LIQU_GAZ_ATM    =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           LIQU_VAPE_GAZ   =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
-           LIQU_AD_GAZ_VAPE=SIMP(statut='c',typ='I',defaut=3,into=(3,)),
-           LIQU_VAPE       =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
-           LIQU_GAZ        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           HYDR_UTIL       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-           HYDR            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-           HYDR_ENDO       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-           ACIER           =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
-           ZIRC            =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           GAZ             =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           LIQU_SATU       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           LIQU_GAZ_ATM    =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_VAPE_GAZ   =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           LIQU_AD_GAZ_VAPE=SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           LIQU_VAPE       =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           LIQU_GAZ        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           HYDR_UTIL       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           HYDR_VGM        =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           HYDR            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           HYDR_ENDO       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ACIER           =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+           ZIRC            =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",
+                             into=("PETIT","PETIT_REAC","SIMO_MIEHE","GREEN_GR","GREEN","COROTATIONNEL",
+                                   "REAC_GEOM","EULER_ALMANSI")),
+           ALGO_C_PLAN     =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
+#           b_deborst      = BLOC(condition = " ALGO_C_PLAN == 'DEBORST' ",
+#                        fr="Tolérance relative sur la verification des contraintes planes",
+           RESI_DEBORST  =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+#                                ),
+           ALGO_1D         =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
+#           b_dbiter      = BLOC(condition = " (ALGO_C_PLAN == 'DEBORST') or (ALGO_1D == 'DEBORST')",
+#                        fr="Nombre d'iterations maximal pour la boucle pour les contraintes planes",
+           ITER_MAXI_DEBORST  =SIMP(statut='f',typ='I',defaut= 1),
+#                                ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+                                 into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+           TYPE_MATR_TANG  =SIMP(statut='f',typ='TXM',into=("PERTURBATION","VERIFICATION","TANGENTE_SECANTE")),
+           b_perturb      = BLOC(condition = " (TYPE_MATR_TANG != None) and (TYPE_MATR_TANG != 'TANGENTE_SECANTE') ",
+                        fr="Calcul de la matrice tangente par perturbation, valeur de la perturbation",
+                 VALE_PERT_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-5),
+                                ),
+           b_tangsec      = BLOC(condition = " TYPE_MATR_TANG == 'TANGENTE_SECANTE' ",
+                        fr="Modification evolutive de la matrice tangente/secante",
+                 SEUIL        =SIMP(statut='f',typ='R',defaut= 3. ),
+                 AMPLITUDE    =SIMP(statut='f',typ='R',defaut= 1.5 ),
+                 TAUX_RETOUR  =SIMP(statut='f',typ='R',defaut= 0.05 ),
+                                ),
+           PARM_THETA      =SIMP(statut='f',typ='R',defaut= 1. ),
+         ) ;
+#& MODIF COMMUN  DATE 06/05/2008   AUTEUR CNGUYEN C.NGUYEN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  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.        
+# ======================================================================
+
+def C_CONTACT() : return FACT(statut='f',max='**',
+           fr="Définit les zones soumises à des conditions de contact unilatéral avec ou sans frottement",
+
+
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",
+                                 into  =("VERIF","CONTRAINTE","LAGRANGIEN","PENALISATION","CONTINUE","GCP","XFEM") ),
+#
+# OPTIONS D'APPARIEMENT
+#
+
+           APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+                                 into  =("NODAL","MAIT_ESCL")),
+
+           LISSAGE         =SIMP(statut='f',typ='TXM',defaut="NON",
+                                 into  =("OUI","NON")),          
+                             
+           NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",
+                                 into  =("MAIT","MAIT_ESCL","ESCL"),),
+                                 
+           VECT_MAIT       =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                                 into  =("AUTO","FIXE","VECT_Y")),                      
+
+           b_nmait_fixe     =BLOC(condition = "VECT_MAIT == 'FIXE'",
+             MAIT_FIXE     =SIMP(statut='f',typ='R',min=3,max=3),
+           ),
+
+           b_nmait_vecty    =BLOC(condition = "VECT_MAIT == 'VECT_Y'",
+             MAIT_VECT_Y   =SIMP(statut='f',typ='R',min=3,max=3),
+           ),
+
+           VECT_ESCL       =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                                 into  =("AUTO","FIXE","VECT_Y")),                      
+
+           b_nescl_fixe     =BLOC(condition = "VECT_ESCL == 'FIXE'",
+             ESCL_FIXE     =SIMP(statut='f',typ='R',min=3,max=3),
+           ),
+
+           b_nescl_vecty    =BLOC(condition = "VECT_ESCL == 'VECT_Y'",
+             ESCL_VECT_Y   =SIMP(statut='f',typ='R',min=3,max=3),
+           ),
+
+
+           TYPE_APPA       =SIMP(statut='f',typ='TXM',defaut="PROCHE",
+                                 into  =("PROCHE","FIXE")),  
+                                 
+           b_appa_fixe     =BLOC(condition = "TYPE_APPA == 'FIXE'",
+             DIRE_APPA     =SIMP(statut='f',typ='R',min=3,max=3),
+           ),
+           
+           b_dist_struct   =BLOC(condition = "METHODE != 'CONTINUE' and METHODE != 'XFEM' ",
+             DIST_POUTRE     =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+             DIST_COQUE      =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+             b_cara         =BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'",
+               CARA_ELEM       =SIMP(statut='o',typ=(cara_elem) ),
+             ),
+           ),
+           
+           DIST_MAIT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           DIST_ESCL       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+
+
+           TOLE_APPA       =SIMP(statut='f',typ='R'  ,defaut=-1.0), 
+           TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),  
+                
+                      
+           b_xfem         =BLOC(condition = "METHODE == 'XFEM' ",
+             FISS_MAIT      = SIMP(statut='o',typ=fiss_xfem,max=1),
+             FISS_ESCL      = SIMP(statut='f',typ=fiss_xfem,max=1),
+             SIGN_MAIT      = SIMP(statut='f',typ='TXM',into=("+","-",) ),
+             SIGN_ESCL      = SIMP(statut='f',typ='TXM',into=("+","-",) ),
+             INTEGRATION    = SIMP(statut='f',typ='TXM',defaut="FPG4",into=("GAUSS","FPG2","FPG3","FPG4","FPG6","FPG7","NOEUD",) ),
+             COEF_REGU_CONT = SIMP(statut='f',typ='R',defaut=100.E+0),
+             ITER_CONT_MAXI = SIMP(statut='f',typ='I',defaut=30),
+             ITER_GEOM_MAXI  =SIMP(statut='f',typ='I',defaut=0),
+
+             CONTACT_INIT   = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+             ALGO_LAGR      = SIMP(statut='f',typ='TXM',defaut="VERSION1",into=("NON","VERSION1","VERSION2" , ) ),
+             COEF_ECHELLE   = SIMP(statut='f',typ='R',defaut=1.E+6),
+             FROTTEMENT     = SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+             GLISSIERE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             b_frotxfem    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+               COULOMB        = SIMP(statut='o',typ='R',),
+               ITER_FROT_MAXI = SIMP(statut='f',typ='I',defaut=2),
+               COEF_REGU_FROT = SIMP(statut='f',typ='R',defaut=100.E+0),
+               SEUIL_INIT     = SIMP(statut='f',typ='R',defaut=0.E+0),
+               ),
+           ),
+
+           b_notxfem         =BLOC(condition = "METHODE != 'XFEM' ",
+                                   regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),),
+             GROUP_MA_MAIT   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+             MAILLE_MAIT     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+             GROUP_MA_ESCL   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+             MAILLE_ESCL     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+           ),
+
+
+
+           b_verif         =BLOC(condition = "METHODE == 'VERIF' ",
+                                 fr="Paramètres de la méthode sans calcul de contact",
+                STOP_INTERP     =SIMP(statut='f',typ='TXM',defaut="NON",
+                                      into=("OUI","NON")),
+                TOLE_INTERP     =SIMP(statut='f',typ='R',defaut = 0.),
+
+                GROUP_MA_FOND   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           ),
+
+           b_active        =BLOC(condition = "METHODE == 'CONTRAINTE' ",
+                                 fr="Paramètres de la méthode des contraintes actives (contact uniquement)",
+                GLISSIERE       =SIMP(statut='f',typ='TXM',defaut="NON",
+                                      into=("OUI","NON")),
+                b_glissiere     =BLOC(condition = "GLISSIERE == 'OUI' ",
+                      ALARME_JEU  =SIMP(statut='f',typ='R',defaut=0.),
+                                 ),
+
+                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
+                                      into=("OUI","NON")),
+                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
+                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
+                        into=("AUTOMATIQUE","CONTROLE","SANS")),
+
+                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
+                                 fr="Paramètre de la réactualisation géométrique",
+                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
+                                 ),
+
+                SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+
+           ),
+           b_lagrangien    =BLOC(condition = "METHODE == 'LAGRANGIEN' ",
+                                 fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)",
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
+                                      into=("OUI","NON")),
+                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
+                ITER_MULT_MAXI  =SIMP(statut='f',typ='I'  ,defaut=4),
+
+                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
+                                      into=("AUTOMATIQUE","CONTROLE","SANS")),
+
+                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique",
+                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
+
+                                 ),
+
+
+                SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',),
+                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
+                     ),),
+
+           b_penalisation       =BLOC(condition = "METHODE == 'PENALISATION' ",
+                                      fr="Paramètres de la méthode pénalisée (contact avec ou sans frottement)",
+                E_N             =SIMP(statut='f',typ='R'),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
+                                      into=("OUI","NON")),
+                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
+                ITER_MULT_MAXI  =SIMP(statut='f',typ='I',defaut=4),
+
+                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
+                                      into=("AUTOMATIQUE","CONTROLE","SANS")),
+
+                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique",
+                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
+                                 ),
+
+                SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+                
+
+
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',),
+                     E_T             =SIMP(statut='f',typ='R',
+                                           fr="Active la pénalisation sur le frottement et définit le coefficient de pénalisation"),
+                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
+                     ),),
+
+           b_continue      =BLOC(condition = "METHODE == 'CONTINUE' ",
+                                 fr="Paramètres de la méthode continue (contact avec ou sans frottement)",
+#                regles=(UN_PARMI('GLISSIERE','FROTTEMENT'),),
+
+# -------------------------------- CHOIX DE LA FORMULATION DE LA METHODE CONTINUE
+                ALGO_CONT   =SIMP(statut='f',typ='TXM',defaut="LAGRANGIEN",into=("LAGRANGIEN","AUGMENTE","STABILISE"),),
+                b_CONT_LAGR =BLOC(condition = "ALGO_CONT == 'LAGRANGIEN' ",fr="Parametres de la formulation Lagrangienne",
+                                  COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
+                b_CONT_STAB =BLOC(condition = "ALGO_CONT == 'STABILISE' ",fr="Parametres du Lagrangien stabilisé",
+                                  COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                  COEF_STAB_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
+                b_CONT_AUGM =BLOC(condition = "ALGO_CONT == 'AUGMENTE' ",fr="Parametres du Lagrangien augmenté",
+                                  COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                  COEF_STAB_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                  COEF_PENA_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
+# --------------------------------
+                GLISSIERE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+                b_glissiere =BLOC(condition = "GLISSIERE == 'OUI' ",
+                                  ALARME_JEU  =SIMP(statut='f',typ='R',defaut=0.),),
+# --------------------------------
+                COMPLIANCE      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                b_compliance    =BLOC(condition = "COMPLIANCE == 'OUI' ",fr="Parametres de la compliance",
+                                      ASPERITE =SIMP(statut='o',typ='R',),
+                                      E_N      =SIMP(statut='o',typ='R',),
+                                      E_V      =SIMP(statut='f',typ='R',defaut=0.E+0),),
+# --------------------------------
+                FOND_FISSURE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                b_FOND_FISSURE  =BLOC(condition = "FOND_FISSURE == 'OUI' ",fr="TRAITEMENT EN FOND DE FISSURE",
+                                      regles=(UN_PARMI('NOEUD_FOND','GROUP_NO_FOND','MAILLE_FOND','GROUP_MA_FOND'),),
+                                      NOEUD_FOND    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                                      GROUP_NO_FOND =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                                      MAILLE_FOND   =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                                      GROUP_MA_FOND =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),),
+# --------------------------------
+                RACCORD_LINE_QUAD=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                b_RACCORD_SURF   =BLOC(condition = "RACCORD_LINE_QUAD == 'OUI' ",fr="TRAITEMENT DU RACCORD SURFACIQUE",
+                                       regles=(UN_PARMI('NOEUD_RACC','GROUP_NO_RACC'),),
+                                       NOEUD_RACC    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                                       GROUP_NO_RACC =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),),
+# -------------------------------- MOTS-CLEF CONTACT
+                INTEGRATION      =SIMP(statut='f',typ='TXM',defaut="NOEUD",
+                                       into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2",
+                                             "NCOTES","NCOTES1","NCOTES2"),),
+                FORMULATION      =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE"),),
+
+                ITER_GEOM_MAXI   =SIMP(statut='f',typ='I',defaut=2),
+                ITER_CONT_MAXI   =SIMP(statut='f',typ='I',defaut=30),
+                CONTACT_INIT     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),),
+# -------------------------------- détection automatique et exclusion des noeuds impliqués dans le pivot nul
+                EXCLUSION_PIV_NUL=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),),
+# -------------------------------- exclusion manuelle des noeuds impliqués dans le pivot nul;
+#                                  prévaut sur la fonctionnalité précédente sans pour autant interférer avec elle
+                SANS_NOEUD    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                regles        =(EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+# -------------------------------- MOTS-CLEF FROTTEMENT
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     ALGO_FROT       =SIMP(statut='f',typ='TXM',defaut="LAGRANGIEN",
+                                      into=("LAGRANGIEN","AUGMENTE","STABILISE") ),
+                     b_FROT_LAGR =BLOC(condition = "ALGO_FROT == 'LAGRANGIEN' ",fr="Parametres de la formulation Lagrangienne",
+                                       COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
+                     b_FROT_STAB =BLOC(condition = "ALGO_FROT == 'STABILISE' ",fr="Parametres du Lagrangien stabilisé",
+                                       COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                       COEF_STAB_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
+                     b_FROT_AUGM =BLOC(condition = "ALGO_FROT == 'AUGMENTE' ",fr="Parametres du Lagrangien augmenté",
+                                       COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                       COEF_STAB_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                       COEF_PENA_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
+                     COULOMB            =SIMP(statut='o',typ='R',),
+                     SANS_NOEUD_FR    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                     SANS_GROUP_NO_FR =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                     regles             =(EXCLUS('SANS_NOEUD_FR','SANS_GROUP_NO_FR'),),
+                     b_sans_group_no_frot =BLOC(condition = "SANS_GROUP_NO_FR != None or SANS_NO_FR != None",
+                                                fr="Direction(s) de frottement à exclure",
+                                                EXCL_FROT_1 =SIMP(statut='f',typ='R',min=3,max=3),
+                                                EXCL_FROT_2 =SIMP(statut='f',typ='R',min=3,max=3),),
+                     ITER_FROT_MAXI =SIMP(statut='f',typ='I',defaut=2),
+                     SEUIL_INIT     =SIMP(statut='f',typ='R',defaut=0.E+0),
+                     USURE          =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","ARCHARD",),),
+                     b_usure        =BLOC(condition = "USURE == 'ARCHARD' ",fr="Parametres de la loi d'usure d'Archard",
+                                          K =SIMP(statut='o',typ='R',),
+                                          H =SIMP(statut='o',typ='R',),),),),
+
+           b_gcp        =BLOC(condition = "METHODE == 'GCP' ",
+                                 fr="Paramètres de la méthode du gradient conjugué projeté (contact uniquement)",
+                RESI_ABSO       =SIMP(statut='o',typ='R',
+                                      fr="Critère de convergence (niveau d'interpénétration autorisé)"),
+                REAC_ITER       =SIMP(statut='f',typ='I',defaut=3, fr="Fréquence de réinitialisation de la conjugaison"),
+                ITER_GCP_MAXI   =SIMP(statut='f',typ='I',defaut=0, fr="Nombre d'itérations maximal pour le GCP"),
+                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
+                                      into=("OUI","NON")),
+                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
+                                      into=("AUTOMATIQUE","CONTROLE","SANS")),
+
+                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique",
+                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
+
+                                 ),
+                PRE_COND         =SIMP(statut='f',typ='TXM',defaut="SANS",
+                      into=("DIRICHLET","SANS"),fr="Choix d'un préconditionneur (accélère la convergence)"),
+                ITER_PRE_MAXI   =SIMP(statut='f',typ='I',defaut=0, fr="Nombre d'itérations maximal pour le préconditionneur"),
+                COEF_RESI       =SIMP(statut='f',typ='R',defaut = 1.,
+                                        fr="Critère_Convergence_Préconditionneur = COEF_RESI*Critère_Convergence_GCP",),
+                RECH_LINEAIRE=SIMP(statut='f',typ='TXM',defaut="ADMISSIBLE",into=("ADMISSIBLE","NON_ADMISSIBLE"),
+                                        fr="Autorise-t-on de sortir du domaine admissible lors de la recherche linéaire",),
+                SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           ),
+         );
+
+
+
+#& MODIF COMMUN  DATE 22/04/2008   AUTEUR ABBAS M.ABBAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  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.        
+# ======================================================================
+
+def C_CONTACT_F() : return FACT(statut='f',max='**',
+           fr="Définit les zones soumises à des conditions de contact unilatéral avec ou sans frottement",
+
+
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",
+                                 into  =("VERIF","CONTRAINTE","LAGRANGIEN","PENALISATION","CONTINUE","GCP","XFEM") ),
+#
+# OPTIONS D'APPARIEMENT
+#
+
+           APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+                                 into  =("NODAL","MAIT_ESCL")),
+
+           LISSAGE         =SIMP(statut='f',typ='TXM',defaut="NON",
+                                 into  =("OUI","NON")),          
+                             
+           NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",
+                                 into  =("MAIT","MAIT_ESCL","ESCL"),),
+                                 
+           VECT_MAIT       =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                                 into  =("AUTO","FIXE","VECT_Y")),                      
+
+           b_nmait_fixe     =BLOC(condition = "VECT_MAIT == 'FIXE'",
+             MAIT_FIXE     =SIMP(statut='f',typ='R',min=3,max=3),
+           ),
+
+           b_nmait_vecty    =BLOC(condition = "VECT_MAIT == 'VECT_Y'",
+             MAIT_VECT_Y   =SIMP(statut='f',typ='R',min=3,max=3),
+           ),
+
+           VECT_ESCL       =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                                 into  =("AUTO","FIXE","VECT_Y")),                      
+
+           b_nescl_fixe     =BLOC(condition = "VECT_ESCL == 'FIXE'",
+             ESCL_FIXE     =SIMP(statut='f',typ='R',min=3,max=3),
+           ),
+
+           b_nescl_vecty    =BLOC(condition = "VECT_ESCL == 'VECT_Y'",
+             ESCL_VECT_Y   =SIMP(statut='f',typ='R',min=3,max=3),
+           ),
+
+
+           TYPE_APPA       =SIMP(statut='f',typ='TXM',defaut="PROCHE",
+                                 into  =("PROCHE","FIXE")),  
+                                 
+           b_appa_fixe     =BLOC(condition = "TYPE_APPA == 'FIXE'",
+             DIRE_APPA     =SIMP(statut='f',typ='R',min=3,max=3),
+           ),
+                                                                                         
+           DIST_POUTRE     =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+           DIST_COQUE      =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+           DIST_MAIT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           DIST_ESCL       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),                     
+
+           b_cara         =BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'",
+             CARA_ELEM       =SIMP(statut='o',typ=(cara_elem) ),
+           ),
+
+           TOLE_APPA       =SIMP(statut='f',typ='R'  ,defaut=-1.0),
+           TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),  
+                
+                      
+           b_xfem         =BLOC(condition = "METHODE == 'XFEM' ",
+             FISS_MAIT      = SIMP(statut='o',typ=fiss_xfem,max=1),
+             FISS_ESCL      = SIMP(statut='f',typ=fiss_xfem,max=1),
+             SIGN_MAIT      = SIMP(statut='f',typ='TXM',into=("+","-",) ),
+             SIGN_ESCL      = SIMP(statut='f',typ='TXM',into=("+","-",) ),
+             INTEGRATION    = SIMP(statut='f',typ='TXM',defaut="FPG4",into=("GAUSS","FPG4","FPG6","FPG7",) ),
+             COEF_REGU_CONT = SIMP(statut='f',typ='R',defaut=100.E+0),
+             ITER_CONT_MAXI = SIMP(statut='f',typ='I',defaut=30),
+             ITER_GEOM_MAXI  =SIMP(statut='f',typ='I',defaut=0),
+
+             CONTACT_INIT   = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+             ALGO_LAGR      = SIMP(statut='f',typ='TXM',defaut="VERSION1",into=("NON","VERSION1","VERSION2" , ) ),
+             COEF_ECHELLE   = SIMP(statut='f',typ='R',defaut=1.E+6),
+             FROTTEMENT     = SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+             GLISSIERE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             b_frotxfem    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+               COULOMB        = SIMP(statut='o',typ='R',),
+               ITER_FROT_MAXI = SIMP(statut='f',typ='I',defaut=2),
+               COEF_REGU_FROT = SIMP(statut='f',typ='R',defaut=100.E+0),
+               SEUIL_INIT     = SIMP(statut='f',typ='R',defaut=0.E+0),
+               ),
+           ),
+
+           b_notxfem         =BLOC(condition = "METHODE != 'XFEM' ",
+                                   regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),),
+             GROUP_MA_MAIT   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+             MAILLE_MAIT     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+             GROUP_MA_ESCL   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+             MAILLE_ESCL     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+           ),
+
+
+
+           b_verif         =BLOC(condition = "METHODE == 'VERIF' ",
+                                 fr="Paramètres de la méthode sans calcul de contact",
+                STOP_INTERP     =SIMP(statut='f',typ='TXM',defaut="NON",
+                                      into=("OUI","NON")),
+                TOLE_INTERP     =SIMP(statut='f',typ='R',defaut = 0.),
+
+                GROUP_MA_FOND   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           ),
+
+           b_active        =BLOC(condition = "METHODE == 'CONTRAINTE' ",
+                                 fr="Paramètres de la méthode des contraintes actives (contact uniquement)",
+                GLISSIERE       =SIMP(statut='f',typ='TXM',defaut="NON",
+                                      into=("OUI","NON")),
+                b_glissiere     =BLOC(condition = "GLISSIERE == 'OUI' ",
+                      ALARME_JEU  =SIMP(statut='f',typ='R',defaut=0.),
+                                 ),
+
+                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
+                                      into=("OUI","NON")),
+                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
+                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
+                        into=("AUTOMATIQUE","CONTROLE","SANS")),
+
+                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
+                                 fr="Paramètre de la réactualisation géométrique",
+                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
+                                 ),
+
+                SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+
+           ),
+           b_lagrangien    =BLOC(condition = "METHODE == 'LAGRANGIEN' ",
+                                 fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)",
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
+                                      into=("OUI","NON")),
+                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
+                ITER_MULT_MAXI  =SIMP(statut='f',typ='I'  ,defaut=4),
+
+                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
+                                      into=("AUTOMATIQUE","CONTROLE","SANS")),
+
+                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique",
+                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
+
+                                 ),
+
+
+                SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',),
+                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
+                     ),),
+
+           b_penalisation       =BLOC(condition = "METHODE == 'PENALISATION' ",
+                                      fr="Paramètres de la méthode pénalisée (contact avec ou sans frottement)",
+                E_N             =SIMP(statut='f',typ='R'),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
+                                      into=("OUI","NON")),
+                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
+                ITER_MULT_MAXI  =SIMP(statut='f',typ='I',defaut=4),
+
+                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
+                                      into=("AUTOMATIQUE","CONTROLE","SANS")),
+
+                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique",
+                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
+                                 ),
+
+                SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+                
+
+
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',),
+                     E_T             =SIMP(statut='f',typ='R',
+                                           fr="Active la pénalisation sur le frottement et définit le coefficient de pénalisation"),
+                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
+                     ),),
+
+           b_continue      =BLOC(condition = "METHODE == 'CONTINUE' ",
+                                 fr="Paramètres de la méthode continue (contact avec ou sans frottement)",
+#                regles=(UN_PARMI('GLISSIERE','FROTTEMENT'),),
+
+# -------------------------------- CHOIX DE LA FORMULATION DE LA METHODE CONTINUE
+                ALGO_CONT   =SIMP(statut='f',typ='TXM',defaut="LAGRANGIEN",into=("LAGRANGIEN","AUGMENTE","STABILISE"),),
+                b_CONT_LAGR =BLOC(condition = "ALGO_CONT == 'LAGRANGIEN' ",fr="Parametres de la formulation Lagrangienne",
+                                  COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
+                b_CONT_STAB =BLOC(condition = "ALGO_CONT == 'STABILISE' ",fr="Parametres du Lagrangien stabilisé",
+                                  COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                  COEF_STAB_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
+                b_CONT_AUGM =BLOC(condition = "ALGO_CONT == 'AUGMENTE' ",fr="Parametres du Lagrangien augmenté",
+                                  COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                  COEF_STAB_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                  COEF_PENA_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
+# --------------------------------
+                GLISSIERE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+                b_glissiere =BLOC(condition = "GLISSIERE == 'OUI' ",
+                                  ALARME_JEU  =SIMP(statut='f',typ='R',defaut=0.),),
+# --------------------------------
+                COMPLIANCE      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                b_compliance    =BLOC(condition = "COMPLIANCE == 'OUI' ",fr="Parametres de la compliance",
+                                      ASPERITE =SIMP(statut='o',typ='R',),
+                                      E_N      =SIMP(statut='o',typ='R',),
+                                      E_V      =SIMP(statut='f',typ='R',defaut=0.E+0),),
+# --------------------------------
+                FOND_FISSURE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                b_FOND_FISSURE  =BLOC(condition = "FOND_FISSURE == 'OUI' ",fr="TRAITEMENT EN FOND DE FISSURE",
+                                      regles=(UN_PARMI('NOEUD_FOND','GROUP_NO_FOND','MAILLE_FOND','GROUP_MA_FOND'),),
+                                      NOEUD_FOND    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                                      GROUP_NO_FOND =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                                      MAILLE_FOND   =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                                      GROUP_MA_FOND =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),),
+# --------------------------------
+                RACCORD_LINE_QUAD=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                b_RACCORD_SURF   =BLOC(condition = "RACCORD_LINE_QUAD == 'OUI' ",fr="TRAITEMENT DU RACCORD SURFACIQUE",
+                                       regles=(UN_PARMI('NOEUD_RACC','GROUP_NO_RACC'),),
+                                       NOEUD_RACC    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                                       GROUP_NO_RACC =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),),
+# -------------------------------- MOTS-CLEF CONTACT
+                INTEGRATION      =SIMP(statut='f',typ='TXM',defaut="NOEUD",
+                                       into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2",
+                                             "NCOTES","NCOTES1","NCOTES2"),),
+                FORMULATION      =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE"),),
+
+                ITER_GEOM_MAXI   =SIMP(statut='f',typ='I',defaut=2),
+                ITER_CONT_MAXI   =SIMP(statut='f',typ='I',defaut=30),
+                CONTACT_INIT     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),),
+# -------------------------------- détection automatique et exclusion des noeuds impliqués dans le pivot nul
+                EXCLUSION_PIV_NUL=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),),
+# -------------------------------- exclusion manuelle des noeuds impliqués dans le pivot nul;
+#                                  prévaut sur la fonctionnalité précédente sans pour autant interférer avec elle
+                SANS_NOEUD    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                regles        =(EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+# -------------------------------- MOTS-CLEF FROTTEMENT
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     ALGO_FROT       =SIMP(statut='f',typ='TXM',defaut="LAGRANGIEN",
+                                      into=("LAGRANGIEN","AUGMENTE","STABILISE") ),
+                     b_FROT_LAGR =BLOC(condition = "ALGO_FROT == 'LAGRANGIEN' ",fr="Parametres de la formulation Lagrangienne",
+                                       COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
+                     b_FROT_STAB =BLOC(condition = "ALGO_FROT == 'STABILISE' ",fr="Parametres du Lagrangien stabilisé",
+                                       COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                       COEF_STAB_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
+                     b_FROT_AUGM =BLOC(condition = "ALGO_FROT == 'AUGMENTE' ",fr="Parametres du Lagrangien augmenté",
+                                       COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                       COEF_STAB_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                       COEF_PENA_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
+                     COULOMB            =SIMP(statut='o',typ='R',),
+                     SANS_NOEUD_FR    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                     SANS_GROUP_NO_FR =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                     regles             =(EXCLUS('SANS_NOEUD_FR','SANS_GROUP_NO_FR'),),
+                     b_sans_group_no_frot =BLOC(condition = "SANS_GROUP_NO_FR != None or SANS_NO_FR != None",
+                                                fr="Direction(s) de frottement à exclure",
+                                                EXCL_FROT_1 =SIMP(statut='f',typ='R',min=3,max=3),
+                                                EXCL_FROT_2 =SIMP(statut='f',typ='R',min=3,max=3),),
+                     ITER_FROT_MAXI =SIMP(statut='f',typ='I',defaut=2),
+                     SEUIL_INIT     =SIMP(statut='f',typ='R',defaut=0.E+0),
+                     USURE          =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","ARCHARD",),),
+                     b_usure        =BLOC(condition = "USURE == 'ARCHARD' ",fr="Parametres de la loi d'usure d'Archard",
+                                          K =SIMP(statut='o',typ='R',),
+                                          H =SIMP(statut='o',typ='R',),),),),
+
+           b_gcp        =BLOC(condition = "METHODE == 'GCP' ",
+                                 fr="Paramètres de la méthode du gradient conjugué projeté (contact uniquement)",
+                RESI_ABSO       =SIMP(statut='o',typ='R',
+                                      fr="Critère de convergence (niveau d'interpénétration autorisé)"),
+                REAC_ITER       =SIMP(statut='f',typ='I',defaut=3, fr="Fréquence de réinitialisation de la conjugaison"),
+                ITER_GCP_MAXI   =SIMP(statut='f',typ='I',defaut=0, fr="Nombre d'itérations maximal pour le GCP"),
+                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
+                                      into=("OUI","NON")),
+                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
+                                      into=("AUTOMATIQUE","CONTROLE","SANS")),
+
+                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique",
+                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
 
-           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",
-                             into=("PETIT","PETIT_REAC","SIMO_MIEHE","GREEN_GR","GREEN","COROTATIONNEL","REAC_GEOM")),
-           ALGO_C_PLAN     =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
-           b_deborst      = BLOC(condition = " ALGO_C_PLAN == 'DEBORST' ",
-                        fr="Tolérance relative sur la verification des contraintes planes",
-                 RESI_DEBORST  =SIMP(statut='f',typ='R',defaut= 1.0E-6),
-                                ),
-           ALGO_1D         =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
-      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
-           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           RESI_INTE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-6),
-           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
-           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
-           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
-                                 into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
-           TYPE_MATR_TANG  =SIMP(statut='f',typ='TXM',into=("PERTURBATION","VERIFICATION")),
-           b_perturb      = BLOC(condition = " TYPE_MATR_TANG != None ",
-                        fr="Calcul de la matrice tangente par perturbation, valeur de la perturbation",
-                 VALE_PERT_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-5),
-                                ),
-           PARM_THETA      =SIMP(statut='f',typ='R',defaut= 1. ),
-         ) ;
-#& MODIF COMMUN  DATE 07/11/2006   AUTEUR CIBHHLV L.VIVAN 
+                                 ),
+                PRE_COND         =SIMP(statut='f',typ='TXM',defaut="SANS",
+                      into=("DIRICHLET","SANS"),fr="Choix d'un préconditionneur (accélère la convergence)"),
+                ITER_PRE_MAXI   =SIMP(statut='f',typ='I',defaut=0, fr="Nombre d'itérations maximal pour le préconditionneur"),
+                COEF_RESI       =SIMP(statut='f',typ='R',defaut = 1.,
+                                        fr="Critère_Convergence_Préconditionneur = COEF_RESI*Critère_Convergence_GCP",),
+                RECH_LINEAIRE=SIMP(statut='f',typ='TXM',defaut="ADMISSIBLE",into=("ADMISSIBLE","NON_ADMISSIBLE"),
+                                        fr="Autorise-t-on de sortir du domaine admissible lors de la recherche linéaire",),
+                SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           ),
+         );
+
+
+
+#& MODIF COMMUN  DATE 26/06/2007   AUTEUR REZETTE C.REZETTE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -759,12 +1419,11 @@ def C_NOM_CHAM_INTO() : return  ("ACCE",    #COMMUN#
                         "VARI_ELNO_TUYO",
                         "VARI_NOEU",
                         "VARI_NOEU_ELGA",
-                        "VARI_NON_LOCAL",
                         "VITE",
                         "VITE_ABSOLU",
                         "VITE_VENT",
                         )
-#& MODIF COMMUN  DATE 04/04/2006   AUTEUR CIBHHLV L.VIVAN 
+#& MODIF COMMUN  DATE 19/05/2008   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -825,7 +1484,7 @@ def C_NOM_GRANDEUR() : return  ( #COMMUN#
 "ENER_R",
 "EPSI_F",
 "EPSI_R",
-"ERREUR",
+"ERRE_R",
 "FACY_R",
 "FELECR",
 "FISS_R",
@@ -962,7 +1621,7 @@ def C_TYPE_CHAM_INTO() : #COMMUN#
              l.append(typ+"_"+gd)
    return tuple(l)
 
-#& MODIF COMMANDE  DATE 23/04/2007   AUTEUR FLEJOU J-L.FLEJOU 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -980,7 +1639,7 @@ def C_TYPE_CHAM_INTO() : #COMMUN#
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-# RESPONSABLE MJBHHPE J.L.FLEJOU
+# RESPONSABLE FLEJOU J-L.FLEJOU
 AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
                     fr="Affectation de caractéristiques à des éléments de structure",
                     reentrant='n',
@@ -1086,10 +1745,12 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
          COQUE           =FACT(statut='f',max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA' ),
                    PRESENT_PRESENT( 'EXCENTREMENT','INER_ROTA' ),
+                   AU_MOINS_UN('EPAIS','EPAIS_F',),PRESENT_ABSENT('EPAIS','EPAIS_F',),
                    EXCLUS('ANGL_REP','VECTEUR'),),
            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
            GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           EPAIS           =SIMP(statut='o',typ='R' ),
+           EPAIS           =SIMP(statut='f',typ='R' ),
+           EPAIS_F         =SIMP(statut='f',typ=(para_sensi,),min=1 ,max=1 ),
            ANGL_REP        =SIMP(statut='f',typ='R',min=2,max=2),
            VECTEUR         =SIMP(statut='f',typ='R',min=3,max=3),
            A_CIS           =SIMP(statut='c',typ='R',defaut= 0.8333333E0),
@@ -1525,7 +2186,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
 
 
 ) ;
-#& MODIF COMMANDE  DATE 10/06/2004   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -1543,6 +2204,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE None
 AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op=  68,sd_prod=char_acou,
                     fr="Affectation de charges et conditions aux limites acoustiques constantes",
                     reentrant='n',
@@ -1584,7 +2246,7 @@ AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op=  68,sd_prod=char_acou,
            DDL             =SIMP(statut='o',typ='TXM',max='**'),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/05/2007   AUTEUR FERNANDES R.FERNANDES 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -1602,22 +2264,30 @@ AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op=  68,sd_prod=char_acou,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
-def affe_char_cine_prod(MECA_IMPO,THER_IMPO,ACOU_IMPO,**args):
+# RESPONSABLE PELLET J.PELLET
+def affe_char_cine_prod(MECA_IMPO,THER_IMPO,ACOU_IMPO,EVOL_IMPO,**args):
   if MECA_IMPO != None  : return char_cine_meca
   if THER_IMPO != None  : return char_cine_ther
   if ACOU_IMPO != None  : return char_cine_acou
+  if EVOL_IMPO != None  :
+      if AsType(EVOL_IMPO) in (evol_elas,evol_noli) :
+          return char_cine_meca
+      elif AsType(EVOL_IMPO) in (evol_ther,) :
+          return char_cine_ther
+      else :
+          raise AsException("Extension à faire ...")
+
   raise AsException("type de concept resultat non prevu")
 
+
 AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod
                     ,fr="Affectation de conditions aux limites cinématiques constantes pour un traitement sans dualisation",
                      reentrant='n',
             UIinfo={"groupes":("Modélisation",)},
-         regles=(AU_MOINS_UN('MECA_IMPO','THER_IMPO','ACOU_IMPO'),
-                 EXCLUS('MECA_IMPO','THER_IMPO'),
-                 EXCLUS('MECA_IMPO','ACOU_IMPO'),
-                 EXCLUS('THER_IMPO','ACOU_IMPO'),),
+         regles=(UN_PARMI('MECA_IMPO','THER_IMPO','ACOU_IMPO','EVOL_IMPO'),
+                 ),
          MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         EVOL_IMPO  =SIMP(statut='f',typ=(evol_noli,evol_elas,evol_ther),fr="Pour imposer tous les ddls d'un evol_xxx"),
          MECA_IMPO       =FACT(statut='f',max='**',
            regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
                    AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
@@ -1685,19 +2355,19 @@ AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod
              DCZ             =SIMP(statut='f',typ='R' ),
              H1X             =SIMP(statut='f',typ='R' ),
              H1Y             =SIMP(statut='f',typ='R' ),
-             H1Z             =SIMP(statut='f',typ='R' ),                  
+             H1Z             =SIMP(statut='f',typ='R' ),
              E1X             =SIMP(statut='f',typ='R' ),
              E1Y             =SIMP(statut='f',typ='R' ),
-             E1Z             =SIMP(statut='f',typ='R' ),      
+             E1Z             =SIMP(statut='f',typ='R' ),
              E2X             =SIMP(statut='f',typ='R' ),
              E2Y             =SIMP(statut='f',typ='R' ),
-             E2Z             =SIMP(statut='f',typ='R' ),      
+             E2Z             =SIMP(statut='f',typ='R' ),
              E3X             =SIMP(statut='f',typ='R' ),
              E3Y             =SIMP(statut='f',typ='R' ),
-             E3Z             =SIMP(statut='f',typ='R' ),      
+             E3Z             =SIMP(statut='f',typ='R' ),
              E4X             =SIMP(statut='f',typ='R' ),
              E4Y             =SIMP(statut='f',typ='R' ),
-             E4Z             =SIMP(statut='f',typ='R' ),   
+             E4Z             =SIMP(statut='f',typ='R' ),
              V11             =SIMP(statut='f',typ='R' ),
              V12             =SIMP(statut='f',typ='R' ),
              V13             =SIMP(statut='f',typ='R' ),
@@ -1715,7 +2385,7 @@ AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod
              PRES23          =SIMP(statut='f',typ='R' ),
              PRES31          =SIMP(statut='f',typ='R' ),
              PRES32          =SIMP(statut='f',typ='R' ),
-             PRES33          =SIMP(statut='f',typ='R' ),   
+             PRES33          =SIMP(statut='f',typ='R' ),
          ),
          THER_IMPO       =FACT(statut='f',max='**',
            regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
@@ -1740,7 +2410,7 @@ AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 05/09/2005   AUTEUR CIBHHLV L.VIVAN 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -1753,23 +2423,23 @@ AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod
 # 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.
-#fon
+#
 # 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.
 # ======================================================================
+# RESPONSABLE PELLET J.PELLET
 def affe_char_cine_f_prod(MECA_IMPO,THER_IMPO,**args):
   if MECA_IMPO != None  : return char_cine_meca
   if THER_IMPO != None  : return char_cine_ther
   raise AsException("type de concept resultat non prevu")
 
-AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,sd_prod=affe_char_cine_f_prod,
+AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 101,sd_prod=affe_char_cine_f_prod,
                       fr="Affectation de conditions aux limites cinématiques fonction d'un (ou plusieurs) paramètres"
                         +" pour un traitement sans dualisation",
                      reentrant='n',
             UIinfo={"groupes":("Modélisation",)},
-         regles=(AU_MOINS_UN('MECA_IMPO','THER_IMPO'),
-                 EXCLUS('MECA_IMPO','THER_IMPO'),),
+         regles=(UN_PARMI('MECA_IMPO','THER_IMPO')),
          MODELE          =SIMP(statut='o',typ=modele_sdaster ),
          MECA_IMPO       =FACT(statut='f',max='**',
            regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
@@ -1804,7 +2474,7 @@ AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,sd_prod=affe_char_cine_f_pr
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/05/2007   AUTEUR FERNANDES R.FERNANDES 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -1822,7 +2492,7 @@ AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,sd_prod=affe_char_cine_f_pr
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-# RESPONSABLE G8BHHXD X.DESROCHES
+# RESPONSABLE DESROCHES X.DESROCHES
 AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
                     fr="Affectation de charges et conditions aux limites mécaniques constantes",
                      reentrant='n',
@@ -1831,7 +2501,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
                              'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',
                              'PRES_REP','FORCE_POUTRE','FORCE_COQUE','LIAISON_OBLIQUE',
                              'FORCE_ELEC','INTE_ELEC','PESANTEUR','ROTATION','IMPE_FACE',
-                             'VITE_FACE','TEMP_CALCULEE','RELA_CINE_BP','EPSI_INIT','CONTACT',
+                             'VITE_FACE','RELA_CINE_BP','EPSI_INIT','CONTACT',
                              'LIAISON_GROUP','LIAISON_UNIF','FLUX_THM_REP','LIAISON_SOLIDE',
                              'LIAISON_ELEM','ONDE_FLUI','LIAISON_CHAMNO','VECT_ASSE','LIAISON_COQUE',
                              'LIAISON_MAIL','LIAISON_CYCL','FORCE_TUYAU',
@@ -1840,8 +2510,6 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
                          ),
          VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
-         TEMP_CALCULEE   =SIMP(statut='f',fr="Champ de température issu d'un autre calcul",
-                               typ=(evol_ther,cham_no_sdaster,carte_sdaster) ),
          EVOL_CHAR       =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
                                typ=evol_char ),
 
@@ -1919,21 +2587,21 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
              DCZ             =SIMP(statut='f',typ='R' ),
              H1X             =SIMP(statut='f',typ='R' ),
              H1Y             =SIMP(statut='f',typ='R' ),
-             H1Z             =SIMP(statut='f',typ='R' ),                  
+             H1Z             =SIMP(statut='f',typ='R' ),
              E1X             =SIMP(statut='f',typ='R' ),
              E1Y             =SIMP(statut='f',typ='R' ),
-             E1Z             =SIMP(statut='f',typ='R' ),      
+             E1Z             =SIMP(statut='f',typ='R' ),
              E2X             =SIMP(statut='f',typ='R' ),
              E2Y             =SIMP(statut='f',typ='R' ),
-             E2Z             =SIMP(statut='f',typ='R' ),      
+             E2Z             =SIMP(statut='f',typ='R' ),
              E3X             =SIMP(statut='f',typ='R' ),
              E3Y             =SIMP(statut='f',typ='R' ),
-             E3Z             =SIMP(statut='f',typ='R' ),      
+             E3Z             =SIMP(statut='f',typ='R' ),
              E4X             =SIMP(statut='f',typ='R' ),
              E4Y             =SIMP(statut='f',typ='R' ),
-             E4Z             =SIMP(statut='f',typ='R' ),      
+             E4Z             =SIMP(statut='f',typ='R' ),
              LAGS_C          =SIMP(statut='f',typ='R' ),
-             V11             =SIMP(statut='f',typ='R' ),  
+             V11             =SIMP(statut='f',typ='R' ),
              V12             =SIMP(statut='f',typ='R' ),
              V13             =SIMP(statut='f',typ='R' ),
              V21             =SIMP(statut='f',typ='R' ),
@@ -2000,6 +2668,8 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
              MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
              SANS_GROUP_MA   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
              SANS_MAILLE     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
              DX              =SIMP(statut='f',typ='R' ),
              DY              =SIMP(statut='f',typ='R' ),
              DZ              =SIMP(statut='f',typ='R' ),
@@ -2131,12 +2801,19 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
          ),
 
 
-           LIAISON_SOLIDE  =FACT(statut='f',fr="Modélise une partie indéformable d'une structure",max='**',
-             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           LIAISON_SOLIDE  =FACT(statut='f',max='**',
+             fr="Modélise une partie indéformable d'une structure."
+              +" Les mots clés TRAN et ANGL_NAUT permettent d'imposer le déplacement de la partie indéformable.",
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+                     ENSEMBLE('CENTRE','ANGL_NAUT'),),
              GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
              NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
              GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
              MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             TRAN            =SIMP(statut='f',typ='R',max=3 ),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),
+             CENTRE          =SIMP(statut='f',typ='R',max=3 ),
+             DIST_MIN        =SIMP(statut='f',typ='R'),
              NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
            ),
 
@@ -2175,322 +2852,47 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
            ),
 
          LIAISON_XFEM      =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),
-         
-         CONTACT_XFEM      =SIMP(statut='f',typ='TXM',defaut="NON" ),
+
+         CONTACT_XFEM      =SIMP(statut='f',typ=char_meca,min=1,max=1,),
+
+
+#         SIMP(statut='f',typ='TXM',defaut="NON" ),
 
          VECT_ASSE       =SIMP(statut='f',typ=cham_no_sdaster ),
 #
 # LIAISON UNILATERALE
-# 
+#
          LIAISON_UNILATER=FACT(statut='f',max='**',
            fr="Définit les zones soumises à des conditions de liaison unilaterale (inegalite sur un DDL)",
            regles=(UN_PARMI('GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
-                                         
+
            GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
            MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),   
+           NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
 
            SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
            SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                 
-           NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
-
-           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),           
-           
-           COEF_IMPO       =SIMP(statut='f',typ='R'),
-           COEF_MULT       =SIMP(statut='f',typ='R',max='**'),         
-
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",
-                                 into=("CONTRAINTE","GCPC",) ),
-           
-                 
-        ),
-#
-# CONTACT
-#       
-         CONTACT         =FACT(statut='f',max='**',
-           fr="Définit les zones soumises à des conditions de contact unilatéral avec ou sans frottement",
-           
-           
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",
-                                 into=("VERIF","CONTRAINTE","LAGRANGIEN","PENALISATION","CONTINUE","GCP","XFEM") ),
-            
-           APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
-                              into=("RIGIDE","NODAL","MAIT_ESCL","MAIT_ESCL_SYME")),
-           RECHERCHE       =SIMP(statut='f',typ='TXM',defaut="NOEUD_BOUCLE",
-                              into=("NOEUD_BOUCLE","NOEUD_VOISIN")),
-           LISSAGE         =SIMP(statut='f',typ='TXM',defaut="NON",
-                              into=("OUI","NON")),
-           DIST_POUTRE     =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
-           DIST_COQUE      =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
-           NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",
-                              into=("MAIT","MAIT_ESCL")),
-          
-           PROJECTION      =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",
-                                 into=("LINEAIRE","QUADRATIQUE") ),
-                                 
-                                 
-           b_xfem         =BLOC(condition = "METHODE == 'XFEM' ",
-             FISS_MAIT      = SIMP(statut='o',typ=fiss_xfem,max=1),
-             FISS_ESCL      = SIMP(statut='f',typ=fiss_xfem,max=1),
-             SIGN_MAIT      = SIMP(statut='f',typ='TXM',into=("+","-",) ), 
-             SIGN_ESCL      = SIMP(statut='f',typ='TXM',into=("+","-",) ), 
-             INTEGRATION    = SIMP(statut='f',typ='TXM',defaut="FPG4",into=("GAUSS","FPG4","FPG6","FPG7",) ),
-             COEF_REGU_CONT = SIMP(statut='f',typ='R',defaut=100.E+0),
-             ITER_CONT_MAXI = SIMP(statut='f',typ='I',defaut=30),
-             CONTACT_INIT   = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
-             ALGO_LAGR      = SIMP(statut='f',typ='TXM',defaut="VERSION1",into=("NON","VERSION1","VERSION2" , ) ),
-             COEF_ECHELLE   = SIMP(statut='f',typ='R',defaut=1.E+6),             
-             FROTTEMENT     = SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
-             GLISSIERE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-             b_frotxfem    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
-               COULOMB        = SIMP(statut='o',typ='R',),
-               ITER_FROT_MAXI = SIMP(statut='f',typ='I',defaut=2),
-               COEF_REGU_FROT = SIMP(statut='f',typ='R',defaut=100.E+0),
-               SEUIL_INIT     = SIMP(statut='f',typ='R',defaut=0.E+0),
-               ),             
-           ),
-                          
-           b_notxfem         =BLOC(condition = "METHODE != 'XFEM' ",
-                                   regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),),
-             GROUP_MA_MAIT   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
-             MAILLE_MAIT     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-             GROUP_MA_ESCL   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
-             MAILLE_ESCL     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-           ),               
-                    
-           b_cara         =BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'",
-               CARA_ELEM       =SIMP(statut='o',typ=(cara_elem) ),
-           ),
-         
-           b_verif         =BLOC(condition = "METHODE == 'VERIF' ",
-                                 fr="Paramètres de la méthode sans calcul de contact",
-                STOP_INTERP     =SIMP(statut='f',typ='TXM',defaut="NON",
-                                      into=("OUI","NON")),
-                TOLE_INTERP     =SIMP(statut='f',typ='R',defaut = 0.),
-                DIST_MAIT       =SIMP(statut='f',typ='R'),
-                DIST_ESCL       =SIMP(statut='f',typ='R'),
-                VECT_NORM_ESCL  =SIMP(statut='f',typ='R',max=3),
-                VECT_ORIE_POU   =SIMP(statut='f',typ='R',min=3,max=3),
-           ),
-
-           b_active        =BLOC(condition = "METHODE == 'CONTRAINTE' ",
-                                 fr="Paramètres de la méthode des contraintes actives (contact uniquement)",
-                GLISSIERE       =SIMP(statut='f',typ='TXM',defaut="NON",
-                                      into=("OUI","NON")),
-                b_glissiere     =BLOC(condition = "GLISSIERE == 'OUI' ",                    
-                      ALARME_JEU  =SIMP(statut='f',typ='R',defaut=0.),
-                                 ),
-                TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
-                TOLE_PROJ_INT   =SIMP(statut='f',typ='R'  ,defaut=0.001),
-                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
-                                      into=("OUI","NON")),
-                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
-                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
-                        into=("AUTOMATIQUE","CONTROLE","SANS")),
-
-                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
-                                 fr="Paramètre de la réactualisation géométrique",
-                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
-                                 ),
-
-                SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
-                VECT_NORM_ESCL  =SIMP(statut='f',typ='R',max=3),
-                VECT_ORIE_POU   =SIMP(statut='f',typ='R',min=3,max=3),
-                DIST_MAIT       =SIMP(statut='f',typ='R'),
-                DIST_ESCL       =SIMP(statut='f',typ='R'),
-
-           ),
-           b_lagrangien    =BLOC(condition = "METHODE == 'LAGRANGIEN' ",
-                                 fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)",
-                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
-                TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
-                TOLE_PROJ_INT   =SIMP(statut='f',typ='R'  ,defaut=0.001),
-                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
-                                      into=("OUI","NON")),
-                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
-                ITER_MULT_MAXI  =SIMP(statut='f',typ='I'  ,defaut=4),
-
-                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
-                                      into=("AUTOMATIQUE","CONTROLE","SANS")),
-
-                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique",
-                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
-
-                                 ),
-
-               
-                SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-                DIST_MAIT       =SIMP(statut='f',typ='R'),
-                DIST_ESCL       =SIMP(statut='f',typ='R'),
-                
-                regles=(EXCLUS('VECT_Y','VECT_ORIE_POU')),
-                
-                VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
-                VECT_ORIE_POU   =SIMP(statut='f',typ='R',min=3,max=3),
-                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
-                     COULOMB         =SIMP(statut='o',typ='R',),
-                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
-                     ),),
-           
-           b_penalisation       =BLOC(condition = "METHODE == 'PENALISATION' ",
-                                      fr="Paramètres de la méthode pénalisée (contact avec ou sans frottement)",
-                E_N             =SIMP(statut='f',typ='R'),
-                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
-                TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
-                TOLE_PROJ_INT   =SIMP(statut='f',typ='R'  ,defaut=0.001),
-                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
-                                      into=("OUI","NON")),
-                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
-                ITER_MULT_MAXI  =SIMP(statut='f',typ='I',defaut=4),
-                
-                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
-                                      into=("AUTOMATIQUE","CONTROLE","SANS")),
-
-                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique",
-                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
-                                 ),
 
-                SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-                DIST_MAIT       =SIMP(statut='f',typ='R'),
-                DIST_ESCL       =SIMP(statut='f',typ='R'),
-                regles=(EXCLUS('VECT_Y','VECT_ORIE_POU')),
-                VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
-                VECT_ORIE_POU   =SIMP(statut='f',typ='R',min=3,max=3),
-                
-                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
-                     COULOMB         =SIMP(statut='o',typ='R',),
-                     E_T             =SIMP(statut='f',typ='R',
-                                           fr="Active la pénalisation sur le frottement et définit le coefficient de pénalisation"),
-                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
-                     ),),
+           NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
 
-           b_continue      =BLOC(condition = "METHODE == 'CONTINUE' ",
-                                 fr="Paramètres de la méthode continue (contact avec ou sans frottement)",
-#                regles=(UN_PARMI('GLISSIERE','FROTTEMENT'),),
-                ALGO_CONT       =SIMP(statut='f',typ='TXM',defaut="LAGRANGIEN",
-                                 into=("LAGRANGIEN","AUGMENTE","STABILISE") ),
-                b_CONT_LAGR     =BLOC(condition = "ALGO_CONT == 'LAGRANGIEN' ",fr="Parametres de la formulation Lagrangienne",
-                     COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
-                b_CONT_STAB     =BLOC(condition = "ALGO_CONT == 'STABILISE' ",fr="Parametres du Lagrangien stabilisé",
-                     COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-                     COEF_STAB_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
-                b_CONT_AUGM      =BLOC(condition = "ALGO_CONT == 'AUGMENTE' ",fr="Parametres du Lagrangien augmenté",
-                     COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-                     COEF_STAB_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-                     COEF_PENA_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
-                GLISSIERE       =SIMP(statut='f',typ='TXM',defaut="NON",
-                                      into=("OUI","NON")),
-                b_glissiere     =BLOC(condition = "GLISSIERE == 'OUI' ",                    
-                      ALARME_JEU  =SIMP(statut='f',typ='R',defaut=0.),
-                                 ),
-                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
-                COMPLIANCE      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
-                FOND_FISSURE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
-                RACCORD_LINE_QUAD=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
 
-                INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2",
-                                                                                                "NCOTES","NCOTES1","NCOTES2")),
-                FORMULATION     =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE")),
-                DIRE_APPA       =SIMP(statut='f',typ='R',max=3,defaut=(0.,0.,0.,)),
-                ITER_GEOM_MAXI  =SIMP(statut='f',typ='I',defaut=2),
-                ITER_CONT_MAXI  =SIMP(statut='f',typ='I',defaut=30),
-                DIST_MAIT       =SIMP(statut='f',typ='R',defaut=0.),
-                DIST_ESCL       =SIMP(statut='f',typ='R',defaut=0.),
-                VECT_ORIE_POU   =SIMP(statut='f',typ='R',min=3,max=3),
-                TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
-                CONTACT_INIT    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
-                EXCLUSION_PIV_NUL=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
-                b_FOND_FISSURE  =BLOC(condition = "FOND_FISSURE == 'OUI' ",fr="TRAITEMENT EN FOND DE FISSURE",
-                     regles=(UN_PARMI('NOEUD_FOND','GROUP_NO_FOND','MAILLE_FOND','GROUP_MA_FOND'),),
-                     NOEUD_FOND      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-                     GROUP_NO_FOND   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                     MAILLE_FOND     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-                     GROUP_MA_FOND   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),),
-                b_RACCORD_SURF  =BLOC(condition = "RACCORD_LINE_QUAD == 'OUI' ",fr="TRAITEMENT DU RACCORD SURFACIQUE",
-                     regles=(UN_PARMI('NOEUD_RACC','GROUP_NO_RACC'),),
-                     NOEUD_RACC      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-                     GROUP_NO_RACC   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),),
-                b_compliance    =BLOC(condition = "COMPLIANCE == 'OUI' ",fr="Parametres de la compliance",
-                     ASPERITE        =SIMP(statut='o',typ='R',),
-                     E_N             =SIMP(statut='o',typ='R',),
-                     E_V             =SIMP(statut='f',typ='R',defaut=0.E+0),),
-                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
-                     ALGO_FROT       =SIMP(statut='f',typ='TXM',defaut="LAGRANGIEN",
-                                      into=("LAGRANGIEN","AUGMENTE","STABILISE") ),
-                     b_FROT_LAGR     =BLOC(condition = "ALGO_FROT == 'LAGRANGIEN' ",fr="Parametres de la formulation Lagrangienne",
-                          COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
-                     b_FROT_STAB     =BLOC(condition = "ALGO_FROT == 'STABILISE' ",fr="Parametres du Lagrangien stabilisé",
-                          COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-                          COEF_STAB_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
-                     b_FROT_AUGM      =BLOC(condition = "ALGO_FROT == 'AUGMENTE' ",fr="Parametres du Lagrangien augmenté",
-                          COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-                          COEF_STAB_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-                          COEF_PENA_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),),
-                     COULOMB         =SIMP(statut='o',typ='R',),
-                     SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-                     SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                     VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
-                     VECT_Z          =SIMP(statut='f',typ='R',min=3,max=3),
-                     ITER_FROT_MAXI  =SIMP(statut='f',typ='I',defaut=2),
-                     SEUIL_INIT      =SIMP(statut='f',typ='R',defaut=0.E+0),
-                     USURE           =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","ARCHARD",),),
-                     b_usure         =BLOC(condition = "USURE == 'ARCHARD' ",fr="Parametres de la loi d'usure d'Archard",
-                          K                 =SIMP(statut='o',typ='R',),
-                          H                 =SIMP(statut='o',typ='R',),),),),
+           COEF_IMPO       =SIMP(statut='f',typ='R'),
+           COEF_MULT       =SIMP(statut='f',typ='R',max='**'),
 
-           b_gcp        =BLOC(condition = "METHODE == 'GCP' ",
-                                 fr="Paramètres de la méthode du gradient conjugué projeté (contact uniquement)",
-                RESI_ABSO       =SIMP(statut='o',typ='R',
-                                      fr="Critère de convergence (niveau d'interpénétration autorisé)"),
-                REAC_ITER       =SIMP(statut='f',typ='I',defaut=3, fr="Fréquence de réinitialisation de la conjugaison"),
-                TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
-                TOLE_PROJ_INT   =SIMP(statut='f',typ='R'  ,defaut=0.001),
-                TOLE_REAC_GEOM  =SIMP(statut='f',typ='R'  ,defaut=0.05),
-                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
-                                      into=("OUI","NON")),
-                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
-                        into=("AUTOMATIQUE","CONTROLE","SANS")),
-                b_reac_sans     =BLOC(condition = "REAC_GEOM == 'SANS' ",
-                                 fr="Paramètre de la réactualisation géométrique",
-                      STOP_REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="NON",
-                                           into=("OUI","NON")),
-                                 ),
-                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
-                                 fr="Paramètre de la réactualisation géométrique",
-                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
-                      
-                      STOP_REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="ALARME",
-                                           into=("OUI","NON")),
-                                 ),
-                b_reac_auto     =BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ",
-                      fr="Paramètre de la réactualisation géométrique auto",
-                      NB_REAC_MAXI   =SIMP(statut='o',typ='I',defaut = 10),
-                                 ), 
-                PRE_COND         =SIMP(statut='f',typ='TXM',defaut="SANS",
-                      into=("DIRICHLET","SANS"),fr="Choix d'un préconditionneur (accélère la convergence)"),
-                COEF_RESI       =SIMP(statut='f',typ='R',defaut = 1.,val_min=1.,
-                                        fr="Critère_Convergence_Préconditionneur = COEF_RESI*Critère_Convergence_GCP",),
-                RECH_LINEAIRE=SIMP(statut='f',typ='TXM',defaut="ADMISSIBLE",into=("ADMISSIBLE","NON_ADMISSIBLE"),
-                                        fr="Autorise-t-on de sortir du domaine admissible lors de la recherche linéaire",),
-                SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-                VECT_NORM_ESCL  =SIMP(statut='f',typ='R',max=3),
-                VECT_ORIE_POU   =SIMP(statut='f',typ='R',min=3,max=3),
-                DIST_MAIT       =SIMP(statut='f',typ='R'),
-                DIST_ESCL       =SIMP(statut='f',typ='R'),
-           ),
-         ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",
+                                 into=("CONTRAINTE","GCPC",) ),
 
+
+        ),
+#
+# CONTACT
+#
+         CONTACT         = C_CONTACT(),
+#
+# FORCES
+#         
          FORCE_NODALE    =FACT(statut='f',fr="Applique à des noeuds des forces nodales",max='**',
            regles=(AU_MOINS_UN('GROUP_NO','NOEUD'),
                    AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
@@ -2565,12 +2967,13 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
 
          PRES_REP        =FACT(statut='f',max='**',
              fr="Applique une pression à un domaine de milieu continu 2D ou 3D, ou à un domaine de coques et tuyaux",
-             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
-                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','FISSURE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE','FISSURE'),
                      AU_MOINS_UN('PRES','CISA_2D' ),),
              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
              GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
              MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             FISSURE         =SIMP(statut='f',typ=fiss_xfem,min=1,max=100,),
              PRES            =SIMP(statut='f',typ='R' ),
              CISA_2D         =SIMP(statut='f',typ='R' ),
            ),
@@ -2622,6 +3025,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
            POIDS_1        =SIMP(statut='f',typ='R'),
            POIDS_2        =SIMP(statut='f',typ='R'),
            POIDS_GROSSIER =SIMP(statut='f',typ='R'),
+           UNITE_GMSH     =SIMP(statut='f',typ='I',defaut=0,max=1),
            POIDS_FIN      =SIMP(statut='f',typ='R'),),
 
         FORCE_POUTRE    =FACT(statut='f',max='**',
@@ -2760,24 +3164,8 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
                                        "CDI","CDG") ),
              VALE_PDC        =SIMP(statut='f',typ='R',max='**',
                                  fr="valeurs des coefficients de perte de charge singulière",),
-             APPL_FORC_ARCHI  =SIMP(statut='f',typ='TXM',defaut="REPARTIE" ,
-                                 fr="application de la force d'archimède",
-                                 into=("REPARTIE","CDG") ),
-             APPL_FORC_FPLAQ  =SIMP(statut='f',typ='TXM',defaut="REPARTIE" ,
-                                 fr="application de la force de plaquage dans le guidage continu",
-                                 into=("REPARTIE","CDG","ZONE","MILIEU","DISTRI") ),
-             APPL_FORC_FMEC   =SIMP(statut='f',typ='TXM',defaut="REPARTIE" ,
-                                 fr="application de la force dans le mécanisme de levée",
-                                 into=("REPARTIE","CDG","ZONE","PTREP") ),
-             APPL_FORC_FTG    =SIMP(statut='f',typ='TXM',defaut="REPARTIE" ,
-                                 fr="application de la force tube_guide",
-                                 into=("REPARTIE","CDG","ZONE","PTREP") ),
              DIRE_FORC_FPLAQ  =SIMP(statut='f',typ='R',min=3,max=3,
                                  fr="direction d'application de la force de plaquage",),
-             b_CDG    =BLOC(condition = "(APPL_FORC_ARCHI == 'CDG') or (APPL_FORC_FPLAQ == 'CDG') or \
-                                         (APPL_FORC_FMEC  == 'CDG') or (APPL_FORC_FTG   == 'CDG')",
-                MASS_INER        =SIMP(statut='o',typ=table_sdaster ),
-             ),
              UNITE_IMPR_FORCE =SIMP(statut='f',typ='I',
                                  fr="unité d'impression des forces",),
              UNITE_IMPR_NOEUD =SIMP(statut='f',typ='I',
@@ -2803,6 +3191,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
            CABLE_BP        =SIMP(statut='o',typ=cabl_precont ),
            SIGM_BPEL       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
            RELA_CINE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           DIST_MIN        =SIMP(statut='f',typ='R'),
          ),
 
          FORCE_ELEC      =FACT(statut='f',max='**',
@@ -2898,7 +3287,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
 )  ;
 
 
-#& MODIF COMMANDE  DATE 24/08/2005   AUTEUR MABBAS M.ABBAS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2916,7 +3305,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE G8BHHXD X.DESROCHES
+# RESPONSABLE DESROCHES X.DESROCHES
 AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op=   7,sd_prod=char_meca,
                      fr="Affectation de charges et conditions aux limites mécaniques complexes",
                      reentrant='n',
@@ -2977,25 +3366,25 @@ AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op=   7,sd_prod=char_meca,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 30/04/2007   AUTEUR ABBAS M.ABBAS 
+#& MODIF COMMANDE  DATE 06/05/2008   AUTEUR CNGUYEN C.NGUYEN 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  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.                                 
+# 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.                            
+# 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.      
+# 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.
 # ======================================================================
-# RESPONSABLE G8BHHXD X.DESROCHES
+# RESPONSABLE DESROCHES X.DESROCHES
 AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
                       fr="Affectation de charges et conditions aux limites mécaniques fonction d'un (ou plusieurs) paramètres",
                       reentrant='n',
@@ -3005,8 +3394,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
                             'PRES_REP','FORCE_POUTRE','VITE_FACE','IMPE_FACE','ONDE_PLANE',
                             'LIAISON_OBLIQUE','EPSI_INIT','LIAISON_GROUP','LIAISON_UNIF',
                             'LIAISON_SOLIDE','FORCE_COQUE','LIAISON_COQUE','FORCE_TUYAU',
-                           
-'CONTACT','EFFE_FOND','FLUX_THM_REP','LIAISON_UNILATER'),),
+                            'EFFE_FOND','FLUX_THM_REP','LIAISON_UNILATER'),),
          VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          MODELE          =SIMP(statut='o',typ=modele_sdaster),
@@ -3024,7 +3412,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
            NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           LIAISON         =SIMP(statut='f',typ='TXM',into=('ENCASTRE',)), 
+           LIAISON         =SIMP(statut='f',typ='TXM',into=('ENCASTRE',)),
            DX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            DY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            DZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
@@ -3042,20 +3430,20 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            DCZ             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            H1X             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            H1Y             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-           H1Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),                  
+           H1Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            E1X             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            E1Y             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-           E1Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),      
+           E1Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            E2X             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            E2Y             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-           E2Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),      
+           E2Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            E3X             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            E3Y             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-           E3Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),      
+           E3Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            E4X             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            E4Y             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-           E4Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),      
-           LAGS_C          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),     
+           E4Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           LAGS_C          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
          ),
 
          FACE_IMPO       =FACT(statut='f',max='**',
@@ -3080,6 +3468,8 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
            SANS_GROUP_MA   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
            SANS_MAILLE     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
            DX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            DY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            DZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
@@ -3095,7 +3485,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            DNOR            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            DTAN            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
          ),
-         
+
          LIAISON_DDL     =FACT(statut='f',max='**',
            fr="Définit une relation linéaire entre des DDLs de deux ou plusieurs noeuds, les valeurs sont fournies par"
                +" l'intermediaire d'un concept de type fonction",
@@ -3122,8 +3512,8 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            DRX             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            DRY             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            DRZ             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-         ),         
-         
+         ),
+
          LIAISON_GROUP   =FACT(statut='f',max='**',
            fr="Définit la meme relation linéaire entre certains DDLs de couples de noeuds, les valeurs sont fournies par"
                +" l'intermédiaire de concept fonction",
@@ -3160,228 +3550,32 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
          ),
 #
 # LIAISON UNILATERALE
-# 
+#
          LIAISON_UNILATER=FACT(statut='f',max='**',
            fr="Définit les zones soumises à des conditions de liaison unilaterale (inegalite sur un DDL)",
            regles=(UN_PARMI('GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
-                                         
+
            GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
            MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),   
+           NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
 
            SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
            SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                 
+
            NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
 
-           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),           
-           
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+
            COEF_IMPO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-           COEF_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**'),         
+           COEF_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**'),
 
            METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",
                                  into=("CONTRAINTE","GCPC",) ),
-           
-                 
-        ),
-         CONTACT         =FACT(statut='f',
-           fr="Définit les zones soumises à des conditions de contact unilatéral avec ou \sans frottement, certaines valeurs"
-           +" sont données par l'intermédiaire de concept fonction",max='**',
-           regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),),
-           APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
-                                 into=("NODAL","MAIT_ESCL","MAIT_ESCL_SYME")),
-           RECHERCHE       =SIMP(statut='f',typ='TXM',defaut="NOEUD_BOUCLE",into=("NOEUD_BOUCLE","NOEUD_VOISIN")),
-           LISSAGE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),                 
-           DIST_POUTRE     =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
-           DIST_COQUE      =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
-           NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",into=("MAIT","MAIT_ESCL")),
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",    
-                                 into=("CONTRAINTE","VERIF","LAGRANGIEN","PENALISATION","CONTINUE","GCP") ),           
-           PROJECTION      =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","QUADRATIQUE") ),
-           GROUP_MA_MAIT   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_MAIT     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_ESCL     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           b_cara         =BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'",
-               CARA_ELEM       =SIMP(statut='o',typ=(cara_elem) ),
-           ),
-                    
-           b_verif         =BLOC(condition = "METHODE == 'VERIF' ",
-                                 fr="Paramètres de la méthode sans calcul de contact",
-                STOP_INTERP     =SIMP(statut='f',typ='TXM',defaut="NON",
-                                      into=("OUI","NON")),
-                TOLE_INTERP     =SIMP(statut='f',typ='R',defaut = 0.),
-                DIST_MAIT       =SIMP(statut='f',typ='R'),
-                DIST_ESCL       =SIMP(statut='f',typ='R'),
-                VECT_NORM_ESCL  =SIMP(statut='f',typ='R',max=3),
-                VECT_ORIE_POU   =SIMP(statut='f',typ='R',min=3,max=3),
-           ),
-
-           b_active        =BLOC(condition = "METHODE == 'CONTRAINTE' ",
-                                 fr="Paramètres de la méthode des contraintes actives (contact uniquement)",
-                GLISSIERE       =SIMP(statut='f',typ='TXM',defaut="NON",
-                                      into=("OUI","NON")),
-                b_glissiere     =BLOC(condition = "GLISSIERE == 'OUI' ",                    
-                      ALARME_JEU  =SIMP(statut='f',typ='R',defaut=0.),
-                                 ),
-                TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
-                TOLE_PROJ_INT   =SIMP(statut='f',typ='R'  ,defaut=0.001),
-                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
-                                      into=("OUI","NON")),
-                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
-                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
-                        into=("AUTOMATIQUE","CONTROLE","SANS")),
-
-                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
-                                 fr="Parametre de la reactualisation geometrique",
-                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
-                      
-                                 ),
-
-                SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
-                VECT_NORM_ESCL  =SIMP(statut='f',typ='R',max=3),
-                VECT_ORIE_POU   =SIMP(statut='f',typ='R',min=3,max=3),
-                DIST_MAIT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                DIST_ESCL       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-            ),
-           b_lagrangien    =BLOC(condition = "METHODE == 'LAGRANGIEN' ",
-                                 fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)",
-                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
-                TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
-                TOLE_PROJ_INT   =SIMP(statut='f',typ='R'  ,defaut=0.001),
-                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
-                                      into=("OUI","NON")),
-                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
-                ITER_MULT_MAXI  =SIMP(statut='f',typ='I'  ,defaut=4),
 
-                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
-                                      into=("AUTOMATIQUE","CONTROLE","SANS")),
-
-                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Parametre de la reactualisation geometrique",
-                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
-
-                                 ),
-
-                SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-                DIST_MAIT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                DIST_ESCL       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                regles=(EXCLUS('VECT_Y','VECT_ORIE_POU')),
-                VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
-                VECT_ORIE_POU   =SIMP(statut='f',typ='R',min=3,max=3),                
-                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
-                     COULOMB         =SIMP(statut='o',typ='R',),
-                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),  
-                     ),),
-           b_penalisation       =BLOC(condition = "METHODE == 'PENALISATION' ",
-                                      fr="Paramètres de la méthode pénalisée (contact avec ou sans frottement)",
-                E_N             =SIMP(statut='f',typ='R'), 
-                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
-                TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
-                TOLE_PROJ_INT   =SIMP(statut='f',typ='R'  ,defaut=0.001),
-                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
-                                      into=("OUI","NON")),
-                NB_RESOL        =SIMP(statut='f',typ='I', defaut=10 ),
-                ITER_MULT_MAXI  =SIMP(statut='f',typ='I',defaut=4),
-                
-                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
-                                      into=("AUTOMATIQUE","CONTROLE","SANS")),
-
-                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique",
-                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
-                                 ),
 
-                SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-                DIST_MAIT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                DIST_ESCL       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                regles=(EXCLUS('VECT_Y','VECT_ORIE_POU')),
-                VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
-                VECT_ORIE_POU   =SIMP(statut='f',typ='R',min=3,max=3),                
-                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
-                     COULOMB         =SIMP(statut='o',typ='R',),
-                     E_T             =SIMP(statut='f',typ='R',
-                                           fr="Active la pénalisation sur le frottement et définit le coefficient de pénalisation"),
-                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),  
-                     ),),
-           b_continue      =BLOC(condition = "METHODE == 'CONTINUE' ",
-                                 fr="Paramètres de la méthode continue (contact avec ou sans frottement)",
-#                regles=(UN_PARMI('GLISSIERE','FROTTEMENT'),),
-                GLISSIERE       =SIMP(statut='f',typ='TXM',defaut="NON",
-                                      into=("OUI","NON")),
-                b_glissiere     =BLOC(condition = "GLISSIERE == 'OUI' ",                    
-                      ALARME_JEU  =SIMP(statut='f',typ='R',defaut=0.),
-                                 ),
-                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
-                COMPLIANCE      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
-                INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2",
-                                                                                                "NCOTES","NCOTES1","NCOTES2")),
-                COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-                FORMULATION     =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE")),
-                DIRE_APPA       =SIMP(statut='f',typ='R',max=3),
-                ITER_GEOM_MAXI  =SIMP(statut='f',typ='I',defaut=2),
-                ITER_CONT_MAXI  =SIMP(statut='f',typ='I',defaut=30),
-                DIST_MAIT       =SIMP(statut='f',typ='R'),
-                DIST_ESCL       =SIMP(statut='f',typ='R'),
-                CONTACT_INIT    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
-                b_compliance    =BLOC(condition = "COMPLIANCE == 'OUI' ",fr="Parametres de la compliance",
-                     ASPERITE        =SIMP(statut='o',typ='R',),
-                     E_N             =SIMP(statut='o',typ='R',),
-                     E_V             =SIMP(statut='f',typ='R',defaut=0.E+0),),
-                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
-                     COULOMB         =SIMP(statut='o',typ='R',),
-                     SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-                     SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                     VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
-                     VECT_Z          =SIMP(statut='f',typ='R',min=3,max=3),
-                     ITER_FROT_MAXI  =SIMP(statut='f',typ='I',defaut=2),
-                     COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-                     SEUIL_INIT      =SIMP(statut='f',typ='I',defaut=0),),),
+        ),
 
-           b_gcp        =BLOC(condition = "METHODE == 'GCP' ",
-                                 fr="Paramètres de la méthode du gradient conjugué projeté (contact uniquement)",
-                RESI_ABSO       =SIMP(statut='o',typ='R',
-                                      fr="Critère de convergence (niveau d'interpénétration autorisé)"),
-                REAC_ITER       =SIMP(statut='f',typ='I',defaut=3, fr="Fréquence de réinitialisation de la conjugaison"),
-                TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
-                TOLE_PROJ_INT   =SIMP(statut='f',typ='R'  ,defaut=0.001),
-                TOLE_REAC_GEOM  =SIMP(statut='f',typ='R'  ,defaut=0.05),
-                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",
-                                      into=("OUI","NON")),
-                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
-                        into=("AUTOMATIQUE","CONTROLE","SANS")),
-                b_reac_sans     =BLOC(condition = "REAC_GEOM == 'SANS' ",
-                                 fr="Paramètre de la réactualisation géométrique",
-                      
-                      STOP_REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="NON",
-                                           into=("OUI","NON")),
-                                 ),
-                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
-                                 fr="Paramètre de la réactualisation géométrique",
-                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),
-                      
-                      STOP_REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="ALARME",
-                                           into=("OUI","NON")),
-                                 ),
-                b_reac_auto     =BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ",
-                      fr="Paramètre de la réactualisation géométrique auto",
-                      NB_REAC_MAXI   =SIMP(statut='o',typ='I',defaut = 10),
-                                 ), 
-                SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-                VECT_NORM_ESCL  =SIMP(statut='f',typ='R',max=3),
-                VECT_ORIE_POU   =SIMP(statut='f',typ='R',min=3,max=3),
-                DIST_MAIT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                DIST_ESCL       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-           ),
-         ),        
-         
           LIAISON_UNIF    =FACT(statut='f',max='**',
            fr="Impose une meme valeur (inconnue) à des DDLs d'un ensemble de noeuds",
            regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
@@ -3392,14 +3586,21 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            DDL             =SIMP(statut='o',typ='TXM',max='**'),
          ),
 
+
          LIAISON_SOLIDE  =FACT(statut='f',max='**',
-           fr="Modélise une partie indéformable d'une structure",
-           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           fr="Modélise une partie indéformable d'une structure."
+            +" Les mots clés TRAN et ANGL_NAUT permettent d'imposer le déplacement de la partie indéformable.",
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+                   ENSEMBLE('CENTRE','ANGL_NAUT'),),
            GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
            NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           TRAN            =SIMP(statut='f',typ='R',max=3 ),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),
+           CENTRE          =SIMP(statut='f',typ='R',max=3 ),
+           DIST_MIN        =SIMP(statut='f',typ='R'),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
          ),
 
 
@@ -3473,16 +3674,17 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            FY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            FZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
          ),
-         
+
          PRES_REP        =FACT(statut='f',max='**',
            fr="Applique une pression à un domaine de milieu continu 2D ou 3D ou à un domaine de coques et tuyaux, dont les"
                +" valeurs imposées (pression et/ou cisaillement) sont fournies par l'intermédiaire d'un concept fonction",
-           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
-                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','FISSURE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE','FISSURE'),
                    AU_MOINS_UN('PRES','CISA_2D'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FISSURE         =SIMP(statut='f',typ=fiss_xfem,min=1,max=100,),
            PRES            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            CISA_2D         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
          ),
@@ -3513,7 +3715,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            EPXZ            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            EPYZ            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
          ),
-         
+
          FORCE_POUTRE    =FACT(statut='f',max='**',
            fr="Applique des forces linéiques sur des éléments de type poutre dont les valeurs sont fournies par"
                +" l'intermédiaire d'un concept fonction",
@@ -3548,7 +3750,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
            PRES            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
          ),
-         
+
          FORCE_COQUE     =FACT(statut='f',max='**',
            fr="Applique des forces surfaciques sur des éléments de types coques dont les valeurs sont fournies par"
                +" l'intermédiaires d'un concept fonction",
@@ -3598,8 +3800,8 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
            NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
            NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ),
-         ),         
-         
+         ),
+
 
          VITE_FACE       =FACT(statut='f',max='**',
            fr="Impose des vitesses normales à une face (phénomène ACOUSTIQUE) dont les valeurs sont fournies par"
@@ -3648,7 +3850,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
 )  ;
 
 
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3666,6 +3868,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE None
 AFFE_CHAR_OPS011=OPER(nom="AFFE_CHAR_OPS011",op= 190,sd_prod=char_ther,
                       fr="Affectation de charges et conditions limites thermiques spécifique à CARA_TORSION",
                       reentrant='n',
@@ -3681,7 +3884,7 @@ AFFE_CHAR_OPS011=OPER(nom="AFFE_CHAR_OPS011",op= 190,sd_prod=char_ther,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 16/05/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3699,6 +3902,7 @@ AFFE_CHAR_OPS011=OPER(nom="AFFE_CHAR_OPS011",op= 190,sd_prod=char_ther,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
 AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
                     ,fr="Affectation de charges et conditions aux limites thermiques constantes",
                     reentrant='n',
@@ -3885,7 +4089,7 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 03/04/2007   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3903,6 +4107,7 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
 AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=34,sd_prod=char_ther,
                      fr="Affectation de charges et conditions aux limites thermiques fonction d'un (ou plusieurs)"
                          +" paramètres (temps, ...)",
@@ -4080,7 +4285,7 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=34,sd_prod=char_ther,
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 28/03/2007   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4098,7 +4303,7 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=34,sd_prod=char_ther,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE PELLET J.PELLET
 AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
                    fr="Affecter des matériaux à des zones géométriques d'un maillage",
                          reentrant='n',
@@ -4114,7 +4319,6 @@ AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
            GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
            MATER           =SIMP(statut='o',typ=mater_sdaster,max=30),
-           TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          ),
 
          #  affectation du nom du matériau (par noeuds):
@@ -4147,35 +4351,26 @@ AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
           regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
                   PRESENT_ABSENT('GROUP_MA','TOUT'),
                   PRESENT_ABSENT('MAILLE','TOUT'),
-                  UN_PARMI('EVOL','CHAMP_GD'),),
+                  AU_MOINS_UN('EVOL','CHAMP_GD','VALE_REF'),
+                  EXCLUS('EVOL','CHAMP_GD'),
+                  ),
 
           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ), # [défaut]
           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
 
-          CHAMP_GD      =SIMP(statut='f',typ=cham_gd_sdaster,),
-          B_CHAMP_GD    =BLOC(condition="CHAMP_GD!=None",
-              NOM_VARC    =SIMP(statut='o',typ='TXM', into=("TEMP","CORR","IRRA","HYDR","SECH","M_ACIER","M_ZIRC",
+          NOM_VARC        =SIMP(statut='o',typ='TXM', into=("TEMP","CORR","IRRA","HYDR","SECH","M_ACIER","M_ZIRC",
                                                             "EPSA","NEUT1","NEUT2")),
-          ),
+          CHAMP_GD        =SIMP(statut='f',typ=cham_gd_sdaster,),
           EVOL            =SIMP(statut='f',typ=evol_sdaster,),
+
           B_EVOL          =BLOC(condition="EVOL!=None",
-              NOM_VARC    =SIMP(statut='o',typ='TXM', into=("TEMP","CORR","IRRA","HYDR","SECH","M_ACIER",
-                                                            "M_ZIRC","EPSA","NEUT1","NEUT2")),
-              B_NOM_TEMP    =BLOC(condition="NOM_VARC=='TEMP'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'TEMP',),),
-              B_NOM_CORR    =BLOC(condition="NOM_VARC=='CORR'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'CORR',),),
-              B_NOM_IRRA    =BLOC(condition="NOM_VARC=='IRRA'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'IRRA',),),
-              B_NOM_HYDR    =BLOC(condition="NOM_VARC=='HYDR'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'HYDR_ELNO_ELGA',),),
-              B_NOM_SECH    =BLOC(condition="NOM_VARC=='SECH'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'TEMP',),),
-              B_NOM_EPSA    =BLOC(condition="NOM_VARC=='EPSA'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'EPSA_ELNO',),),
-              B_NOM_M_ACIER =BLOC(condition="NOM_VARC=='M_ACIER'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'META_ELNO_TEMP',),),
-              B_NOM_M_ZIRC  =BLOC(condition="NOM_VARC=='M_ZIRC'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'META_ELNO_TEMP',),),
-              B_NOM_NEUT1   =BLOC(condition="NOM_VARC=='NEUT1'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'NEUT',),),
-              B_NOM_NEUT2   =BLOC(condition="NOM_VARC=='NEUT2'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'NEUT',),),
+              NOM_CHAM      =SIMP(statut='f',typ='TXM'),
               PROL_DROITE   =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
               PROL_GAUCHE   =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+              FONC_INST     =SIMP(statut='f',typ=(fonction_sdaster,formule)),
           ),
-          VALE_REF          =SIMP(statut='f',typ='R'),  # defaut=0. pour TEMP (fait dans le fortran : op0006.f)
+          VALE_REF          =SIMP(statut='f',typ='R'),
          ),
 
          #  mots clés cachés pour les variables de commande NEUTi :
@@ -4264,10 +4459,12 @@ AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
            CMP_GD          =SIMP(statut='c',typ='TXM',max=3,min=3,defaut=("V1","V2","V3")),
            CMP_VARC        =SIMP(statut='c',typ='TXM',max=3,min=3,defaut=("ALPHPUR","ALPHBETA","TZIRC",)),
          ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
 
 
-#& MODIF COMMANDE  DATE 21/05/2007   AUTEUR FERNANDES R.FERNANDES 
+#& MODIF COMMANDE  DATE 06/05/2008   AUTEUR PELLET J.PELLET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4285,7 +4482,7 @@ AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-# RESPONSABLE JMBHH01 J.M.PROIX
+# RESPONSABLE PELLET J.PELLET
 AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster,
             UIinfo={"groupes":("Modélisation",)},
                  fr="Définir le phénomène physique modélisé et le type d'éléments finis sur le maillage",reentrant='n',
@@ -4293,6 +4490,25 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster,
          MAILLAGE        =SIMP(statut='o',typ=(maillage_sdaster) ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
          VERIF           =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=2,into=("MAILLE","NOEUD") ),
+#
+#====
+# Définition des grandeurs caractéristiques
+#====
+#
+         GRANDEUR_CARA =FACT(statut='f',max=1,
+         fr="Grandeurs caractéristiques pour l'adimensionnement des indicateurs d'erreur HM",
+         ang="Characteristic data for HM error estimators adimensionalisation",
+#
+            LONGUEUR      =SIMP(statut='f',typ='R',val_min=0,
+                                fr ="Longueur caractéristique",
+                                ang="Characteristic length",),
+            PRESSION      =SIMP(statut='f',typ='R',val_min=0,
+                                fr ="Pression caractéristique",
+                                ang="Characteristic pressure",),
+            TEMPERATURE   =SIMP(statut='f',typ='R',val_min=0,
+                                fr ="Température caractéristique",
+                                ang="Characteristic temperature",),),
+#
          AFFE_SOUS_STRUC =FACT(statut='f',
            regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -4311,190 +4527,191 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster,
                 b_mecanique     =BLOC( condition = "PHENOMENE=='MECANIQUE'",
                                         fr="modélisations mécaniques",
                     MODELISATION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=(
-                                                                      "2D_DIS_T",
-                                                                      "2D_DIS_TR",
-                                                                      "2D_FLUI_ABSO",
-                                                                      "2D_FLUI_PESA",
-                                                                      "2D_FLUI_STRU",
-                                                                      "2D_FLUIDE",
-                                                                      "3D",
-                                                                      "3D_ABSO",
-                                                                      "3D_FAISCEAU",
-                                                                      "3D_FLUI_ABSO",
-                                                                      "3D_FLUIDE",
-                                                                      "3D_INCO",
-                                                                      "3D_INCO_GD",
-                                                                      "3D_SI",
-                                                                      "3D_GRAD_EPSI",
-                                                                      "3D_GRAD_VARI",
-                                                                      "3D_XFEM",
-                                                                      "3D_JOINT",
-                                                                      "AXIS",
-                                                                      "AXIS_FLUI_STRU",
-                                                                      "AXIS_FLUIDE",
-                                                                      "AXIS_FOURIER",
-                                                                      "AXIS_INCO",
-                                                                      "AXIS_INCO_GD",
-                                                                      "AXIS_NS",
-                                                                      "AXIS_SI",
-                                                                      "AXIS_GRAD_VARI",
-                                                                      "AXIS_JOINT",
-                                                                      "AXIS_ELDI",
-                                                                      "BARRE",
-                                                                      "2D_BARRE",
-                                                                      "C_PLAN",
-                                                                      "C_PLAN_XFEM",
-                                                                      "C_PLAN_NS",
-                                                                      "C_PLAN_SI",
-                                                                      "C_PLAN_GRAD_EPSI",
-                                                                      "CABLE",
-                                                                      "CABLE_POULIE",
-                                                                      "COQUE_3D",
-                                                                      "COQUE_AXIS",
-                                                                      "COQUE_C_PLAN",
-                                                                      "COQUE_D_PLAN",
-                                                                      "D_PLAN",
-                                                                      "D_PLAN_XFEM",
-                                                                      "D_PLAN_GRAD_EPSI",
-                                                                      "D_PLAN_GRAD_VARI",
-                                                                      "D_PLAN_NS",
-                                                                      "PLAN_JOINT",
-                                                                      "PLAN_ELDI",
-                                                                      "D_PLAN_ABSO",
-                                                                      "D_PLAN_INCO",
-                                                                      "D_PLAN_INCO_GD",
-                                                                      "D_PLAN_SI",
-                                                                      "DIS_T",
-                                                                      "DIS_TR",
-                                                                      "DKT",
-                                                                      "DKTG",
-                                                                      "DST",
-                                                                      "FLUI_STRU",
-                                                                      "GRILLE",
-                                                                      "GRILLE_MEMBRANE",
-                                                                      "POU_C_T",
-                                                                      "POU_D_E",
-                                                                      "POU_D_EM",
-                                                                      "POU_D_T",
-                                                                      "POU_D_T_GD",
-                                                                      "POU_D_TG",
-                                                                      "POU_D_TGM",
-                                                                      "Q4G",
-                                                                      "TUYAU_3M",
-                                                                      "TUYAU_6M",
-                                                                      "SHB8",
-                                                                      "D_PLAN_HHM",
-                                                                      "D_PLAN_HM",
-                                                                      "D_PLAN_THH",
-                                                                      "D_PLAN_THHM",
-                                                                      "D_PLAN_THM",
-                                                                      "D_PLAN_HHMD",
-                                                                      "D_PLAN_HH2MD",
-                                                                      "D_PLAN_HMD",
-                                                                      "D_PLAN_THHD",
-                                                                      "D_PLAN_THH2D",
-                                                                      "D_PLAN_THVD",
-                                                                      "D_PLAN_THH2MD",
-                                                                      "D_PLAN_THHMD",
-                                                                      "D_PLAN_THMD", 
-                                                                      "D_PLAN_HHMS",
-                                                                      "D_PLAN_HH2MS",
-                                                                      "D_PLAN_HMS",
-                                                                      "D_PLAN_THHS",
-                                                                      "D_PLAN_THH2S",
-                                                                      "D_PLAN_THVS",
-                                                                      "D_PLAN_THH2MS",
-                                                                      "D_PLAN_THHMS",
-                                                                      "D_PLAN_THMS", 
-                                                                      "D_PLAN_HM_P",
-                                                                      "D_PLAN_HHD",
-                                                                      "D_PLAN_HHS",
-                                                                      "D_PLAN_HH2D",
-                                                                      "D_PLAN_HH2S",
-                                                                      "AXIS_THH",
-                                                                      "AXIS_THHM",
-                                                                      "AXIS_THM",
-                                                                      "AXIS_HHM",
-                                                                      "AXIS_HM",
-                                                                      "AXIS_HH2MD",
-                                                                      "AXIS_HHMD",
-                                                                      "AXIS_HMD",
-                                                                      "AXIS_THHD",
-                                                                      "AXIS_THH2D",
-                                                                      "AXIS_THVD",
-                                                                      "AXIS_THHMD",
-                                                                      "AXIS_THH2MD",
-                                                                      "AXIS_THMD",
-                                                                      "AXIS_HH2MS",
-                                                                      "AXIS_HHMS",
-                                                                      "AXIS_HMS",
-                                                                      "AXIS_THHS",
-                                                                      "AXIS_THH2S",
-                                                                      "AXIS_THVS",
-                                                                      "AXIS_THHMS",
-                                                                      "AXIS_THH2MS",
-                                                                      "AXIS_THMS",
-                                                                      "AXIS_HHD",
-                                                                      "AXIS_HHS",
-                                                                      "AXIS_HH2D",
-                                                                      "AXIS_HH2S",
-                                                                      "3D_HHM" ,
-                                                                      "3D_HM",
-                                                                      "3D_THH",
-                                                                      "3D_THV",
-                                                                      "3D_THHM",
-                                                                      "3D_THM",
-                                                                      "3D_HHMD",
-                                                                      "3D_HMD",
-                                                                      "3D_THHD",
-                                                                      "3D_THVD",
-                                                                      "3D_THHMD",
-                                                                      "3D_THMD",
-                                                                      "3D_HHMS",
-                                                                      "3D_HMS",
-                                                                      "3D_THHS",
-                                                                      "3D_THVS",
-                                                                      "3D_THHMS",
-                                                                      "3D_THMS",
-                                                                      "3D_THH2MD",
-                                                                      "3D_THH2MS",
-                                                                      "3D_HH2MD",
-                                                                      "3D_HH2MS",
-                                                                      "3D_THH2S",
-                                                                      "3D_THH2D",
-                                                                      "3D_HHD",
-                                                                      "3D_HHS",
-                                                                      "3D_HH2D",
-                                                                      "3D_HH2S",
-                                                                      "D_PLAN_2DG",
-                                                                      "D_PLAN_DIL",
+                                  "2D_DIS_T",        # RESP. : FLEJOU J.L.FLEJOU
+                                  "2D_DIS_TR",       # RESP. : FLEJOU J.L.FLEJOU
+                                  "2D_FLUI_ABSO",    # RESP. : DEVESA G.DEVESA
+                                  "2D_FLUI_PESA",    # RESP. : GREFFET N.GREFFET
+                                  "2D_FLUI_STRU",    # RESP. : GREFFET N.GREFFET
+                                  "2D_FLUIDE",       # RESP. : GREFFET N.GREFFET
+                                  "3D",              # RESP. : DESROCHES X.DESROCHES
+                                  "3D_ABSO",         # RESP. : DEVESA G.DEVESA
+                                  "3D_FAISCEAU",     # RESP. : VOLDOIRE F.VOLDOIRE
+                                  "3D_FLUI_ABSO",    # RESP. : DEVESA G.DEVESA
+                                  "3D_FLUIDE",       # RESP. : GREFFET N.GREFFET
+                                  "3D_INCO",         # RESP. : MICHEL S.MICHEL
+                                  "3D_INCO_GD",      # RESP. : MICHEL S.MICHEL
+                                  "3D_SI",           # RESP. : DESROCHES X.DESROCHES
+                                  "3D_GRAD_EPSI",    # RESP. : MICHEL S.MICHEL
+                                  "3D_GRAD_VARI",    # RESP. : MICHEL S.MICHEL
+                                  "3D_XFEM_CONT",    # RESP. : GENIAUT S.GENIAUT
+                                  "3D_JOINT",        # RESP. : LAVERNE J.LAVERNE
+                                  "AXIS",            # RESP. : LEFEBVRE J.P.LEFEBVRE
+                                  "AXIS_FLUI_STRU",  # RESP. : GREFFET N.GREFFET
+                                  "AXIS_FLUIDE",     # RESP. : GREFFET N.GREFFET
+                                  "AXIS_FOURIER",    # RESP. : DESROCHES X.DESROCHES
+                                  "AXIS_INCO",       # RESP. : MICHEL S.MICHEL
+                                  "AXIS_INCO_GD",    # RESP. : MICHEL S.MICHEL
+                                  "AXIS_NS",         # RESP. : BADEL P.BADEL
+                                  "AXIS_SI",         # RESP. : DESROCHES X.DESROCHES
+                                  "AXIS_GRAD_VARI",  # RESP. : MICHEL S.MICHEL
+                                  "AXIS_JOINT",      # RESP. : LAVERNE J.LAVERNE
+                                  "AXIS_ELDI",       # RESP. : LAVERNE J.LAVERNE
+                                  "BARRE",           # RESP. : FLEJOU J.L.FLEJOU
+                                  "2D_BARRE",        # RESP. : FLEJOU J.L.FLEJOU
+                                  "C_PLAN",          # RESP. : LEFEBVRE J.P.LEFEBVRE
+                                  "C_PLAN_XFEM_CONT",# RESP. : GENIAUT S.GENIAUT
+                                  "C_PLAN_NS",       # RESP. : BADEL P.BADEL
+                                  "C_PLAN_SI",       # RESP. : DESROCHES X.DESROCHES
+                                  "C_PLAN_GRAD_EPSI",# RESP. : MICHEL S.MICHEL
+                                  "CABLE",           # RESP. : FLEJOU J.L.FLEJOU
+                                  "CABLE_POULIE",    # RESP. : None
+                                  "COQUE_3D",        # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE_AXIS",      # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE_C_PLAN",    # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE_D_PLAN",    # RESP. : DESROCHES X.DESROCHES
+                                  "D_PLAN",          # RESP. : LEFEBVRE J.P.LEFEBVRE
+                                  "D_PLAN_XFEM_CONT",# RESP. : GENIAUT S.GENIAUT
+                                  "D_PLAN_GRAD_EPSI",# RESP. : MICHEL S.MICHEL
+                                  "D_PLAN_GRAD_VARI",# RESP. : MICHEL S.MICHEL
+                                  "D_PLAN_NS",       # RESP. : BADEL P.BADEL
+                                  "PLAN_JOINT",      # RESP. : LAVERNE J.LAVERNE
+                                  "PLAN_ELDI",       # RESP. : LAVERNE J.LAVERNE
+                                  "D_PLAN_ABSO",     # RESP. : DEVESA G.DEVESA
+                                  "D_PLAN_INCO",     # RESP. : MICHEL S.MICHEL
+                                  "D_PLAN_INCO_GD",  # RESP. : MICHEL S.MICHEL
+                                  "D_PLAN_SI",       # RESP. : DESROCHES X.DESROCHES
+                                  "DIS_T",           # RESP. : FLEJOU J.L.FLEJOU
+                                  "DIS_TR",          # RESP. : FLEJOU J.L.FLEJOU
+                                  "DKT",             # RESP. : DESROCHES X.DESROCHES
+                                  "DKTG",            # RESP. : MARKOVIC D.MARKOVIC
+                                  "DST",             # RESP. : DESROCHES X.DESROCHES
+                                  "FLUI_STRU",       # RESP. : GREFFET N.GREFFET
+                                  "GRILLE_EXCENTRE", # RESP. : ROSPARS C.ROSPARS
+                                  "GRILLE_MEMBRANE", # RESP. : ROSPARS C.ROSPARS
+                                  "POU_C_T",         # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_E",         # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_EM",        # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_T",         # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_T_GD",      # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_TG",        # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_TGM",       # RESP. : FLEJOU J.L.FLEJOU
+                                  "Q4G",             # RESP. : DESROCHES X.DESROCHES
+                                  "TUYAU_3M",        # RESP. : PROIX J.M.PROIX
+                                  "TUYAU_6M",        # RESP. : PROIX J.M.PROIX
+                                  "SHB8",            # RESP. : DESROCHES X.DESROCHES
+                                  "D_PLAN_HHM",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HM",       # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THH",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THHM",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THM",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HHMD",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2MD",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HMD",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THHD",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THH2D",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THVD",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THH2MD",   # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THHMD",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THMD",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HHMS",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2MS",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HMS",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THHS",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THH2S",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THVS",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THH2MS",   # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THHMS",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THMS",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HM_P",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HHD",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HHS",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2D",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2S",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_2DG",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_DIL",      # RESP. : GRANET S.GRANET
+                                  "AXIS_THH",        # RESP. : GRANET S.GRANET
+                                  "AXIS_THHM",       # RESP. : GRANET S.GRANET
+                                  "AXIS_THM",        # RESP. : GRANET S.GRANET
+                                  "AXIS_HHM",        # RESP. : GRANET S.GRANET
+                                  "AXIS_HM",         # RESP. : GRANET S.GRANET
+                                  "AXIS_HH2MD",      # RESP. : GRANET S.GRANET
+                                  "AXIS_HHMD",       # RESP. : GRANET S.GRANET
+                                  "AXIS_HMD",        # RESP. : GRANET S.GRANET
+                                  "AXIS_THHD",       # RESP. : GRANET S.GRANET
+                                  "AXIS_THH2D",      # RESP. : GRANET S.GRANET
+                                  "AXIS_THVD",       # RESP. : GRANET S.GRANET
+                                  "AXIS_THHMD",      # RESP. : GRANET S.GRANET
+                                  "AXIS_THH2MD",     # RESP. : GRANET S.GRANET
+                                  "AXIS_THMD",       # RESP. : GRANET S.GRANET
+                                  "AXIS_HH2MS",      # RESP. : GRANET S.GRANET
+                                  "AXIS_HHMS",       # RESP. : GRANET S.GRANET
+                                  "AXIS_HMS",        # RESP. : GRANET S.GRANET
+                                  "AXIS_THHS",       # RESP. : GRANET S.GRANET
+                                  "AXIS_THH2S",      # RESP. : GRANET S.GRANET
+                                  "AXIS_THVS",       # RESP. : GRANET S.GRANET
+                                  "AXIS_THHMS",      # RESP. : GRANET S.GRANET
+                                  "AXIS_THH2MS",     # RESP. : GRANET S.GRANET
+                                  "AXIS_THMS",       # RESP. : GRANET S.GRANET
+                                  "AXIS_HHD",        # RESP. : GRANET S.GRANET
+                                  "AXIS_HHS",        # RESP. : GRANET S.GRANET
+                                  "AXIS_HH2D",       # RESP. : GRANET S.GRANET
+                                  "AXIS_HH2S",       # RESP. : GRANET S.GRANET
+                                  "3D_HHM" ,         # RESP. : GRANET S.GRANET
+                                  "3D_HM",           # RESP. : GRANET S.GRANET
+                                  "3D_THH",          # RESP. : GRANET S.GRANET
+                                  "3D_THV",          # RESP. : GRANET S.GRANET
+                                  "3D_THHM",         # RESP. : GRANET S.GRANET
+                                  "3D_THM",          # RESP. : GRANET S.GRANET
+                                  "3D_HHMD",         # RESP. : GRANET S.GRANET
+                                  "3D_HMD",          # RESP. : GRANET S.GRANET
+                                  "3D_THHD",         # RESP. : GRANET S.GRANET
+                                  "3D_THVD",         # RESP. : GRANET S.GRANET
+                                  "3D_THHMD",        # RESP. : GRANET S.GRANET
+                                  "3D_THMD",         # RESP. : GRANET S.GRANET
+                                  "3D_HHMS",         # RESP. : GRANET S.GRANET
+                                  "3D_HMS",          # RESP. : GRANET S.GRANET
+                                  "3D_THHS",         # RESP. : GRANET S.GRANET
+                                  "3D_THVS",         # RESP. : GRANET S.GRANET
+                                  "3D_THHMS",        # RESP. : GRANET S.GRANET
+                                  "3D_THMS",         # RESP. : GRANET S.GRANET
+                                  "3D_THH2MD",       # RESP. : GRANET S.GRANET
+                                  "3D_THH2MS",       # RESP. : GRANET S.GRANET
+                                  "3D_HH2MD",        # RESP. : GRANET S.GRANET
+                                  "3D_HH2MS",        # RESP. : GRANET S.GRANET
+                                  "3D_THH2S",        # RESP. : GRANET S.GRANET
+                                  "3D_THH2D",        # RESP. : GRANET S.GRANET
+                                  "3D_HHD",          # RESP. : GRANET S.GRANET
+                                  "3D_HHS",          # RESP. : GRANET S.GRANET
+                                  "3D_HH2D",         # RESP. : GRANET S.GRANET
+                                  "3D_HH2S",         # RESP. : GRANET S.GRANET
+                                  "VF1",             # RESP. : GRANET S.GRANET
                                                                      )  )  ),
 
                 b_thermique     =BLOC( condition = "PHENOMENE=='THERMIQUE'",
                                         fr="modélisations thermiques",
                     MODELISATION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=(
-                                                                      "3D",
-                                                                      "3D_DIAG",
-                                                                      "AXIS",
-                                                                      "AXIS_DIAG",
-                                                                      "AXIS_FOURIER",
-                                                                      "COQUE",
-                                                                      "COQUE_AXIS",
-                                                                      "COQUE_PLAN",
-                                                                      "PLAN",
-                                                                      "PLAN_DIAG",
+                                  "3D",              # RESP. : DURAND C.DURAND
+                                  "3D_DIAG",         # RESP. : DURAND C.DURAND
+                                  "AXIS",            # RESP. : DURAND C.DURAND
+                                  "AXIS_DIAG",       # RESP. : DURAND C.DURAND
+                                  "AXIS_FOURIER",    # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE",           # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE_AXIS",      # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE_PLAN",      # RESP. : DESROCHES X.DESROCHES
+                                  "PLAN",            # RESP. : DURAND C.DURAND
+                                  "PLAN_DIAG",       # RESP. : DURAND C.DURAND
                                                                       ),),),
 
                 b_acoustique    =BLOC( condition = "PHENOMENE=='ACOUSTIQUE'",
                                         fr="modélisations acoustiques",
                      MODELISATION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=(
-                                                                       "3D",
-                                                                       "PLAN"
+                                  "3D",              # RESP. : None
+                                  "PLAN"             # RESP. : None
                                                                        ), ),),
 
          ),
 ) ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4512,6 +4729,7 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 AIDE=PROC(nom="AIDE",op=42,
        UIinfo={"groupes":("Modélisation",)},
        fr="Interroger et imprimer une documentation partielle sur les noms des concepts déjà définis et sur les couples"
@@ -4527,7 +4745,7 @@ AIDE=PROC(nom="AIDE",op=42,
                                  into=("TOUT_TYPE","CREER","A_CREER",) ),
          ),
 ) ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4545,7 +4763,7 @@ AIDE=PROC(nom="AIDE",op=42,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE PELLET J.PELLET
 ASSE_MAILLAGE=OPER(nom="ASSE_MAILLAGE",op= 105,sd_prod=maillage_sdaster,
                    fr="Assembler deux maillages pour en former un nouveau",
                    reentrant='n',
@@ -4560,7 +4778,7 @@ ASSE_MAILLAGE=OPER(nom="ASSE_MAILLAGE",op= 105,sd_prod=maillage_sdaster,
                              ),
                            ),
 )  ;
-#& MODIF COMMANDE  DATE 18/04/2005   AUTEUR NICOLAS O.NICOLAS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4578,17 +4796,23 @@ ASSE_MAILLAGE=OPER(nom="ASSE_MAILLAGE",op= 105,sd_prod=maillage_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-ASSE_MATR_GENE=OPER(nom="ASSE_MATR_GENE",op= 128,sd_prod=matr_asse_gene_r,
+# RESPONSABLE BODEL C.BODEL
+def asse_matr_gene_prod(METHODE,**args):
+    if   (METHODE=="INITIAL") : return matr_asse_gene_r
+    elif (args['OPTION']=="RIGI_GENE_C") : return matr_asse_gene_c
+    else : return matr_asse_gene_r
+
+ASSE_MATR_GENE=OPER(nom="ASSE_MATR_GENE",op= 128,sd_prod=asse_matr_gene_prod,
                     fr="Assemblage des matrices généralisées de macro éléments pour construction de la matrice globale généralisée",
                     reentrant='n',
             UIinfo={"groupes":("Matrices/vecteurs",)},
          NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
          METHODE          =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","INITIAL") ),
          b_option     =BLOC(condition = "METHODE == 'CLASSIQUE'",
-           OPTION          =SIMP(statut='o',typ='TXM',into=("RIGI_GENE","MASS_GENE","AMOR_GENE") ),
+           OPTION          =SIMP(statut='o',typ='TXM',into=("RIGI_GENE","RIGI_GENE_C","MASS_GENE","AMOR_GENE") ),
            ),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4606,7 +4830,7 @@ ASSE_MATR_GENE=OPER(nom="ASSE_MATR_GENE",op= 128,sd_prod=matr_asse_gene_r,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE PELLET J.PELLET
 def asse_matrice_prod(MATR_ELEM,**args):
   if AsType(MATR_ELEM) == matr_elem_depl_r : return matr_asse_depl_r
   if AsType(MATR_ELEM) == matr_elem_depl_c : return matr_asse_depl_c
@@ -4623,7 +4847,7 @@ ASSE_MATRICE=OPER(nom="ASSE_MATRICE",op=12,sd_prod=asse_matrice_prod,
          CHAR_CINE       =SIMP(statut='f',typ=(char_cine_meca,char_cine_ther,char_cine_acou) ),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4641,7 +4865,7 @@ ASSE_MATRICE=OPER(nom="ASSE_MATRICE",op=12,sd_prod=asse_matrice_prod,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE PELLET J.PELLET
 
 ASSE_VECTEUR=OPER(nom="ASSE_VECTEUR",op=13,sd_prod=cham_no_sdaster,
                   fr="Construire un champ aux noeuds par assemblage de vecteurs élémentaires",reentrant='n',
@@ -4650,7 +4874,7 @@ ASSE_VECTEUR=OPER(nom="ASSE_VECTEUR",op=13,sd_prod=cham_no_sdaster,
          NUME_DDL        =SIMP(statut='o',typ=nume_ddl_sdaster ),
          INFO            =SIMP(statut='f',typ='I',into=(1,2,) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4668,6 +4892,7 @@ ASSE_VECTEUR=OPER(nom="ASSE_VECTEUR",op=13,sd_prod=cham_no_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE BODEL C.BODEL
 ASSE_VECT_GENE=OPER(nom="ASSE_VECT_GENE",op= 140,sd_prod=vect_asse_gene,
                     fr="Projection des chargements sur la base modale d'une sous structure",
                     reentrant='n',
@@ -4681,7 +4906,7 @@ ASSE_VECT_GENE=OPER(nom="ASSE_VECT_GENE",op= 140,sd_prod=vect_asse_gene,
            ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 03/01/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4699,6 +4924,7 @@ ASSE_VECT_GENE=OPER(nom="ASSE_VECT_GENE",op= 140,sd_prod=vect_asse_gene,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
 CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8_sdaster,
                      fr="Création d'une liste d'amortissements modaux calculés selon la règle du RCC-G",
                      reentrant='n',
@@ -4740,7 +4966,7 @@ CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8_sdaster,
            SEUIL           =SIMP(statut='f',typ='R',defaut= 0.3 ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 16/05/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4758,7 +4984,7 @@ CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE JMBHH01 J.M.PROIX
+# RESPONSABLE ASSIRE A.ASSIRE
 
 CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=cham_elem,
                     fr="Calculer un champ élémentaire en thermique et en accoustique à partir de champs déjà calculés",
@@ -4806,7 +5032,7 @@ CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=cham_elem,
          MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0 ),
          ANGLE           =SIMP(statut='f',typ='I',defaut= 0),
 )  ;
-#& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4824,7 +5050,7 @@ CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=cham_elem,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE PELLET J.PELLET
 
 CALC_CHAR_CINE=OPER(nom="CALC_CHAR_CINE",op= 102,sd_prod=cham_no_sdaster,
                     fr="Calcul des seconds membres associés à des charges cinématiques (conditions aux limites non dualisées)",
@@ -4835,7 +5061,7 @@ CALC_CHAR_CINE=OPER(nom="CALC_CHAR_CINE",op= 102,sd_prod=cham_no_sdaster,
          INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4853,6 +5079,7 @@ CALC_CHAR_CINE=OPER(nom="CALC_CHAR_CINE",op= 102,sd_prod=cham_no_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
 def calc_char_seisme_prod(MATR_MASS,**args ):
   if AsType(MATR_MASS) == matr_asse_depl_r : return cham_no_sdaster
   raise AsException("type de concept resultat non prevu")
@@ -4872,25 +5099,25 @@ CALC_CHAR_SEISME=OPER(nom="CALC_CHAR_SEISME",op=  92,sd_prod=calc_char_seisme_pr
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 09/05/2007   AUTEUR VIVAN L.VIVAN 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  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.                                 
+# 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.                            
+# 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.      
+# 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.
 # ======================================================================
-# RESPONSABLE JMBHH01 J.M.PROIX
+# RESPONSABLE ASSIRE A.ASSIRE
 def calc_elem_prod(RESULTAT,**args):
    if AsType(RESULTAT) != None : return AsType(RESULTAT)
    raise AsException("type de concept resultat non prevu")
@@ -4904,7 +5131,7 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
 
      RESULTAT        =SIMP(statut='o',typ=resultat_sdaster,
                                       fr="Résultat d'une commande globale"),
-                                           
+
      regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
                     'NOEUD_CMP','LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS'),
              CONCEPT_SENSIBLE("SEPARE"),
@@ -4922,14 +5149,14 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
      PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
      CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
      LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
-     
+
      TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
      GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
                            fr="le calcul ne sera effectué que sur ces mailles là"),
      MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**',
                            fr="le calcul ne sera effectué que sur ces mailles là"),
 
-#    definition d'un repere local 
+#    definition d'un repere local
 
      REPE_COQUE      =FACT(statut='f',max='**',
                            fr="définiton du lieu de post-traitement",
@@ -4955,7 +5182,7 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
                            fr="définition du repere de post-traitement, par défaut VECTEUR=(1.,0.,0.)"),
                             ),
 
-#    options pour des resultats lineaires 
+#    options pour des resultats lineaires
 
      b_lineaire =BLOC( condition = "AsType(RESULTAT) in (evol_elas,dyna_trans,dyna_harmo,mode_meca,\
                                                                mode_stat,mode_stat_depl,mode_stat_acce,mode_stat_forc,\
@@ -4975,27 +5202,27 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
                                  "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPSG_ELGA_DEPL","EPSG_ELNO_DEPL",
                                  "EPME_ELNO_DEPL","EPME_ELGA_DEPL","DEGE_ELNO_DEPL","EPSI_ELNO_TUYO",
                                  "EPVC_ELNO","EPVC_ELGA",
-                              #  ENER    
+                              #  ENER
                                  "EPOT_ELEM_DEPL","ECIN_ELEM_DEPL","ENEL_ELGA","ENEL_ELNO_ELGA",
                                  "ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM",
-                              #  estimateurs erreur 
+                              #  estimateurs erreur
                                  "SIGM_NOZ1_ELGA","ERZ1_ELEM_SIGM","SIGM_NOZ2_ELGA","ERZ2_ELEM_SIGM",
                                  "SIRE_ELNO_DEPL","ERRE_ELEM_SIGM","ERRE_ELNO_ELEM",
                                  "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",
                                  "SING_ELEM","SING_ELNO_ELEM",
-                              #  CRIT    
+                              #  CRIT
                                  "EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","CRIT_ELNO_RUPT",
                                  "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME",
                                  "ENDO_ELGA","ENDO_ELNO_ELGA",
                                  "ENDO_ELNO_SIGA","ENDO_ELNO_SINO","SIEQ_ELNO_TUYO","EPEQ_ELNO_TUYO",
-                              #  derivees    
+                              #  derivees
                                  "DEUL_ELGA_DEPL","DEDE_ELNO_DLDE","DESI_ELNO_DLSI",
-                              #  autres      
+                              #  autres
                                  "VALE_NCOU_MAXI","PRES_DBEL_DEPL"),),
 
                NOM_CHAM  =SIMP(statut='f',typ='TXM',fr="nom du champ pour VALE_NCOU_MAXI", ),
                NOM_CMP   =SIMP(statut='f',typ='TXM',fr="nom de la composante pour VALE_NCOU_MAXI",  ),
-              
+
                 b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \
                                         (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \
                                         (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \
@@ -5005,8 +5232,8 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
                b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \
                                (type(OPTION)==type(()) and  'SING_ELEM' in OPTION)",
                     PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,val_max= 1.,
-                                  fr="precision demandee pour calculer la carte de taille des elements"),),   
-               
+                                  fr="precision demandee pour calculer la carte de taille des elements"),),
+
                EXCIT           =FACT(statut='f',max='**',
                                      fr="Charges contenant les températures, les efforts répartis pour les poutres...",
                                      regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
@@ -5018,8 +5245,8 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
                     PHAS_DEG        =SIMP(statut='f',typ='R'),
                     PUIS_PULS       =SIMP(statut='f',typ='I'),
                     TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),),
-                
-                                
+
+
                             ),
 #             fin bloc b_toutes
 
@@ -5028,7 +5255,7 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut='SIEF_ELNO_ELGA',
                             fr="option de calcul des contraintes",
                            into=( "SIEF_ELNO_ELGA","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",),),
-                           
+
                     b_charge =BLOC( condition = "OPTION in ('SIGM_ELNO_DEPL','SIEF_ELGA_DEPL',) or \
                                       (type(OPTION)==type(()) and  'SIGM_ELNO_DEPL' in OPTION ) or \
                                       (type(OPTION)==type(()) and  'SIEF_ELGA_DEPL' in OPTION ) ",
@@ -5037,7 +5264,7 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
                          CHARGE          =SIMP(statut='o',typ=char_meca ),),
                                     ),
                                   ),
-                                  
+
           b_sigm_struct =BLOC( condition = "TYPE_OPTION == 'SIGM_STRUCT'",
                                       fr="options de contraintes elasticite poutres, coques, tuyaux",
                OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut='SIEF_ELNO_ELGA',
@@ -5045,7 +5272,7 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
                             into=( "SIEF_ELNO_ELGA","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL","SIGM_ELNO_TUYO",
                                    "SIPO_ELNO_DEPL","EFGE_ELNO_DEPL","EFGE_ELNO_CART","SIGM_ELNO_CART",
                                    "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF"),),
-                           
+
                b_charge =BLOC( condition = "OPTION in ('SIGM_ELNO_DEPL','SIEF_ELGA_DEPL',\
                                                        'SIPO_ELNO_DEPL','EFGE_ELNO_DEPL',) or \
                                             (type(OPTION)==type(()) and  'SIGM_ELNO_DEPL' in OPTION ) or \
@@ -5064,8 +5291,8 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
                          PUIS_PULS       =SIMP(statut='f',typ='I'),
                          TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),),
                              ),
-                          
-                                 
+
+
                             ),
 #          fin bloc contraintes struct
 
@@ -5100,7 +5327,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                          CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou) ),),
                               ),
                                  ),
-                                 
+
           b_crit         =BLOC( condition = "TYPE_OPTION=='CRIT'",
                OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
                            into=("EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",
@@ -5111,7 +5338,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                 EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
                      CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
                                  ),
-                                 
+
           b_derivees         =BLOC( condition = "TYPE_OPTION=='DERIVEES'",
                   OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
                            into=("DEUL_ELGA_DEPL","DEDE_ELNO_DLDE","DESI_ELNO_DLSI",
@@ -5134,7 +5361,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                                  "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",
                                  "SING_ELEM","SING_ELNO_ELEM",
                                  )),
-               
+
                b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \
                                         (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \
                                         (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \
@@ -5144,16 +5371,15 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \
                                (type(OPTION)==type(()) and  'SING_ELEM' in OPTION)",
                     PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,val_max=1.,
-                                  fr="precision demandee pour calculer la carte de taille des elements" ),),     
+                                  fr="precision demandee pour calculer la carte de taille des elements" ),),
 
                EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
                      CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
                                  ),
                                  ),
-#    fin bloc lineaire                                
-                            
-                                 
-#    statique ou dynamique non lineaire : evol_noli                                
+#    fin bloc lineaire
+
+#    statique ou dynamique non lineaire : evol_noli
      b_noli          =BLOC( condition = "AsType(RESULTAT) == evol_noli",fr="options mecaniques non lineaires",
           TYPE_OPTION =SIMP(statut='f',typ='TXM',defaut='TOUTES',fr="type d'options mecaniques non lineaires",
                            into=("SIGM_MASSIF","SIGM_STRUCT","EPSI","ENER","CRIT",
@@ -5170,7 +5396,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                                  "DEGE_ELNO_DEPL","EPSI_ELNO_TUYO",
                                  "EPSP_ELNO","EPSP_ELGA",
                                  "EPFD_ELNO","EPFD_ELGA","EPVC_ELNO","EPVC_ELGA",
-                                 "EPFP_ELNO","EPFP_ELGA", 
+                                 "EPFP_ELNO","EPFP_ELGA",
                                  "VARI_ELNO_ELGA","VARI_ELNO_TUYO","VARI_ELNO_COQU","CRIT_ELNO_RUPT",
                                  "EXTR_ELGA_VARI","EXTR_ELNO_VARI",
                                  # CRIT
@@ -5187,22 +5413,10 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                NORME =SIMP(statut='f',typ='TXM',defaut="VMIS",
                                  into=("VMIS","TOTAL","VMIS_CINE","TOTAL_CINE"),
                                  fr="Type de norme pour les options RADI_ et DCHA_"),
-                                 
+
                NOM_CHAM  =SIMP(statut='f',typ='TXM',fr="Nom du champ pour VALE_NCOU_MAXI"),
                NOM_CMP   =SIMP(statut='f',typ='TXM',fr="Nom de la composante pour VALE_NCOU_MAXI"),
 
-               b_erreur_re=BLOC(condition ="OPTION in ('ERRE_ELEM_SIGM','ERRE_ELNO_ELEM') or \
-                                          (type(OPTION)==type(()) and 'ERRE_ELEM_SIGM' in OPTION) or \
-                                          (type(OPTION)==type(()) and 'ERRE_ELNO_ELEM' in OPTION)",
-                 ERRE_THM   =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
-                                   fr="Indicateur d'erreur spatiale pour les modélisations THM",
-                                   ang="Spatial error indicators for THM models"),
-                 b_ERRE_THM=BLOC(condition = "ERRE_THM == 'OUI'",
-                               regles=(ENSEMBLE('LONGUEUR','PRESSION'),),
-                   LONGUEUR=SIMP(statut='o',typ='R',val_min=0.0,fr="Longueur caractéristique du problème"),
-                   PRESSION=SIMP(statut='o',typ='R',val_min=0.0,fr="Pression caractéristique du problème"),
-                   TEMPERATURE=SIMP(statut='f',typ='R',val_min=0.0,fr="Température caractéristique du problème"),),),
-
                b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \
                                         (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \
                                         (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \
@@ -5212,9 +5426,9 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \
                                (type(OPTION)==type(()) and  'SING_ELEM' in OPTION)",
                     PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,val_max=1.,
-                                  fr="precision demandee pour calculer la carte de taille des elements" ),),     
+                                  fr="precision demandee pour calculer la carte de taille des elements" ),),
+
 
-               
                b_extr = BLOC( condition = "OPTION in ('EXTR_ELNO_VARI','EXTR_ELGA_VARI')",
                              NOM_VARI =SIMP(statut='o',typ='TXM',min= 1,max=1,fr="nom de la variable à extraire",
                          into=("DPORO","DRHOLQ","DPVP","SATLIQ","EVP","IND_ETA","D","IND_END","TEMP_MAX","GAMP","PCR",
@@ -5233,14 +5447,14 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                     PUIS_PULS       =SIMP(statut='f',typ='I'),
                     TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),),
                          ),
-                         
+
           b_sigm_massif =BLOC( condition = "TYPE_OPTION == 'SIGM_MASSIF'",
                                       fr="options de contraintes non lin 2D et 3D",
                OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
                               #  contraintes
                            into=( "SIEF_ELNO_ELGA",),),
                             ),
-                            
+
           b_sigm_struct =BLOC( condition = "TYPE_OPTION == 'SIGM_STRUCT'",
                                        fr="options de contraintes non lin poutres, coques",
                OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
@@ -5248,7 +5462,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                            into=( "SIEF_ELNO_ELGA","EFGE_ELNO_CART","SIGM_ELNO_TUYO","SIGM_ELNO_COQU",
                            "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF",),),
                              ),
-                             
+
           b_epsi         =BLOC( condition = "TYPE_OPTION=='EPSI'",
                OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
                            into=( "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPSG_ELNO_DEPL","EPSG_ELGA_DEPL",
@@ -5264,7 +5478,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
               EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
                     CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
                                ),
-                                 
+
           b_vari         =BLOC( condition = "TYPE_OPTION=='VARI'",
                                        fr="Calcul et extraction des variables internes",
                    OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
@@ -5279,7 +5493,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                                "RDEV_1","RDEV_2","RDEV_3","RISO","EPSIVPLA","IND_1","IND_2","IND_3","IND_4"),),
                             ),
                            ),
-                              
+
           b_ener         =BLOC( condition = "TYPE_OPTION=='ENER'",
                OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
                            into=("ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM","ENEL_ELGA","ENEL_ELNO_ELGA",),
@@ -5287,7 +5501,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
                     CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
                                  ),
-                                 
+
           b_crit         =BLOC( condition = "TYPE_OPTION=='CRIT'",
                OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
                            into=("EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",
@@ -5297,7 +5511,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                                  "PMPB_ELNO_SIEF","PMPB_ELGA_SIEF","SIEQ_ELNO_TUYO","EPEQ_ELNO_TUYO",
                                  ) ),
                                  ),
-                                 
+
           b_autres         =BLOC( condition = "TYPE_OPTION=='AUTRES'",
                   OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
                            into=("VALE_NCOU_MAXI",) ),
@@ -5314,18 +5528,6 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                                  "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",
                                  "SING_ELEM","SING_ELNO_ELEM",) ),
 
-               b_erreur_re=BLOC(condition ="OPTION in ('ERRE_ELEM_SIGM','ERRE_ELNO_ELEM') or \
-                                          (type(OPTION)==type(()) and 'ERRE_ELEM_SIGM' in OPTION) or \
-                                          (type(OPTION)==type(()) and 'ERRE_ELNO_ELEM' in OPTION)",
-                 ERRE_THM   =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
-                                   fr="Indicateur d'erreur spatiale pour les modélisations THM",
-                                   ang="Spatial error indicators for THM models"),
-                 b_ERRE_THM=BLOC(condition = "ERRE_THM == 'OUI'",
-                               regles=(ENSEMBLE('LONGUEUR','PRESSION'),),
-                   LONGUEUR=SIMP(statut='o',typ='R',val_min=0.0,fr="Longueur caractéristique du problème"),
-                   PRESSION=SIMP(statut='o',typ='R',val_min=0.0,fr="Pression caractéristique du problème"),
-                   TEMPERATURE=SIMP(statut='f',typ='R',val_min=0.0,fr="Température caractéristique du problème"),),),
-
                b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \
                                         (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \
                                         (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \
@@ -5335,8 +5537,8 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \
                                (type(OPTION)==type(()) and  'SING_ELEM' in OPTION)",
                     PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,val_max=1.,
-                                  fr="precision demandee pour calculer la carte de taille des elements" ),), 
-               
+                                  fr="precision demandee pour calculer la carte de taille des elements" ),),
+
                b_indic = BLOC( condition ="OPTION in ('DCHA_ELNO_SIGM','DCHA_ELGA_SIGM','RADI_ELNO_SIGM','RADI_ELGA_SIGM') or\
                                             (type(OPTION)==type(()) and 'DCHA_ELNO_SIGM' in OPTION) or\
                                             (type(OPTION)==type(()) and 'DCHA_ELGA_SIGM' in OPTION) or\
@@ -5349,7 +5551,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                                  ),
 #          fin bloc evol_noli
 
-#           thermique : evol_ther, fourier_ther                                
+#           thermique : evol_ther, fourier_ther
      b_ther          =BLOC( condition = "AsType(RESULTAT) in (evol_ther,fourier_ther,)" ,fr="options thermiques",
           OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
                            into=("DEUL_ELGA_TEMP","DETE_ELNO_DLTE","FLUX_ELGA_TEMP","FLUX_ELNO_TEMP",
@@ -5367,8 +5569,8 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                     TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),
                                      ),
                                  ),
-                                 
-#    acoustique                                
+
+#    acoustique
      b_acou          =BLOC( condition = "AsType(RESULTAT) in (acou_harmo,mode_acou,)",fr="options acoustiques",
           OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
                            into=("PRES_ELNO_DBEL","PRES_ELNO_REEL","PRES_ELNO_IMAG",
@@ -5385,14 +5587,14 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                 PUIS_PULS       =SIMP(statut='f',typ='I'),
                 TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),),
                                  ),
-             
+
      SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
                            fr="Liste des paramètres de sensibilité.",
                            ang="List of sensitivity parameters"),
      INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
      TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 ) ;
-#& MODIF COMMANDE  DATE 16/10/2006   AUTEUR JMBHH01 J.M.PROIX 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5410,6 +5612,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ANGLES J.ANGLES
 def calc_fatigue_prod(TYPE_CALCUL,OPTION,**args):
   if TYPE_CALCUL == "CUMUL_DOMMAGE" : return cham_elem
   if TYPE_CALCUL == "FATIGUE_MULTI" and OPTION == "DOMA_ELGA": return cham_elem
@@ -5451,6 +5654,8 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant
            OPTION        =SIMP(statut='o',typ='TXM',into=("DOMA_ELGA","DOMA_NOEUD") ),
            RESULTAT      =SIMP(statut='o',typ=(evol_elas, evol_noli) ),
            CHAM_MATER    =SIMP(statut='o',typ=(cham_mater) ),
+           MAILLAGE      =SIMP(statut='o',typ=maillage_sdaster ),
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
            GROUP_MA      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**' ),
            MAILLE        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**' ),
            GROUP_NO      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**' ),
@@ -5471,14 +5676,11 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant
                    DELTA_OSCI    =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
                ),
            ),
-           b_fati_grmano  =BLOC(condition = "(GROUP_MA != None or MAILLE != None or GROUP_NO != None or NOEUD != None)",
-               MAILLAGE      =SIMP(statut='o',typ=maillage_sdaster ),
-           ),
          ),
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5496,6 +5698,7 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
 CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu_sdaster,
                     reentrant='n',
                     fr="Calculer les paramètres modaux d'une structure soumise à un écoulement",
@@ -5522,7 +5725,7 @@ CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu_sdaster,
            DEFORMEE        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 02/05/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5540,6 +5743,7 @@ CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
 def calc_fonc_interp_prod(FONCTION, NOM_PARA_FONC, **args):
    if   AsType(FONCTION) == nappe_sdaster:
       return nappe_sdaster
@@ -5547,6 +5751,8 @@ def calc_fonc_interp_prod(FONCTION, NOM_PARA_FONC, **args):
       return fonction_sdaster
    elif AsType(FONCTION) == fonction_c:
       return fonction_c
+   elif AsType(FONCTION) == formule_c:
+      return fonction_c
    elif AsType(FONCTION) == formule:
       if NOM_PARA_FONC != None:
          return nappe_sdaster
@@ -5580,7 +5786,7 @@ CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=calc_fonc_interp_pr
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
 )  ;
-#& MODIF COMMANDE  DATE 09/02/2007   AUTEUR GREFFET N.GREFFET 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5598,10 +5804,10 @@ CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=calc_fonc_interp_pr
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE MCOURTOI M.COURTOIS
+# RESPONSABLE COURTOIS M.COURTOIS
 from Macro.calc_fonction_ops import calc_fonction_ops
 def calc_fonction_prod(self,DERIVE,EXTRACTION,INTEGRE,INVERSE,COMB,COMB_C,
-                       ENVELOPPE,SPEC_OSCI,ASSE,FFT,COMPOSE,CORR_ACCE,PUISSANCE,
+                       ENVELOPPE,FRACTILE,SPEC_OSCI,ASSE,FFT,COMPOSE,CORR_ACCE,PUISSANCE,
                        LISS_ENVELOP,ABS, **args):
 
    if (INTEGRE     != None): return fonction_sdaster
@@ -5626,6 +5832,7 @@ def calc_fonction_prod(self,DERIVE,EXTRACTION,INTEGRE,INVERSE,COMB,COMB_C,
                 raise AsException("CALC_FONCTION/COMB_C : pas de types hétérogènes nappe/fonction")
          return fonction_c
    if (ENVELOPPE   != None): return AsType(ENVELOPPE[0]['FONCTION'])
+   if (FRACTILE    != None): return AsType(FRACTILE[0] ['FONCTION'])
    if (EXTRACTION  != None): return fonction_sdaster
    if (SPEC_OSCI   != None): return nappe_sdaster
    if (COMPOSE     != None): return fonction_sdaster
@@ -5646,7 +5853,7 @@ CALC_FONCTION=MACRO(nom="CALC_FONCTION",op=calc_fonction_ops,sd_prod=calc_foncti
             UIinfo={"groupes":("Fonction",)},
          regles=(UN_PARMI('DERIVE','INTEGRE','SPEC_OSCI','COMB','COMB_C','ENVELOPPE',
                           'COMPOSE','EXTRACTION','ASSE','FFT','CORR_ACCE', 'PUISSANCE',
-                          'LISS_ENVELOP','INVERSE','ABS'),),
+                          'LISS_ENVELOP','INVERSE','ABS','FRACTILE'),),
          FFT             =FACT(statut='f',fr="Transformée de Fourier ou de son inverse",
            FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,fonction_c) ),
            METHODE         =SIMP(statut='f',typ='TXM',defaut="PROL_ZERO",into=("PROL_ZERO","TRONCATURE","COMPLET") ),
@@ -5708,11 +5915,15 @@ CALC_FONCTION=MACRO(nom="CALC_FONCTION",op=calc_fonction_ops,sd_prod=calc_foncti
            FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster),max='**' ),
            CRITERE         =SIMP(statut='f',typ='TXM',defaut="SUP",into=("SUP","INF"),fr="Type de l enveloppe" ),
          ),
+         FRACTILE        =FACT(statut='f',fr="Fractile d une famille de fonctions ou de nappes",
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster),max='**' ),
+           FRACT           =SIMP(statut='o',typ='R',defaut=1.,val_min=0.,val_max=1.,fr="Valeur du fractile" ),
+         ),
          ASSE            =FACT(statut='f',fr="Concatenation de fonctions",
            FONCTION        =SIMP(statut='o',typ=fonction_sdaster,min=2,max=2 ),
            SURCHARGE       =SIMP(statut='f',typ='TXM',defaut="DROITE",into=("DROITE","GAUCHE")),
          ),
-         CORR_ACCE     =FACT(statut='f',fr="Correction d un accelerogramme reel",
+         CORR_ACCE       =FACT(statut='f',fr="Correction d un accelerogramme reel",
             CORR_DEPL       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
             FONCTION        =SIMP(statut='o',typ=fonction_sdaster ),
          ),
@@ -5734,7 +5945,7 @@ CALC_FONCTION=MACRO(nom="CALC_FONCTION",op=calc_fonction_ops,sd_prod=calc_foncti
          PROL_GAUCHE_FONC=SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )
-#& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5752,6 +5963,7 @@ CALC_FONCTION=MACRO(nom="CALC_FONCTION",op=calc_fonction_ops,sd_prod=calc_foncti
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
 CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene,
                    fr="Calculer l'effet de surpression hydrodynamique due au mouvement d'entrainement de la structure"
                        +" en analyse sismique",
@@ -5807,7 +6019,7 @@ CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene,
                            ),
 
            ) ;
-#& MODIF COMMANDE  DATE 31/10/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 13/05/2008   AUTEUR GALENNE E.GALENN
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5825,6 +6037,7 @@ CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
 CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
             fr="Calcul du taux de restitution d'énergie par la méthode theta en thermo-élasticité"
                         +" et les facteurs d'intensité de contraintes.",
@@ -5833,24 +6046,25 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
          regles=(EXCLUS('COMP_ELAS','COMP_INCR'),
                  CONCEPT_SENSIBLE("ENSEMBLE"),
                  REUSE_SENSIBLE(),
-                 DERIVABLE('RESULTAT'),
-                 EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST',
-                           'TOUT_MODE','NUME_MODE','LIST_MODE','FREQ','LIST_FREQ',),),
+                 DERIVABLE('RESULTAT'),),
 
          THETA          =FACT(statut='o',
            THETA           =SIMP(statut='f',typ=(theta_geom,cham_no_sdaster),),
            FOND_FISS       =SIMP(statut='f',typ=fond_fiss,max=1),
            FISSURE         =SIMP(statut='f',typ=fiss_xfem,max=1),
-           regles=(EXCLUS('FOND_FISS','FISSURE'),),
-         b_theta        =BLOC(condition="THETA == None",fr="calcul de theta",
+           DTAN_ORIG       =SIMP(statut='f',typ='R',max='**'),
+           DTAN_EXTR       =SIMP(statut='f',typ='R',max='**'),
+           regles=(EXCLUS('FOND_FISS','FISSURE'),
+                 EXCLUS('FOND_FISS','DTAN_ORIG'),
+                 EXCLUS('FOND_FISS','DTAN_EXTR'),),
+          b_theta        =BLOC(condition="THETA == None",fr="calcul de theta",
             regles=(UN_PARMI('R_INF','R_INF_FO'),
-                 EXCLUS('MODULE','MODULE_FO'),
                  PRESENT_PRESENT('R_INF','R_SUP'),
-                 PRESENT_PRESENT('R_INF_FO','R_SUP_FO'), ),
+                PRESENT_PRESENT('R_INF_FO','R_SUP_FO'), ),
              NUME_FOND        =SIMP(statut='f',typ='I',defaut=1),
              R_INF           =SIMP(statut='f',typ='R'),
              R_SUP           =SIMP(statut='f',typ='R'),
-             MODULE          =SIMP(statut='f',typ='R'),
+             MODULE          =SIMP(statut='f',typ='R',defaut=1.),
              DIRE_THETA      =SIMP(statut='f',typ=cham_no_sdaster ),
              DIRECTION       =SIMP(statut='f',typ='R',max='**'),
              R_INF_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -5859,23 +6073,33 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
              ),
             ),
 
-         RESULTAT        =SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans,mode_meca),),
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans,mode_meca,mult_elas),),
 
-         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-         LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
-         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
-         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
-         TOUT_MODE       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-         LIST_MODE       =SIMP(statut='f',typ=listis_sdaster),
-         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
-         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
-           
-         b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)or(FREQ != None)or(LIST_FREQ != None)",
-           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),
-           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         b_no_mult          =BLOC(condition="(AsType(RESULTAT) != mult_elas)",
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST',
+                  'TOUT_MODE','NUME_MODE','LIST_MODE','FREQ','LIST_FREQ'),),
+            
+            TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+            NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+            LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+            INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+            LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+            TOUT_MODE       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+            NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+            LIST_MODE       =SIMP(statut='f',typ=listis_sdaster),
+            LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+            FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+       
+           b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)or(FREQ != None)or(LIST_FREQ != None)",
+              PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),
+              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+            ),
+         ),
+
+         b_mult_elas     =BLOC(condition="(AsType(RESULTAT) == mult_elas)",
+            NOM_CAS         =SIMP(statut='f',typ='TXM',validators=NoRepeat() ),
          ),
+
         
          EXCIT           =FACT(statut='f',max='**',
                CHARGE          =SIMP(statut='f',typ=(char_meca,char_cine_meca)),
@@ -5886,10 +6110,11 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
  
          COMP_ELAS       =FACT(statut='f',
                RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
-                                     into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC") ),
-               ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
-               ELAS_VMIS_LINE  =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
-               ELAS_VMIS_TRAC  =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
+                                     into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS") ),
+               ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,) ),
+               ELAS_VMIS_LINE  =SIMP(statut='c',typ='I',defaut=1,into=(1,) ),
+               ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut=1,into=(1,) ),
+               ELAS_VMIS_PUIS  =SIMP(statut='c',typ='I',defaut=1,into=(1,) ),
                DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","GREEN") ),
       regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
                TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -5898,7 +6123,7 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
          ),  
          COMP_INCR       =FACT(statut='f',
                RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
-                                     into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_CINE_LINE") ),
+                                     into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_CINE_LINE","ELAS_VMIS_PUIS") ),
                ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
                VMIS_ISOT_TRAC  =SIMP(statut='f',typ='I',defaut=2,into=(2,) ),
                VMIS_ISOT_LINE  =SIMP(statut='f',typ='I',defaut=2,into=(2,) ),
@@ -5922,7 +6147,7 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
 
          OPTION          =SIMP(statut='o',typ='TXM',max=1,defaut='CALC_G',
               into=("CALC_G","CALC_G_GLOB","CALC_K_G","K_G_MODA","G_MAX","G_MAX_GLOB","G_BILI",
-                    "G_BILI_GLOB","G_LAGR","G_LAGR_GLOB","CALC_K_MAX"),),
+                    "G_BILI_GLOB","CALC_K_MAX"),),
 
          b_g_max    =BLOC(condition="(OPTION=='G_MAX') or (OPTION=='G_MAX_GLOB')",
            BORNES          =FACT(statut='o',max='**',
@@ -5938,9 +6163,6 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
                                 ),
          ),
 
-         PROPAGATION     =SIMP(statut='f',typ='R'),
-         THETA_LAGR      =SIMP(statut='f',typ=theta_geom),
-         DIRE_THETA_LAGR =SIMP(statut='f',typ=cham_no_sdaster),
          SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
                            fr="Liste des paramètres de sensibilité.",
                            ang="List of sensitivity parameters"),
@@ -5948,7 +6170,7 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 );
-#& MODIF COMMANDE  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5966,6 +6188,7 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
 CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=table_fonction,
                     fr="Calcul d'une matrice interspectrale à partir d'une fonction du temps",
                     reentrant='n',
@@ -5979,7 +6202,7 @@ CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=table_fonction,
          TITRE           =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5997,6 +6220,7 @@ CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=table_fonction,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
 CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r,
                     fr="Calcul des matrices de masse, d'amortissement ou de rigidité ajoutés",
                     reentrant='n',
@@ -6042,7 +6266,7 @@ CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r,
            ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 16/05/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6060,11 +6284,10 @@ CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE PELLET J.PELLET
 def calc_matr_elem_prod(OPTION,**args):
   if OPTION == "RIGI_MECA"        : return matr_elem_depl_r
   if OPTION == "RIGI_FLUI_STRU"   : return matr_elem_depl_r
-  if OPTION == "RIGI_MECA_LAGR"   : return matr_elem_depl_r
   if OPTION == "MASS_ID_MDEP_R"   : return matr_elem_depl_r
   if OPTION == "MASS_ID_MDNS_R"   : return matr_elem_depl_r
   if OPTION == "MASS_ID_MTEM_R"   : return matr_elem_temp_r
@@ -6073,6 +6296,7 @@ def calc_matr_elem_prod(OPTION,**args):
   if OPTION == "MASS_FLUI_STRU"   : return matr_elem_depl_r
   if OPTION == "RIGI_GEOM"        : return matr_elem_depl_r
   if OPTION == "RIGI_ROTA"        : return matr_elem_depl_r
+  if OPTION == "MECA_GYRO"        : return matr_elem_depl_r
   if OPTION == "AMOR_MECA"        : return matr_elem_depl_r
   if OPTION == "IMPE_MECA"        : return matr_elem_depl_r
   if OPTION == "ONDE_FLUI"        : return matr_elem_depl_r
@@ -6094,10 +6318,9 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
                                into=("RIGI_MECA","MASS_MECA","RIGI_GEOM",
                                      "AMOR_MECA","RIGI_THER","MASS_THER","IMPE_MECA",
                                      "ONDE_FLUI","AMOR_MECA_ABSO","MASS_FLUI_STRU","RIGI_FLUI_STRU",
-                                     "RIGI_ROTA","MASS_MECA_DIAG","RIGI_ACOU",
+                                     "RIGI_ROTA","MECA_GYRO","MASS_MECA_DIAG","RIGI_ACOU",
                                      "MASS_ID_MDEP_R","MASS_ID_MDNS_R","MASS_ID_MTEM_R","MASS_ID_MTNS_R",
-                                     "MASS_ACOU","AMOR_ACOU","RIGI_MECA_HYST",
-                                     "RIGI_MECA_LAGR") ),
+                                     "MASS_ACOU","AMOR_ACOU","RIGI_MECA_HYST") ),
 
          # mots clés facultatifs que l'on a du mal à mettre dans les blocs
          # sans gener MACRO_MATR_ASSE :
@@ -6116,14 +6339,6 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
            CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**' ),
          ),
 
-         b_rigi_meca_lagr  =BLOC(condition = "OPTION=='RIGI_MECA_LAGR'",
-           MODELE            =SIMP(statut='o',typ=modele_sdaster ),
-           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
-           CHARGE            =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'  ),
-           THETA           =SIMP(statut='o',typ=theta_geom ),
-           PROPAGATION     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-         ),
-
          b_mass_meca       =BLOC(condition = "(OPTION=='MASS_MECA') or (OPTION=='MASS_MECA_DIAG')",
            regles=(AU_MOINS_UN('MODELE','CHARGE'),),
            MODELE          =SIMP(statut='f',typ=modele_sdaster ),
@@ -6154,6 +6369,13 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
            CHARGE            =SIMP(statut='o',typ=char_meca,validators=NoRepeat(),max='**' ),
          ),
 
+         b_meca_gyro = BLOC( condition = "OPTION=='MECA_GYRO'",
+           MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+           CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+           CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+           CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**' ),
+         ),
+
          b_amor_meca       =BLOC(condition = "OPTION=='AMOR_MECA'",
            regles=(AU_MOINS_UN('CARA_ELEM','RIGI_MECA'),
                    ENSEMBLE('RIGI_MECA','MASS_MECA','CHAM_MATER'), ),
@@ -6234,7 +6456,7 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
            CHARGE            =SIMP(statut='o',typ=char_meca,validators=NoRepeat(),max='**' ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6252,6 +6474,7 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE CANO V.CANO
 CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,reentrant='o',
             UIinfo={"groupes":("Post traitements",)},
                fr="Calcule l'évolution métallurgique à partir du résultat d'un calcul thermique",
@@ -6284,7 +6507,7 @@ CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,reentrant='o',
          OPTION          =SIMP(statut='f',typ='TXM'     
                              ,into=("META_ELNO_TEMP",) ),
 )  ;
-#& MODIF COMMANDE  DATE 09/05/2007   AUTEUR VIVAN L.VIVAN 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6302,7 +6525,7 @@ CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,reentrant='o',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE G8BHHXD X.DESROCHES
+# RESPONSABLE DESROCHES X.DESROCHES
 def calc_no_prod(RESULTAT,**args):
    if AsType(RESULTAT) != None : return AsType(RESULTAT)
    raise AsException("type de concept resultat non prevu")
@@ -6387,7 +6610,7 @@ CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,reentrant='o',
          GROUP_NO_RESU   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
          NOEUD_RESU      =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 10/10/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6405,7 +6628,7 @@ CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,reentrant='o',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# RESPONSABLE ASSIRE A.ASSIRE
+# RESPONSABLE MICHEL S.MICHEL
 
 from Macro.calc_precont_ops import calc_precont_ops
 
@@ -6491,16 +6714,14 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
             ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI"),
           ),
           ETAT_INIT       =FACT(statut='f',
-            regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI','VARI_NON_LOCAL',),
+            regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI',),
                     EXCLUS('EVOL_NOLI','DEPL',),
                     EXCLUS('EVOL_NOLI','SIGM',),
                     EXCLUS('EVOL_NOLI','VARI',),
-                    EXCLUS('EVOL_NOLI','VARI_NON_LOCAL',),
                     EXCLUS('NUME_ORDRE','INST'), ),
             DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
             SIGM            =SIMP(statut='f',typ=(carte_sdaster,cham_elem)),
             VARI            =SIMP(statut='f',typ=cham_elem),
-            VARI_NON_LOCAL  =SIMP(statut='f',typ=cham_no_sdaster),
             EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
             NUME_ORDRE      =SIMP(statut='f',typ='I'),
             INST            =SIMP(statut='f',typ='R'),
@@ -6531,34 +6752,6 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
             ),
             SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
           ),
-            SOLV_NON_LOCAL  =FACT(statut='f',
-              METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
-              b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
-                RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
-              ),
-              b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
-                RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
-              ),
-              b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
-                                     fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
-                NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
-                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-              ),
-              b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
-                PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC",),defaut="LDLT_INC" ),
-                NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
-                RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
-                NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
-              ),
-              EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-            ),
-            LAGR_NON_LOCAL  =FACT(statut='f',
-              ITER_DUAL_MAXI  =SIMP(statut='f',typ='I',defaut= 50),
-              RESI_DUAL_ABSO  =SIMP(statut='o',typ='R'),
-              RESI_PRIM_ABSO  =SIMP(statut='o',typ='R'),
-              R               =SIMP(statut='f',typ='R',defaut= 1000.),
-              ITER_PRIM_MAXI  =SIMP(statut='f',typ='I',defaut= 10),
-            ),
           INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
           TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
 
@@ -6568,7 +6761,7 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
 
          COMP_INCR       =C_COMP_INCR(),
   )  ;
-#& MODIF COMMANDE  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6587,8 +6780,7 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
 # -*- coding: iso-8859-1 -*-
-
-# RESPONSABLE MCOURTOI M.COURTOIS
+# RESPONSABLE COURTOIS M.COURTOIS
 
 def calc_table_prod(self, TABLE, ACTION, **kargs):
    """Typage du concept produit.
@@ -6615,7 +6807,7 @@ CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod,
    ACTION = FACT(statut='o', max='**',
                     fr = "Suite des opérations à effectuer sur la table",
       OPERATION = SIMP(statut='o', typ='TXM',
-                  into=('FILTRE', 'EXTR', 'RENOMME', 'TRI', 'COMB', 'OPER',)),
+                  into=('FILTRE', 'EXTR', 'RENOMME', 'TRI', 'COMB', 'AJOUT', 'OPER',)),
       
       b_filtre = BLOC(condition="OPERATION == 'FILTRE'",
                       fr="Sélectionne les lignes de la table vérifiant un critère",
@@ -6625,13 +6817,13 @@ CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod,
                                 'VIDE','NON_VIDE','MAXI','ABS_MAXI','MINI','ABS_MINI'),),
          b_vale = BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
             regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
-            VALE   = SIMP(statut='f',typ='R'),
-            VALE_I = SIMP(statut='f',typ='I'),
-            VALE_C = SIMP(statut='f',typ='C'),
-            VALE_K = SIMP(statut='f',typ='TXM'),
+            VALE   = SIMP(statut='f',typ='R',max='**'),
+            VALE_I = SIMP(statut='f',typ='I',max='**'),
+            VALE_C = SIMP(statut='f',typ='C',max='**'),
+            VALE_K = SIMP(statut='f',typ='TXM',max='**'),
          ),
          b_regexp = BLOC(condition = "CRIT_COMP == 'REGEXP'",
-            VALE_K = SIMP(statut='f',typ='TXM'),
+            VALE_K = SIMP(statut='f',typ='TXM',max='**'),
          ),
          b_crit = BLOC(condition = "CRIT_COMP in ('EQ','NE')",
             CRITERE   = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
@@ -6667,6 +6859,13 @@ CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod,
                             "pour que les colonnes soient combinées"),
       ),
       
+      b_append = BLOC(condition="OPERATION == 'AJOUT'",
+                    fr="Ajoute une ligne à la table initiale",
+         NOM_PARA = SIMP(statut='o',typ='TXM',max='**',
+                         fr="Noms des paramètres dont les valeurs sont fournies sous VALE"),
+         VALE     = SIMP(statut='o',typ=assd,max='**', fr='Valeurs des paramètres'),
+      ),
+      
       b_oper = BLOC(condition="OPERATION == 'OPER'",
                     fr="Applique une formule dans laquelle les variables sont les paramètres de la table",
          FORMULE  = SIMP(statut='o',typ=formule,
@@ -6683,7 +6882,7 @@ CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod,
                 fr="Titre de la table produite"),
    INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )
-#& MODIF COMMANDE  DATE 05/03/2007   AUTEUR GALENNE E.GALENN
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6701,6 +6900,7 @@ CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
 CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,reentrant='n',
             UIinfo={"groupes":("Post traitements",)},
                 fr="Définir un champ theta pour le calcul du taux de restitution d'énergie"
@@ -6748,7 +6948,68 @@ CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,reentrant='n',
            FORMAT          =SIMP(statut='f',typ='TXM',defaut="EXCEL",into=("EXCEL","AGRAF") ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 12/03/2007   AUTEUR DEVESA G.DEVESA 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+
+CALCUL=OPER(nom="CALCUL",op=26,sd_prod=table_container,reentrant='n',
+            UIinfo={"groupes":("Résolution",)},
+            fr="Calculer des objets élémentaires comme une matrice tangente, intégrer une loi de comportement, etc...",
+     OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="COMPORTEMENT",
+                           into=( "COMPORTEMENT","MATR_TANG_ELEM","FORC_INT_ELEM"),),
+     MODELE          =SIMP(statut='o',typ=modele_sdaster),
+     CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+     CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+     EXCIT           =FACT(statut='o',max='**',
+       CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+       FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+       TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                             into=("FIXE_CSTE","FIXE_PILO","SUIV","DIDI")),
+     ),
+     DEPL            =SIMP(statut='o',typ=cham_no_sdaster ),
+     INCR_DEPL       =SIMP(statut='o',typ=cham_no_sdaster ),
+     SIGM            =SIMP(statut='o',typ=cham_elem),
+     VARI            =SIMP(statut='o',typ=cham_elem),
+     INCREMENT       =FACT(statut='o',
+          LIST_INST       =SIMP(statut='o',typ=listr8_sdaster),
+          NUME_ORDRE      =SIMP(statut='o',typ='I'),),
+     COMP_INCR       =C_COMP_INCR(),
+     COMP_ELAS       =FACT(statut='f',max='**',
+          RESI_INTE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+          ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+          ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
+          RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+                                into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+          RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
+                                into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC",
+                                     "ELAS_POUTRE_GR","CABLE","ELAS_HYPER")),
+          ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          ELAS_VMIS_LINE  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          ELAS_HYPER      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          ELAS_POUTRE_GR  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+          CABLE           =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GREEN","GREEN_GR",) ),),
+     INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6766,10 +7027,9 @@ CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,reentrant='n',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE PELLET J.PELLET
 def calc_vect_elem_prod(OPTION,**args):
   if OPTION == "CHAR_MECA" :      return vect_elem_depl_r
-  if OPTION == "CHAR_MECA_LAGR" : return vect_elem_depl_r
   if OPTION == "CHAR_THER" :      return vect_elem_temp_r
   if OPTION == "CHAR_ACOU" :      return vect_elem_pres_c
   if OPTION == "FORC_NODA" :      return vect_elem_depl_r
@@ -6779,7 +7039,7 @@ CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,reentr
             UIinfo={"groupes":("Matrices/vecteurs",)},
                     fr="Calcul des seconds membres élémentaires",
          OPTION          =SIMP(statut='o',typ='TXM',into=("CHAR_MECA","CHAR_THER","CHAR_ACOU",
-                                                           "FORC_NODA","CHAR_MECA_LAGR") ),
+                                                           "FORC_NODA") ),
          b_char_meca     =BLOC(condition = "OPTION=='CHAR_MECA'",
            regles=(AU_MOINS_UN('CHARGE','MODELE'),),
            CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
@@ -6814,17 +7074,9 @@ CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,reentr
            SIEF_ELGA         =SIMP(statut='o',typ=cham_elem),
            CARA_ELEM         =SIMP(statut='f',typ=cara_elem),
            MODELE            =SIMP(statut='f',typ=modele_sdaster),
-         ),
-         
-         b_meca_lagr     =BLOC(condition = "OPTION=='CHAR_MECA_LAGR'",
-           CHAM_MATER        =SIMP(statut='o',typ=cham_mater),
-           THETA             =SIMP(statut='o',typ=theta_geom),
-           PROPAGATION       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-           CHARGE            =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
-           INST              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-         ),
+         ),       
 ) ;
-#& MODIF COMMANDE  DATE 12/09/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6842,7 +7094,7 @@ CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,reentr
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE G8BHHXD X.DESROCHES
+# RESPONSABLE DESROCHES X.DESROCHES
 COMB_FOURIER=OPER(nom="COMB_FOURIER",op= 161,sd_prod=comb_fourier,
                   reentrant='n',fr="Recombiner les modes de Fourier d'une SD Résultat dans des directions particulières",
             UIinfo={"groupes":("Post traitements",)},
@@ -6851,7 +7103,7 @@ COMB_FOURIER=OPER(nom="COMB_FOURIER",op= 161,sd_prod=comb_fourier,
          NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=6,
              into=("DEPL","REAC_NODA","SIEF_ELGA_DEPL","EPSI_ELNO_DEPL","SIGM_ELNO_DEPL","TEMP","FLUX_ELNO_TEMP"),),
 ) ;
-#& MODIF COMMANDE  DATE 29/01/2007   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6869,7 +7121,7 @@ COMB_FOURIER=OPER(nom="COMB_FOURIER",op= 161,sd_prod=comb_fourier,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE PELLET J.PELLET
 def comb_matr_asse_prod(COMB_R,COMB_C,CALC_AMOR_GENE,**args):
   if COMB_C != None:
     type_mat = AsType(COMB_C[0]['MATR_ASSE'])
@@ -6913,7 +7165,7 @@ COMB_MATR_ASSE=OPER(nom="COMB_MATR_ASSE",op=  31,sd_prod=comb_matr_asse_prod,
          ),
          SANS_CMP        =SIMP(statut='f',typ='TXM',into=("LAGR",) ),
 )  ;
-#& MODIF COMMANDE  DATE 03/01/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6931,6 +7183,7 @@ COMB_MATR_ASSE=OPER(nom="COMB_MATR_ASSE",op=  31,sd_prod=comb_matr_asse_prod,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE AUDEBERT S.AUDEBERT
 COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat,
                      fr="Réponse sismique par recombinaison modale par une méthode spectrale",
                      reentrant='n',
@@ -6959,9 +7212,13 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat,
          
          EXCIT           =FACT(statut='o',max='**',
            regles=(UN_PARMI('MONO_APPUI','NOEUD','GROUP_NO'),
-                   UN_PARMI('AXE','TRI_AXE','TRI_SPEC' ),),
+                   UN_PARMI('AXE','TRI_AXE','TRI_SPEC' ),
+                   UN_PARMI('MONO_APPUI','MULTI_APPUI' ),),
            
-           MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",),
+                                 fr="excitation imposée unique" ),
+           MULTI_APPUI =SIMP(statut='f',typ='TXM',into=("CORRELE","DECORRELE",),
+                                 fr="excitations décorrélés en multi-appuis: cumul sur les modes puis sur les appuis" ),
            NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
            AXE             =SIMP(statut='f',typ='R',max=3,fr="Excitation suivant un seul axe",),
@@ -7027,8 +7284,7 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat,
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 12/09/2006   AUTEUR REZETTE C.REZETTE 
-# RESPONSABLE VABHHTS J.PELLET
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7046,6 +7302,7 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE PELLET J.PELLET
 def crea_champ_prod(TYPE_CHAM,**args):
   if TYPE_CHAM[0:5] == "CART_" :
      return carte_sdaster
@@ -7058,7 +7315,7 @@ def crea_champ_prod(TYPE_CHAM,**args):
 
 
 CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
-                fr="Création d'un champ ",reentrant='n',
+                fr="Création d'un champ ",reentrant='f',
             UIinfo={"groupes":("Résultats et champs",)},
          TYPE_CHAM       =SIMP(statut='o',typ='TXM',into=C_TYPE_CHAM_INTO()),
       # TYPE_CHAM doit etre de la forme : CART_xx, NOEU_xx, ELEM_xx, ELGA_xx ou ELNO_xx
@@ -7221,8 +7478,7 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
 )  ;
-#& MODIF COMMANDE  DATE 13/12/2006   AUTEUR PELLET J.PELLET 
-# RESPONSABLE MCOURTOI M.COURTOIS
+#& MODIF COMMANDE  DATE 19/05/2008   AUTEUR PELLET J.PELLET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7240,32 +7496,15 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE PELLET J.PELLET
 CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster,
             reentrant='n',fr="Crée un maillage à partir d'un maillage existant",
             UIinfo={"groupes":("Maillage",)},
-         regles=(EXCLUS('ECLA_PG','CREA_MAILLE'),
-                 EXCLUS('ECLA_PG','CREA_GROUP_MA'),
-                 EXCLUS('ECLA_PG','DETR_GROUP_MA'),
-                 EXCLUS('ECLA_PG','MODI_MAILLE'),
-                 EXCLUS('ECLA_PG','LINE_QUAD'),
-                 EXCLUS('ECLA_PG','CREA_FISS'),
-                 EXCLUS('ECLA_PG','COQU_VOLU'),
-                 EXCLUS('LINE_QUAD','MODI_MAILLE'),
-                 EXCLUS('LINE_QUAD','CREA_MAILLE'),
-                 EXCLUS('LINE_QUAD','CREA_GROUP_MA'),
-                 EXCLUS('LINE_QUAD','DETR_GROUP_MA'),
-                 EXCLUS('LINE_QUAD','CREA_FISS'),
-                 EXCLUS('LINE_QUAD','COQU_VOLU'),
-                 EXCLUS('CREA_FISS','MODI_MAILLE'),
-                 EXCLUS('CREA_FISS','CREA_MAILLE'),
-                 EXCLUS('CREA_FISS','CREA_GROUP_MA'),
-                 EXCLUS('CREA_FISS','DETR_GROUP_MA'),
-                 EXCLUS('CREA_FISS','COQU_VOLU'),
-                 EXCLUS('COQU_VOLU','MODI_MAILLE'),
-                 EXCLUS('COQU_VOLU','CREA_MAILLE'),
-                 EXCLUS('COQU_VOLU','CREA_GROUP_MA'),
-                 EXCLUS('COQU_VOLU','DETR_GROUP_MA'),
-                 ),
+         regles=(EXCLUS('COQU_VOLU', 'CREA_FISS', 'CREA_GROUP_MA', 'CREA_MAILLE', 'CREA_POI1',
+                        'DETR_GROUP_MA', 'ECLA_PG', 'HEXA20_27', 'LINE_QUAD', 'MODI_MAILLE',
+                        'QUAD_LINE', 'REPERE','RESTREINT'),),
+
+
 
          # le MAILLAGE est inutile si ECLA_PG
          MAILLAGE        =SIMP(statut='f',typ=maillage_sdaster ),
@@ -7301,6 +7540,12 @@ CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster,
            NB_MAILLE       =SIMP(statut='f',typ='I',defaut= 0,
                                  fr="Nombre minimal de mailles que doit contenir le groupe pour etre détruit",  ),
          ),
+         RESTREINT   =FACT(statut='f',fr="Restreindre un maillage à des groupes de mailles",max=1,
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+           TOUT_GROUP_MA   =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           TOUT_GROUP_NO   =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
+         ),
          COQU_VOLU   =FACT(statut='f',
                            fr="Creation de mailles volumiques à partir de mailles surfaciques",
            NOM             =SIMP(statut='o',typ='TXM'),
@@ -7345,6 +7590,14 @@ CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster,
            PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
            PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
          ),
+         HEXA20_27     =FACT(statut='f',fr="Passage HEXA20 -> HEXA27",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
+           PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
+         ),
          QUAD_LINE     =FACT(statut='f',fr="Passage quadratique -> linéaire",
            regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -7376,7 +7629,7 @@ CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster,
 #
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 28/03/2007   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7394,6 +7647,7 @@ CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 def crea_resu_prod(TYPE_RESU,**args):
   if TYPE_RESU == "EVOL_ELAS"    : return evol_elas
   if TYPE_RESU == "EVOL_NOLI"    : return evol_noli
@@ -7409,9 +7663,12 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f',
             UIinfo={"groupes":("Modélisation",)},
                fr="Créer ou enrichir une structure de donnees resultat à partir de champs aux noeuds",
 
-         OPERATION =SIMP(statut='o',typ='TXM',into=("AFFE","ECLA_PG","PERM_CHAM","PROL_RTZ","PREP_VRC1","PREP_VRC2",),
+         OPERATION =SIMP(statut='o',typ='TXM',into=("AFFE","ASSE","ECLA_PG","PERM_CHAM","PROL_RTZ","PREP_VRC1","PREP_VRC2",),
                          fr="choix de la fonction a activer",),
 
+
+         # Création par affectation de champs :
+         #-------------------------------------
          b_affe       =BLOC(condition = "OPERATION == 'AFFE'",
 
            TYPE_RESU    =SIMP(statut='o',position='global',typ='TXM',into=("MULT_ELAS","EVOL_ELAS","EVOL_NOLI","FOURIER_ELAS",
@@ -7444,6 +7701,18 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f',
            ),
          ),
 
+
+         # Création par assemblage d'evol_ther :
+         #-----------------------------------------
+         b_asse       =BLOC(condition = "OPERATION == 'ASSE'",
+           TYPE_RESU    =SIMP(statut='o',position='global',typ='TXM',into=("EVOL_THER",) ),
+           ASSE         =FACT(statut='o',max='**',
+             RESULTAT       =SIMP(statut='o',typ=evol_ther),
+             TRANSLATION    =SIMP(statut='f',typ='R',defaut= 0. ),
+           ),
+         ),
+
+
          b_ecla_pg    =BLOC(condition = "OPERATION == 'ECLA_PG'",
 
            TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_ELAS","EVOL_NOLI","EVOL_THER"), ),
@@ -7467,6 +7736,7 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f',
            ),
          ),
 
+
          b_perm_cham =BLOC(condition = "OPERATION == 'PERM_CHAM'",
 
            TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_NOLI",) ),
@@ -7481,7 +7751,7 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f',
            PERM_CHAM       =FACT(statut='o',max='**',
               GROUP_MA_FINAL =SIMP(statut='o',typ=grma),
               GROUP_MA_INIT  =SIMP(statut='o',typ=grma),
-              TRAN           =SIMP(statut='o',typ='R',max='**'),
+              TRAN           =SIMP(statut='o',typ='R',min=3,max=3),
               PRECISION      =SIMP(statut='f',typ='R',defaut=1.0E-3),
            ),
          ),
@@ -7535,7 +7805,7 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f',
            ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7553,6 +7823,7 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
 
 def crea_table_prod(TYPE_TABLE, **args):
    """Typage du concept résultat
@@ -7599,7 +7870,7 @@ CREA_TABLE=OPER(nom="CREA_TABLE",op=36,sd_prod=crea_table_prod,
 
 
 
-#& MODIF COMMANDE  DATE 05/02/2007   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7617,7 +7888,8 @@ CREA_TABLE=OPER(nom="CREA_TABLE",op=36,sd_prod=crea_table_prod,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+
 DEBUG=PROC(nom="DEBUG",op=137,
             UIinfo={"groupes":("Utilitaires",)},
                fr="Permettre de changer entre 2 commandes quelques variables globales de debug",
@@ -7631,7 +7903,7 @@ DEBUG=PROC(nom="DEBUG",op=137,
      IMPR_MACRO      =SIMP(fr="affichage des sous-commandes produites par les macros dans le fichier mess",
                            statut='f',typ='TXM',into=("OUI","NON")),
  );
-#& MODIF COMMANDE  DATE 19/02/2007   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7649,6 +7921,7 @@ DEBUG=PROC(nom="DEBUG",op=137,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 DEBUT=MACRO(nom="DEBUT",op=ops.build_debut ,repetable='n',
             UIinfo={"groupes":("Gestion du travail",)},
            fr="Ouverture d'une étude. Allocation des ressources mémoire et disque et fichiers",
@@ -7682,12 +7955,11 @@ DEBUT=MACRO(nom="DEBUT",op=ops.build_debut ,repetable='n',
            UNITE           =SIMP(statut='f',typ='I'),
          ),
 
-         CODE            =FACT(fr="définition d un nom pour l'ensemble d'une étude",
+         CODE            =FACT(fr="définition d'un nom pour l'ensemble d'une étude",
                                statut='f',min=1,max=1,
            NOM             =SIMP(statut='o',typ='TXM'),
            NIV_PUB_WEB     =SIMP(statut='o',typ='TXM',into=('INTERNET','INTRANET')),
            VISU_EFICAS     =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI'),
-           UNITE           =SIMP(statut='f',typ='I',defaut=15),
          ),
 
          ERREUR          =FACT(fr="comportement en cas d'erreur",statut='f',min=1,max=1,
@@ -7714,15 +7986,20 @@ DEBUT=MACRO(nom="DEBUT",op=ops.build_debut ,repetable='n',
            PARTITION       =SIMP(statut='f',typ='R'),
            DYNAMIQUE       =SIMP(statut='f',typ='I'),
          ),
-         RESERVE_CPU     =FACT(fr="reserve de temps pour terminer une execution",statut='f',max=1,
+         RESERVE_CPU     =FACT(fr="reserve de temps pour terminer une execution",statut='d',max=1,
            regles=(EXCLUS('VALE','POURCENTAGE'),),
-           VALE            =SIMP(statut='f',typ='I',val_min=0),
+#          par défaut VALE fixée à 10. dans le FORTRAN si CODE présent
+           VALE            =SIMP(statut='f',typ='I',val_min=0,),
+#          par défaut 10% dans le FORTRAN
            POURCENTAGE     =SIMP(statut='f',typ='R',val_min=0.,val_max=1.0),
-#          valeur en pourcentage du temps maximum bornée à 180 secondes
-           BORNE           =SIMP(statut='f',typ='I',val_min=0,defaut=180)
-         ),
- );
-#& MODIF COMMANDE  DATE 03/10/2005   AUTEUR NICOLAS O.NICOLAS 
+#          valeur en secondes de la réserve maximum bornée à 900 secondes
+           BORNE           =SIMP(statut='f',typ='I',val_min=0,defaut=900),),
+
+         IGNORE_ALARM = SIMP(statut='f', typ='TXM', max='**', fr="Alarmes que l'utilisateur souhaite délibérément ignorer"),
+
+);
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7740,6 +8017,7 @@ DEBUT=MACRO(nom="DEBUT",op=ops.build_debut ,repetable='n',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
 DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op=  99,sd_prod=base_modale,
                      reentrant='f',
                      fr="Définit la base d'une sous-structuration dynamique ou d'une recombinaison modale",
@@ -7778,7 +8056,7 @@ DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op=  99,sd_prod=base_modale,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 26/03/2007   AUTEUR ASSIRE A.ASSIRE 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7796,6 +8074,7 @@ DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op=  99,sd_prod=base_modale,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE MICHEL S.MICHEL
 
 from Macro.defi_cable_bp_ops import defi_cable_bp_ops
 
@@ -7852,7 +8131,7 @@ DEFI_CABLE_BP=MACRO(nom="DEFI_CABLE_BP",op=defi_cable_bp_ops,sd_prod=cabl_precon
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7870,6 +8149,7 @@ DEFI_CABLE_BP=MACRO(nom="DEFI_CABLE_BP",op=defi_cable_bp_ops,sd_prod=cabl_precon
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE MICHEL S.MICHEL
 
 DEFI_CABLE_OP=OPER(nom="DEFI_CABLE_OP",op= 180,sd_prod=cabl_precont,reentrant='n',
             fr="Définit les profils initiaux de tension d'une structure en béton le long des cables de précontrainte"
@@ -7902,31 +8182,31 @@ DEFI_CABLE_OP=OPER(nom="DEFI_CABLE_OP",op= 180,sd_prod=cabl_precont,reentrant='n
            PRESENT           =SIMP(statut='o',typ='TXM',min=2,max=2,into=("OUI","NON") ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
-# RESPONSABLE JMBHH01 J.M.PROIX
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  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.        
+# 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.
 # ======================================================================
+# RESPONSABLE PROIX J.M.PROIX
 DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster,
                    fr="Définir le comportement d'un monocristal, d'un polycristal ou de groupes de fibres",
                    reentrant='n',
             UIinfo={"groupes":("Modélisation",)},
 # on exclut MULTIFBRE de MONOCRISTAL ou POLYCRISTAL car la structure de données n'est pas organisée pareil pour ces cas
-                  regles=(EXCLUS('MONOCRISTAL','POLYCRISTAL','MULTIFIBRE'),
+                  regles=(UN_PARMI('MONOCRISTAL','POLYCRISTAL','MULTIFIBRE'),
                  PRESENT_PRESENT('MULTIFIBRE','GEOM_FIBRE','MATER_SECT'),
                          ),
           MONOCRISTAL    =FACT(statut='f', max='**',
@@ -7939,12 +8219,12 @@ DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster,
                    fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le type d'écrouissage cinématique"),
              ELAS            =SIMP(statut='f', typ='TXM', max=1,
                    fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le comportement élastique (un et un seul)"),
-             FAMI_SYST_GLIS  =SIMP(statut='o',typ='TXM', max=1, 
+             FAMI_SYST_GLIS  =SIMP(statut='o',typ='TXM', max=1,
                                 into=('BASAL', 'PRISMATIQUE', 'OCTAEDRIQUE', 'PYRAMIDAL1',
                                 'PYRAMIDAL2', 'CUBIQUE1', 'CUBIQUE2', 'MACLAGE', 'JOINT_GRAIN', 'RL', 'UNIAXIAL','BCC24'),),
                                 ),
-                                
-                                
+
+
           POLYCRISTAL    =FACT(statut='f', max='**',
            regles=(UN_PARMI('ANGL_REP','ANGL_EULER'),),
              MONOCRISTAL     =SIMP(statut='o', typ=compor_sdaster, max=1),
@@ -7952,18 +8232,18 @@ DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster,
              ANGL_REP  =SIMP(statut='f',typ='R',max=3,fr="orientation du monocristal : 3 angles nautiques en degrés"),
              ANGL_EULER=SIMP(statut='f',typ='R',max=3,fr="orientation du monocristal : 3 angles d'Euler   en degrés"),
                                 ),
-                                
-                                
+
+
           b_poly      =BLOC( condition = "POLYCRISTAL!='None'",
           LOCALISATION     =SIMP(statut='f', typ='TXM', max=1, into=('BZ', 'BETA', 'RL',),
                 fr="Donner le nom de la règle de localisation"),
-          
+
            b_beta      =BLOC( condition = "LOCALISATION=='BETA'",
              DL            =SIMP(statut='o',typ='R',max=1),
              DA            =SIMP(statut='o',typ='R',max=1),
              ),
              ),
-                                
+
 #####################################################################################
           GEOM_FIBRE = SIMP(statut='f',max=1,typ=gfibre_sdaster,
                    fr="Donner le nom du concept regroupant tous les groupes de fibres (issu de DEFI_GEOM_FIBRE)"),
@@ -8009,11 +8289,11 @@ DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster,
                                         "NORTON_HOFF",
                                         "LEMAITRE",
                                         "VENDOCHAB",
-                                        "DRUCKER_PRAGER",
+                                        "DRUCK_PRAGER",
+                                        "DRUCK_PRAG_N_A",
                                         "GRANGER_FP",
                                         "GRANGER_FP_INDT",
                                         "GRANGER_FP_V",
-                                        "BAZANT_FD",
                                         "BETON_UMLV_FP",
                                         "BETON_DOUBLE_DP",
                                         "KIT_DDI",
@@ -8058,18 +8338,18 @@ DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster,
           LEMAITRE        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
           VENDOCHAB       =SIMP(statut='c',typ='I',defaut=10,into=(10,)),
           GRILLE_ISOT_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)),
-          DRUCKER_PRAGER  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+          DRUCK_PRAGER  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+          DRUCK_PRAG_N_A  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
           HOEK_BROWN      =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
           HOEK_BROWN_EFF  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
           HOEK_BROWN_TOT  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
           GRANGER_FP      =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
           GRANGER_FP_INDT =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
           GRANGER_FP_V    =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
-          BAZANT_FD       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
           BETON_DOUBLE_DP =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
           BETON_UMLV_FP   =SIMP(statut='c',typ='I',defaut=21,into=(21,)),
           GRAN_IRRA_LOG   =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+
            RELATION_KIT    =SIMP(statut='f',typ='TXM',max='**',validators=NoRepeat(),
                                  into=(
 # MECA KIT_DDI
@@ -8086,11 +8366,11 @@ DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster,
                                        "BETON_DOUBLE_DP",
                                        ),),
 
-# on pourrait ajouter TOUT_GROUP_FIBRE                                           
+# on pourrait ajouter TOUT_GROUP_FIBRE
 
                                 ) );
-                   
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8108,6 +8388,7 @@ DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
 DEFI_CONSTANTE=OPER(nom="DEFI_CONSTANTE",op=   2,sd_prod=fonction_sdaster,
                     fr="Définir la valeur d'une grandeur invariante",
                     reentrant='n',
@@ -8116,7 +8397,7 @@ DEFI_CONSTANTE=OPER(nom="DEFI_CONSTANTE",op=   2,sd_prod=fonction_sdaster,
          VALE            =SIMP(statut='o',typ='R',),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8134,6 +8415,7 @@ DEFI_CONSTANTE=OPER(nom="DEFI_CONSTANTE",op=   2,sd_prod=fonction_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
 DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater_sdaster,reentrant='n',
             UIinfo={"groupes":("Modélisation",)},
                     fr="Déterminer les caractéristiques matériaux homogénéisées d'une coque multicouche à partir"
@@ -8148,7 +8430,7 @@ DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater_sdaster,reentrant='
            UNITE           =SIMP(statut='f',typ='I',defaut=8),  
          ),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8166,7 +8448,7 @@ DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater_sdaster,reentrant='
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# RESPONSABLE D6BHHJP J.P.LEFEBVRE
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 def DEFIC_prod(self,ACTION,UNITE,**args):
   if ACTION == "ASSOCIER" or ACTION == "RESERVER":
     if UNITE != None :
@@ -8217,7 +8499,7 @@ DEFI_FICHIER=MACRO(nom="DEFI_FICHIER",op=ops.build_DEFI_FICHIER,sd_prod=DEFIC_pr
 
            INFO          =SIMP(statut='f',typ='I',into=(1,2) ),           
            )
-#& MODIF COMMANDE  DATE 15/05/2007   AUTEUR GENIAUT S.GENIAUT 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8235,6 +8517,7 @@ DEFI_FICHIER=MACRO(nom="DEFI_FICHIER",op=ops.build_DEFI_FICHIER,sd_prod=DEFIC_pr
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
 
 DEFI_FISS_XFEM=OPER(nom="DEFI_FISS_XFEM",op=  41,sd_prod=fiss_xfem,reentrant='n',
             UIinfo={"groupes":("Modélisation",)},
@@ -8267,7 +8550,7 @@ DEFI_FISS_XFEM=OPER(nom="DEFI_FISS_XFEM",op=  41,sd_prod=fiss_xfem,reentrant='n'
     ),
     INFO                  =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,3,) ),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8285,6 +8568,7 @@ DEFI_FISS_XFEM=OPER(nom="DEFI_FISS_XFEM",op=  41,sd_prod=fiss_xfem,reentrant='n'
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
 DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
                     reentrant='n',fr="Définit les caractéristiques nécessaires à l'étude dynamique d'une structure sous écoulement",
             UIinfo={"groupes":("Maillage",)},
@@ -8372,7 +8656,7 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8390,6 +8674,7 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
 DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction_sdaster,reentrant='n',
             UIinfo={"groupes":("Outils métier",)},
                     fr="Définir une fonction du temps intervenant dans le calcul des forces de LAPLACE",
@@ -8441,7 +8726,7 @@ DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction_sdaster,reentran
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8459,6 +8744,7 @@ DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction_sdaster,reentran
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
 DEFI_FONC_FLUI=OPER(nom="DEFI_FONC_FLUI",op= 142,sd_prod=fonction_sdaster,
                     reentrant='n',
             fr="Définit un profil de vitesse d'écoulement fluide le long d'une poutre",
@@ -8480,7 +8766,7 @@ DEFI_FONC_FLUI=OPER(nom="DEFI_FONC_FLUI",op= 142,sd_prod=fonction_sdaster,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8498,11 +8784,12 @@ DEFI_FONC_FLUI=OPER(nom="DEFI_FONC_FLUI",op= 142,sd_prod=fonction_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE MCOURTOI M.COURTOIS
-def defi_fonction_prod(VALE,VALE_PARA,VALE_C,NOEUD_PARA,**args):
+# RESPONSABLE COURTOIS M.COURTOIS
+def defi_fonction_prod(VALE,VALE_PARA,VALE_C,NOEUD_PARA,ABSCISSE,**args):
   if VALE       != None  : return fonction_sdaster
   if VALE_C     != None  : return fonction_c
   if VALE_PARA  != None  : return fonction_sdaster
+  if ABSCISSE   != None  : return fonction_sdaster
   if NOEUD_PARA != None  : return fonction_sdaster
   raise AsException("type de concept resultat non prevu")
 
@@ -8510,11 +8797,13 @@ DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod
                     ,fr="Définit une fonction réelle ou complexe d'une variable réelle",
                      reentrant='n',
             UIinfo={"groupes":("Fonction",)},
-         regles=(UN_PARMI('VALE','VALE_C','VALE_PARA','NOEUD_PARA'),),
+         regles=(UN_PARMI('VALE','VALE_C','VALE_PARA','NOEUD_PARA','ABSCISSE'),),
          NOM_PARA        =SIMP(statut='o',typ='TXM',into=C_PARA_FONCTION() ),
          NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
          VALE            =SIMP(statut='f',typ='R',min=2,max='**',
                                fr ="Fonction réelle définie par une liste de couples (abscisse,ordonnée)"),
+         ABSCISSE        =SIMP(statut='f',typ='R',min=2,max='**',
+                               fr ="Liste d abscisses d une fonction réelle"),
          VALE_C          =SIMP(statut='f',typ='R',min=2,max='**',
                                fr ="Fonction complexe définie par une liste de couples"),
          VALE_PARA       =SIMP(statut='f',typ=listr8_sdaster,
@@ -8522,6 +8811,10 @@ DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod
          b_vale_para     =BLOC(condition = "VALE_PARA != None",
            VALE_FONC       =SIMP(statut='o',typ=listr8_sdaster ),
          ),
+         b_abscisse      =BLOC(condition = "ABSCISSE != None",
+           ORDONNEE        =SIMP(statut='o',typ='R',min=2,max='**',
+                               fr ="Liste d ordonnées d une fonction réelle"),
+         ),
          NOEUD_PARA      =SIMP(statut='f',typ=no,max='**',
                                fr ="Fonction réelle définie par une liste de noeuds et un maillage"),
          b_noeud_para    =BLOC(condition = "NOEUD_PARA != None",
@@ -8536,7 +8829,7 @@ DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 05/03/2007   AUTEUR GALENNE E.GALENN
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8554,6 +8847,7 @@ DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
 DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,reentrant='n',
             UIinfo={"groupes":("Post traitements",)},
                     fr="Définition de lèvres et d'un fond de fissure en 3D",
@@ -8636,7 +8930,7 @@ DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,reentrant='n',
            VECT_GRNO_EXTR  =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
            INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8654,7 +8948,7 @@ DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,reentrant='n',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# ======================================================================
+# RESPONSABLE FLEJOU J.L.FLEJOU
 # 
 DEFI_GEOM_FIBRE=OPER(nom="DEFI_GEOM_FIBRE",op=  119, sd_prod=gfibre_sdaster,
                     fr="Definition des groupes de fibres pour les elements multifibres",
@@ -8688,7 +8982,80 @@ DEFI_GEOM_FIBRE=OPER(nom="DEFI_GEOM_FIBRE",op=  119, sd_prod=gfibre_sdaster,
 
 
 ) ;
-#& MODIF COMMANDE  DATE 04/07/2005   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 19/05/2008   AUTEUR MARKOVIC D.MARKOVIC 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  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.        
+# ======================================================================
+# RESPONSABLE MARKOVIC D.MARKOVIC
+DEFI_GLRC=OPER(nom="DEFI_GLRC",op=57,sd_prod=mater_sdaster,reentrant='f',
+            UIinfo={"groupes":("Modélisation",)},
+                    fr="Déterminer les caractéristiques du béton armé homogénéisées à partir des propriétés du béton et de  "
+                        +" plusieurs types d'armature",
+         reuse = SIMP(statut='f',typ=mater_sdaster), 
+         BETON          =FACT(statut='o',max=1,
+           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+           EPAIS           =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+           OMT             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0), 
+           EAT             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0), 
+           BT1             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0), 
+           BT2             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0), 
+           GAMMA           =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0), 
+           QP1             =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0), 
+           QP2             =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0), 
+
+           C1N1            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C1N2            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C1N3            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C2N1            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C2N2            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C2N3            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C1M1            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C1M2            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C1M3            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C2M1            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C2M2            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C2M3            =SIMP(statut='o',typ='R',val_min=0.E+0),
+         ),
+         NAPPE     =FACT(statut='o',max=10,
+           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+           OMX             =SIMP(statut='o',typ='R',val_min=0.E+0), 
+           OMY             =SIMP(statut='o',typ='R',val_min=0.E+0), 
+           RX              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0), 
+           RY              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0), 
+         ),
+         CABLE_PREC   =FACT(statut='f',max=1,
+           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+           OMX             =SIMP(statut='o',typ='R',val_min=0.E+0), 
+           OMY             =SIMP(statut='o',typ='R',val_min=0.E+0), 
+           RX              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0), 
+           RY              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0), 
+           PREX            =SIMP(statut='o',typ='R'), 
+           PREY            =SIMP(statut='o',typ='R'), 
+         ),
+         LINER           =FACT(statut='f',max=10,
+           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+           OML             =SIMP(statut='o',typ='R',val_min=0.E+0), 
+           RLR             =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0), 
+         ),
+         IMPRESSION      =FACT(statut='f',
+           UNITE           =SIMP(statut='f',typ='I',defaut=8),  
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8706,7 +9073,7 @@ DEFI_GEOM_FIBRE=OPER(nom="DEFI_GEOM_FIBRE",op=  119, sd_prod=gfibre_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE PELLET J.PELLET
 def defi_group_prod(MAILLAGE,**args):
   if AsType(MAILLAGE) == maillage_sdaster : return maillage_sdaster
   if AsType(MAILLAGE) == squelette : return squelette
@@ -8890,7 +9257,7 @@ regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','INTERSEC','UNION','DIFFE','OPTION')
          ALARME          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          INFO            =SIMP(statut='f',typ='I',into=( 1 , 2 ) ),
 )  ;
-#& MODIF COMMANDE  DATE 26/06/2006   AUTEUR CIBHHLV L.VIVAN 
+#& MODIF COMMANDE  DATE 06/05/2008   AUTEUR CORUS M.CORUS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8908,6 +9275,8 @@ regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','INTERSEC','UNION','DIFFE','OPTION')
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE CORUS M.CORUS
+
 DEFI_INTERF_DYNA=OPER(nom="DEFI_INTERF_DYNA",op=  98,sd_prod=interf_dyna_clas,
                       reentrant='n',
             UIinfo={"groupes":("Matrices/vecteurs",)},
@@ -8927,7 +9296,7 @@ DEFI_INTERF_DYNA=OPER(nom="DEFI_INTERF_DYNA",op=  98,sd_prod=interf_dyna_clas,
          FREQ            =SIMP(statut='f',typ='R',defaut= 1.),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8945,6 +9314,7 @@ DEFI_INTERF_DYNA=OPER(nom="DEFI_INTERF_DYNA",op=  98,sd_prod=interf_dyna_clas,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
 from Macro.defi_inte_spec_ops import defi_inte_spec_ops
 
 DEFI_INTE_SPEC=MACRO(nom="DEFI_INTE_SPEC",op= defi_inte_spec_ops,sd_prod=table_fonction,
@@ -8990,43 +9360,62 @@ DEFI_INTE_SPEC=MACRO(nom="DEFI_INTE_SPEC",op= defi_inte_spec_ops,sd_prod=table_f
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),               
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  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.                                 
+# 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.                            
+# 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.      
+# 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.
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE COURTOIS M.COURTOIS
 DEFI_LIST_ENTI=OPER(nom="DEFI_LIST_ENTI",op=22,sd_prod=listis_sdaster,
-                    fr="Définir une liste d'entier strictement croissante",
+                    fr="Définir une liste d'entiers strictement croissante",
                     reentrant='n',
             UIinfo={"groupes":("Fonction",)},
-         regles=(UN_PARMI('VALE','DEBUT'),
-                 EXCLUS('VALE','INTERVALLE'),),
-         VALE            =SIMP(statut='f',typ='I',max='**'),
-         DEBUT           =SIMP(statut='f',typ='I'),
-         INTERVALLE      =FACT(statut='f',max='**',
-           regles=(UN_PARMI('NOMBRE','PAS'),),
-           JUSQU_A         =SIMP(statut='o',typ='I'),
-           NOMBRE          =SIMP(statut='f',typ='I',val_min=1,),
-           PAS             =SIMP(statut='f',typ='I',val_min=1,),
+
+         OPERATION    =SIMP(statut='o',typ='TXM',defaut='DEFI',into=('DEFI','NUME_ORDRE',)),
+
+
+         # définition d'une liste d'entiers
+         #----------------------------------
+         b_defi       =BLOC(condition = "OPERATION == 'DEFI'",
+             regles=(UN_PARMI('VALE','DEBUT'),
+                     EXCLUS('VALE','INTERVALLE'),),
+             VALE            =SIMP(statut='f',typ='I',max='**'),
+             DEBUT           =SIMP(statut='f',typ='I'),
+             INTERVALLE      =FACT(statut='f',max='**',
+                 regles=(UN_PARMI('NOMBRE','PAS'),),
+                 JUSQU_A         =SIMP(statut='o',typ='I'),
+                 NOMBRE          =SIMP(statut='f',typ='I',val_min=1,),
+                 PAS             =SIMP(statut='f',typ='I',val_min=1,),
+             ),
          ),
+
+
+         # extraction d'une liste de nume_ordre dans une sd_resultat :
+         #------------------------------------------------------------
+         b_extr       =BLOC(condition = "OPERATION == 'NUME_ORDRE'",
+             RESULTAT        =SIMP(statut='o',typ=resultat_sdaster),
+             PARAMETRE       =SIMP(statut='o',typ='TXM',),
+             INTERV_R        =SIMP(statut='o',typ='R',min=2,max=2),
+         ),
+
+
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9044,7 +9433,7 @@ DEFI_LIST_ENTI=OPER(nom="DEFI_LIST_ENTI",op=22,sd_prod=listis_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE COURTOIS M.COURTOIS
 DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8_sdaster,
                     fr="Définir une liste de réels strictement croissante",
                     reentrant='n',
@@ -9063,7 +9452,7 @@ DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8_sdaster,
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 12/03/2007   AUTEUR DEVESA G.DEVESA 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9081,7 +9470,7 @@ DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE PELLET J.PELLET
 DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage_sdaster,
                    fr="Définition d'un nouveau maillage à partir de macro-éléments",
                    reentrant='n',
@@ -9142,7 +9531,7 @@ DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage_sdaster,
            GROUP_NO_FIN    =SIMP(statut='f',typ=grno),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/05/2007   AUTEUR FERNANDES R.FERNANDES 
+#& MODIF COMMANDE  DATE 06/05/2008   AUTEUR MARKOVIC D.MARKOVIC 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9160,6 +9549,7 @@ DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                    fr="Définition des paramètres décrivant le comportement d un matériau",
                    reentrant='f',
@@ -9177,24 +9567,23 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                EXCLUS('CIN1_CHAB','CIN1_CHAB_FO'),
                EXCLUS('CIN2_CHAB','CIN2_CHAB_FO'),
                EXCLUS('VISCOCHAB','VISCOCHAB_FO'),
-               EXCLUS('LEMAITRE','LEMAITRE_FO','ZIRC_CYRA2','ZIRC_EPRI','VISC_IRRA_LOG',
+               EXCLUS('LEMAITRE','LEMAITRE_FO','VISC_IRRA_LOG',
                'LEMA_SEUIL','LEMA_SEUIL_FO','LEMAITRE_IRRA','LMARC_IRRA',),
                EXCLUS('LMARC','LMARC_FO'),
+               EXCLUS('META_LEMA_ANI','META_LEMA_ANI_FO'),
                EXCLUS('VMIS_POUTRE','VMIS_POUTRE_FO'),
                EXCLUS('VENDOCHAB','VENDOCHAB_FO'),
                PRESENT_PRESENT('BPEL_ACIER','ELAS'),
                EXCLUS('RCCM','RCCM_FO'),
                EXCLUS('WEIBULL','WEIBULL_FO'),
-               PRESENT_PRESENT('BARCELONE','CAM_CLAY','ELAS'),
-               PRESENT_PRESENT('CAM_CLAY','ELAS'),
+               PRESENT_PRESENT('BARCELONE','CAM_CLAY'),
                PRESENT_PRESENT('LAIGLE','ELAS'),
+               PRESENT_PRESENT('LETK','ELAS'),
                PRESENT_PRESENT('DRUCK_PRAGER','ELAS'),
                PRESENT_PRESENT('HOEK_BROWN','ELAS'),
                EXCLUS('MAZARS','MAZARS_FO'),
-               PRESENT_PRESENT('BAZANT_FD','ELAS_FO'),
                PRESENT_PRESENT('JOINT_BA','ELAS'),
                PRESENT_PRESENT('CABLE','ELAS'),
-               EXCLUS('GLRC_DAMAGE','GLRC_DM'),
                ),
            MATER      =SIMP(statut='f',typ=mater_sdaster),
 #
@@ -9438,10 +9827,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              A4              =SIMP(statut='f',typ='R'),
              A5              =SIMP(statut='f',typ='R'),
            ),
-           APPUI_ELAS      =FACT(statut='f',
-             E_N             =SIMP(statut='o',typ='R'),
-             E_TAN           =SIMP(statut='f',typ='R',defaut= 0.E+0),
-           ),
            CABLE           =FACT(statut='f',
              EC_SUR_E        =SIMP(statut='f',typ='R',defaut= 1.E-4 ),
            ),
@@ -9608,6 +9993,19 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              A_I             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
              VERI_P          =SIMP(statut='c',typ='TXM',max='**',defaut=("TEMP",) ),
            ),
+           MEMO_ECRO       =FACT(statut='f',
+             MU              =SIMP(statut='o',typ='R'),
+             Q_M             =SIMP(statut='o',typ='R'),
+             Q_0             =SIMP(statut='o',typ='R'),
+             ETA             =SIMP(statut='f',typ='R',defaut= 0.5E+0 ),
+           ),
+           MEMO_ECRO_FO        =FACT(statut='f',
+             MU              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             Q_M             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             Q_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ETA             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             VERI_P          =SIMP(statut='c',typ='TXM',max='**',defaut=("TEMP",) ),
+           ),
            VISCOCHAB       =FACT(statut='f',
              K_0             =SIMP(statut='o',typ='R'),
              A_K             =SIMP(statut='o',typ='R'),
@@ -9714,12 +10112,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              GRAN_B          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              GRAN_S          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
-           ZIRC_CYRA2      =FACT(statut='f',
-             EPSI_FAB        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             TEMP_RECUIT     =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             FLUX_PHI        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             VERI_P          =SIMP(statut='c',typ='TXM',max='**',defaut=("INST",) ),
-           ),
           VISC_IRRA_LOG    =FACT(statut='f',
              A               =SIMP(statut='f',typ='R',defaut= 1.28E-1),
              B               =SIMP(statut='f',typ='R',defaut= 0.01159),
@@ -9758,14 +10150,9 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                PHI0     =SIMP(statut='o',typ='R',val_min=0.0),
                KAPPA    =SIMP(statut='f',typ='R',val_min=0.0,defaut=0.8,val_max=1.0),
                ZETA_G   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-               TOLER_ET =SIMP(statut='c',typ='R',val_min=0.1E-2,val_max=10.0E-02,defaut=1.0E-02 ),
+               TOLER_ET =SIMP(statut='c',typ='R',val_min=0.0,defaut=0.15 ),
                VERI_P   =SIMP(statut='c',typ='TXM',max='**',defaut=("TEMP","IRRA") ),
          ),
-           ZIRC_EPRI       =FACT(statut='f',
-             FLUX_PHI        =SIMP(statut='o',typ='R'),
-             R_P             =SIMP(statut='o',typ='R'),
-             THETA_MAX       =SIMP(statut='o',typ='R'),
-           ),
            LEMAITRE_FO     =FACT(statut='f',
              N               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
              UN_SUR_K        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -9835,6 +10222,58 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              R66             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
              VERI_P          =SIMP(statut='c',typ='TXM',max='**',defaut=("TEMP",) ),
            ),
+             META_LEMA_ANI     =FACT(statut='f',
+             F1_A            =SIMP(statut='o',typ='R'),
+             F2_A            =SIMP(statut='o',typ='R'),
+             C_A             =SIMP(statut='o',typ='R'),
+             F1_M            =SIMP(statut='o',typ='R'),
+             F2_M            =SIMP(statut='o',typ='R'),
+             C_M             =SIMP(statut='o',typ='R'),
+             F1_N            =SIMP(statut='o',typ='R'),
+             F2_N            =SIMP(statut='o',typ='R'),
+             C_N             =SIMP(statut='o',typ='R'),
+             F1_Q            =SIMP(statut='o',typ='R'),
+             F2_Q            =SIMP(statut='o',typ='R'),
+             C_Q             =SIMP(statut='o',typ='R'),
+             F_MRR_RR        =SIMP(statut='o',typ='R'),
+             C_MRR_RR        =SIMP(statut='o',typ='R'),
+             F_MTT_TT        =SIMP(statut='o',typ='R'),
+             C_MTT_TT        =SIMP(statut='o',typ='R'),
+             F_MZZ_ZZ        =SIMP(statut='o',typ='R'),
+             C_MZZ_ZZ        =SIMP(statut='o',typ='R'),
+             F_MRT_RT        =SIMP(statut='o',typ='R'),
+             C_MRT_RT        =SIMP(statut='o',typ='R'),
+             F_MRZ_RZ        =SIMP(statut='o',typ='R'),
+             C_MRZ_RZ        =SIMP(statut='o',typ='R'),
+             F_MTZ_TZ        =SIMP(statut='o',typ='R'),
+             C_MTZ_TZ        =SIMP(statut='o',typ='R'),
+           ),
+             META_LEMA_ANI_FO  =FACT(statut='f',
+             F1_A            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_A            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_A             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_M            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_M            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_M             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_N            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_N            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_N             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_Q            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_Q            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_Q             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MRR_RR        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MRR_RR        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MTT_TT        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MTT_TT        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MZZ_ZZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MZZ_ZZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MRT_RT        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MRT_RT        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MRZ_RZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MRZ_RZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MTZ_TZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MTZ_TZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ), 
            VMIS_POUTRE     =FACT(statut='f',
              NP              =SIMP(statut='o',typ='R'),
              MEY             =SIMP(statut='o',typ='R'),
@@ -9886,32 +10325,13 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
            ),
            DIS_CONTACT     =FACT(statut='f',
              RIGI_NOR        =SIMP(statut='f',typ='R' ),
-             DIST_1          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-             DIST_2          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              RIGI_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              AMOR_NOR        =SIMP(statut='f',typ='R' ),
              AMOR_TAN        =SIMP(statut='f',typ='R' ),
              COULOMB         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             DIST_1          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             DIST_2          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              JEU             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-             KT_ULTM         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-             EFFO_N_INIT     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             regles=(EXCLUS('RIGI_N_FO','RIGI_N_IRRA',),
-                     EXCLUS('RELA_MZ','ANGLE_1'),
-                     PRESENT_PRESENT('ANGLE_1','ANGLE_2','ANGLE_3','ANGLE_4',
-                                     'MOMENT_1','MOMENT_2','MOMENT_3','MOMENT_4'),),
-             RIGI_N_IRRA     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             RIGI_N_FO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             RELA_MZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             ANGLE_1         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             ANGLE_2         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             ANGLE_3         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             ANGLE_4         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             MOMENT_1        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             MOMENT_2        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             MOMENT_3        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             MOMENT_4        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             C_PRAGER_MZ     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-             VERI_P          =SIMP(statut='c',typ='TXM',max='**',defaut=("DRZ","INST","TEMP",) ),
            ),
            DIS_GRICRA    =FACT(statut='f',
              KN_AX       =SIMP(statut='o',typ='R' ),
@@ -9941,13 +10361,13 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              VERI_P      =SIMP(statut='c',typ='TXM',max='**',defaut=("DRZ","INST","TEMP",) ),
            ),
            NADAI_B         =FACT(statut='f',
-             F_C             =SIMP(statut='o',typ='R'),
-             F_T             =SIMP(statut='o',typ='R'),
-             CRIT_E_C        =SIMP(statut='o',typ='R'),
-             EPSP_P_C        =SIMP(statut='o',typ='R'),
-             EPSP_R_C        =SIMP(statut='o',typ='R'),
-             EPSI_R_T        =SIMP(statut='o',typ='R'),
-             FAC_T_C         =SIMP(statut='o',typ='R'),
+             F_C             =SIMP(statut='o',typ='R',val_min=0.E+0),
+             F_T             =SIMP(statut='o',typ='R',val_min=0.E+0),
+             CRIT_E_C        =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
+             EPSP_P_C        =SIMP(statut='o',typ='R',val_min=0.E+0),
+             EPSP_R_C        =SIMP(statut='o',typ='R',val_min=0.E+0),
+             EPSI_R_T        =SIMP(statut='o',typ='R',val_min=0.E+0),
+             FAC_T_C         =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
            ),
            BETON_DOUBLE_DP =FACT(statut='f',
              F_C             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -9955,8 +10375,8 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              COEF_BIAX       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
              ENER_COMP_RUPT  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
              ENER_TRAC_RUPT  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             COEF_ELAS_COMP  =SIMP(statut='o',typ='R'),
-             LONG_CARA       =SIMP(statut='f',typ='R'),
+             COEF_ELAS_COMP  =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=100.E+0),
+             LONG_CARA       =SIMP(statut='f',typ='R',val_min=0.E+0),
              ECRO_COMP_P_PIC =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","PARABOLE") ),
              ECRO_TRAC_P_PIC =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","EXPONENT") ),
              VERI_P          =SIMP(statut='c',typ='TXM',max='**',defaut=("TEMP","INST","HYDR","SECH",) ),
@@ -10056,6 +10476,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              FROT_LINE       =SIMP(statut='f',typ='R',defaut=0.E+0),
            ),
            CAM_CLAY      =FACT(statut='f',
+             MU              =SIMP(statut='o',typ='R'),
              PORO            =SIMP(statut='o',typ='R'),
              LAMBDA          =SIMP(statut='o',typ='R'),
              KAPA            =SIMP(statut='o',typ='R'),
@@ -10105,7 +10526,11 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              RI_ELA =SIMP(statut='o',typ='R' ),
              RHYS   =SIMP(statut='o',typ='R' ),
              RMOB   =SIMP(statut='o',typ='R' ),
-             XM     =SIMP(statut='o',typ='R'),
+             XM     =SIMP(statut='o',typ='R' ),
+             RD_CYC =SIMP(statut='o',typ='R' ),
+             RI_CYC =SIMP(statut='o',typ='R' ),
+             DILA   =SIMP(statut='o',typ='R' ),
+             PTRAC  =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
            ECRO_ASYM_LINE  =FACT(statut='f',
              DC_SIGM_EPSI    =SIMP(statut='o',typ='R'),
@@ -10155,9 +10580,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              FONC_V          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
              VERI_P          =SIMP(statut='c',typ='TXM',max='**',defaut=("INST",) ),
            ),
-           BAZANT_FD      =FACT(statut='f',
-             LAM_VISC      =SIMP(statut='o',typ='R'),
-           ),
            BETON_UMLV_FP   =FACT(statut='f',min=0 ,
              K_RS            =SIMP(statut='o',typ='R'),
              ETA_RS          =SIMP(statut='o',typ='R'),
@@ -10168,33 +10590,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              ETA_ID          =SIMP(statut='o',typ='R'),
              ETA_FD          =SIMP(statut='f',typ='R'),
            ),
-           GLRC_DAMAGE       =FACT(statut='f',min=0,max=1,
-             FMEX1           =SIMP(statut='o',typ=(fonction_sdaster)),
-             FMEY1           =SIMP(statut='o',typ=(fonction_sdaster)),
-             FMEX2           =SIMP(statut='o',typ=(fonction_sdaster)),
-             FMEY2           =SIMP(statut='o',typ=(fonction_sdaster)),
-             DFMEX1           =SIMP(statut='o',typ=(fonction_sdaster)),
-             DFMEY1           =SIMP(statut='o',typ=(fonction_sdaster)),
-             DFMEX2           =SIMP(statut='o',typ=(fonction_sdaster)),
-             DFMEY2           =SIMP(statut='o',typ=(fonction_sdaster)),
-             DDFMEX1           =SIMP(statut='o',typ=(fonction_sdaster)),
-             DDFMEY1           =SIMP(statut='o',typ=(fonction_sdaster)),
-             DDFMEX2           =SIMP(statut='o',typ=(fonction_sdaster)),
-             DDFMEY2           =SIMP(statut='o',typ=(fonction_sdaster)),
-
-             CX1             =SIMP(statut='o',typ='R',val_min=0.E+0),
-             CY1             =SIMP(statut='o',typ='R',val_min=0.E+0),
-             CXY1            =SIMP(statut='o',typ='R',val_min=0.E+0),
-             CX2             =SIMP(statut='o',typ='R',val_min=0.E+0),
-             CY2             =SIMP(statut='o',typ='R',val_min=0.E+0),
-             CXY2            =SIMP(statut='o',typ='R',val_min=0.E+0),
-             MF1             =SIMP(statut='o',typ='R',val_min=0.E+0),
-             MF2             =SIMP(statut='o',typ='R',val_max=0.E+0),
-             QP1             =SIMP(statut='o',typ='R',val_min=0.E+0),
-             QP2             =SIMP(statut='o',typ='R',val_min=0.E+0),
-             GAMMA           =SIMP(statut='o',typ='R',val_min=0.E+0),
-             VERI_P          =SIMP(statut='c',typ='TXM',max='**',defaut=("X ",) ),
-           ),
            GLRC_DM         =FACT(statut='f',min=0,max=1,
              GAMMA_T         =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
              GAMMA_F         =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
@@ -10203,12 +10598,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              EF              =SIMP(statut='f',typ='R',val_min=0.E+0),
              NUF             =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=0.5+0),
            ),
-           GLRC_ACIER        =FACT(statut='f',min=0,max=1,
-             AX              =SIMP(statut='o',typ='R',val_min=0.E+0),
-             AY              =SIMP(statut='o',typ='R',val_min=0.E+0),
-             E               =SIMP(statut='o',typ='R',val_min=0.E+0),
-             ENROB           =SIMP(statut='o',typ='R',val_min=0.E+0),
-           ),
            GATT_MONERIE    =FACT(statut='f',min=0,max=1,
              D_GRAIN         =SIMP(statut='o',typ='R',val_min=0.E+0),
              PORO_INIT       =SIMP(statut='o',typ='R',val_min=0.E+0),
@@ -10313,6 +10702,31 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
             COEF_RZ =SIMP(statut='f',typ='R',val_min = 0.0,
                fr="Coefficient C autour de la direction locale Rz de l'élément."),
          ),
+         DIS_BILI_ELAS  =FACT(statut='f',
+            fr="Loi bi-linéaire pour les discrets.",
+            regles=(PRESENT_PRESENT('KDEB_DX','KFIN_DX','FPRE_DX',),
+                    PRESENT_PRESENT('KDEB_DY','KFIN_DY','FPRE_DY',),
+                    PRESENT_PRESENT('KDEB_DZ','KFIN_DZ','FPRE_DZ',),),
+            KDEB_DX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur début suivant l'axe local x de l'élément."),
+            KDEB_DY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur début suivant l'axe local y de l'élément."),
+            KDEB_DZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur début  suivant l'axe local z de l'élément."),
+            KFIN_DX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur fin l'axe local x de l'élément."),
+            KFIN_DY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur fin l'axe local y de l'élément."),
+            KFIN_DZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur fin l'axe local z de l'élément."),
+            FPRE_DX =SIMP(statut='f',typ='R',
+               fr="Effort de préserrage suivant l'axe local x de l'élément."),
+            FPRE_DY =SIMP(statut='f',typ='R',
+               fr="Effort de préserrage suivant l'axe local y de l'élément."),
+            FPRE_DZ =SIMP(statut='f',typ='R',
+               fr="Effort de préserrage suivant l'axe local z de l'élément."),
+            VERI_P  =SIMP(statut='c',typ='TXM',max='**',defaut=("TEMP",)),
+         ),
 # Discrets non-linéaires : fin
 #
 # comportement thermique
@@ -10558,18 +10972,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              CELE_C          =SIMP(statut='f',typ='C'),
              CELE_R          =SIMP(statut='f',typ='R'),
            ),
-           PORO_JOINT      =FACT(statut='f',
-             RHO_FLUI        =SIMP(statut='o',typ='R'),
-             ENTRO_FLUI      =SIMP(statut='o',typ='R'),
-             BIOT_M          =SIMP(statut='o',typ='R'),
-             C_0             =SIMP(statut='o',typ='R'),
-             T_R             =SIMP(statut='o',typ='R'),
-             ALPHA_M         =SIMP(statut='o',typ='R'),
-             LAMBDA_T        =SIMP(statut='o',typ='R'),
-             LAMBDA_H        =SIMP(statut='o',typ='R'),
-             SOURCE_INIT     =SIMP(statut='o',typ='R'),
-             OMEGA_0         =SIMP(statut='o',typ='R'),
-           ),
 # =================================================================================
 # COMPORTEMENT THERMO_HYDRO_MECANIQUE
 # LES DONNEES NECESSAIRES A LA DEFINITION DU MATERIAU SONT DEPENDANTES
@@ -10778,21 +11180,27 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                                            PESA_X           = SIMP(statut='o',typ='R'),
                                            PESA_Y           = SIMP(statut='o',typ='R'),
                                            PESA_Z           = SIMP(statut='o',typ='R'),
-                                           SATU_PRES        = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_SATU_PRES      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           PERM_LIQU        = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_PERM_LIQU_SATU = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           PERM_GAZ         = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_PERM_SATU_GAZ  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_PERM_PRES_GAZ  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           SATU_PRES        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+
+                                           VG_N    = SIMP(statut='f',typ='R'),
+                                           VG_SR    = SIMP(statut='f',typ='R'),
+                                           VG_PR   = SIMP(statut='f',typ='R'),
+                                           VG_SMAX = SIMP(statut='f',typ='R'),
+                                           VG_SATUR = SIMP(statut='f',typ='R'),
+#
 # ---------------------------------------------------------------------------------
 # -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
 # ---------------------------------------------------------------------------------
                                            CP               = SIMP(statut='f',typ='R'),
                                            PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                                           regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
-                                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), ),
                                            PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -10803,6 +11211,15 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                                            LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            LAMB_CT   = SIMP(statut='f',typ='R'),
+#
+                                  regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+                                            ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+                                                            'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+                                            ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+                                            UN_PARMI('VG_N','SATU_PRES'),
+                                           ),
+
 # ---------------------------------------------------------------------------------
 # -------------------   DONNEES INUTILES   ----------------------------------------
 # ---------------------------------------------------------------------------------
@@ -11196,13 +11613,21 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                                            PESA_X           = SIMP(statut='o',typ='R'),
                                            PESA_Y           = SIMP(statut='o',typ='R'),
                                            PESA_Z           = SIMP(statut='o',typ='R'),
-                                           SATU_PRES        = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_SATU_PRES      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           PERM_LIQU        = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_PERM_LIQU_SATU = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           PERM_GAZ         = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_PERM_SATU_GAZ  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_PERM_PRES_GAZ  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           SATU_PRES        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+
+                                           VG_N     = SIMP(statut='f',typ='R'),
+                                           VG_SR    = SIMP(statut='f',typ='R'),
+                                           VG_PR    = SIMP(statut='f',typ='R'),
+                                           VG_SMAX  = SIMP(statut='f',typ='R'),
+                                           VG_SATUR = SIMP(statut='f',typ='R'),
+#
                                            FICKV_T          = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
 # ---------------------------------------------------------------------------------
 # -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
@@ -11210,8 +11635,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                                            CP               = SIMP(statut='f',typ='R'),
                                            PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                                           regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
-                                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), ),
                                            PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -11222,6 +11645,14 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                                            LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            LAMB_CT   = SIMP(statut='f',typ='R'),
+#
+                                  regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+                                            ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+                                                            'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+                                            ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+                                            UN_PARMI('VG_N','SATU_PRES'),
+                                           ),
 # ---------------------------------------------------------------------------------
 # -------------------   DONNEES FACULTATIVE   ----------------------------------
 # ---------------------------------------------------------------------------------
@@ -11351,13 +11782,20 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                                            PESA_X           = SIMP(statut='o',typ='R'),
                                            PESA_Y           = SIMP(statut='o',typ='R'),
                                            PESA_Z           = SIMP(statut='o',typ='R'),
-                                           SATU_PRES        = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_SATU_PRES      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           PERM_LIQU        = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_PERM_LIQU_SATU = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           PERM_GAZ         = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_PERM_SATU_GAZ  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_PERM_PRES_GAZ  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           SATU_PRES        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+                                           VG_N     = SIMP(statut='f',typ='R'),
+                                           VG_SR    = SIMP(statut='f',typ='R'),
+                                           VG_PR    = SIMP(statut='f',typ='R'),
+                                           VG_SMAX  = SIMP(statut='f',typ='R'),
+                                           VG_SATUR = SIMP(statut='f',typ='R'),
+#
                                            FICKV_T          = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKA_T          = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
 # ---------------------------------------------------------------------------------
@@ -11366,8 +11804,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                                            CP               = SIMP(statut='f',typ='R'),
                                            PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                                           regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
-                                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), ),
                                            PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -11378,6 +11814,14 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                                            LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            LAMB_CT   = SIMP(statut='f',typ='R'),
+#
+                                  regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+                                            ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+                                                            'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+                                            ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+                                            UN_PARMI('VG_N','SATU_PRES'),
+                                           ),
 # ---------------------------------------------------------------------------------
 # -------------------   DONNEES FACULTATIVES   ------------------------------------
 # ---------------------------------------------------------------------------------
@@ -11520,21 +11964,26 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                                            PESA_X           = SIMP(statut='o',typ='R'),
                                            PESA_Y           = SIMP(statut='o',typ='R'),
                                            PESA_Z           = SIMP(statut='o',typ='R'),
-                                           SATU_PRES        = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_SATU_PRES      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           PERM_LIQU        = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_PERM_LIQU_SATU = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           PERM_GAZ         = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_PERM_SATU_GAZ  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_PERM_PRES_GAZ  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           SATU_PRES        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+
+                                           VG_N    = SIMP(statut='f',typ='R'),
+                                           VG_SR    = SIMP(statut='f',typ='R'),
+                                           VG_PR   = SIMP(statut='f',typ='R'),
+                                           VG_SMAX = SIMP(statut='f',typ='R'),
+                                           VG_SATUR = SIMP(statut='f',typ='R'),
 # ---------------------------------------------------------------------------------
 # -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
 # ---------------------------------------------------------------------------------
                                            CP               = SIMP(statut='f',typ='R'),
                                            PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                                           regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
-                                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), ),
                                            PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -11545,6 +11994,14 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                                            LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            LAMB_CT   = SIMP(statut='f',typ='R'),
+#
+                                  regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+                                            ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+                                                            'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+                                            ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+                                            UN_PARMI('VG_N','SATU_PRES'),
+                                           ),
 # ---------------------------------------------------------------------------------
 # -------------------   DONNEES INUTILES   ----------------------------------------
 # ---------------------------------------------------------------------------------
@@ -11756,6 +12213,35 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              SIGMA_P1        =SIMP(statut='o',typ='R'),
              PA              =SIMP(statut='o',typ='R'),
            ),
+           LETK          =FACT(statut='f',
+             PA         =SIMP(statut='o',typ='R',fr="pression atmospherique"),
+             NELAS      =SIMP(statut='o',typ='R',fr="exposant de la loi de variation des modules K et G"),
+             SIGMA_C    =SIMP(statut='o',typ='R',fr="résistance en compression simple "),
+             H0_EXT     =SIMP(statut='o',typ='R',fr="parametre pilotant la résistance en extension"),
+             GAMMA_CJS  =SIMP(statut='o',typ='R',fr="parametre de forme du critere ds le plan deviatoire entre 0 et 1."),
+             XAMS       =SIMP(statut='o',typ='R',fr="parametre non nul intervenant dans les lois d'ecrouissage pre pic"),
+             ETA        =SIMP(statut='o',typ='R',fr="parametre non nul intervenant dans les lois d'ecrouissage post pic"),
+             A_0        =SIMP(statut='o',typ='R',fr="a de la limite d'élasticité initiale"),
+             A_E        =SIMP(statut='o',typ='R',fr="a de la limite de clivage ou seuil intermédiaire"),
+             A_PIC      =SIMP(statut='o',typ='R',fr="a du seuil de pic"),
+             S_0        =SIMP(statut='o',typ='R',fr="s de la limite d'élasticité initiale"),
+             M_0        =SIMP(statut='o',typ='R',fr="m de la limite d'élasticité initiale"),
+             M_E        =SIMP(statut='o',typ='R',fr="m de la limite de clivage ou seuil intermédiaire"),
+             M_PIC      =SIMP(statut='o',typ='R',fr="m du seuil de pic"),
+             M_ULT      =SIMP(statut='o',typ='R',fr="m du seuil residuel"),
+             XI_ULT     =SIMP(statut='o',typ='R',fr="niveau d ecrouissage pour atteindre le seuil residuel"),
+             XI_E       =SIMP(statut='o',typ='R',fr="niveau d ecrouissage pour atteindre le seuil de clivage"),
+             XI_PIC     =SIMP(statut='o',typ='R',fr="niveau d ecrouissage pour atteindre le seuil de pic"),
+             MV_MAX     =SIMP(statut='o',typ='R',fr="m du seuil viscoplastique maximal"),
+             XIV_MAX    =SIMP(statut='o',typ='R',fr="niveau d ecrouissage pour atteindre le seuil viscoplastique maximal"),
+             A          =SIMP(statut='o',typ='R',fr="parametre carcaterisant l amplitude de la vitesse de fluage"),
+             N          =SIMP(statut='o',typ='R',fr="parametre intervenant dans la formule pilotant la cinetique de fluage"),
+             SIGMA_P1   =SIMP(statut='o',typ='R',fr="SIG min de l intersection du seuil de pic et intermediaire "),
+             MU0_V      =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance des mecanismes pre pic et viscoplastique"),
+             XI0_V      =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance des mecanismes pre pic et viscoplastique"),
+             MU1        =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance du mecanisme post pic "),
+             XI1        =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance du mecanisme post pic "),
+           ),
            DRUCK_PRAGER  =FACT(statut='f',
              ALPHA           =SIMP(statut='o',typ='R'),
              SY              =SIMP(statut='o',typ='R'),
@@ -11771,8 +12257,9 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                     SY_ULTM         =SIMP(statut='o',typ='R'),
                     TYPE_DP         =SIMP(statut='c',typ='R',defaut= 2.0,),
              ),
-           ),
-           HOEK_BROWN          =FACT(statut='f',
+             DILAT           =SIMP(statut='f',typ='R',defaut=0.0),
+           ),           
+             HOEK_BROWN          =FACT(statut='f',
              GAMMA_RUP       =SIMP(statut='o',typ='R'),
              GAMMA_RES       =SIMP(statut='o',typ='R'),
              S_END           =SIMP(statut='o',typ='R'),
@@ -11898,12 +12385,13 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                     SY_ULTM         =SIMP(statut='o',typ=(fonction_sdaster,formule)),
                     TYPE_DP         =SIMP(statut='c',typ='R',defaut= 2.0,),
              ),
+            DILAT           =SIMP(statut='f',typ='R',defaut=0.0),
            ),
 
 
            INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11921,6 +12409,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE BODEL C.BODEL
 DEFI_MODELE_GENE=OPER(nom="DEFI_MODELE_GENE",op= 126,sd_prod=modele_gene,
                       reentrant='n',
             fr="Créer la structure globale à partir des sous-structures en sous-structuration dynamique", 
@@ -11952,7 +12441,7 @@ DEFI_MODELE_GENE=OPER(nom="DEFI_MODELE_GENE",op= 126,sd_prod=modele_gene,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11970,10 +12459,10 @@ DEFI_MODELE_GENE=OPER(nom="DEFI_MODELE_GENE",op= 126,sd_prod=modele_gene,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op=   4,sd_prod=nappe_sdaster,
+# RESPONSABLE COURTOIS M.COURTOIS
+DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op=4,sd_prod=nappe_sdaster,
                 fr="Définir une fonction réelle de deux variables réelles",
-                reentrant='n',
-            UIinfo={"groupes":("Fonction",)},
+                reentrant='n',UIinfo={"groupes":("Fonction",)},
          regles=(UN_PARMI('FONCTION','DEFI_FONCTION'),
                  EXCLUS('FONCTION','NOM_PARA_FONC',),
                  ENSEMBLE('NOM_PARA_FONC','DEFI_FONCTION'),),
@@ -11981,8 +12470,7 @@ DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op=   4,sd_prod=nappe_sdaster,
          NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),       
          PARA            =SIMP(statut='o',typ='R',max='**'),
          FONCTION        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**' ),
-         NOM_PARA_FONC   =SIMP(statut='f',typ='TXM',into=("TEMP","INST","X","Y","Z","EPSI","FREQ",
-                                                          "PULS","AMOR","EPAIS","SAT", "PGAZ","PCAP") ),
+         NOM_PARA_FONC   =SIMP(statut='f',typ='TXM',into=C_PARA_FONCTION() ),
          DEFI_FONCTION   =FACT(statut='f',max='**',
            VALE            =SIMP(statut='o',typ='R',max='**'),
            INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
@@ -11996,7 +12484,7 @@ DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op=   4,sd_prod=nappe_sdaster,
          VERIF           =SIMP(statut='f',typ='TXM',into=("CROISSANT",) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12014,6 +12502,7 @@ DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op=   4,sd_prod=nappe_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE KHAM M.KHAM
 DEFI_OBSTACLE=OPER(nom="DEFI_OBSTACLE",op=  73,sd_prod=table_fonction,
                    fr="Définition d'un obstacle plan perpendiculaire à une structure filaire",
                    reentrant='n',
@@ -12049,7 +12538,7 @@ DEFI_OBSTACLE=OPER(nom="DEFI_OBSTACLE",op=  73,sd_prod=table_fonction,
          VALE            =SIMP(statut='f',typ='R',max='**'),
          VERIF           =SIMP(statut='f',typ='TXM',defaut="FERME"),
 )  ;
-#& MODIF COMMANDE  DATE 10/06/2004   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12081,7 +12570,7 @@ DEFI_PARA_SENSI=OPER(nom="DEFI_PARA_SENSI",op=   2,sd_prod=para_sensi,
                                ang="Value of the parameter"),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 30/08/2005   AUTEUR ASSIRE A.ASSIRE 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12144,7 +12633,7 @@ DEFI_PART_FETI=MACRO(nom="DEFI_PART_FETI",op=defi_part_feti_ops,sd_prod=sd_feti_
 
          INFO            =SIMP(statut='f',typ='I',into=(1, 2), defaut=1),
 );
-#& MODIF COMMANDE  DATE 22/02/2005   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12180,7 +12669,7 @@ DEFI_PART_OPS=OPER(nom="DEFI_PART_OPS",op=21,sd_prod=sd_feti_sdaster,
            CHARGE          =SIMP(statut='f',typ=(char_meca,char_cine_meca)),
          ),
 );
-#& MODIF COMMANDE  DATE 26/03/2007   AUTEUR ASSIRE A.ASSIRE 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12240,7 +12729,7 @@ DEFI_PART_PA_OPS=PROC(nom="DEFI_PART_PA_OPS",op=29,
          INFO            =SIMP(statut='f',typ='I',into=(1, 2), defaut=1),
 
 );
-#& MODIF COMMANDE  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12258,6 +12747,7 @@ DEFI_PART_PA_OPS=PROC(nom="DEFI_PART_PA_OPS",op=29,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
 DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre_sdaster,
                     fr="Définition d'un spectre d'excitation turbulente",
                     reentrant='n',
@@ -12348,7 +12838,7 @@ DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre_sdaster,
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12366,6 +12856,7 @@ DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE BODEL C.BODEL
 DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette,
                     fr="Définit un maillage pour visualiser les résultats d'une sous-structuration dynamique",
                     reentrant='n',
@@ -12424,7 +12915,7 @@ DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette,
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 03/01/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12442,6 +12933,7 @@ DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE CANO V.CANO
 DEFI_TRC=OPER(nom="DEFI_TRC",op=94,sd_prod=table_sdaster,reentrant='n',
             UIinfo={"groupes":("Modélisation",)},
               fr="Définir d'un diagramme de transformations en refroidissement continu (TRC) de référence d'un acier"
@@ -12460,7 +12952,7 @@ DEFI_TRC=OPER(nom="DEFI_TRC",op=94,sd_prod=table_sdaster,reentrant='n',
            A              =SIMP(statut='f',typ='R'),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 31/10/2006   AUTEUR A3BHHAE H.ANDRIAMBOLOLONA 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12478,6 +12970,7 @@ DEFI_TRC=OPER(nom="DEFI_TRC",op=94,sd_prod=table_sdaster,reentrant='n',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE PELLET J.PELLET
 def depl_interne_prod(DEPL_GLOBAL,**args ):
     if AsType(DEPL_GLOBAL)     == cham_no_sdaster: return cham_no_sdaster
     if AsType(DEPL_GLOBAL)     == evol_elas      : return evol_elas
@@ -12494,7 +12987,7 @@ DEPL_INTERNE=OPER(nom="DEPL_INTERNE",op=89,sd_prod=depl_interne_prod,reentrant='
          SUPER_MAILLE    =SIMP(statut='o',typ=ma,),
          NOM_CAS         =SIMP(statut='f',typ='TXM',defaut=" "),
 )  ;
-#& MODIF COMMANDE  DATE 10/05/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12512,6 +13005,7 @@ DEPL_INTERNE=OPER(nom="DEPL_INTERNE",op=89,sd_prod=depl_interne_prod,reentrant='
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 DETRUIRE=MACRO(nom="DETRUIRE",op=-7,
             UIinfo={"groupes":("Gestion du travail",)},
               fr="Détruit des concepts utilisateurs dans la base GLOBALE ou des objets JEVEUX",
@@ -12532,7 +13026,7 @@ DETRUIRE=MACRO(nom="DETRUIRE",op=-7,
             ALARME        =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI',),
             INFO          =SIMP(statut='f',typ='I',into=(1,2),defaut=2, ),           
 );
-#& MODIF COMMANDE  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12550,6 +13044,7 @@ DETRUIRE=MACRO(nom="DETRUIRE",op=-7,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
 DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=table_fonction,
                      fr="Calcul de la réponse spectrale d'une structure linéaire sous une excitation connue par sa DSP",
                      reentrant='n',
@@ -12634,7 +13129,61 @@ DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=table_fonction,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 10/05/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  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.        
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+from Macro.dyna_iss_vari_ops import dyna_iss_vari_ops
+#
+DYNA_ISS_VARI=MACRO(nom="DYNA_ISS_VARI",op=dyna_iss_vari_ops ,sd_prod=table_fonction,
+                    fr="Calcul du spectre de réponse ou de la reponse temporelle sismique incoherente par decomposition spectrale",
+                    reentrant='n',
+                    UIinfo={"groupes":("Outils métier",)},        
+         NOM_CMP         =SIMP(statut='o',typ='TXM',into=("DX","DY","DZ") ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=0.999 ),
+         INTERF           =FACT(statut='o',
+            GROUP_NO_INTERF =SIMP(statut='o',typ=grma ,max='**'), 
+            MODE_INTERF  =SIMP(statut='o',typ='TXM',into=("CORP_RIGI","TOUT")),
+         ),      
+         MATR_COHE       =FACT(statut='o',
+            VITE_ONDE       =SIMP(statut='o',typ='R'),
+            PARA_ALPHA     =SIMP(statut='f',typ='R',defaut=0.5),           
+         ),
+#        FONC_MULT     =SIMP(statut='f',typ='R' ),
+         FREQ_INIT       =SIMP(statut='o',typ='R' ),
+         NB_FREQ       =SIMP(statut='o',typ='I' ),
+         PAS             =SIMP(statut='o',typ='R' ),     
+#        LIST_FREQ        =SIMP(statut='o',typ='liste' ),  
+         UNITE_RESU_FORC = SIMP(statut='f',typ='I',defaut=33),
+         UNITE_RESU_IMPE  = SIMP(statut='f',typ='I',defaut=32), 
+         TYPE             = SIMP(statut='f',typ='TXM',into=("BINAIRE","ASCII"), defaut="ASCII"),
+#
+         MATR_GENE         = FACT(statut='o',
+            MATR_MASS     = SIMP(statut='o',typ=(matr_asse_gene_r ) ),
+            MATR_RIGI     = SIMP(statut='o',typ=(matr_asse_gene_r,matr_asse_gene_c ) ),
+            MATR_AMOR     = SIMP(statut='f',typ=(matr_asse_gene_r,matr_asse_gene_c ) ), 
+         ),         
+#         
+#         OPTION        =SIMP(statut='f',typ='TXM',into=("TOUT","DIAG"),defaut="TOUT"),
+#             
+         INFO           =SIMP(statut='f',typ='I' ,defaut=1,into=( 1 , 2)),
+         )  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12652,6 +13201,7 @@ DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=table_fonction,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ANDRIAM H.ANDRIAMBOLOLONA
 def dyna_line_harm_prod(MATR_RIGI,**args):
    if (AsType(MATR_RIGI) == matr_asse_depl_r) : return dyna_harmo
    elif (AsType(MATR_RIGI) == matr_asse_depl_c) : return dyna_harmo
@@ -12693,13 +13243,74 @@ DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op=  60,sd_prod=dyna_line_harm_prod,
            VECT_ASSE       =SIMP(statut='f',typ=(cham_no_sdaster,vect_asse_gene) ),
            CHARGE          =SIMP(statut='f',typ=char_meca ),
            TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
-           FONC_MULT_C     =SIMP(statut='f',typ=fonction_c ),
+           FONC_MULT_C     =SIMP(statut='f',typ=(fonction_c,formule_c) ),
            COEF_MULT_C     =SIMP(statut='f',typ='C' ),
            FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
            COEF_MULT       =SIMP(statut='f',typ='R' ),
            PHAS_DEG        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            PUIS_PULS       =SIMP(statut='f',typ='I',defaut= 0 ),
          ),
+
+         b_matr_gene =BLOC(condition = "AsType(MATR_MASS) in (matr_asse_gene_r,)",
+                           fr="Methode de resolution matrice generalisee",
+          SOLVEUR         =FACT(statut='d',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="LDLT",into=("LDLT","MUMPS",) ),
+
+           b_ldlt_gene      =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             NPREC           =SIMP(statut='f',typ='I',defaut=8),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+
+           b_mumps_gene     =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="CENTRALISE",
+                                       into=("CENTRALISE","DISTRIBUE_MAILLE","DISTRIBUE_SD")),
+             PARTITION       =SIMP(statut='f',typ=sd_feti_sdaster),
+             CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=0,min=0),
+             CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,min=0),
+           ),
+          ),
+         ),
+
+         b_matr_phys =BLOC(condition = "AsType(MATR_MASS) in (matr_asse_depl_r,matr_asse_pres_c,)",
+                           fr="Methode de resolution matrice sur ddl physique",
+          SOLVEUR         =FACT(statut='d',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","MUMPS",) ),
+
+           b_mult_front_phys=BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+             NPREC           =SIMP(statut='f',typ='I',defaut=8),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+
+           b_ldlt_phys      =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+             NPREC           =SIMP(statut='f',typ='I',defaut=8),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+
+           b_mumps_phys     =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="CENTRALISE",
+                                       into=("CENTRALISE","DISTRIBUE_MAILLE","DISTRIBUE_SD")),
+             PARTITION       =SIMP(statut='f',typ=sd_feti_sdaster),
+             CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=0,min=0),
+             CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,min=0),
+             ),
+          ),
+         ),
+
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
                                fr="Liste des paramètres de sensibilité.",
@@ -12708,7 +13319,7 @@ DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op=  60,sd_prod=dyna_line_harm_prod,
 # Rajouter test icompatibilite vect_asse et sensibilite
 # Peut-on aussi rajouter ici le test d incompatibilite charge complexe - derivation 
 #  presents dans le Fortran          
-#& MODIF COMMANDE  DATE 13/12/2006   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12726,6 +13337,7 @@ DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op=  60,sd_prod=dyna_line_harm_prod,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
 DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
                     fr="Calcul de la réponse dynamique transitoire à une excitation temporelle quelconque",
                     reentrant='f',
@@ -12794,11 +13406,10 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
            MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
            AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
            NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
-           REAC_VITE       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          ),
 
          SOLVEUR         =FACT(statut='d',
-         METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS") ),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
 
            b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -12823,12 +13434,21 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
            ),
            b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
-             SCALING         =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
              RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
-             RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.E-6,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="CENTRALISE",into=("CENTRALISE","CENTRALISE")),
              ),
+
+           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+             VARIANTE        =SIMP(statut='f',typ='TXM',into=("GMRES","BCGS","CR","CG","BICG","CHEBYCHEV",),defaut="GMRES" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("ILU","SOR","BJACOBI"),defaut="ILU" ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-8),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
+           ),
          ),
 
          INCREMENT       =FACT(statut='o',max='**',
@@ -12866,7 +13486,7 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 30/05/2007   AUTEUR ABBAS M.ABBAS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12884,6 +13504,7 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
 DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
             fr="Calcul de l'évolution dynamique d'une structure dont le matériau ou la géométrie ont un comportement non linéaire",
             UIinfo={"groupes":("Résolution",)},
@@ -12914,7 +13535,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
          EXCIT_GENE      =FACT(statut='f',max='**',
            FONC_MULT       =SIMP(statut='f',typ=fonction_sdaster,max='**' ),
            VECT_GENE       =SIMP(statut='f',typ=vect_asse_gene,max='**' ),
-         ),         
+         ),
          SOUS_STRUC      =FACT(statut='f',min=01,max='**',
                 regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
                 CAS_CHARGE  =SIMP(statut='o',typ='TXM' ),
@@ -12937,15 +13558,16 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            MASS_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
            RIGI_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
            AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
-         ),         
+         ),
          COMP_INCR       =C_COMP_INCR(),
          COMP_ELAS       =FACT(statut='f',max='**',
            RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
-                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC",
+                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS",
                                       "ELAS_POUTRE_GR","CABLE","ELAS_HYPER")),
            ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
            ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
            ELAS_VMIS_LINE  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_VMIS_PUIS  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
            ELAS_HYPER      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
            ELAS_POUTRE_GR  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
            CABLE           =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
@@ -12963,20 +13585,18 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
 #-------------------------------------------------------------------
          b_reuse =BLOC(condition = "reuse",fr="en mode concept reentrant : ETAT_INIT obligatoire",
          ETAT_INIT       =FACT(statut='o',
-           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI','VARI_NON_LOCAL',),
+           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI',),
                    EXCLUS('EVOL_NOLI','DEPL',),
                    EXCLUS('EVOL_NOLI','VITE'),
                    EXCLUS('EVOL_NOLI','ACCE'),
                    EXCLUS('EVOL_NOLI','SIGM',),
                    EXCLUS('EVOL_NOLI','VARI',),
-                   EXCLUS('EVOL_NOLI','VARI_NON_LOCAL',),
                    EXCLUS('NUME_ORDRE','INST'), ),
            DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
            VITE            =SIMP(statut='f',typ=cham_no_sdaster),
            ACCE            =SIMP(statut='f',typ=cham_no_sdaster),
            SIGM            =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
            VARI            =SIMP(statut='f',typ=cham_elem),
-           VARI_NON_LOCAL  =SIMP(statut='f',typ=cham_no_sdaster),
            EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
            NUME_ORDRE      =SIMP(statut='f',typ='I'),
            INST            =SIMP(statut='f',typ='R'),
@@ -12987,20 +13607,18 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
          ),),
          b_not_reuse =BLOC(condition = "not reuse",fr="en mode concept non reentrant : ETAT_INIT facultatif",
          ETAT_INIT       =FACT(statut='f',
-           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI','VARI_NON_LOCAL',),
+           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI',),
                    EXCLUS('EVOL_NOLI','DEPL',),
                    EXCLUS('EVOL_NOLI','VITE'),
                    EXCLUS('EVOL_NOLI','ACCE'),
                    EXCLUS('EVOL_NOLI','SIGM',),
                    EXCLUS('EVOL_NOLI','VARI',),
-                   EXCLUS('EVOL_NOLI','VARI_NON_LOCAL',),
                    EXCLUS('NUME_ORDRE','INST'), ),
            DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
            VITE            =SIMP(statut='f',typ=cham_no_sdaster),
            ACCE            =SIMP(statut='f',typ=cham_no_sdaster),
            SIGM            =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
            VARI            =SIMP(statut='f',typ=cham_elem),
-           VARI_NON_LOCAL  =SIMP(statut='f',typ=cham_no_sdaster),
            EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
            NUME_ORDRE      =SIMP(statut='f',typ='I'),
            INST            =SIMP(statut='f',typ='R'),
@@ -13092,7 +13710,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            PAS_MINI_ELAS   =SIMP(statut='f',typ='R',defaut=0.0E+0),
          ),
          SOLVEUR         =FACT(statut='d',
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS") ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
            b_mult_front    =BLOC(condition= "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
            ),
@@ -13106,11 +13724,16 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            ),
            b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
-             SCALING         =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
              RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="CENTRALISE",
+                                   into=("CENTRALISE","DISTRIBUE_MC","DISTRIBUE_MD","DISTRIBUE_SD")),
+             PARTITION       =SIMP(statut='f',typ=sd_feti_sdaster),
+             CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,min=0,max=100),
+             CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,min=0),
              ),
            b_gcpc          =BLOC(condition="METHODE == 'GCPC'",fr="Paramètres de la méthode du gradient conjugué",
              PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC",),defaut="LDLT_INC" ),
@@ -13119,36 +13742,16 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
              RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
              NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
            ),
+           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+             VARIANTE        =SIMP(statut='f',typ='TXM',into=("GMRES","BCGS","CR","CG","BICG","CHEBYCHEV",),defaut="GMRES" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("ILU","SOR","BJACOBI"),defaut="ILU" ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-8),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
+           ),
            SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          ),
 #-------------------------------------------------------------------
-         RECH_LINEAIRE   =FACT(statut='f',
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="CORDE",into=("CORDE","MIXTE") ),         
-           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-1 ),
-           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3),
-           ITER_LINE_CRIT  =SIMP(statut='f',typ='I',defaut= 20),
-           PAS_MINI_CRIT   =SIMP(statut='f',typ='R',defaut=0.0E+0),
-           RHO_MIN         =SIMP(statut='f',typ='R',defaut=1.0E-2),
-           RHO_MAX         =SIMP(statut='f',typ='R',defaut=1.0E+1),
-           RHO_EXCL        =SIMP(statut='f',typ='R',defaut=0.9E-2,val_min=0.),
-         ),
-         PILOTAGE        =FACT(statut='f',
-           regles=(EXCLUS('NOEUD','GROUP_NO'),PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
-           TYPE    =SIMP(statut='o',typ='TXM',into=("DDL_IMPO","LONG_ARC","PRED_ELAS","PRED_ELAS_INCR","DEFORMATION","ANA_LIM") ),
-           COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
-           ETA_PILO_MAX    =SIMP(statut='f',typ='R'),
-           ETA_PILO_MIN    =SIMP(statut='f',typ='R'),
-           ETA_PILO_R_MAX  =SIMP(statut='f',typ='R'),
-           ETA_PILO_R_MIN  =SIMP(statut='f',typ='R'),
-           PROJ_BORNES     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
-           SELECTION       =SIMP(statut='f',typ='TXM',defaut="NORM_INCR_DEPL", into=("RESIDU","ANGL_INCR_DEPL","NORM_INCR_DEPL") ),
-           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
-           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),
-                         ),
          CONVERGENCE     =FACT(statut='d',
            regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA'),),
            b_refe_rela    =BLOC(condition = "RESI_REFE_RELA != None",
@@ -13179,7 +13782,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
              GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
              POINT           =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**'),
              MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
                                    into=("DEPL","VITE","ACCE","SIEF_ELGA",
                                          "VARI_ELGA","FORC_NODA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU",)),
              GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
@@ -13247,7 +13850,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            NUME_INIT       =SIMP(statut='f',typ='I'),
            DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
            CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
-           into=("DEPL","SIEF_ELGA","VARI_ELGA","ACCE","VITE","VARI_NON_LOCAL","LANL_ELGA")),
+           into=("DEPL","SIEF_ELGA","VARI_ELGA","ACCE","VITE","LANL_ELGA")),
          ),
 
 #-------------------------------------------------------------------
@@ -13255,57 +13858,25 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            NB_FREQ         =SIMP(statut='f',typ='I',max=1,defaut=3),
            CHAR_CRIT       =SIMP(statut='f',typ='R',min=2,max=2,defaut=(-10.0,10.),
                             fr="Valeur des deux charges critiques délimitant la bande de recherche en HPP"),
+           INST_CALCUL       =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ),
          ),
          MODE_VIBR     =FACT(statut='f',min=1,max=1,
-           MATR_RIGI        =SIMP(statut='f',typ='TXM',defaut="ELASTIQUE",into=("ELASTIQUE","TANGENTE") ),
-           NB_FREQ         =SIMP(statut='f',typ='I',max=1,defaut=3),
+           MATR_RIGI        =SIMP(statut='f',typ='TXM',defaut="ELASTIQUE",into=("ELASTIQUE","TANGENTE","SECANTE",) ),
+           NB_FREQ          =SIMP(statut='f',typ='I',max=1,defaut=3,
+                            fr="Nombre de fréquences propres à calculer"),
+           BANDE            =SIMP(statut='f',typ='R',min=2,max=2,
+                            fr="Valeur des deux fréquences délimitant la bande de recherche",),
+           INST_CALCUL       =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ),
          ),
 #-------------------------------------------------------------------
            SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
                                fr="Liste des paramètres de sensibilité",
                                ang="List of sensitivity parameters"),
-#-------------------------------------------------------------------
-           SOLV_NON_LOCAL  =FACT(statut='f',
-             METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS") ),
-             b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
-               RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
-             ),
-             b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
-               RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
-             ),
-             b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
-                                    fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
-               NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
-               STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-             ),
-             b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
-               TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
-               SCALING         =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
-               RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
-               ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
-               PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
-               RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
-             ),
-             b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
-               PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC",),defaut="LDLT_INC" ),
-               NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
-               RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
-               NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
-             ),
-             EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-           ),
-           LAGR_NON_LOCAL  =FACT(statut='f',
-             ITER_DUAL_MAXI  =SIMP(statut='f',typ='I',defaut= 50),
-             RESI_DUAL_ABSO  =SIMP(statut='o',typ='R'),
-             RESI_PRIM_ABSO  =SIMP(statut='o',typ='R'),
-             R               =SIMP(statut='f',typ='R',defaut= 1000.),
-             ITER_PRIM_MAXI  =SIMP(statut='f',typ='I',defaut= 10),
-           ),
 #-------------------------------------------------------------------
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13323,6 +13894,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
 DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=table_fonction,
                      fr="Calcul de la réponse par recombinaison modale d'une structure linéaire pour une excitation aléatoire",
                      reentrant='n',
@@ -13334,7 +13906,7 @@ DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=table_fonction,
          OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13352,6 +13924,7 @@ DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=table_fonction,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
 DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
                      fr="Calcul de la réponse dynamique transitoire d'un système amorti ou non en coordonées généralisées"
                         +" par superposition modale ou par sous structuration",
@@ -13530,7 +14103,6 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
                 CHOC_FLUI       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
                 NB_MODE         =SIMP(statut='f',typ='I' ),
                 NB_MODE_FLUI    =SIMP(statut='f',typ='I' ),
-                NB_MODE_DIAG    =SIMP(statut='f',typ='I' ),
                 TS_REG_ETAB     =SIMP(statut='f',typ='R' ),
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
@@ -13543,29 +14115,29 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
  )  ;
-#& MODIF COMMANDE  DATE 12/12/2006   AUTEUR VIVAN L.VIVAN 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  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.                                 
+# 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.                            
+# 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.      
+# 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.
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE PELLET J.PELLET
 ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178,
                    UIinfo={"groupes":("Impression",)},
                    fr="Engendre des tests pour la non régression du code (pour développeurs)",
-         UNITE           =SIMP(statut='f',typ='I',defaut=8),  
+         UNITE           =SIMP(statut='f',typ='I',defaut=8),
          FORMAT          =SIMP(statut='f',typ='TXM',into=("OBJET",) ),
          FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE20.13"),
          PREC_R          =SIMP(statut='f',typ='TXM',defaut="1.E-10"),
@@ -13580,10 +14152,10 @@ ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178,
                             regles=(UN_PARMI('TOUT','CO'),),
             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
             CO              =SIMP(statut='f',typ=assd,validators=NoRepeat(),max='**'),
-            TYPE_TEST       =SIMP(statut='f',typ='TXM',defaut="SOMME",into=("SOMME","RESUME") ),
+            TYPE_TEST       =SIMP(statut='f',typ='TXM',defaut="SOMME",into=("SOMME",) ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 29/08/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13601,6 +14173,7 @@ ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 
 from Macro.exec_logiciel_ops import exec_logiciel_ops
 def exec_logiciel_prod(self, MAILLAGE, **args):
@@ -13632,7 +14205,7 @@ EXEC_LOGICIEL = MACRO(nom="EXEC_LOGICIEL",op=exec_logiciel_ops, sd_prod=exec_log
       
       INFO     = SIMP(statut='f', typ='I', defaut=2, into=(1,2),),
 )
-#& MODIF COMMANDE  DATE 14/10/2005   AUTEUR CIBHHLV L.VIVAN 
+#& MODIF COMMANDE  DATE 05/05/2008   AUTEUR NISTOR I.NISTOR 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13650,6 +14223,8 @@ EXEC_LOGICIEL = MACRO(nom="EXEC_LOGICIEL",op=exec_logiciel_ops, sd_prod=exec_log
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+
 def extr_mode_prod(FILTRE_MODE,**args):
   vale=FILTRE_MODE[0]['MODE']
   if AsType(vale) == mode_meca   : return mode_meca
@@ -13687,7 +14262,7 @@ EXTR_MODE=OPER(nom="EXTR_MODE",op= 168,sd_prod=extr_mode_prod,
            CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",into=("MASS_EFFE_UN","MASS_GENE") ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 09/05/2007   AUTEUR VIVAN L.VIVAN 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13705,6 +14280,8 @@ EXTR_MODE=OPER(nom="EXTR_MODE",op= 168,sd_prod=extr_mode_prod,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+
 def extr_resu_prod(RESULTAT,**args):
   if AsType(RESULTAT) == evol_elas    : return evol_elas
   if AsType(RESULTAT) == evol_noli    : return evol_noli
@@ -13724,7 +14301,8 @@ def extr_resu_prod(RESULTAT,**args):
 EXTR_RESU=OPER(nom="EXTR_RESU",op=176,sd_prod=extr_resu_prod,reentrant='f',
             UIinfo={"groupes":("Résultats et champs",)},
             fr="Extraire des champs au sein d'une SD Résultat",
-         regles=(CONCEPT_SENSIBLE('SEPARE'), REUSE_SENSIBLE(),
+         regles=(CONCEPT_SENSIBLE('SEPARE'), 
+                 #REUSE_SENSIBLE(),
                  DERIVABLE('RESULTAT'),),
          RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,acou_harmo,mode_meca,
                                                mode_acou,mode_stat_depl,mode_stat_acce,mode_stat_forc,evol_ther,evol_noli,
@@ -13758,7 +14336,7 @@ EXTR_RESU=OPER(nom="EXTR_RESU",op=176,sd_prod=extr_resu_prod,reentrant='f',
 
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13776,16 +14354,21 @@ EXTR_RESU=OPER(nom="EXTR_RESU",op=176,sd_prod=extr_resu_prod,reentrant='f',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
 def extr_table_prod(TYPE_RESU,**args):
-  if TYPE_RESU == "MATR_ASSE_GENE_R" : return matr_asse_gene_r
+  from Cata import cata
+  typ = TYPE_RESU.lower()
+  if hasattr(cata, typ):
+     return getattr(cata, typ)
   raise AsException("type de concept resultat non prevu")
 
 EXTR_TABLE=OPER(nom="EXTR_TABLE",op=173,sd_prod=extr_table_prod,reentrant='n',
             UIinfo={"groupes":("Résultats et champs",)},
-         fr="Extraire d'une table la matrice de masse généralisée assemblée",
-         TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("MATR_ASSE_GENE_R",) ),
+         fr="Extraire d'une table des concepts Code_Aster",
+         TYPE_RESU       =SIMP(statut='o',typ='TXM',),
 
-         TABLE           =SIMP(statut='o',typ=table_sdaster),
+         TABLE           =SIMP(statut='o',typ=(table_sdaster,table_container)),
 
          NOM_PARA        =SIMP(statut='o',typ='TXM'),
 
@@ -13807,61 +14390,27 @@ EXTR_TABLE=OPER(nom="EXTR_TABLE",op=173,sd_prod=extr_table_prod,reentrant='n',
 
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  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.      
+# COPYRIGHT (C) 1991 - 2007  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.        
 # ======================================================================
-def fact_grad_prod(MATR_ASSE,**args):
-  if AsType(MATR_ASSE) == matr_asse_depl_r : return matr_asse_depl_r
-  if AsType(MATR_ASSE) == matr_asse_temp_r : return matr_asse_temp_r
-  if AsType(MATR_ASSE) == matr_asse_pres_r : return matr_asse_pres_r
-  raise AsException("type de concept resultat non prevu")
+# RESPONSABLE PELLET J.PELLET
 
-FACT_GRAD=OPER(nom="FACT_GRAD",op=85,sd_prod=fact_grad_prod,
-            UIinfo={"groupes":("Résolution",)},
-               fr="Construire une matrice de préconditionnement pour une résolution par gradient conjugué",
-               reentrant='n',
-         MATR_ASSE       =SIMP(statut='o',
-                               typ=(matr_asse_depl_r,matr_asse_temp_r,
-                                    matr_asse_pres_r) ),
-         PRE_COND        =SIMP(statut='f',typ='TXM',defaut="LDLT_INC",into=("LDLT_INC",) ),
-         NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),  
-         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
-)  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETTE 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2001  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.
-# ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
-def fact_ldlt_prod(MATR_ASSE,**args):
+def factoriser_prod(MATR_ASSE,**args):
   if AsType(MATR_ASSE) == matr_asse_depl_r : return matr_asse_depl_r
   if AsType(MATR_ASSE) == matr_asse_depl_c : return matr_asse_depl_c
   if AsType(MATR_ASSE) == matr_asse_temp_r : return matr_asse_temp_r
@@ -13870,32 +14419,39 @@ def fact_ldlt_prod(MATR_ASSE,**args):
   if AsType(MATR_ASSE) == matr_asse_pres_c : return matr_asse_pres_c
   raise AsException("type de concept resultat non prevu")
 
-FACT_LDLT=OPER(nom="FACT_LDLT",op=14,sd_prod=fact_ldlt_prod,
-               fr="Factoriser une matrice assemblée en un produit de deux matrices triangulaires",
-               reentrant='f',
-            UIinfo={"groupes":("Résolution",)},
+FACTORISER=OPER(nom="FACTORISER",op=14,sd_prod=factoriser_prod,
+               fr="Factoriser une matrice assemblée en un produit de deux matrices triangulaires"+
+                  "ou construire une matrice de préconditionnement pour une résolution par gradient conjugué",
+               reentrant='f', UIinfo={"groupes":("Résolution",)},
          regles=(EXCLUS('BLOC_DEBUT','DDL_DEBUT'),
                  EXCLUS('BLOC_FIN','DDL_FIN'),),
          MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,
                                                matr_asse_temp_c,matr_asse_pres_r,matr_asse_pres_c) ),
+
+         # mots clés pour solveur LDLT et MULT_FRONT:
          STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          NPREC           =SIMP(statut='f',typ='I',defaut=8,val_min=0,),
-         PRE_COND        =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","DIAG") ),
+
+         # mots clés pour solveur LDLT :
          BLOC_DEBUT      =SIMP(statut='f',typ='I',val_min=1,),
          DDL_DEBUT       =SIMP(statut='f',typ='I',val_min=1,),
          BLOC_FIN        =SIMP(statut='f',typ='I',val_min=1,),
          DDL_FIN         =SIMP(statut='f',typ='I',val_min=1,),
-#
-         EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
 
-#        mots clés pour solveur MUMPS :
+         # mots clés pour solveur MUMPS :
          TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut='AUTO',into=('NONSYM','SYMGEN','SYMDEF','AUTO')),
-         PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=20,),
+         PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+         PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+         ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+
+         # mots clés pour solveur GCPC :
+         PRE_COND        =SIMP(statut='f',typ='TXM',defaut="LDLT_INC",into=("LDLT_INC",) ),
+         NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),  
 
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13913,6 +14469,7 @@ FACT_LDLT=OPER(nom="FACT_LDLT",op=14,sd_prod=fact_ldlt_prod,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une étude, fin du travail engagé par une des commandes DEBUT ou POURSUITE",
             UIinfo={"groupes":("Gestion du travail",)},
          FORMAT_HDF      =SIMP(fr="sauvegarde de la base GLOBALE au format HDF",statut='f',
@@ -13925,7 +14482,7 @@ FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une 
                                statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
          UNITE           =SIMP(statut='f',typ='I',defaut=6),  
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13943,12 +14500,13 @@ FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une 
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
 FONC_FLUI_STRU=OPER(nom="FONC_FLUI_STRU",op= 169,sd_prod=fonction_sdaster,
                     reentrant='n',fr="Crée une fonction constante paramètrée par l'abscisse curviligne",
             UIinfo={"groupes":("Fonction",)},
          TYPE_FLUI_STRU  =SIMP(statut='o',typ=(type_flui_stru) ),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13966,23 +14524,36 @@ FONC_FLUI_STRU=OPER(nom="FONC_FLUI_STRU",op= 169,sd_prod=fonction_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-def form_pyth_ops(self,d):
-  import types,string
-  NOM_PARA=self.etape['NOM_PARA']
-  VALE    =self.etape['VALE']
-  if type(NOM_PARA) not in (types.ListType,types.TupleType) : NOM_PARA=[NOM_PARA,]
-  if self.sd==None : return
-  texte=string.join(VALE.splitlines())
+# RESPONSABLE DURAND C.DURAND
+def formule_prod(self,VALE,VALE_C,**args):
+   if   VALE   != None:
+      return formule
+   elif VALE_C != None:
+      return formule_c
 
-  self.sd.setFormule(NOM_PARA,string.strip(texte))
+def form_pyth_ops(self,d):
+   NOM_PARA=self.etape['NOM_PARA']
+   VALE    =self.etape['VALE']
+   VALE_C  =self.etape['VALE_C']
+   if type(NOM_PARA) not in (list, tuple):
+      NOM_PARA = [NOM_PARA,]
+   if self.sd == None:
+      return
+   if VALE     != None :
+      texte = ''.join(VALE.splitlines())
+   elif VALE_C != None :
+      texte = ''.join(VALE_C.splitlines())
+   self.sd.setFormule(NOM_PARA, texte.strip())
 
 FORMULE=FORM(nom="FORMULE",op_init=form_pyth_ops,op=-5,
-             sd_prod=formule,UIinfo={"groupes":("Fonction",)},
-             fr="Définit une formule réelle à partir de son expression mathématique",
+             sd_prod=formule_prod,UIinfo={"groupes":("Fonction",)},
+             fr="Définit une formule réelle ou complexe à partir de son expression mathématique",
+         regles=(UN_PARMI('VALE','VALE_C',),),
          VALE     =SIMP(statut='f',typ='TXM'),
+         VALE_C   =SIMP(statut='f',typ='TXM'),
          NOM_PARA =SIMP(statut='o',typ='TXM',max='**'),
 );
-#& MODIF COMMANDE  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14000,7 +14571,7 @@ FORMULE=FORM(nom="FORMULE",op_init=form_pyth_ops,op=-5,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE CAMBIER S.CAMBIER
+# RESPONSABLE ZENTNER I.ZENTNER
 GENE_FONC_ALEA=OPER(nom="GENE_FONC_ALEA",op= 118,sd_prod=table_fonction,
                     fr="Génération de la fonction temporelle à partir d une matrice interspectrale",
                     reentrant='n',
@@ -14019,7 +14590,7 @@ GENE_FONC_ALEA=OPER(nom="GENE_FONC_ALEA",op= 118,sd_prod=table_fonction,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 11/07/2005   AUTEUR CAMBIER S.CAMBIER 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14037,7 +14608,7 @@ GENE_FONC_ALEA=OPER(nom="GENE_FONC_ALEA",op= 118,sd_prod=table_fonction,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# RESPONSABLE CAMBIER S.CAMBIER
+# RESPONSABLE ZENTNER I.ZENTNER
 def gene_matr_alea_prod(MATR_MOYEN,**args ):
   if (AsType(MATR_MOYEN) == matr_asse_gene_r )  : return matr_asse_gene_r
   if (AsType(MATR_MOYEN) == macr_elem_dyna) : return macr_elem_dyna
@@ -14069,7 +14640,7 @@ sd_prod=gene_matr_alea_prod,
    INIT_ALEA    =SIMP(statut='f',typ='I'),
 ) ;
    
-#& MODIF COMMANDE  DATE 05/02/2007   AUTEUR ZENTNER I.ZENTNER 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14087,7 +14658,7 @@ sd_prod=gene_matr_alea_prod,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# RESPONSABLE CAMBIER S.CAMBIER
+# RESPONSABLE ZENTNER I.ZENTNER
 from Macro.gene_vari_alea_ops import gene_vari_alea_ops,gene_vari_alea_init
 GENE_VARI_ALEA=MACRO(nom="GENE_VARI_ALEA",
                op_init=gene_vari_alea_init,op=gene_vari_alea_ops,
@@ -14137,7 +14708,7 @@ IMPR_CHARGE=PROC(nom="IMPR_CHARGE",op= 158,
          VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
          CHARGE          =SIMP(statut='o',typ=char_meca,validators=NoRepeat(),max='**', ),
 )  ;
-#& MODIF COMMANDE  DATE 10/05/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14155,7 +14726,7 @@ IMPR_CHARGE=PROC(nom="IMPR_CHARGE",op= 158,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 IMPR_CO=PROC(nom="IMPR_CO",op=17,
             UIinfo={"groupes":("Impression",)},
              fr="Imprimer tous les objets JEVEUX qui constituent un concept utilisateur existant (pour les développeurs)",
@@ -14176,7 +14747,7 @@ IMPR_CO=PROC(nom="IMPR_CO",op=17,
          POSITION        =SIMP(statut='f',typ='I',defaut=1),
          TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
 )  ;
-#& MODIF COMMANDE  DATE 24/04/2007   AUTEUR COURTOIS M.COURTOIS 
+#& MODIF COMMANDE  DATE 06/05/2008   AUTEUR CNGUYEN C.NGUYEN 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14194,7 +14765,7 @@ IMPR_CO=PROC(nom="IMPR_CO",op=17,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# RESPONSABLE MCOURTOI M.COURTOIS
+# RESPONSABLE COURTOIS M.COURTOIS
 from Macro.impr_fonction_ops import impr_fonction_ops
 
 IMPR_FONCTION=MACRO(nom="IMPR_FONCTION",op=impr_fonction_ops,sd_prod=None,
@@ -14232,7 +14803,7 @@ IMPR_FONCTION=MACRO(nom="IMPR_FONCTION",op=impr_fonction_ops,sd_prod=None,
            b_fonction      =BLOC(condition = "FONCTION != None",
              LIST_PARA       =SIMP(statut='f',typ=listr8_sdaster ),
            ),
-           b_fonction_c  =BLOC(condition = "AsType(FONCTION) == fonction_c",
+           b_fonction_c  =BLOC(condition = "AsType(FONCTION) in (fonction_c, formule_c)",
                                  fr="Fonction complexe définie par le mot-clé fonction",
              PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
            ),
@@ -14281,6 +14852,8 @@ IMPR_FONCTION=MACRO(nom="IMPR_FONCTION",op=impr_fonction_ops,sd_prod=None,
                                  fr="Séparateur des colonnes du tableau (ex : ' ', ';'...)"),
            COMMENTAIRE     =SIMP(statut='f',typ='TXM',defaut='#',
                                  fr="Caractère indiquant au traceur de fonction que la ligne peut etre ignorée"),
+           COMM_PARA       =SIMP(statut='f',typ='TXM',defaut='',
+                                 fr="Caractère utilisé pour commentariser la ligne des labels de colonnes"),
            DEBUT_LIGNE     =SIMP(statut='f',typ='TXM',defaut='',
                                  fr="Caractère de debut de ligne"),
            FIN_LIGNE       =SIMP(statut='f',typ='TXM',defaut='\n',
@@ -14311,7 +14884,7 @@ IMPR_FONCTION=MACRO(nom="IMPR_FONCTION",op=impr_fonction_ops,sd_prod=None,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14329,6 +14902,7 @@ IMPR_FONCTION=MACRO(nom="IMPR_FONCTION",op=impr_fonction_ops,sd_prod=None,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
 IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,
             fr="Imprimer le résultat d'un calcul dynamique en variables généralisées au format RESULTAT",
             UIinfo={"groupes":("Impression",)},
@@ -14370,7 +14944,7 @@ IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,
            INFO_GENE       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14388,6 +14962,7 @@ IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16,
             UIinfo={"groupes":("Impression",)},
                  fr="Imprimer le contenu des objets créés par JEVEUX (pour développeur)",
@@ -14425,7 +15000,7 @@ IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16,
          ),
          COMMENTAIRE     =SIMP(statut='f',typ='TXM' ),  
 )  ;
-#& MODIF COMMANDE  DATE 29/05/2007   AUTEUR VOLDOIRE F.VOLDOIRE 
+#& MODIF COMMANDE  DATE 06/05/2008   AUTEUR CORUS M.CORUS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14443,6 +15018,8 @@ IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE CORUS M.CORUS
+
 IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,
                     UIinfo={"groupes":("Impression",)},
          fr="Impression d'une structure de données MACR_ELEM_DYNA au format IDEAS MISS3D PLEXUS ou CADYRO",
@@ -14486,7 +15063,7 @@ IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,
          ),
 
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14504,60 +15081,35 @@ IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE PELLET J.PELLET
 IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159,
-                  fr="Imprimer sur un fichier au format IDEAS ou RESULTAT des matrices élémentaires et assemblées",
+                  fr="Imprimer sur un fichier au format IDEAS des matrices élémentaires et assemblées",
                   UIinfo={"groupes":("Impression",)},
                   regles=(AU_MOINS_UN('MATR_ELEM','MATR_ASSE'),),
 # ======================================================================
    MATR_ELEM       =FACT(statut='f',max='**',
 #
            MATRICE     =SIMP(statut='o',typ=(matr_elem, vect_elem)),
-           FORMAT      =SIMP(statut='f',typ='TXM',defaut="IDEAS",
-                                 into=("IDEAS","RESULTAT") ),
+           FORMAT      =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS",) ),
 #
          b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="unité logique d'impression et version IDEAS",
-           UNITE       =SIMP(statut='f',typ='I',defaut=30),  
+           UNITE       =SIMP(statut='f',typ='I',defaut=30),
            VERSION     =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,), ),  ),
-#
-         b_format_resultat  =BLOC(condition="FORMAT=='RESULTAT'",fr="unité logique d'impression au format RESULTAT",
-                             regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
-           UNITE       =SIMP(statut='f',typ='I',defaut=8),
-           TOUT        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NOEUD       =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
-           GROUP_NO    =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
-           MAILLE      =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-           GROUP_MA    =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
-           NOM_CMP     =SIMP(statut='f',typ='TXM',max='**'),
-           GRAIN       =SIMP(statut='f',typ='TXM',defaut="VALEUR",into=("VALEUR","NOEUD","MAILLE") ),
-           NB_CHIFFRE  =SIMP(statut='f',typ='I',defaut= 4 ),  ),
          ),
 # ======================================================================
    MATR_ASSE       =FACT(statut='f',max='**',
 #
            MATRICE     =SIMP(statut='o',typ=matr_asse_gd),
-           FORMAT      =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS","RESULTAT") ),
-# 
+           FORMAT      =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS",) ),
+#
          b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="unité logique d'impression et version IDEAS",
-           UNITE       =SIMP(statut='f',typ='I',defaut=30),  
+           UNITE       =SIMP(statut='f',typ='I',defaut=30),
            VERSION     =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,), ),  ),
-# 
-         b_format_resultat  =BLOC(condition="FORMAT=='RESULTAT'",fr="unité logique d'impression au format RESULTAT",
-                             regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
-           UNITE       =SIMP(statut='f',typ='I',defaut=8),
-           TOUT        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NOEUD       =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
-           GROUP_NO    =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
-           MAILLE      =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-           GROUP_MA    =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
-           OPTION      =SIMP(statut='f',typ='TXM',defaut="SOUS_MATRICE",into=("SOUS_MATRICE","LIGNE","COLONNE") ),
-           NOM_CMP     =SIMP(statut='f',typ='TXM',max='**'),
-           GRAIN       =SIMP(statut='f',typ='TXM',defaut="VALEUR",into=("VALEUR","NOEUD") ),
-           NB_CHIFFRE  =SIMP(statut='f',typ='I',defaut= 4 ),
-           VALE_ZERO   =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  ),
+#
          ),
 # ======================================================================
 )  ;
-#& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14575,6 +15127,7 @@ IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
 IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162,
             UIinfo={"groupes":("Impression",)},
          fr="Impression des données d'entrée pour une étude sismique avec MISS3D",
@@ -14603,7 +15156,7 @@ IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 07/11/2006   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14621,7 +15174,7 @@ IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# RESPONSABLE thomasso D.THOMASSON
+# RESPONSABLE THOMASSON D.THOMASSON
 #
 from Macro.impr_oar_ops import impr_oar_ops
 IMPR_OAR =MACRO(nom="IMPR_OAR",op= impr_oar_ops, sd_prod=None,
@@ -14673,7 +15226,7 @@ IMPR_OAR =MACRO(nom="IMPR_OAR",op= impr_oar_ops, sd_prod=None,
    UNITE = SIMP(statut='f',typ='I',defaut=38),
    AJOUT = SIMP(statut='f', typ='TXM', defaut='NON', into=('OUI', 'NON')),
    );
-#& MODIF COMMANDE  DATE 09/05/2007   AUTEUR VIVAN L.VIVAN 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14691,6 +15244,7 @@ IMPR_OAR =MACRO(nom="IMPR_OAR",op= impr_oar_ops, sd_prod=None,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
 IMPR_RESU=PROC(nom="IMPR_RESU",op=39,
             UIinfo={"groupes":("Impression",)},
                fr="Imprimer un maillage et/ou les résultats d'un calcul (différents formats)",
@@ -14750,10 +15304,10 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39,
                                    fr="Liste des paramètres de sensibilité.",
                                    ang="List of sensitivity parameters"),),
 
-#           b_partie        =BLOC(condition="""((AsType(RESULTAT)==dyna_harmo) or  
-#                           (AsType(CHAM_GD)!=carte_sdaster))  and ((FORMAT=='CASTEM') or (FORMAT=='GMSH'))""",
+           b_partie        =BLOC(condition="""(AsType(RESULTAT) in (dyna_harmo, acou_harmo) or  
+                          AsType(CHAM_GD) != carte_sdaster) and FORMAT in ('CASTEM', 'GMSH', 'MED')""",
              PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
-#           ),
+           ),
            b_extrac        =BLOC(condition="RESULTAT != None",
                                  fr="extraction d un champ de grandeur",
              regles=(EXCLUS('TOUT_CHAM','NOM_CHAM'),
@@ -14798,9 +15352,20 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39,
 ###
            b_gmsh=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and((FORMAT == 'GMSH'))""",
                                 fr="sélection des composantes et des entités toplogiques",
-             NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
              MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
              GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             TYPE_CHAM       =SIMP(statut='f',typ='TXM',defaut="SCALAIRE",
+                                   into=("VECT_2D","VECT_3D","SCALAIRE","TENS_2D","TENS_3D"),),
+             b_scal          =BLOC(condition = "TYPE_CHAM=='SCALAIRE'",
+               NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),),
+             b_vect_2d       =BLOC(condition = "TYPE_CHAM=='VECT_2D'",
+               NOM_CMP         =SIMP(statut='o',typ='TXM',min=2,max=2 ),),
+             b_vect_3d       =BLOC(condition = "TYPE_CHAM=='VECT_3D'",
+               NOM_CMP         =SIMP(statut='o',typ='TXM',min=3,max=3 ),),
+             b_tens_2d       =BLOC(condition = "TYPE_CHAM=='TENS_2D'",
+               NOM_CMP         =SIMP(statut='o',typ='TXM',min=4,max=4 ),),
+             b_tens_3d       =BLOC(condition = "TYPE_CHAM=='TENS_3D'",
+               NOM_CMP         =SIMP(statut='o',typ='TXM',min=6,max=6 ),),
            ),
 ###
            b_topologie=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and\
@@ -14827,7 +15392,7 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 ) ;
-#& MODIF COMMANDE  DATE 23/08/2004   AUTEUR CIBHHLV L.VIVAN 
+#& MODIF COMMANDE  DATE 05/05/2008   AUTEUR NISTOR I.NISTOR 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14845,6 +15410,8 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+
 IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de valeurs propres dans un intervalle donné",
             UIinfo={"groupes":("Résolution",)},
          MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
@@ -14867,7 +15434,7 @@ IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de val
          PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
          SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
 )  ;
-#& MODIF COMMANDE  DATE 10/05/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 06/05/2008   AUTEUR CNGUYEN C.NGUYEN 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14885,7 +15452,7 @@ IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de val
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE MCOURTOI M.COURTOIS
+# RESPONSABLE COURTOIS M.COURTOIS
 from Macro.impr_table_ops import impr_table_ops
 
 IMPR_TABLE=MACRO(nom="IMPR_TABLE",op=impr_table_ops,sd_prod=None,
@@ -14917,10 +15484,10 @@ IMPR_TABLE=MACRO(nom="IMPR_TABLE",op=impr_table_ops,sd_prod=None,
                                  "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI"),),
       b_vale         =BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
          regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
-         VALE           =SIMP(statut='f',typ='R'),
-         VALE_I         =SIMP(statut='f',typ='I'),
-         VALE_C         =SIMP(statut='f',typ='C'),
-         VALE_K         =SIMP(statut='f',typ='TXM'),
+         VALE           =SIMP(statut='f',typ='R',max='**'),
+         VALE_I         =SIMP(statut='f',typ='I',max='**'),
+         VALE_C         =SIMP(statut='f',typ='C',max='**'),
+         VALE_K         =SIMP(statut='f',typ='TXM',max='**'),
       ),
       b_crit         =BLOC(condition = "CRIT_COMP in ('EQ','NE')",
          CRITERE        =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
@@ -14939,6 +15506,21 @@ IMPR_TABLE=MACRO(nom="IMPR_TABLE",op=impr_table_ops,sd_prod=None,
    NOM_PARA       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
    IMPR_FONCTION  =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
 
+   # Mise en page du tableau ou du graphique
+   b_tableau = BLOC(condition = "FORMAT == 'TABLEAU'",
+                    fr="Mots-clés propres au format Tableau",
+      SEPARATEUR      =SIMP(statut='f',typ='TXM',defaut=' ',
+                            fr="Séparateur des colonnes du tableau (ex : ' ', ';'...)"),
+      COMMENTAIRE     =SIMP(statut='f',typ='TXM',defaut='#',
+                            fr="Caractère indiquant au traceur de fonction que la ligne peut etre ignorée"),
+      COMM_PARA       =SIMP(statut='f',typ='TXM',defaut='',
+                            fr="Caractère utilisé pour commentariser la ligne des labels de colonnes"),
+      DEBUT_LIGNE     =SIMP(statut='f',typ='TXM',defaut='',
+                            fr="Caractère de debut de ligne"),
+      FIN_LIGNE       =SIMP(statut='f',typ='TXM',defaut='\n',
+                            fr="Caractère de fin de ligne"),
+    ),
+
    # mise en forme pour les formats qui passent par Graph
    b_forme         =BLOC(condition = "FORMAT == 'XMGRACE'",
                          fr="Données de mise en forme du graphique",
@@ -14975,7 +15557,7 @@ IMPR_TABLE=MACRO(nom="IMPR_TABLE",op=impr_table_ops,sd_prod=None,
    TITRE          =SIMP(statut='f',typ='TXM',max='**'),
    INFO           =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  
-#& MODIF COMMANDE  DATE 10/06/2004   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14993,6 +15575,7 @@ IMPR_TABLE=MACRO(nom="IMPR_TABLE",op=impr_table_ops,sd_prod=None,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE DURAND C.DURAND
 INCLUDE=MACRO(nom="INCLUDE",op=ops.build_include,
             UIinfo={"groupes":("Gestion du travail",)},
              fr="Débranchement vers un fichier de commandes secondaires",
@@ -15000,7 +15583,7 @@ INCLUDE=MACRO(nom="INCLUDE",op=ops.build_include,
          UNITE = SIMP(statut='o',typ='I'),
          INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 );
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15018,6 +15601,7 @@ INCLUDE=MACRO(nom="INCLUDE",op=ops.build_include,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE DURAND C.DURAND
 INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14,
             UIinfo={"groupes":("Modélisation",)},
          fr="Récupérer les caractéristiques d'un matériau dans le Catalogue Materiaux d'Aster ",
@@ -15038,7 +15622,7 @@ INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14,
          UNITE_LONGUEUR  =SIMP(statut='f',typ='TXM',into=("M","MM"),defaut="M" ),  
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15056,7 +15640,7 @@ INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# RESPONSABLE D6BHHJP J.P.LEFEBVRE
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 INFO_EXEC_ASTER=OPER(nom="INFO_EXEC_ASTER",op=35,sd_prod=table_sdaster,
                     fr="Récupère différentes informations propres à l'exécution en cours",
                     reentrant='n',
@@ -15075,7 +15659,7 @@ INFO_EXEC_ASTER=OPER(nom="INFO_EXEC_ASTER",op=35,sd_prod=table_sdaster,
          TITRE          =SIMP(statut='f',typ='TXM',max='**'),
          INFO           =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 30/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15093,6 +15677,7 @@ INFO_EXEC_ASTER=OPER(nom="INFO_EXEC_ASTER",op=35,sd_prod=table_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
 from Macro.info_fonction_ops import info_fonction_ops
 def info_fonction_prod(self,ECART_TYPE,RMS,NOCI_SEISME,MAX,NORME, **args):
    if (RMS         != None): return table_sdaster
@@ -15163,7 +15748,7 @@ INFO_FONCTION=MACRO(nom="INFO_FONCTION",op=info_fonction_ops,sd_prod=info_foncti
          ),     
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15181,7 +15766,7 @@ INFO_FONCTION=MACRO(nom="INFO_FONCTION",op=info_fonction_ops,sd_prod=info_foncti
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE G8BHHXD X.DESROCHES
+# RESPONSABLE DESROCHES X.DESROCHES
 INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe_sdaster,
             UIinfo={"groupes":("Post traitements",)},
                   fr="Définition d'une courbe dans un maillage 2D",reentrant='n',
@@ -15245,7 +15830,7 @@ INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe_sdaster,
          PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),  
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15263,7 +15848,7 @@ INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE G8BHHXD X.DESROCHES
+# RESPONSABLE DESROCHES X.DESROCHES
 INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface_sdaster,
             UIinfo={"groupes":("Post traitements",)},
                   fr="Définir un chemin de type segment de droite dans un maillage 3D",reentrant='n',
@@ -15284,7 +15869,7 @@ INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface_sdaster,
          PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),  
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 16/05/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15302,6 +15887,7 @@ INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
 def lire_champ_prod(TYPE_CHAM=None,**args):
 # Remarque : si cette liste évolue, il faut penser à mettre à jour son
 #            homologue dans macr_adap_mail
@@ -15326,6 +15912,8 @@ LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod,
             NOM_CMP_IDEM =SIMP(statut='f',typ='TXM',into=("OUI",), ),
             NOM_CMP      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',),
             NOM_CMP_MED  =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',),
+            PROL_ZERO    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),
+               fr="Affecte des valeurs nulles la ou le champ n'est pas defini (sinon il y a NaN)"),
             NUME_PT      =SIMP(statut='f',typ='I'  ,validators=NoRepeat(),max='**',),
             NUME_ORDRE   =SIMP(statut='f',typ='I'  ,validators=NoRepeat(),max='**',
                            fr="Numero d ordre du champ à lire",ang="Rank of the field to be read" ),
@@ -15348,7 +15936,7 @@ LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod,
                   ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15366,6 +15954,7 @@ LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
 
 from Macro.lire_fonction_ops import lire_fonction_ops
 
@@ -15412,7 +16001,7 @@ LIRE_FONCTION=MACRO(nom="LIRE_FONCTION",op=lire_fonction_ops,sd_prod=lire_foncti
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15430,6 +16019,7 @@ LIRE_FONCTION=MACRO(nom="LIRE_FONCTION",op=lire_fonction_ops,sd_prod=lire_foncti
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
 LIRE_FORC_MISS=OPER(nom="LIRE_FORC_MISS",op= 179,sd_prod=vect_asse_gene,
                     fr="Création d un vecteur assemblé à partir de base modale",
                     reentrant='n',
@@ -15442,7 +16032,7 @@ LIRE_FORC_MISS=OPER(nom="LIRE_FORC_MISS",op= 179,sd_prod=vect_asse_gene,
          UNITE_RESU_FORC =SIMP(statut='f',typ='I',defaut=30),
 )  ;
 
-#& MODIF COMMANDE  DATE 19/09/2006   AUTEUR ACBHHCD G.DEVESA 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15460,6 +16050,7 @@ LIRE_FORC_MISS=OPER(nom="LIRE_FORC_MISS",op= 179,sd_prod=vect_asse_gene,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
 LIRE_IMPE_MISS=OPER(nom="LIRE_IMPE_MISS",op= 164,sd_prod=matr_asse_gene_c,
                     fr="Création d une matrice assemblée à partir de base modale",
                     reentrant='n',
@@ -15471,7 +16062,7 @@ LIRE_IMPE_MISS=OPER(nom="LIRE_IMPE_MISS",op= 164,sd_prod=matr_asse_gene_c,
          TYPE            =SIMP(statut='f',typ='TXM',defaut="ASCII",into=("BINAIRE","ASCII") ),         
 )  ;
 
-#& MODIF COMMANDE  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15489,6 +16080,7 @@ LIRE_IMPE_MISS=OPER(nom="LIRE_IMPE_MISS",op= 164,sd_prod=matr_asse_gene_c,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
 
 from Macro.lire_inte_spec_ops import lire_inte_spec_ops
 
@@ -15497,7 +16089,8 @@ LIRE_INTE_SPEC=MACRO(nom="LIRE_INTE_SPEC",op=lire_inte_spec_ops,sd_prod=table_fo
                     reentrant='n',
             UIinfo={"groupes":("Fonction",)},
          UNITE           =SIMP(statut='o',typ='I' ),
-         FORMAT          =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",into=("REEL_IMAG","MODULE_PHASE") ),
+         FORMAT_C        =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",into=("REEL_IMAG","MODULE_PHASE") ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","IDEAS") ),
          NOM_PARA        =SIMP(statut='f',typ='TXM',defaut="FREQ",
                                into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
                                      "INST","X","Y","Z","EPSI","FREQ","PULS","AMOR","ABSC",) ),
@@ -15508,7 +16101,7 @@ LIRE_INTE_SPEC=MACRO(nom="LIRE_INTE_SPEC",op=lire_inte_spec_ops,sd_prod=table_fo
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/11/2006   AUTEUR COURTOIS M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15526,7 +16119,7 @@ LIRE_INTE_SPEC=MACRO(nom="LIRE_INTE_SPEC",op=lire_inte_spec_ops,sd_prod=table_fo
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE PELLET J.PELLET
 LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op=   1,sd_prod=maillage_sdaster,
                    fr="Crée un maillage par lecture d'un fichier au format Aster ou Med",
                    ang="Readings of a mesh file",
@@ -15571,7 +16164,7 @@ LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op=   1,sd_prod=maillage_sdaster,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 #
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15589,6 +16182,7 @@ LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op=   1,sd_prod=maillage_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
 def lire_miss_3d_prod(TYPE_RESU,**args):
   if TYPE_RESU == "TRANS" : return dyna_trans
   if TYPE_RESU == "HARMO" : return dyna_harmo
@@ -15604,7 +16198,7 @@ LIRE_MISS_3D=OPER(nom="LIRE_MISS_3D",op= 163,sd_prod=lire_miss_3d_prod,
          TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="TRANS",into=("TRANS","HARMO") ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15622,6 +16216,8 @@ LIRE_MISS_3D=OPER(nom="LIRE_MISS_3D",op= 163,sd_prod=lire_miss_3d_prod,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE POTAPOV S.POTAPOV
+
 LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char,
                  fr="Lire le fichier de résultats au format IDEAS produit par le logiciel EUROPLEXUS",
                  reentrant='n',
@@ -15644,7 +16240,7 @@ LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char,
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 02/06/2008   AUTEUR PELLET J.PELLET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15662,7 +16258,7 @@ LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 
 def lire_resu_prod(TYPE_RESU,**args):
   if TYPE_RESU == "EVOL_CHAR" :  return evol_char
@@ -15674,6 +16270,7 @@ def lire_resu_prod(TYPE_RESU,**args):
   if TYPE_RESU == "HARM_GENE" :  return harm_gene
   if TYPE_RESU == "MODE_MECA" :  return mode_meca
   if TYPE_RESU == "MODE_MECA_C" : return mode_meca_c
+  if TYPE_RESU == "EVOL_VARC" :  return evol_varc
   raise AsException("type de concept resultat non prevu")
 
 # pour éviter d'écrire 3 fois cette liste :
@@ -15703,7 +16300,7 @@ def l_nom_cham_pas_elga(): return (
      "SIGM_NOZ2_ELGA", "SIPO_ELNO_DEPL", "SIPO_ELNO_SIEF", "SIPO_NOEU_DEPL",
      "SIPO_NOEU_SIEF", "SIRE_ELNO_DEPL", "SIRE_NOEU_DEPL", "TEMP", "THETA",
      "VALE_CONT", "VALE_NCOU_MAXI", "VARI_ELNO", "VARI_ELNO_COQU",
-     "VARI_ELNO_ELGA", "VARI_ELNO_TUYO", "VARI_NOEU", "VARI_NOEU_ELGA", "VARI_NON_LOCAL",
+     "VARI_ELNO_ELGA", "VARI_ELNO_TUYO", "VARI_NOEU", "VARI_NOEU_ELGA",
      "VITE", "VITE_ABSOLU", "VITE_VENT",
                            )
 
@@ -15717,7 +16314,7 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
 #----------------------
          TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_THER","EVOL_ELAS","EVOL_NOLI","MODE_MECA",
                                                           "MODE_MECA_C","DYNA_TRANS","DYNA_HARMO","HARM_GENE",
-                                                          "EVOL_CHAR") ),
+                                                          "EVOL_CHAR","EVOL_VARC") ),
 
          FORMAT          =SIMP(statut='o',typ='TXM',into=("IDEAS","IDEAS_DS58","ENSIGHT","MED") ),
 
@@ -15727,7 +16324,7 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
          regles=(UN_PARMI('MAILLAGE','MODELE'),),
          MAILLAGE        =SIMP(statut='f',typ=maillage_sdaster),
          MODELE          =SIMP(statut='f',typ=modele_sdaster),
-
+         COMP_INCR       =C_COMP_INCR(),
          NB_VARI         =SIMP(statut='f',typ='I' ),
 
          CHAM_MATER      =SIMP(statut='f',typ=cham_mater,),
@@ -15816,12 +16413,14 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
            UNITE           =SIMP(statut='f',typ='I',defaut= 81, fr="Le fichier est : fort.n.",),
            FORMAT_MED      =FACT(statut='f',max='**',
              regles=(ENSEMBLE('NOM_CMP','NOM_CMP_MED'),),
-             NOM_CHAM        =SIMP(statut='o',typ='TXM',into=l_nom_cham_pas_elga()),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO(),),
              NOM_CHAM_MED    =SIMP(statut='o',typ='TXM',               fr="Nom du champ dans le fichier MED.",  ),
              NOM_CMP         =SIMP(statut='f',typ='TXM',max='**',      fr="Nom des composantes dans ASTER.", ),
              NOM_CMP_MED     =SIMP(statut='f',typ='TXM',max='**',      fr="Nom des composantes dans MED.", ),
            ),
-                  ),
+           PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",),
+            fr="Affecte des valeurs nulles la ou le champ n'est pas defini (sinon il y a NaN)"),
+         ),
 
 # 2) blocs selon le type du résultat :
 #---------------------------------
@@ -15849,7 +16448,7 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
            ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 03/04/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15867,6 +16466,7 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
 
 from Macro.lire_table_ops import lire_table_ops
 
@@ -15881,7 +16481,7 @@ LIRE_TABLE=MACRO(nom="LIRE_TABLE",op=lire_table_ops,sd_prod=table_sdaster,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          )  ;
 
-#& MODIF COMMANDE  DATE 13/02/2006   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15899,7 +16499,7 @@ LIRE_TABLE=MACRO(nom="LIRE_TABLE",op=lire_table_ops,sd_prod=table_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# ======================================================================
+# RESPONSABLE ANDRIAM H.ANDRIAMBOLOLONA
 
 MAC_MODES=OPER(nom="MAC_MODES",op=  141,sd_prod=table_sdaster,
                fr="Normalisation de modes propres",
@@ -15911,7 +16511,7 @@ MAC_MODES=OPER(nom="MAC_MODES",op=  141,sd_prod=table_sdaster,
          TITRE      =SIMP(statut='f',typ='TXM',max='**'),
          INFO       =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 15/05/2007   AUTEUR GNICOLAS G.NICOLAS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15965,8 +16565,8 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
 #
 # 2. Version de HOMARD
 #
-  VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V8_7",
-                        into=("V8_7", "V8_N", "V8_N_PERSO"),
+  VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V8_11",
+                        into=("V8_11", "V8_N", "V8_N_PERSO"),
                         fr="Version de HOMARD",
                         ang="HOMARD release"),
 #
@@ -16113,6 +16713,18 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                                 ang="Absolute or relative value for error indicator" ),
 #
     ),
+#
+# 6.1.7. Type d'opération sur l'indicateur : la valeur par maille ou le max du saut entre mailles
+#
+    b_usage_indicateur = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
+                              fr="Usage de l'indicateur : direct ou saut",
+                              ang="Use type for error indicator : direct or jump",
+#
+      TYPE_OPER_INDICA = SIMP(statut='f',typ='TXM',defaut="MAILLE",into=("MAILLE","SAUT"),
+                              fr="Usage de l'indicateur : la valeur par maille ou le saut entre mailles voisines",
+                              ang="Use of indicator : value over every mesh or jump between neighbour" ),
+#
+    ),
 #
   ) ,
 #
@@ -16244,7 +16856,27 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                     ang="Minimum level for unrefinement"),
   ) ,
 #
-# 10. Suivi d'une frontiere
+# 10. Filtrage de l'adaptation par des groupes
+#
+  b_filtrage_par_des_groupes = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+                                                   (ADAPTATION == 'RAFFINEMENT') or \
+                                                   (ADAPTATION == 'RAFFINEMENT_UNIFORME') or \
+                                                   (ADAPTATION == 'RAFFINEMENT_ZONE') or \
+                                                   (ADAPTATION == 'DERAFFINEMENT') or \
+                                                   (ADAPTATION == 'DERAFFINEMENT_UNIFORME') " ,
+                                fr="Filtrage de l'adaptation par des groupes.",
+                                ang="Filtering of adaptation by groups.",
+#
+    GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                    fr="Liste des groupes de mailles pour le filtrage de l'adaptation.",
+                    ang="List of groups of meshes for filtering of adaptation." ),  
+#
+    GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**',
+                    fr="Liste des groupes de noeuds pour le filtrage de l'adaptation.",
+                    ang="List of groups of nodes for filtering of adaptation." ),  
+  ) ,
+#
+# 11. Suivi d'une frontiere
 #
   MAILLAGE_FRONTIERE = SIMP(statut='f',typ=maillage_sdaster,
                            fr="Maillage de la frontiere à suivre",
@@ -16254,41 +16886,41 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                       fr="Information complémentaire sur la frontière",
                       ang="Further information about boundary",
 #
-    GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
-                    fr="Liste des groupes de mailles définissant la frontière",
-                    ang="Mesh groups which define the boundary" ),
+    GROUP_MA_FRONT = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                          fr="Liste des groupes de mailles définissant la frontière",
+                          ang="Mesh groups which define the boundary" ),
 #
   ) ,
 #
-# 11. Mise à jour de champs sur le nouveau maillage
+# 12. Mise à jour de champs sur le nouveau maillage
 #
   MAJ_CHAM = FACT(statut='f',max='**',
                   fr="Mise à jour de champs sur le nouveau maillage.",
                   ang="Updating of fields over the new mesh.",
 #
-# 11.1. Le nom du champ de grandeur qui contiendra le resultat de la mise a jour
+# 12.1. Le nom du champ de grandeur qui contiendra le resultat de la mise a jour
 #
     CHAM_MAJ = SIMP(statut='o',typ=CO,
                     fr="Nom du champ de grandeur qui contiendra le champ mis à jour",
                     ang="Name of the field for the updated field"),
 #
-# 11.2. Le type du champ qui contiendra le resultat de la mise a jour
+# 12.2. Le type du champ qui contiendra le resultat de la mise a jour
 #
     TYPE_CHAM = SIMP(statut='o',typ='TXM',into=C_TYPE_CHAM_INTO(),
                      fr="Type du champ qui contiendra le champ mis à jour",
                      ang="Type of the field for the updated field" ),
 #
-# 11.3. Le champ a interpoler
+# 12.3. Le champ a interpoler
 #
     regles=(UN_PARMI('CHAM_GD','RESULTAT')),
 #
-# 11.3.1. Sous forme de champ de grandeur
+# 12.3.1. Sous forme de champ de grandeur
 #
     CHAM_GD = SIMP(statut='f',typ=cham_gd_sdaster,
                    fr="Champ de grandeur Code_Aster contenant le champ à mettre à jour",
                    ang="Champ de grandeur with field to be updated" ),
 #
-# 11.3.2. Sous forme de champ dans un resultat
+# 12.3.2. Sous forme de champ dans un resultat
 #
     RESULTAT = SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther),
                     fr="Resultat contenant le champ à mettre à jour",
@@ -16304,13 +16936,13 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
 #
     ),
 #
-# 11.4. Est-ce un champ dérivé
+# 12.4. Est-ce un champ dérivé
 #
     SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),
                        fr="Paramètre de sensibilité.",
                        ang="Sensitivity parameter"),
 #
-# 11.5. Le paramètre temporel pour le champ a interpoler
+# 12.5. Le paramètre temporel pour le champ a interpoler
 #
     b_parametre_temporel = BLOC(condition="(RESULTAT != None)",
                                 fr="Choix éventuel du paramètre temporel pour le champ à interpoler",
@@ -16318,20 +16950,20 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
 #
       regles=(EXCLUS('NUME_ORDRE','INST'),),
 #
-# 11.5.1. Soit le numero d'ordre
+# 12.5.1. Soit le numero d'ordre
 #
       NUME_ORDRE = SIMP(statut='f',typ='I',
                         fr="Numero d ordre du champ à mettre à jour",
                         ang="Rank of the field to be updated" ),
 #
-# 11.5.2. Soit l'instant
-# 11.5.2.1. Sa valeur
+# 12.5.2. Soit l'instant
+# 12.5.2.1. Sa valeur
 #
       INST = SIMP(statut='f',typ='R',
                   fr="Instant associé",
                   ang="Instant" ),
 #
-# 11.5.2.2. La précision du choix de l'instant
+# 12.5.2.2. La précision du choix de l'instant
 #
       b_precision = BLOC(condition="(INST != None)",
                          fr="Choix de la précision du choix de l'instant",
@@ -16350,38 +16982,38 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
     ),
   ),
 #
-# 12. Les options d'analyse de maillage ; par defaut, on ne fait que les nombres
-# 12.1. Nombre de noeuds et éléments
+# 13. Les options d'analyse de maillage ; par defaut, on ne fait que les nombres
+# 13.1. Nombre de noeuds et éléments
 #
   NOMBRE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
                           fr="Nombre de noeuds et éléments du maillage",
                           ang="Number of nodes and éléments in the mesh" ),
 #
-# 12.2. Determination de la qualité des éléments du maillage
+# 13.2. Determination de la qualité des éléments du maillage
 #
   QUALITE        = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
                           fr="Qualité du maillage",
                           ang="Mesh quality" ),
 #
-# 12.3. Connexite du maillage
+# 13.3. Connexite du maillage
 #
   CONNEXITE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
                           fr="Connexité du maillage.",
                           ang="Mesh connexity." ),
 #
-# 12.4. Taille des sous-domaines du maillage
+# 13.4. Taille des sous-domaines du maillage
 #
   TAILLE         = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
                           fr="Tailles des sous-domaines du maillage.",
                           ang="Sizes of mesh sub-domains." ),
 #
-# 12.5. Controle de la non-interpenetration des éléments
+# 13.5. Controle de la non-interpenetration des éléments
 #
   INTERPENETRATION= SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
                           fr="Controle de la non interpénétration des éléments.",
                           ang="Overlapping checking." ),
 #
-# 13. Gestion des éléments autres que ceux compatibles avec HOMARD
+# 14. Gestion des éléments autres que ceux compatibles avec HOMARD
 #       "REFUSER" : ils sont refuses (defaut)
 #       "IGNORER" : ils sont ignorés
 #
@@ -16390,7 +17022,7 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                              ang="Incompatible elements for HOMARD" ),
 #
 ) ;
-#& MODIF COMMANDE  DATE 25/09/2006   AUTEUR MJBHHPE J.L.FLEJOU 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16408,7 +17040,7 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE F1BHHAJ J.ANGLES
+# RESPONSABLE GALENNE E.GALENNE
 from Macro.macr_ascouf_calc_ops import macr_ascouf_calc_ops
 def macr_ascouf_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS,CHARGE,RESU_THER,**args):
   self.type_sdprod(MODELE,modele_sdaster)
@@ -16635,7 +17267,7 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op=macr_ascouf_calc_ops,sd_prod=ma
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16653,7 +17285,7 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op=macr_ascouf_calc_ops,sd_prod=ma
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE F1BHHAJ J.ANGLES
+# RESPONSABLE GALENNE E.GALENNE
 from Macro.macr_ascouf_mail_ops import macr_ascouf_mail_ops
 MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op=macr_ascouf_mail_ops,sd_prod=maillage_sdaster,
             fr="Engendre le maillage d'un coude sain ou comportant une fissure ou une (ou plusieurs) sous-épaisseur(s)",
@@ -16783,7 +17415,7 @@ MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op=macr_ascouf_mail_ops,sd_prod=ma
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 25/09/2006   AUTEUR MJBHHPE J.L.FLEJOU 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16801,7 +17433,7 @@ MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op=macr_ascouf_mail_ops,sd_prod=ma
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE F1BHHAJ J.ANGLES
+# RESPONSABLE GALENNE E.GALENNE
 from Macro.macr_aspic_calc_ops import macr_aspic_calc_ops
 
 def macr_aspic_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS_1,FOND_FISS_2,CHARGE,RESU_THER,**args):
@@ -17040,7 +17672,7 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=macr_aspic_calc_ops,sd_prod=macr_
 
          TITRE           =SIMP(statut='f',typ='TXM'),
 )
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17058,7 +17690,7 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=macr_aspic_calc_ops,sd_prod=macr_
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE F1BHHAJ J.ANGLES
+# RESPONSABLE GALENNE E.GALENNE
 
 from Macro.macr_aspic_mail_ops import macr_aspic_mail_ops
 
@@ -17137,287 +17769,7 @@ MACR_ASPIC_MAIL=MACRO(nom="MACR_ASPIC_MAIL",op= macr_aspic_mail_ops,sd_prod=mail
 
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 25/09/2006   AUTEUR MJBHHPE J.L.FLEJOU 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003  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.        
-# ======================================================================
-
-from Macro.macr_cabri_calc_ops import macr_cabri_calc_ops
-   
-def macr_cabri_calc_prod(self,MODELE_THER,MODELE_MECA,CHAM_MATER,
-                         CHAR_THER,CHAR_MECA,RESU_THER,**args):
-  if MODELE_THER != None:
-   self.type_sdprod(MODELE_THER,modele_sdaster)   
-  if MODELE_MECA != None:
-   self.type_sdprod(MODELE_MECA,modele_sdaster)  
-  if RESU_THER != None:
-   self.type_sdprod(RESU_THER,evol_ther)     
-  if CHAM_MATER != None:
-   self.type_sdprod(CHAM_MATER,cham_mater)     
-  if CHAR_THER != None: 
-    for m in CHAR_THER:
-      self.type_sdprod(m['CHARGE'],char_ther)
-  if CHAR_MECA != None: 
-    for m in CHAR_MECA:
-      self.type_sdprod(m['CHARGE'],char_meca)
-  return evol_noli
-
-
-MACR_CABRI_CALC=MACRO(nom="MACR_CABRI_CALC",
-                      op=macr_cabri_calc_ops,
-                      sd_prod=macr_cabri_calc_prod,
-                      fr="Calcul thermo-mécanique d'une jonction boulonnée de tuyauterie",
-                      reentrant='n',
-                      UIinfo={"groupes":("Outils métier",)},
-                      MAILLAGE   = SIMP(statut='o',typ=maillage_sdaster,),
-                      AFFE_MATERIAU = FACT(statut='o',max='**',
-                        regles=(UN_PARMI('TOUT','GROUP_MA',),),
-                        TOUT     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                        GROUP_MA = SIMP(statut='f',typ='TXM',into=(
-                                                                  "BRIDE",
-                                                                  "GOUJON",
-                                                                  "ROND",
-                                                                  "ECROU",
-                                                                  "JOINT",) ),
-                        MATER    = SIMP(statut='o',typ=mater_sdaster),
-                        TEMP_REF = SIMP(statut='d',typ='R',defaut= 25. ),
-                      ),                      
-                      CHAM_MATER = SIMP(statut = 'f',typ=CO,),
-                      MODELE_THER= SIMP(statut = 'f',typ=CO,),
-                      
-                      DEFI_CHAR_THER = FACT(statut ='d',
-                        TEMP_INIT     = SIMP(statut='d',typ='R',defaut= 25.,),
-                        COEF_H_FLUI   = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster),),
-                        TEMP_EXT_FLUI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster),),
-                        COEF_H_AIR    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster),),
-                        TEMP_EXT_AIR  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster),),
-                        LIST_INST     = SIMP(statut='f',typ=listr8_sdaster),
-                      ),                      
-                      
-                      CHAR_THER  = FACT(statut = 'f',max=4,
-                        CHARGE    = SIMP(statut='o',typ=CO),
-                        TYPE      = SIMP(statut='o',typ='TXM',
-                                 into=("BRIDE_FLUIDE","BRIDE_AIR","ECROU_GOUJON",
-                                       "BRIDE_JOINT"),)
-                                       ),
-
-                      RESU_THER  = SIMP(statut = 'f',typ=CO,),                                       
-
-                                       
-                      MODELE_MECA= SIMP(statut = 'f',typ=CO,),
-
-                      DEFI_CHAR_MECA   = FACT(statut='o',
-                        PRETENS    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster),),
-                        PRES_REP   = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster),),
-                        EFFE_FOND  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster),),
-                      ),                                                             
-
-                      CHAR_MECA  = FACT(statut = 'f',max=11,
-                        CHARGE    = SIMP(statut='o',typ=CO),
-                        TYPE      = SIMP(statut='o',typ='TXM',
-                                 into=("BLOC_BAS_GOUJ","BLOC_BAS_JOINT",
-                                       "BLOC_LAT_ALES","BLOC_LAT_NALES",
-                                       "PLAN_TUBE",
-                                       "PRES_FLU","EFFET_FOND",
-                                       "CONT_JOINT",
-                                       "DEFO_THER",
-                                       "SERR_ECROU_1","SERR_ECROU_2",),)
-                                       ),
-                     
-                      RELATION = SIMP(statut='f',typ='TXM',
-                                       into=('VMIS_ISOT_TRAC','ELAS','ELAS_VMIS_TRAC',),),
-                        
-                      SOLVEUR   = FACT(statut='d',
-                        METHODE  = SIMP(statut='d',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT",) ),
-                        b_mult_front = BLOC(condition = "METHODE == 'MULT_FRONT' ",
-                           fr="Paramètres de la méthode multi frontale",
-                           RENUM           = SIMP(statut='d',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
-                           NPREC           = SIMP(statut='d',typ='I',defaut=8),
-                           STOP_SINGULIER  = SIMP(statut='d',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-                           ),                 
-                      ),                                             
-                      INCREMENT = FACT(statut='f',
-                        regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
-                                EXCLUS('NUME_INST_FIN','INST_FIN'),),
-                        LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
-                        EVOLUTION       =SIMP(statut='f',typ='TXM',defaut="CHRONOLOGIQUE",
-                                 into=("CHRONOLOGIQUE",) ),                                 
-                        NUME_INST_INIT  =SIMP(statut='f',typ='I'),
-                        INST_INIT       =SIMP(statut='f',typ='R'),
-                        NUME_INST_FIN   =SIMP(statut='f',typ='I'),
-                        INST_FIN        =SIMP(statut='f',typ='R'),
-                        PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
-           # DEBUT DE BLOC POUR LA SUBDIVISION DES PAS DE TEMPS
-           SUBD_METHODE    =SIMP( statut='f',typ='TXM',
-              into =("AUCUNE","UNIFORME","EXTRAPOLE"),
-              defaut="AUCUNE",
-              fr="Méthode de subdivision des pas de temps en cas de non-convergence"
-           ),
-           b_subd_unif=BLOC(condition = "SUBD_METHODE == 'UNIFORME'",
-             regles=(AU_MOINS_UN('SUBD_NIVEAU','SUBD_PAS_MINI'),),
-             SUBD_COEF_PAS_1=SIMP(statut='f',typ='R',defaut=1.0,val_min=0.0,
-                fr="Coefficient multiplicateur de la 1ère subdivision"),
-             SUBD_PAS       =SIMP(statut='f',typ='I',defaut=4,val_min=2,
-                fr="Nombre de subdivision d'un pas de temps"),
-             SUBD_NIVEAU=SIMP(statut='f',typ='I',val_min=2,
-                fr="Nombre maximum de niveau de subdivision d'un pas de temps"),
-             SUBD_PAS_MINI=SIMP(statut='f',typ='R',val_min=0.0,
-                fr="Pas de temps en dessous duquel on ne subdivise plus"),
-           ),
-           b_subd_extr=BLOC(condition = "SUBD_METHODE == 'EXTRAPOLE'",
-             regles=(AU_MOINS_UN('SUBD_NIVEAU','SUBD_PAS_MINI'),),
-             SUBD_OPTION    =SIMP(statut='f',typ='TXM',
-                into =("IGNORE_PREMIERES","GARDE_DERNIERES",), 
-                defaut="IGNORE_PREMIERES",
-                fr="Technique d'extrapolation : les 1ere itérations sont ignorées ou les dernières sont gardées"),
-             SUBD_ITER_IGNO =SIMP(statut='c',typ='I',defaut=3,val_min=0,
-                fr="Les n premières itérations sont ignorées pour l'extrapolation"),
-             SUBD_ITER_FIN  =SIMP(statut='c',typ='I',defaut=8,val_min=3,
-                fr="Seules les n dernières itérations sont prises pour l'extrapolation"),
-             SUBD_PAS       =SIMP(statut='c',typ='I',defaut=4,val_min=2,
-                fr="Nombre de subdivision d'un pas de temps en cas divergence"),
-             SUBD_NIVEAU=SIMP(statut='f',typ='I',val_min=2,
-                fr="Nombre maximum de niveau de subdivision d'un pas de temps"),
-             SUBD_PAS_MINI=SIMP(statut='f',typ='R',val_min=0.0,
-                fr="Pas de temps en dessous duquel on ne subdivise plus"),
-             SUBD_ITER_PLUS =SIMP(statut='c',typ='I',defaut=50,val_min=20,
-                fr="% itération autorisée en plus"),
-           ),
-           # FIN DE BLOC POUR LA SUBDIVISION DES PAS DE TEMPS 
-                        OPTI_LIST_INST  =SIMP(statut='f',typ='TXM',into=("INCR_MAXI",),),
-                        NOM_CHAM        =SIMP(statut='f',typ='TXM',),
-                        NOM_CMP         =SIMP(statut='f',typ='TXM',),
-                        VALE            =SIMP(statut='f',typ='R'),
-                      ),
-                      NEWTON          =FACT(statut='d',
-                        REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1 ),
-                        PREDICTION      =SIMP(statut='f',typ='TXM',into=("TANGENTE","ELASTIQUE","EXTRAPOL") ),
-                        MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
-                        PAS_MINI_ELAS   =SIMP(statut='f',typ='R',defaut=0.0E+0),
-                        REAC_ITER       =SIMP(statut='f',typ='I',defaut=0),
-                        EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
-                      ),
-                      RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
-                                into=("IMPLICITE",)),
-                      CONVERGENCE     =FACT(statut='d',
-                        regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA'),),
-                        SIGM_REFE       =SIMP(statut='f',typ='R'),
-                        EPSI_REFE       =SIMP(statut='f',typ='R'),
-                        FLUX_THER_REFE  =SIMP(statut='f',typ='R'),        
-                        RESI_REFE_RELA  =SIMP(statut='f',typ='R'),
-                        RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
-                        RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
-                        ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),
-                        ITER_GLOB_ELAS  =SIMP(statut='f',typ='I',defaut=25),
-                      ),
-                     );
-
-#& MODIF COMMANDE  DATE 07/02/2005   AUTEUR MABBAS M.ABBAS 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003  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.        
-# ======================================================================
-
-from Macro.macr_cabri_mail_ops import macr_cabri_mail_ops
-
-MACR_CABRI_MAIL=MACRO(nom="MACR_CABRI_MAIL",
-                      op=macr_cabri_mail_ops,
-                      sd_prod=maillage_sdaster,
-                      fr="maillage d'une jonction boulonnée de tuyauterie",
-                      reentrant='n',
-                      UIinfo={"groupes":("Outils métier",)},
-                      EXEC_MAILLAGE = FACT(statut='o',
-                        LOGICIEL      = SIMP(statut = 'o',typ='TXM',into=("GIBI2000",),),
-                        UNITE_DATG    = SIMP(statut = 'f',typ='I',defaut=70,),
-                        UNITE_MGIB    = SIMP(statut = 'f',typ='I',defaut=19,),
-                        NIVE_GIBI     = SIMP(statut = 'f',typ='I',defaut=10,
-                                          into = (3,4,5,6,7,8,9,10,11),
-                                            ),
-                                          ),
-                      RAFF_MAILLAGE   = FACT(statut = 'd',
-                        NB_RADIAL    = SIMP(statut = 'f',typ='I',defaut=2,),
-                        NB_CIRCONF   = SIMP(statut = 'f',typ='I',defaut=3,),
-                        NB_VERTICAL  = SIMP(statut = 'f',typ='I',defaut=6,),
-                        NB_ALESAGE   = SIMP(statut = 'f',typ='I',defaut=5,),
-                                          ),
-                      VERI_MAIL     = FACT(statut='d',
-                        VERIF         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),  
-                        APLAT         = SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
-                                          ),                                          
-                      GEOM_BRID     = FACT(statut = 'o',
-                        NORME         = SIMP(statut = 'o',typ='TXM',into=("OUI","NON"),),
-                        b_bride_iso   = BLOC(condition = "NORME == 'OUI'",
-                          TYPE           = SIMP(statut='o',typ='TXM',
-                                                into=('A','AA','B','B1','C','D','D1','E','F',
-                                                      'FF','G','GG','H','H1','I','J','J1',
-                                                      'K','L','L1','M','N','O','P','S','T','W'), 
-                                               ),
-                                            ),
-                        b_bride_niso  = BLOC(condition = "NORME == 'NON'",
-                          TUBU_D_EXT     = SIMP(statut='o',typ='R',),
-                          TUBU_H         = SIMP(statut='o',typ='R',),
-                          BRID_D_EXT     = SIMP(statut='o',typ='R',),
-                          BRID_D_INT     = SIMP(statut='o',typ='R',),
-                          BRID_H         = SIMP(statut='o',typ='R',),
-                          BRID_D_CONGE   = SIMP(statut='o',typ='R',),
-                          BRID_R_CONGE   = SIMP(statut='o',typ='R',),
-                          BRID_D_EPAUL   = SIMP(statut='o',typ='R',),
-                          BRID_H_EPAUL   = SIMP(statut='o',typ='R',),
-                          BRID_D_ALESAG  = SIMP(statut='o',typ='R',),
-                          BRID_P_ALESAG  = SIMP(statut='o',typ='R',),
-                          BRID_H_ALESAG  = SIMP(statut='o',typ='R',),
-                          GOUJ_N_GOUJON  = SIMP(statut='o',typ='I',),
-                          GOUJ_D_GOUJON  = SIMP(statut='o',typ='R',),
-                          GOUJ_E_FILET   = SIMP(statut='o',typ='R',),
-                          GOUJ_D_RONDEL  = SIMP(statut='o',typ='R',),
-                          GOUJ_E_RONDEL  = SIMP(statut='o',typ='R',),
-                          GOUJ_D_ECROU   = SIMP(statut='o',typ='R',),
-                          GOUJ_E_ECROU   = SIMP(statut='o',typ='R',),
-                          ETAN_E_JOINT   = SIMP(statut='o',typ='R',),
-                                            ),
-                                         ),
-                      IMPRESSION    = FACT(statut='d',
-                        UNITE          = SIMP(statut='f',typ='I'),
-                        FORMAT         = SIMP(statut='f',typ='TXM',defaut="ASTER",    
-                                              into=("ASTER","CASTEM","IDEAS"),
-                                             ),
-                        b_impr_castem = BLOC(condition = "FORMAT == 'CASTEM'",
-                          NIVE_GIBI      = SIMP(statut='f',typ='I',defaut=10,into=(3,10),),
-                                            ),
-                        b_impr_ideas  = BLOC(condition = "FORMAT == 'IDEAS'",
-                          VERSION        = SIMP(statut='f',typ='I',defaut=5,into=(4,5),),
-                                            ),
-                                          ),
-                     );
-
-#& MODIF COMMANDE  DATE 03/01/2006   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17435,7 +17787,7 @@ MACR_CABRI_MAIL=MACRO(nom="MACR_CABRI_MAIL",
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# RESPONSABLE JMBHH01 J.M.PROIX
+# RESPONSABLE FLEJOU J.L.FLEJOU
 
 from Macro.macr_cara_poutre_ops import macr_cara_poutre_ops
 
@@ -17462,8 +17814,11 @@ MACR_CARA_POUTRE=MACRO(nom="MACR_CARA_POUTRE",op=macr_cara_poutre_ops,sd_prod=ta
          
                b_gma_bord = BLOC( condition = "GROUP_MA_BORD != None",
                             fr=" calcul des carac. mecaniques",
+                            regles=(UN_PARMI('NOEUD','GROUP_NO')),
 
-                    NOEUD           =SIMP(statut='f',typ=no,max='**',
+                    NOEUD           =SIMP(statut='f',typ=no,  max='**',
+                    fr="Simplement pour empecher des pivots nuls le cas echeant. Fournir un noeud quelconque"),
+                    GROUP_NO        =SIMP(statut='f',typ=grno,max='**',
                     fr="Simplement pour empecher des pivots nuls le cas echeant. Fournir un noeud quelconque"),
                     GROUP_MA_INTE   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
                     fr="groupes de mailles linéiques bordant des trous dans la section"),
@@ -17478,7 +17833,7 @@ MACR_CARA_POUTRE=MACRO(nom="MACR_CARA_POUTRE",op=macr_cara_poutre_ops,sd_prod=ta
                             fr="type de conditions aux limites sur le plancher supérieur" ),
                               ), 
                     )
-#& MODIF COMMANDE  DATE 13/12/2006   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17496,7 +17851,7 @@ MACR_CARA_POUTRE=MACRO(nom="MACR_CARA_POUTRE",op=macr_cara_poutre_ops,sd_prod=ta
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 
 from Macro.macr_ecla_pg_ops import macr_ecla_pg_ops
 
@@ -17539,7 +17894,7 @@ MACR_ECLA_PG=MACRO(nom="MACR_ECLA_PG",op=macr_ecla_pg_ops,sd_prod=macr_ecla_pg_p
              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
             )
-#& MODIF COMMANDE  DATE 12/03/2007   AUTEUR DEVESA G.DEVESA 
+#& MODIF COMMANDE  DATE 06/05/2008   AUTEUR CORUS M.CORUS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17557,6 +17912,8 @@ MACR_ECLA_PG=MACRO(nom="MACR_ECLA_PG",op=macr_ecla_pg_ops,sd_prod=macr_ecla_pg_p
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE CORUS M.CORUS
+
 MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op=  81,sd_prod=macr_elem_dyna,
                     fr="Définition d'un macro élément pour analyse modale ou harmonique par sous structuration dynamique",
                     reentrant='n',
@@ -17564,12 +17921,11 @@ MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op=  81,sd_prod=macr_elem_dyna,
          regles=(EXCLUS('MATR_AMOR','AMOR_REDUIT' ),
                  PRESENT_ABSENT('MATR_IMPE','MATR_RIGI','MATR_MASS'),),
          BASE_MODALE     =SIMP(statut='o',typ=base_modale ),
-         MATR_RIGI       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         MATR_RIGI       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_depl_c),),
          MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r ),
          MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r ),
-         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),         
-         OPTION          =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","RITZ",
-                          "DIAG_MASS") ),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'), 
+         SANS_GROUP_NO   =SIMP(statut='f',typ=grno ),
          MATR_IMPE       =SIMP(statut='f',typ=matr_asse_gene_c ),
          b_matr_impe     =BLOC(condition = "MATR_IMPE != None",
              FREQ_EXTR       =SIMP(statut='o',typ='R' ),
@@ -17580,7 +17936,7 @@ MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op=  81,sd_prod=macr_elem_dyna,
            VECT_ASSE_GENE  =SIMP(statut='o',typ=vect_asse_gene ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 31/10/2006   AUTEUR A3BHHAE H.ANDRIAMBOLOLONA 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17598,6 +17954,7 @@ MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op=  81,sd_prod=macr_elem_dyna,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE PELLET J.PELLET
 MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,reentrant='f',
             UIinfo={"groupes":("Matrices/vecteurs",)},
                     fr="Définition d'un macro-élément pour l'analyse statique par sous-structuration",
@@ -17632,7 +17989,7 @@ MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,reentrant=
          ),
 
 )  ;
-#& MODIF COMMANDE  DATE 27/11/2006   AUTEUR GNICOLAS G.NICOLAS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18011,7 +18368,7 @@ MACR_FIABILITE = MACRO ( nom="MACR_FIABILITE",op=macr_fiabilite_ops,
    ),
 #
 );
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18081,7 +18438,7 @@ MACR_FIAB_IMPR=MACRO(nom="MACR_FIAB_IMPR",op=macr_fiab_impr_ops,
          ),
 #
 );
-#& MODIF COMMANDE  DATE 15/05/2007   AUTEUR GNICOLAS G.NICOLAS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18114,8 +18471,8 @@ MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=macr_adap_mail_ops,
 #
 # 2. Version de HOMARD
 #
-  VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V8_7",
-                        into=("V8_7", "V8_N", "V8_N_PERSO"),
+  VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V8_11",
+                        into=("V8_11", "V8_N", "V8_N_PERSO"),
                         fr="Version de HOMARD",
                         ang="HOMARD release"),
 #
@@ -18187,24 +18544,25 @@ MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=macr_adap_mail_ops,
                              fr="Acceptation d'éléments incompatibles avec HOMARD",
                              ang="Incompatible elements for HOMARD" ),
 )  ;
-#& MODIF COMMANDE  DATE 22/05/2007   AUTEUR GALENNE E.GALENN
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            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.        
+# 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.
 # ======================================================================
+# RESPONSABLE DURAND C.DURAND
 
 from Macro.macr_lign_coupe_ops import macr_lign_coupe_ops
 
@@ -18214,26 +18572,26 @@ MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=table
             fr="Extraction des valeurs d'un résultat dans une ou plusieurs tables sur des lignes de coupe définies"
              +" par deux points et un intervalle",
             regles=(UN_PARMI("RESULTAT","CHAM_GD"),),
-                   
+
          RESULTAT        =SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther) ),
          CHAM_GD         =SIMP(statut='f',typ=(cham_gd_sdaster)),
 
          b_extrac        =BLOC(condition = "RESULTAT != None",fr="extraction des résultats",
-                                 regles=(EXCLUS('NUME_ORDRE','LIST_ORDRE','INST','LIST_INST',), ),           
-             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),  
+                                 regles=(EXCLUS('NUME_ORDRE','LIST_ORDRE','INST','LIST_INST',), ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
              LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
-             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),  
+             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
              LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
-             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),  
+             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),
              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
            ),
 
 # extraction des résultats
          b_meca        =BLOC(condition = "AsType(RESULTAT) in (evol_elas,evol_noli)",fr="résultat mécanique",
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut='SIGM_NOEU_DEPL' ),  
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut='SIGM_NOEU_DEPL' ),
          ),
          b_ther        =BLOC(condition = "AsType(RESULTAT) in (evol_ther,)",fr="résultat thermique",
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut='TEMP' ),  
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut='TEMP' ),
          ),
          b_cham       =BLOC(condition = "CHAM_GD!=None",
            NOM_CHAM        =SIMP(statut='f',typ='TXM',),),
@@ -18245,11 +18603,11 @@ MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=table
                              regles=(EXCLUS('GROUP_MA_1','MAILLE_1'),),
            GROUP_MA_1        =SIMP(statut='f',typ=grma),
            MAILLE_1          =SIMP(statut='f',typ=ma,max='**'),),
-         
+
          LIGN_COUPE     =FACT(statut='o',max='**',
             regles=(EXCLUS("NOM_CMP","INVARIANT","ELEM_PRINCIPAUX","RESULTANTE"),
                     PRESENT_PRESENT("TRAC_DIR","DIRECTION"),
-                    EXCLUS("TRAC_DIR","TRAC_NOR"), 
+                    EXCLUS("TRAC_DIR","TRAC_NOR"),
                     PRESENT_PRESENT("TRAC_DIR","NOM_CMP"),
                     PRESENT_PRESENT("TRAC_NOR","NOM_CMP"),),
 
@@ -18266,7 +18624,7 @@ MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=table
            RESULTANTE      =SIMP(statut='f',typ='TXM',max='**'),
            TRAC_NOR        =SIMP(statut='f',typ='TXM',into=("OUI",)),
            TRAC_DIR        =SIMP(statut='f',typ='TXM',into=("OUI",)),
-           DIRECTION       =SIMP(statut='f',typ='R',max='**'),  
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
 
 
            b_local        =BLOC(condition = "REPERE=='LOCAL' ",
@@ -18275,34 +18633,42 @@ MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=table
            b_utili        =BLOC(condition = "REPERE=='UTILISATEUR'",
              ANGL_NAUT       =SIMP(statut='o',typ='R',min=3,max=3),),
 
-           b_grno          =BLOC(condition = "TYPE=='GROUP_NO'",    
+           b_grno          =BLOC(condition = "TYPE=='GROUP_NO'",
              GROUP_NO        =SIMP(statut='o',typ=grno, max=1),),
 
-           b_grma          =BLOC(condition = "TYPE=='GROUP_MA'",    
+           b_grma          =BLOC(condition = "TYPE=='GROUP_MA'",
              GROUP_MA        =SIMP(statut='o',typ=grma, max=1),
              MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster),),
 
-           b_segment       =BLOC(condition = "TYPE=='SEGMENT'",    
+           b_segment       =BLOC(condition = "TYPE=='SEGMENT'",
              NB_POINTS       =SIMP(statut='o',typ='I',max=1),
-             COOR_ORIG       =SIMP(statut='o',typ='R',min=2,max=3),  
+             COOR_ORIG       =SIMP(statut='o',typ='R',min=2,max=3),
              COOR_EXTR       =SIMP(statut='o',typ='R',min=2,max=3),),
 
-           b_arc           =BLOC(condition = "TYPE=='ARC'",    
+           b_arc           =BLOC(condition = "TYPE=='ARC'",
              NB_POINTS       =SIMP(statut='o',typ='I',max=1),
-             COOR_ORIG       =SIMP(statut='o',typ='R',min=2,max=3),  
+             COOR_ORIG       =SIMP(statut='o',typ='R',min=2,max=3),
              CENTRE          =SIMP(statut='o',typ='R',min=2,max=3),
              ANGLE           =SIMP(statut='o',typ='R',max=1),
              DNOR            =SIMP(statut='f',typ='R',min=2,max=3),),
 
            b_cylind       =BLOC(condition = ("REPERE=='CYLINDRIQUE' and TYPE!='ARC'"),
-             ORIGINE         =SIMP(statut='f',typ='R',min=2,max=3),  
+             ORIGINE         =SIMP(statut='f',typ='R',min=2,max=3),
              AXE_Z           =SIMP(statut='f',typ='R',min=3,max=3),),
-           
+
+           DISTANCE_MAX    =SIMP(statut='f',typ='R',defaut=0.,
+                fr="Si la distance entre un noeud de la ligne de coupe et le maillage coupé "
+                +"est > DISTANCE_MAX, ce noeud sera ignoré."),
+
          ),
 )  ;
 
 
-#& MODIF COMMANDE  DATE 04/04/2006   AUTEUR CIBHHLV L.VIVAN 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#MACRO_BASCULE_SCHEMA = MACRO(nom="MACRO_BASCULE_SCHEMA", op=macro_bascule_schema_ops, sd_prod=evol_noli,reentrant='f',
+
+
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18320,7 +18686,7 @@ MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=table
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE G8BHHXD X.DESROCHES
+# RESPONSABLE DESROCHES X.DESROCHES
 
 from Macro.macro_elas_mult_ops import macro_elas_mult_ops
 
@@ -18387,7 +18753,7 @@ MACRO_ELAS_MULT=MACRO(nom="MACRO_ELAS_MULT",op=macro_elas_mult_ops,sd_prod=macro
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 22/12/2006   AUTEUR BODEL C.BODEL 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18405,7 +18771,7 @@ MACRO_ELAS_MULT=MACRO(nom="MACRO_ELAS_MULT",op=macro_elas_mult_ops,sd_prod=macro
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-
+# RESPONSABLE BODEL C.BODEL
 
 from Macro.macro_expans_ops import macro_expans_ops
 
@@ -18457,7 +18823,7 @@ MACRO_EXPANS=MACRO(nom="MACRO_EXPANS",
                                         ),
                                              ),
                    )
-#& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18475,6 +18841,7 @@ MACRO_EXPANS=MACRO(nom="MACRO_EXPANS",
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
 
 from Macro.macro_matr_ajou_ops import macro_matr_ajou_ops
 
@@ -18563,7 +18930,7 @@ MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=macro_matr_ajou_ops,sd_prod=macro
          NOEUD_DOUBLE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
          AVEC_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
 )
-#& MODIF COMMANDE  DATE 12/06/2006   AUTEUR CIBHHLV L.VIVAN 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18581,6 +18948,7 @@ MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=macro_matr_ajou_ops,sd_prod=macro
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE PELLET J.PELLET
 
 from Macro.macro_matr_asse_ops import macro_matr_asse_ops
 
@@ -18597,7 +18965,7 @@ def macro_matr_asse_prod(self,NUME_DDL,MATR_ASSE,**args):
     if opti in ( "RIGI_MECA","RIGI_FLUI_STRU","RIGI_MECA_LAGR" ,
        "MASS_MECA" , "MASS_FLUI_STRU" ,"RIGI_GEOM" ,"RIGI_ROTA",
        "AMOR_MECA","IMPE_MECA","MASS_ID_MDEP_R","MASS_ID_MDNS_R",
-       "ONDE_FLUI","MASS_MECA_DIAG" ) : t=matr_asse_depl_r
+       "ONDE_FLUI","MASS_MECA_DIAG","MECA_GYRO" ) : t=matr_asse_depl_r
 
     if opti in ( "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",) : t=matr_asse_pres_c
 
@@ -18621,9 +18989,19 @@ MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,
          CHAR_CINE       =SIMP(statut='f',typ=(char_cine_meca,char_cine_ther,char_cine_acou) ),
          NUME_DDL        =SIMP(statut='o',typ=(nume_ddl_sdaster,CO)),
          SOLVEUR         =FACT(statut='d',
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",
-                                 into=("LDLT","MULT_FRONT","GCPC","MUMPS")),
-           RENUM           =SIMP(statut='f',typ='TXM',into=("SANS","RCMK","MD","MDA","METIS")),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS") ),
+         b_mult_front    =BLOC(condition="METHODE=='MULT_FRONT'",fr="Paramètres associés à la méthode multifrontale",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("MD","MDA","METIS"),defaut="METIS" ),
+         ),
+         b_ldlt          =BLOC(condition="METHODE=='LDLT'",fr="Paramètres associés à la méthode LDLT",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
+         ),
+         b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+           RENUM         =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+         ),
+         b_gcpc          =BLOC(condition="METHODE=='GCPC'",fr="Paramètres associés à la méthode gradient conjugué",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
+         ),
          ),
 
          MATR_ASSE       =FACT(statut='o',max='**',
@@ -18632,7 +19010,7 @@ MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,
                                    into=("RIGI_MECA","MASS_MECA","MASS_MECA_DIAG",
                                          "AMOR_MECA","RIGI_MECA_HYST","IMPE_MECA",
                                          "ONDE_FLUI","RIGI_FLUI_STRU","MASS_FLUI_STRU",
-                                         "RIGI_ROTA","RIGI_GEOM","RIGI_MECA_LAGR",
+                                         "RIGI_ROTA","RIGI_GEOM","RIGI_MECA_LAGR","MECA_GYRO",
                                          "RIGI_THER","MASS_THER",
                                          "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",
                                          "MASS_ID_MTEM_R","MASS_ID_MTNS_R","MASS_ID_MDEP_R","MASS_ID_MDNS_R",)
@@ -18661,7 +19039,7 @@ MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 29/05/2007   AUTEUR VOLDOIRE F.VOLDOIRE 
+#& MODIF COMMANDE  DATE 02/06/2008   AUTEUR GREFFET N.GREFFET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18679,6 +19057,7 @@ MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
 
 from Macro.macro_miss_3d_ops import macro_miss_3d_ops
 
@@ -18692,7 +19071,7 @@ MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",op=macro_miss_3d_ops,
          ),
          PROJET          =SIMP(statut='o',typ='TXM'),  
          REPERTOIRE      =SIMP(statut='f',typ='TXM'),
-         VERSION         =SIMP(statut='f',typ='TXM',into=("V1_3","V1_4",),defaut="V1_3"),
+         VERSION         =SIMP(statut='f',typ='TXM',into=("V1_3","V1_4",),defaut="V1_4"),
          UNITE_IMPR_ASTER=SIMP(statut='f',typ='I',defaut=25),  
          UNITE_OPTI_MISS =SIMP(statut='f',typ='I',defaut=26),  
          UNITE_MODELE_SOL=SIMP(statut='f',typ='I',defaut=27),  
@@ -18725,9 +19104,10 @@ MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",op=macro_miss_3d_ops,
            CONTR_LISTE     =SIMP(statut='f',typ='R',max='**'),
            LFREQ_NB        =SIMP(statut='f',typ='I'),
            LFREQ_LISTE     =SIMP(statut='f',typ='R',max='**'),
+           DIRE_ONDE       =SIMP(statut='f',typ='R',max='**'),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 27/03/2007   AUTEUR BOYERE E.BOYERE 
+#& MODIF COMMANDE  DATE 05/05/2008   AUTEUR NISTOR I.NISTOR 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18745,6 +19125,7 @@ MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",op=macro_miss_3d_ops,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
 
 from Macro.macro_mode_meca_ops import macro_mode_meca_ops
 
@@ -18800,7 +19181,6 @@ MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op=macro_mode_meca_ops,sd_prod=mode_
            STURM           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          ),
          NORM_MODE       =FACT(statut='o',max='**',
-           MASS_INER       =SIMP(statut='o',typ=table_sdaster),
            NORME           =SIMP(statut='f',typ='TXM',defaut="TRAN_ROTA",    
                                  into=("MASS_GENE","RIGI_GENE","EUCL",           
                                        "EUCL_TRAN","TRAN","TRAN_ROTA") ),
@@ -18818,7 +19198,7 @@ MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op=macro_mode_meca_ops,sd_prod=mode_
                                  into=("MASS_EFFE_UN","MASS_GENE",) ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18836,6 +19216,7 @@ MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op=macro_mode_meca_ops,sd_prod=mode_
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
 
 from Macro.macro_proj_base_ops import macro_proj_base_ops
 
@@ -18871,7 +19252,7 @@ MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=macro_proj_base_ops,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 02/04/2007   AUTEUR BODEL C.BODEL 
+#& MODIF COMMANDE  DATE 03/06/2008   AUTEUR BODEL C.BODEL 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18889,20 +19270,38 @@ MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=macro_proj_base_ops,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE BODEL C.BODEL
 
 from Macro.macro_visu_meidee_ops import macro_visu_meidee_ops
 
-def macro_visu_meidee_prod(self,RESULTATS,**args):
-    if RESULTATS != None:
-        for res in RESULTATS:
-            if isinstance(res['TABLE'],CO) :
-                if res['TYPE_TABLE'] == 'TABLE':
-                    self.type_sdprod(res['TABLE'],table_sdaster)
-                else:
-                    self.type_sdprod(res['TABLE'],table_fonction)
-
+def macro_visu_meidee_prod(self,RESU_FLUDELA,RESU_TURBULENT,RESU_MODIFSTRU,**args):
+
+    if RESU_FLUDELA != None:
+        for res in RESU_FLUDELA:
+            self.type_sdprod(res['TABLE'],table_sdaster)
+    if RESU_TURBULENT != None:
+        for res in RESU_TURBULENT:
+            self.type_sdprod(res['TABLE'],table_fonction)
+
+    MTYPES = {
+        'MODELE'    : modele_sdaster,
+        'MODE_MECA' : mode_meca,
+        'NUME_DDL'  : nume_ddl_sdaster,
+        'MAILLAGE'  : maillage_sdaster,
+        'MASS_MECA' : matr_asse_depl_r,
+        'RIGI_MECA' : matr_asse_depl_r,
+        'AMOR_MECA' : matr_asse_depl_r,
+        'MACR_ELEM' : macr_elem_stat,
+        'PROJ_MESU' : mode_gene,
+              }
+    if RESU_MODIFSTRU != None:
+        for res in RESU_MODIFSTRU:
+            for mc, typ in MTYPES.items():
+                if res[mc]:
+                    self.type_sdprod(res[mc], typ)
     return None
 
+
 MACRO_VISU_MEIDEE=MACRO(nom       = 'MACRO_VISU_MEIDEE',
                         op        = macro_visu_meidee_ops,
                         sd_prod   = macro_visu_meidee_prod,
@@ -18911,20 +19310,37 @@ MACRO_VISU_MEIDEE=MACRO(nom       = 'MACRO_VISU_MEIDEE',
                         fr        = "Outil de post-traitement interactif pour Meidee ",
                         UNITE_FIMEN = SIMP( statut='f',typ='I',max='**' ),
                         INTERACTIF  = SIMP( statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI' ),
-                        RESULTATS   = FACT( statut='f',max='**',
-                                            TABLE  = SIMP(statut='o',typ=(table_sdaster,table_fonction,CO)),
-                                            TYPE_TABLE = SIMP(statut='f',typ='TXM',defaut='TABLE', into=('TABLE','TABLE_FONCTION')),
-                                          ),
-                        UNITE_RESU = SIMP( statut='f',typ='I',defaut=6),
+                        RESU_FLUDELA     = FACT( statut='f',max='**',
+                                                 TABLE = SIMP(statut='f', typ=CO),
+                                                ),
+                        RESU_TURBULENT   = FACT( statut='f',max='**',
+                                                 TABLE = SIMP(statut='f', typ=CO),
+                                                ),
+                        RESU_MODIFSTRU = FACT( statut='f', max=1,
+                                               MODELE=SIMP(statut='f',typ=CO,defaut=None),
+                                               MODE_MECA=SIMP(statut='f',typ=CO,defaut=None),
+                                               MAILLAGE=SIMP(statut='f',typ=CO,defaut=None),
+                                               NUME_DDL=SIMP(statut='f',typ=CO,defaut=None),
+                                               MASS_MECA=SIMP(statut='f',typ=CO,defaut=None),
+                                               RIGI_MECA=SIMP(statut='f',typ=CO,defaut=None),
+                                               AMOR_MECA=SIMP(statut='f',typ=CO,defaut=None),
+                                               MACR_ELEM=SIMP(statut='f',typ=CO,defaut=None),
+                                               PROJ_MESU=SIMP(statut='f',typ=CO,defaut=None),
+                                             ),
+                        UNITE_RESU = SIMP( statut='f',typ='I'),
 
                         b_inter    = BLOC( condition="INTERACTIF=='NON'",
 
                              EXPANSION        = FACT( statut='f',max='**',
-                                                      CALCUL     = SIMP(statut='o',typ=mode_meca),
-                                                      MESURE     = SIMP(statut='o',typ=mode_meca),
-                                                      RESOLUTION = SIMP(statut='f',typ='TXM',defaut='SVD',into=('SVD','LU')),
-                                                      b_reso     = BLOC(condition = "RESOLUTION=='SVD'",
-                                                                        EPS = SIMP(statut='f',typ='R', defaut = 0.)
+                                                      CALCUL           = SIMP(statut='o',typ=mode_meca),
+                                                      NUME_MODE_CALCUL = SIMP(statut='f',typ='I',validators=NoRepeat(),
+                                                                              max='**',defaut=0),
+                                                      MESURE           = SIMP(statut='o',typ=mode_meca),
+                                                      NUME_MODE_MESURE = SIMP(statut='f',typ='I',validators=NoRepeat(),
+                                                                              max='**',defaut=0),
+                                                      RESOLUTION       = SIMP(statut='f',typ='TXM',defaut='SVD',into=('SVD','LU')),
+                                                      b_reso           = BLOC(condition = "RESOLUTION=='SVD'",
+                                                                              EPS = SIMP(statut='f',typ='R', defaut = 0.)
                                                                        )
                                                     ),
                              FLUIDE_ELASTIQUE = FACT( statut='f', max='**',
@@ -18939,20 +19355,44 @@ MACRO_VISU_MEIDEE=MACRO(nom       = 'MACRO_VISU_MEIDEE',
                              TURBULENT        = FACT( statut='f',max='**',   
                                                       ALPHA   = SIMP(statut='f',typ='R', defaut = 0.),
                                                       EPS     = SIMP(statut='f',typ='R', defaut = 0.),
-                                                      IDENTIFICATION_MOMENTS = SIMP(statut='f',typ='TXM',defaut='NON',
-                                                                                    into=('OUI','NON')),
-                                                      OBSERVABILITE  = SIMP(statut='o',typ=mode_meca),
-                                                      COMMANDABILITE = SIMP(statut='o',typ=mode_meca),
+                                                      OBSERVABILITE  = SIMP(statut='o',typ=(mode_meca, base_modale)),
+                                                      COMMANDABILITE = SIMP(statut='o',typ=(mode_meca, base_modale)),
                                                       INTE_SPEC      = SIMP(statut='o',typ=table_sdaster),
                                                       RESU_EXPANSION = SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON')),
                                                       b_base         = BLOC(condition = "RESU_EXPANSION=='NON'",
                                                                             BASE = SIMP(statut='o',typ=mode_meca),
                                                                            ),
-                                                     )
-                                         )
-                        )
+                                                     ),
+                             MODIFSTRUCT = FACT( statut='f', max=1,
+                                                 MESURE = SIMP(statut='o', typ=mode_meca),
+                                                 MODELE_SUP = SIMP(statut='o', typ=modele_sdaster),
+                                                 MATR_RIGI = SIMP(statut='o', typ=matr_asse_depl_r),
+                                                 RESOLUTION = SIMP(statut='o', typ='TXM',
+                                                               into=('ES', 'LMME')),
+                                                 b_resol = BLOC( condition = "RESOLUTION=='LMME'",
+                                                                 MATR_MASS = SIMP(statut='o', typ=matr_asse_depl_r),
+                                                                ),
+                                                 NUME_MODE_MESU   = SIMP(statut='o', typ='I',max='**'),
+                                                 NUME_MODE_CALCUL = SIMP(statut='o', typ='I',max='**'),
+                                                 MAILLE_MODIF = SIMP(statut='o', typ=maillage_sdaster),
+                                                 MODELE_MODIF = SIMP(statut='o', typ=modele_sdaster),
+                                               ),
+
+                            # Si on realise une modification structurale, on donne les DDL capteurs et interface
+                            b_inter    = BLOC( condition="MODIFSTRUCT!=None",
+                                GROUP_NO_CAPTEURS  = FACT( statut='f', max='**',
+                                                           GROUP_NO = SIMP(statut='f',typ='TXM', max='**'),
+                                                           NOM_CMP  = SIMP(statut='f',typ='TXM', max='**'),
+                                                         ),
+                                GROUP_NO_EXTERIEUR = FACT( statut='f', max='**',
+                                                           GROUP_NO = SIMP(statut='f',typ='TXM', max='**'),
+                                                           NOM_CMP  = SIMP(statut='f',typ='TXM', max='**'),
+                                                         ),
+                                              ),
+                                          ),
+                        );
 
-#& MODIF COMMANDE  DATE 15/05/2007   AUTEUR ASSIRE A.ASSIRE 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18970,7 +19410,8 @@ MACRO_VISU_MEIDEE=MACRO(nom       = 'MACRO_VISU_MEIDEE',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-   
+# RESPONSABLE ASSIRE A.ASSIRE
+
 from Macro.macr_recal_ops import macr_recal_ops
 
 def macr_recal_prod(self,**args ):
@@ -19022,7 +19463,7 @@ MACR_RECAL = MACRO(nom="MACR_RECAL",op=macr_recal_ops,
 
          INFO            =SIMP(statut='f',typ='I',defaut=2,into=( 1, 2 ) ),
 );
-#& MODIF COMMANDE  DATE 09/01/2007   AUTEUR ABBAS M.ABBAS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19040,6 +19481,7 @@ MACR_RECAL = MACRO(nom="MACR_RECAL",op=macr_recal_ops,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE VOLDOIRE F.VOLDOIRE
 
 from Macro.macr_spectre_ops import macr_spectre_ops
 
@@ -19092,7 +19534,7 @@ MACR_SPECTRE=MACRO(nom="MACR_SPECTRE",op=macr_spectre_ops,sd_prod=table_sdaster,
                    DEPL_Z        =SIMP(statut='o',typ=fonction_sdaster),),),
          ),
 )
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19110,6 +19552,7 @@ MACR_SPECTRE=MACRO(nom="MACR_SPECTRE",op=macr_spectre_ops,sd_prod=table_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 MAJ_CATA=PROC(nom="MAJ_CATA",op=20,
             UIinfo={"groupes":("Gestion du travail",)},
               fr="Compilation des catalogues de commandes et d'éléments",
@@ -19117,7 +19560,7 @@ MAJ_CATA=PROC(nom="MAJ_CATA",op=20,
          ELEMENT         =FACT(statut='f',),
 
 )  ;
-#& MODIF COMMANDE  DATE 04/04/2007   AUTEUR ABBAS M.ABBAS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19135,7 +19578,7 @@ MAJ_CATA=PROC(nom="MAJ_CATA",op=20,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE PELLET J.PELLET
 MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
                    fr="Résoudre un problème de mécanique statique linéaire",reentrant='f',
             UIinfo={"groupes":("Résolution",)},
@@ -19166,7 +19609,7 @@ MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
                                ang="List of sensitivity parameters"),
 
          SOLVEUR         =FACT(statut='d',
-         METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","FETI","MUMPS") ),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","FETI","MUMPS","PETSC") ),
 
            b_feti          =BLOC(condition = "METHODE == 'FETI' ",fr="Paramètres de la méthode FETI 1",
              PARTITION       =SIMP(statut='o',typ=sd_feti_sdaster),
@@ -19211,71 +19654,29 @@ MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
 
            b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
-             SCALING         =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
              RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
-             RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.E-6,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="CENTRALISE",
+                                   into=("CENTRALISE","DISTRIBUE_MC","DISTRIBUE_MD","DISTRIBUE_SD")),
+             PARTITION       =SIMP(statut='f',typ=sd_feti_sdaster),
+             CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,min=0,max=100),
+             CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,min=0),
              ),
+
+           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+             VARIANTE        =SIMP(statut='f',typ='TXM',into=("GMRES","BCGS","CR","CG","BICG","CHEBYCHEV",),defaut="GMRES" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("ILU","SOR","BJACOBI"),defaut="ILU" ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-8),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
+           ),
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2001  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.      
-# ======================================================================
-# RESPONSABLE GNICOLAS G.NICOLAS
-from Macro.Sensibilite import memo_nom_sensi_ops
-
-MEMO_NOM_SENSI=MACRO(nom="MEMO_NOM_SENSI",op=memo_nom_sensi_ops,
-            UIinfo={"groupes":("Fonction",)},
-                    fr="Mémorisation des noms des concepts dérivés.",
-                    ang="Memorisation of the names of the sensitive concepts.",
-
-         NOM=FACT(statut='o',max='**',
-             regles=(PRESENT_PRESENT('MOT_CLE','VALEUR','MOT_FACT' ),),
-
-             NOM_SD=SIMP(statut='o',typ='TXM',
-                         fr="Nom de la structure de base",
-                         ang="Name of the basic structure"),
-
-             PARA_SENSI=SIMP(statut='o',typ=(para_sensi,theta_geom),
-                         fr="Nom du paramètre sensible",
-                         ang="Name of the sensitive parameter"),
-
-             NOM_COMPOSE=SIMP(statut='f',typ='TXM',defaut=" ",
-                         fr="Nom de la structure composée",
-                         ang="Name of the built structure"),
-
-             MOT_FACT=SIMP(statut='f',typ='TXM',max='**',
-                         fr="Liste des mots clés facteurs concernés par la dérivation",
-                         ang="Factor keyword list involved in derivation"),
-
-             MOT_CLE=SIMP(statut='f',typ='TXM',max='**',
-                         fr="Liste des mots clés concernés par la dérivation",
-                         ang="Keyword list involved in derivation"),
-
-             VALEUR=SIMP(statut='f',typ='TXM',max='**',
-                         fr="Liste des objets concernés par la dérivation",
-                         ang="Object list involved in derivation"),
-
-         ),
-)
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19293,6 +19694,7 @@ MEMO_NOM_SENSI=MACRO(nom="MEMO_NOM_SENSI",op=memo_nom_sensi_ops,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE BODEL C.BODEL
 MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op=  80,sd_prod=mode_cycl,
                     fr="Calcul des modes propres d'une structure à répétitivité cyclique à partir"
                         +" d'une base de modes propres réels",
@@ -19312,6 +19714,7 @@ MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op=  80,sd_prod=mode_cycl,
            DIST_REFE       =SIMP(statut='f',typ='R' ),
          ),
          CALCUL          =FACT(statut='o',
+           regles=(UN_PARMI('TOUT_DIAM','NB_DIAM'),),
            TOUT_DIAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            NB_DIAM         =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
            OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE"
@@ -19330,7 +19733,7 @@ MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op=  80,sd_prod=mode_cycl,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 10/05/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 05/05/2008   AUTEUR NISTOR I.NISTOR 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19348,6 +19751,8 @@ MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op=  80,sd_prod=mode_cycl,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+
 def mode_iter_inv_prod(MATR_A,MATR_C,TYPE_RESU,**args ):
   if TYPE_RESU == "MODE_FLAMB" : return mode_flamb
   if AsType(MATR_C) == matr_asse_depl_r : return mode_meca_c
@@ -19425,7 +19830,7 @@ MODE_ITER_INV=OPER(nom="MODE_ITER_INV",op=  44,sd_prod=mode_iter_inv_prod
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
          TITRE           =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 13/03/2007   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 05/05/2008   AUTEUR NISTOR I.NISTOR 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19443,6 +19848,8 @@ MODE_ITER_INV=OPER(nom="MODE_ITER_INV",op=  44,sd_prod=mode_iter_inv_prod
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+
 def mode_iter_simult_prod(MATR_A,MATR_C,TYPE_RESU,**args ):
   if TYPE_RESU == "MODE_FLAMB" : return mode_flamb
   if AsType(MATR_C) == matr_asse_depl_r : return mode_meca_c
@@ -19465,7 +19872,7 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_pr
          MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
          MATR_C          =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r) ),
          METHODE         =SIMP(statut='f',typ='TXM',defaut="SORENSEN",
-                               into=("TRI_DIAG","JACOBI","SORENSEN") ),
+                               into=("TRI_DIAG","JACOBI","SORENSEN","QZ") ),
          b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
            PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ),
            NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
@@ -19483,6 +19890,9 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_pr
            NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ),  
            PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ),
          ),
+         b_qz =BLOC(condition = "METHODE == 'QZ'",
+           TYPE_QZ      =SIMP(statut='f',typ='TXM',defaut="QZ_SIMPLE",into=("QZ_QR","QZ_SIMPLE","QZ_EQUI") ),  
+         ),
          TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="DYNAMIQUE",
                                into=("MODE_FLAMB","DYNAMIQUE"),
                                fr="Type d analyse" ),
@@ -19491,7 +19901,7 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_pr
 
          b_flamb         =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
            CALC_FREQ       =FACT(statut='d',min=0,
-             OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE"),
+             OPTION       =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE","TOUT"),
                                    fr="Choix de l option et par conséquent du shift du problème modal" ),
              b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
                NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
@@ -19521,7 +19931,7 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_pr
 
          b_dynam        =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
            CALC_FREQ       =FACT(statut='d',min=0,
-             OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE"),
+             OPTION      =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE","TOUT"),
                                    fr="Choix de l option et par conséquent du shift du problème modal" ),
              b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
                NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
@@ -19570,7 +19980,7 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_pr
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),        
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 05/05/2008   AUTEUR NISTOR I.NISTOR 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19588,6 +19998,8 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_pr
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+
 def mode_stat_prod(MODE_STAT,FORCE_NODALE,PSEUDO_MODE,**args):
  if (MODE_STAT != None)          : return mode_stat_depl
  if (PSEUDO_MODE !=None)         : return mode_stat_acce
@@ -19639,7 +20051,7 @@ MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_stat_prod,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19657,6 +20069,7 @@ MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_stat_prod,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
 MODI_BASE_MODALE=OPER(nom="MODI_BASE_MODALE",op= 149,sd_prod=mode_meca,
                       reentrant='f',
             fr="Définir la base modale d'une structure sous écoulement",
@@ -19672,7 +20085,7 @@ MODI_BASE_MODALE=OPER(nom="MODI_BASE_MODALE",op= 149,sd_prod=mode_meca,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 10/07/2006   AUTEUR LEBOUVIE F.LEBOUVIER 
+#& MODIF COMMANDE  DATE 06/05/2008   AUTEUR KHAM M.KHAM 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19690,7 +20103,7 @@ MODI_BASE_MODALE=OPER(nom="MODI_BASE_MODALE",op= 149,sd_prod=mode_meca,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE G8BHHXD X.DESROCHES
+# RESPONSABLE PELLET J.PELLET
 MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage_sdaster,
                    fr="Effectuer des modifications sur un maillage existant: réorienter des mailles servant,"
                       +" à l'application d'une pression, à la modélisation du contact,...",
@@ -19699,23 +20112,27 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage_sdaster,
       regles=(AU_MOINS_UN('ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
                        'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
                        'TRANSLATION','ROTATION','MODI_BASE','ECHELLE','ORIE_SHB8','SYMETRIE',
-                       ),
+                       'ORIE_LIGNE',),
               PRESENT_ABSENT('ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
-                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',),
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+                       'ORIE_LIGNE'),
               PRESENT_ABSENT('DEFORME','ORIE_FISSURE','EQUE_PIQUA','ORIE_PEAU_2D',
-                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',),
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+                       'ORIE_LIGNE'),
               PRESENT_ABSENT('EQUE_PIQUA','ORIE_FISSURE','DEFORME','ORIE_PEAU_2D',
-                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',),
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+                       'ORIE_LIGNE'),
               PRESENT_ABSENT('ORIE_PEAU_2D','ORIE_FISSURE','DEFORME','EQUE_PIQUA',
-                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',),
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+                       'ORIE_LIGNE'),
               PRESENT_ABSENT('ORIE_PEAU_3D','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
                        'PLAQ_TUBE','MODI_MAILLE',),
               PRESENT_ABSENT('ORIE_NORM_COQUE','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
-                       'PLAQ_TUBE','MODI_MAILLE',),
+                       'PLAQ_TUBE','MODI_MAILLE','ORIE_LIGNE'),
               PRESENT_ABSENT('PLAQ_TUBE','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
-                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','MODI_MAILLE',),
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','MODI_MAILLE','ORIE_LIGNE'),
               PRESENT_ABSENT('MODI_MAILLE','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
-                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE',),
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','ORIE_LIGNE'),
               EXCLUS('EQUE_PIQUA','PLAQ_TUBE'),
               EXCLUS('EQUE_PIQUA','TUBE_COUDE'),
               EXCLUS('ROTATION','MODI_BASE'),
@@ -19759,6 +20176,7 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage_sdaster,
          ),
          ORIE_PEAU_3D    =FACT(statut='f',max='**',
            GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_MA_VOLU   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
          ),
          ORIE_SHB8       =FACT(statut='f',max=1,
            GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
@@ -19772,6 +20190,15 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage_sdaster,
            NOEUD           =SIMP(statut='f',typ=no),
            GROUP_NO        =SIMP(statut='f',typ=grno),
          ),
+         ORIE_LIGNE =FACT(statut='f',max='**',
+           regles=(EXCLUS('NOEUD','GROUP_NO'),
+                   PRESENT_PRESENT('NOEUD','VECT_TANG'),
+                   PRESENT_PRESENT('GROUP_NO','VECT_TANG'),),
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+           VECT_TANG       =SIMP(statut='f',typ='R',max=3),
+           NOEUD           =SIMP(statut='f',typ=no),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+         ),
          PLAQ_TUBE       =FACT(statut='f',
            DEXT            =SIMP(statut='o',typ='R' ),
            EPAIS           =SIMP(statut='o',typ='R' ),
@@ -19816,7 +20243,7 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage_sdaster,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 30/04/2007   AUTEUR ABBAS M.ABBAS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR GENIAUT S.GENIAUT 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19834,18 +20261,19 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
 
 MODI_MODELE_XFEM=OPER(nom="MODI_MODELE_XFEM",op= 113,sd_prod=modele_sdaster,docu="U4.44.12-e",reentrant='f',
             UIinfo={"groupes":("Modélisation",)},
                            fr="Engendrer ou enrichir une structure de donnees en affectant les cham_gd associes",
                            
     MODELE_IN       =SIMP(statut='o',typ=modele_sdaster,min=1,max=1,),
-    FISSURE         =SIMP(statut='o',typ=fiss_xfem,min=1,max=100,),
+    FISSURE         =SIMP(statut='o',typ=fiss_xfem,min=1,max='**',),
     CRITERE         =SIMP(statut='f',typ='R',defaut=1.67E-8),
     INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,)),
-    CONTACT         =SIMP(statut='f',typ=char_meca,min=1,max=1,),
+    CONTACT         =SIMP(statut='f',typ='TXM',defaut='NON',into=("OUI","NON"),min=1,max=1,),
 )  ;
-#& MODIF COMMANDE  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19863,6 +20291,7 @@ MODI_MODELE_XFEM=OPER(nom="MODI_MODELE_XFEM",op= 113,sd_prod=modele_sdaster,docu
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE KHAM M.KHAM
 MODI_OBSTACLE=OPER(nom="MODI_OBSTACLE",op=182,sd_prod=table_fonction,
             fr="Calculer les obstacles dans les systèmes guidage-tube après usure",
             reentrant='f',
@@ -19880,7 +20309,7 @@ MODI_OBSTACLE=OPER(nom="MODI_OBSTACLE",op=182,sd_prod=table_fonction,
          V_USUR_OBST     =SIMP(statut='f',typ='R',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 09/05/2007   AUTEUR VIVAN L.VIVAN 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19898,7 +20327,7 @@ MODI_OBSTACLE=OPER(nom="MODI_OBSTACLE",op=182,sd_prod=table_fonction,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-# RESPONSABLE JMBHH01 J.M.PROIX
+# RESPONSABLE DESROCHES X.DESROCHES
 def modi_repere_prod(RESULTAT,**args):
   if AsType(RESULTAT) != None : return AsType(RESULTAT)
 
@@ -19953,7 +20382,7 @@ MODI_REPERE=OPER(nom="MODI_REPERE",op=191,sd_prod=modi_repere_prod,reentrant='n'
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 31/10/2006   AUTEUR A3BHHAE H.ANDRIAMBOLOLONA 
+#& MODIF COMMANDE  DATE 05/05/2008   AUTEUR NISTOR I.NISTOR 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19971,6 +20400,8 @@ MODI_REPERE=OPER(nom="MODI_REPERE",op=191,sd_prod=modi_repere_prod,reentrant='n'
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+
 def norm_mode_prod(MODE,**args ):
   if AsType(MODE) == mode_meca   : return mode_meca
   if AsType(MODE) == mode_meca_c : return mode_meca_c
@@ -19994,7 +20425,6 @@ NORM_MODE=OPER(nom="NORM_MODE",op=  37,sd_prod=norm_mode_prod,
          ),
          AVEC_CMP   =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
          SANS_CMP   =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
-         MASS_INER  =SIMP(statut='f',typ=table_sdaster),
          MODE_SIGNE =FACT(statut='f',fr="Imposer un signe sur une des composantes des modes",
            NOEUD      =SIMP(statut='o',typ=no,fr="Noeud ou sera imposé le signe"),
            NOM_CMP    =SIMP(statut='o',typ='TXM',fr="Composante du noeud ou sera imposé le signe" ),
@@ -20013,7 +20443,7 @@ NORM_MODE=OPER(nom="NORM_MODE",op=  37,sd_prod=norm_mode_prod,
          TITRE      =SIMP(statut='f',typ='TXM',max='**'),
          INFO       =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 13/12/2006   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -20031,7 +20461,7 @@ NORM_MODE=OPER(nom="NORM_MODE",op=  37,sd_prod=norm_mode_prod,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE PELLET J.PELLET
 NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl_sdaster,reentrant='n',
             UIinfo={"groupes":("Matrices/vecteurs",)},
               fr="Etablissement de la numérotation des ddl avec ou sans renumérotation et du stockage de la matrice",
@@ -20051,14 +20481,13 @@ NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl_sdaster,reentrant='n',
          ),
          b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
            RENUM         =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
-           ELIM_LAGR2    =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
          ),
          b_gcpc          =BLOC(condition="METHODE=='GCPC'",fr="paramètres associés à la méthode gradient conjugué",
            RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
          ),
          INFO            =SIMP(statut='f',typ='I',into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -20076,6 +20505,7 @@ NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl_sdaster,reentrant='n',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE BODEL C.BODEL
 NUME_DDL_GENE=OPER(nom="NUME_DDL_GENE",op= 127,sd_prod=nume_ddl_gene,
                    fr="Etablissement de la numérotation des ddl d'un modèle établi en coordonnées généralisées",
                     reentrant='n',
@@ -20092,7 +20522,7 @@ NUME_DDL_GENE=OPER(nom="NUME_DDL_GENE",op= 127,sd_prod=nume_ddl_gene,
                NB_VECT     =SIMP(statut='f',typ='I',defaut= 9999 ),
                              ),
 )  ;
-#& MODIF COMMANDE  DATE 22/05/2007   AUTEUR BODEL C.BODEL 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -20110,6 +20540,7 @@ NUME_DDL_GENE=OPER(nom="NUME_DDL_GENE",op= 127,sd_prod=nume_ddl_gene,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE BODEL C.BODEL
 
 from Macro.observation_ops import observation_ops
 
@@ -20241,7 +20672,7 @@ OBSERVATION=MACRO(nom="OBSERVATION",op=observation_ops,
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
       )  ;
-#& MODIF COMMANDE  DATE 15/05/2007   AUTEUR GENIAUT S.GENIAUT 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -20259,21 +20690,23 @@ OBSERVATION=MACRO(nom="OBSERVATION",op=observation_ops,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
 POST_CHAM_XFEM=OPER(nom="POST_CHAM_XFEM",op= 196,sd_prod=evol_noli,
                     reentrant='n',UIinfo={"groupes":("Post traitements",)},
             fr="Calcul des champs DEPL et SIEF_ELGA sur le maillage fissuré",
     MAILLAGE_SAIN = SIMP(statut='o',typ=maillage_sdaster),
     MAILLAGE_FISS = SIMP(statut='o',typ=maillage_sdaster),
-    NOM_CHAM      = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","SIEF_ELGA"),),
+    NOM_CHAM      = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","SIEF_ELGA","VARI_ELGA"),),
     MODELE        = SIMP(statut='o',typ=modele_sdaster,),
     RESULTAT      = SIMP(statut='o',typ=resultat_sdaster),
-      b_elga      = BLOC(condition = "NOM_CHAM == 'SIEF_ELGA' or \
-                                      (type(NOM_CHAM)==type(()) and 'SIEF_ELGA' in NOM_CHAM)",
+      b_elga      = BLOC(condition = "NOM_CHAM in ('SIEF_ELGA','VARI_ELGA') or \
+                                      (type(NOM_CHAM)==type(()) and 'SIEF_ELGA' in NOM_CHAM) or \
+                                      (type(NOM_CHAM)==type(()) and 'VARI_ELGA' in NOM_CHAM)",
       MODELE_VISU = SIMP(statut='o',typ=modele_sdaster,),
                          ),
     INFO           =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
 );                     
-#& MODIF COMMANDE  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -20291,32 +20724,46 @@ POST_CHAM_XFEM=OPER(nom="POST_CHAM_XFEM",op= 196,sd_prod=evol_noli,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
 from Macro.post_dyna_alea_ops import post_dyna_alea_ops
-
 POST_DYNA_ALEA=MACRO(nom="POST_DYNA_ALEA",op= post_dyna_alea_ops,sd_prod=table_sdaster,
                     fr="Traitements statistiques de résultats de type interspectre et impression sur fichiers",
                     reentrant='n',
             UIinfo={"groupes":("Post traitements",)},
-         regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I','OPTION'),),
-         INTE_SPEC       =SIMP(statut='o',typ=table_fonction),
-         NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),  
-         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         NUME_ORDRE_I    =SIMP(statut='f',typ='I',max='**' ),
-         NOEUD_I         =SIMP(statut='f',typ=no,max='**'),         
-         OPTION          =SIMP(statut='f',typ='TXM',into=("DIAG",) ),
-         b_nume_ordre_i =BLOC(condition = "NUME_ORDRE_I != None",
-           NUME_ORDRE_J    =SIMP(statut='o',typ='I',max='**' ),   
-         ),  
-         b_noeud_i      =BLOC(condition = "NOEUD_I != None",
-           NOEUD_J         =SIMP(statut='o',typ=no,max='**'),
-           NOM_CMP_I       =SIMP(statut='o',typ='TXM',max='**' ),  
-           NOM_CMP_J       =SIMP(statut='o',typ='TXM',max='**' ),     
-         ),  
-         MOMENT          =SIMP(statut='f',typ='I',max='**',fr="Moments spectraux en complément des cinq premiers" ),  
+         regles=(UN_PARMI('FRAGILITE','INTE_SPEC'),),
+         FRAGILITE  =FACT(statut='f',fr="donnees pour courbe de fragilite",max='**', 
+                    TABL_RESU  =SIMP(statut='o',typ=table_sdaster),
+                    regles=(UN_PARMI('VALE','LIST_PARA'),),
+                    VALE       = SIMP(statut='f',typ='R', min=1,validators=NoRepeat(),max='**' ), 
+                    LIST_PARA  = SIMP(statut='f',typ=listr8_sdaster), 
+                    AM_INI     =  SIMP(statut='f',typ='R',defaut= 0.4 ), 
+                    BETA_INI   = SIMP(statut='f',typ='R',defaut= 0.3 ), 
+                    FRACTILE   = SIMP(statut='f',typ='R', min=1,validators=NoRepeat(),max='**'),
+                    b_inte_spec_f  = BLOC(condition="""FRACTILE !=None""",
+                        NB_TIRAGE =SIMP(statut='f',typ='I' ),),                   
+                 ),
+         INTE_SPEC       =SIMP(statut='f',typ=table_fonction),
+         b_inte_spec_f      =BLOC(condition="""INTE_SPEC !=None""",
+            regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I','OPTION'),),
+            NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),  
+            TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+            NUME_ORDRE_I    =SIMP(statut='f',typ='I',max='**' ),
+            NOEUD_I         =SIMP(statut='f',typ=no,max='**'),         
+            OPTION          =SIMP(statut='f',typ='TXM',into=("DIAG",) ),
+            b_nume_ordre_i =BLOC(condition = "NUME_ORDRE_I != None",
+               NUME_ORDRE_J    =SIMP(statut='o',typ='I',max='**' ),   
+                                ),  
+            b_noeud_i      =BLOC(condition = "NOEUD_I != None",
+               NOEUD_J         =SIMP(statut='o',typ=no,max='**'),
+               NOM_CMP_I       =SIMP(statut='o',typ='TXM',max='**' ),  
+               NOM_CMP_J       =SIMP(statut='o',typ='TXM',max='**' ),     
+                                ), 
+            MOMENT          =SIMP(statut='f',typ='I',max='**',fr="Moments spectraux en complément des cinq premiers" ), 
+            ),  
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 03/01/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -20334,6 +20781,7 @@ POST_DYNA_ALEA=MACRO(nom="POST_DYNA_ALEA",op= post_dyna_alea_ops,sd_prod=table_s
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
 POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=table_sdaster,
                       fr="Post-traiter les résultats en coordonnées généralisées produit par DYNA_TRAN_MODAL",
                       reentrant='n',
@@ -20358,7 +20806,7 @@ POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=table_sdaster,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 12/09/2006   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 20/05/2008   AUTEUR MAHFOUZ D.MAHFOUZ 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -20376,12 +20824,12 @@ POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=table_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE G8BHHXD X.DESROCHES
+# RESPONSABLE DESROCHES X.DESROCHES
 POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
             UIinfo={"groupes":("Post traitements",)},
                fr="Calcul de quantités globales (masse, inerties, énergie, ...) sur tout ou partie du modèle",
 
-         regles=(UN_PARMI('MASS_INER', 'ENER_POT', 'ENER_CIN','TRAV_EXT',
+         regles=(UN_PARMI('MASS_INER', 'ENER_POT', 'ENER_CIN','TRAV_EXT','MINMAX',
                           'WEIBULL', 'RICE_TRACEY', 'CARA_GEOM','CHAR_LIMITE',
                           'CARA_POUTRE', 'INDIC_ENER', 'INDIC_SEUIL',
                           'AIRE_INTERNE','ENER_ELAS','ENER_TOTALE','INTEGRALE'),
@@ -20402,7 +20850,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
                        MODELE         = SIMP(statut='f',typ=modele_sdaster),
                        CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
                        CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                                        char_ther,char_acou),validators=NoRepeat(),max='**' ),
                        NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
                        NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
@@ -20438,7 +20887,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
                        MODELE         = SIMP(statut='f',typ=modele_sdaster),
                        CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
                        CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
                        NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
                        NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
                        ANGLE          = SIMP(statut='f',typ='I',defaut=0),
@@ -20476,7 +20926,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
                        MODELE         = SIMP(statut='f',typ=modele_sdaster),
                        CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
                        CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
                        NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
                        NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
                        ANGLE          = SIMP(statut='f',typ='I',defaut=0),
@@ -20508,7 +20959,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
                        MODELE         = SIMP(statut='f',typ=modele_sdaster),
                        CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
                        CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
                        NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
                        NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
@@ -20534,7 +20986,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
                        MODELE         = SIMP(statut='f',typ=modele_sdaster),
                        CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
                        CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
                        NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
                        NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
@@ -20571,6 +21024,32 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
                        LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
          ),
 
+
+         MINMAX  = FACT(statut='f',max=1,
+                       fr="calcul des extrema en espace d'une CMP d'un champ, pour tous les instants spécifiés",
+                       regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+                               PRESENT_PRESENT('CHAM_GD','MODELE'),
+                               PRESENT_PRESENT('RESULTAT','NOM_CHAM'),
+                               AU_MOINS_UN('TOUT','GROUP_MA'),),
+                       TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),                          
+                       GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),           
+                       RESULTAT       = SIMP(statut='f',typ=(evol_noli,evol_ther,evol_elas) ),
+                       NOM_CHAM       = SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),                
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       NOM_CMP        = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),        
+              b_minmax = BLOC(condition = "( RESULTAT != None )",
+                       regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                              PRECISION      = SIMP(statut='f',typ='R',defaut= 1.0E-3),
+                              CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+                              TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                              NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                              LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                              INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                              LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+                              ),
+         ),
+
          WEIBULL        = FACT(statut='f',max='**',
                                regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
                                TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -20589,7 +21068,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
                        MODELE         = SIMP(statut='f',typ=modele_sdaster),
                        CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
                        CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
                        NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
                        NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
@@ -20621,7 +21101,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
                        MODELE         = SIMP(statut='f',typ=modele_sdaster),
                        CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
                        CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
                        NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
                        NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
@@ -20646,7 +21127,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
                        fr="calcul un indicateur global de perte de proportionnalité du chargement",
                        MODELE         = SIMP(statut='f',typ=modele_sdaster),
                        CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
                        RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
                        regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
@@ -20669,7 +21151,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
                        fr="calcul un indicateur global de perte de proportionnalité du chargement",
                        MODELE         = SIMP(statut='f',typ=modele_sdaster),
                        CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
                        RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
                        regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
@@ -20690,7 +21173,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
                        MODELE         = SIMP(statut='f',typ=modele_sdaster),
                        CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
                        CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
                        RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
                        regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
@@ -20716,7 +21200,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
                        fr="calcul des caractéristiques géométriques d'un section de poutre",
                        MODELE         = SIMP(statut='f',typ=modele_sdaster),
                        CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
          ),
 
@@ -20741,7 +21226,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
                        fr="calcul des caractéristiques mécaniques d'un section de poutre",
                        MODELE         = SIMP(statut='f',typ=modele_sdaster),
                        CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
          ),
 
@@ -20766,7 +21252,7 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 
  )  ;
-#& MODIF COMMANDE  DATE 03/01/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -20784,6 +21270,7 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
 POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=table_sdaster,reentrant='n',
             UIinfo={"groupes":("Post traitements",)},
                     fr="Calculer le dommage de fatigue subi par une structure soumise à une sollicitation de type aléatoire",
@@ -20801,7 +21288,7 @@ POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=table_sdaster,reentrant=
          MATER           =SIMP(statut='o',typ=mater_sdaster),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
 )  ;
-#& MODIF COMMANDE  DATE 03/01/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -20819,6 +21306,7 @@ POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=table_sdaster,reentrant=
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE ANGLES J.ANGLES
 POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=table_sdaster,reentrant='n',
             UIinfo={"groupes":("Post traitements",)},
                   fr="Calculer en un point, le dommage de fatigue subi par une structure soumise à une histoire de chargement",
@@ -20879,7 +21367,7 @@ POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=table_sdaster,reentrant='n',
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 31/10/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -20897,6 +21385,7 @@ POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=table_sdaster,reentrant='n',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE WADIER Y.WADIER
 
 from Macro.post_gp_ops import post_gp_ops
 def post_gp_prod(self, TABL_RESU, **kargs):
@@ -20910,7 +21399,10 @@ POST_GP=MACRO(nom="POST_GP", op=post_gp_ops, sd_prod=post_gp_prod,
               fr="Calcul du critère énergétique Gp suite à un calcul thermo-mécanique",
               reentrant='n',
               UIinfo={"groupes":("Post traitements",)},
-              regles=(AU_MOINS_UN('IDENTIFICATION', 'PREDICTION'),),
+              regles=(UN_PARMI('IDENTIFICATION', 'PREDICTION'),
+                      UN_PARMI('THETA_2D','THETA_3D'),
+                      UN_PARMI('PAS_ENTAILLE','LIST_EP_COPEAUX'),
+                      PRESENT_PRESENT('THETA_2D','DIRECTION'),),
       
       # Résultat, modèle, comportement, chargement
       RESULTAT     = SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans,mode_meca),),
@@ -20931,17 +21423,44 @@ POST_GP=MACRO(nom="POST_GP", op=post_gp_ops, sd_prod=post_gp_prod,
       ),
       SYME_CHAR    = SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS")),
       
-      DIRECTION    = SIMP(statut='o', typ='R', max=3),
-      THETA_2D     = FACT(statut='o', max='**',
+      DIRECTION    = SIMP(statut='f', typ='R', max=3),
+
+      THETA_2D     = FACT(statut='f', max='**',
                           fr="paramètres de définition des champs theta",
             GROUP_NO    = SIMP(statut='o', typ=grno, validators=NoRepeat(), max='**'),
             R_INF       = SIMP(statut='o', typ='R'),
             R_SUP       = SIMP(statut='o', typ='R'),
       ),
-      
+
+
+      THETA_3D        =FACT(statut='f',max='**',
+            GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+            R_INF           =SIMP(statut='o',typ='R'),
+            R_SUP           =SIMP(statut='o',typ='R'),
+                         ),
+         b_theta_3d     =BLOC(condition="THETA_3D != None",
+            LISSAGE         =FACT(statut='d',
+                DEGRE            =SIMP(statut='f',typ='I',defaut=5,into=(0,1,2,3,4,5,6,7) ),
+                LISSAGE_THETA    =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",
+                                  into=("LEGENDRE","LAGRANGE","LAGRANGE_REGU"),),
+                LISSAGE_G        =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",
+                                  into=("LEGENDRE","LAGRANGE","LAGRANGE_NO_NO","LAGRANGE_REGU"),),
+                             ),
+    
+            FOND_FISS       =SIMP(statut='o',typ=fond_fiss,max=1,),
+            NB_TRANCHES     =SIMP(statut='o',typ='I',max=1,
+                            fr="nombre de tranches: nombre de segments maillant le fond de fissure",),
+                         ),
+
+      # prise en compte de la traction compression
+      TRAC_COMP    = SIMP(statut='f',typ='TXM',into=("OUI",),
+                          fr="prise en compte de la traction-compression (plus lent)",
+                         ),
+
       # copeaux
-      GROUP_MA     = SIMP(statut='o', typ=grma, validators=NoRepeat(), max='**'),
-      PAS_ENTAILLE = SIMP(statut='o', typ='R', val_min=0.),
+      GROUP_MA        = SIMP(statut='o', typ=grma, validators=NoRepeat(), max='**'),
+      PAS_ENTAILLE    = SIMP(statut='f', typ='R', val_min=0.),
+      LIST_EP_COPEAUX = SIMP(statut='f', typ='R', max='**'),
       
       # critère sur Gp
       CRIT_MAXI_GP = SIMP(statut='f', typ='TXM', defaut="ABSOLU",
@@ -20967,7 +21486,7 @@ POST_GP=MACRO(nom="POST_GP", op=post_gp_ops, sd_prod=post_gp_prod,
       
       INFO         = SIMP(statut='f', typ='I', defaut=1, into=(1, 2),),
 )
-#& MODIF COMMANDE  DATE 05/03/2007   AUTEUR GALENNE E.GALENN
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -20996,6 +21515,8 @@ POST_K1_K2_K3=MACRO(nom="POST_K1_K2_K3",op=post_k1_k2_k3_ops,sd_prod=table_sdast
            regles=(UN_PARMI('RESULTAT','TABL_DEPL_SUP'),
                   EXCLUS('FISSURE','FOND_FISS'),
                   PRESENT_PRESENT('FISSURE','RESULTAT'),
+                  PRESENT_PRESENT('FOND_FISS','VECT_K1'),
+                  PRESENT_PRESENT('TABL_DEPL_SUP','VECT_K1'),
                    #PRESENT_PRESENT('RESULTAT','FOND_FISS'),
                    ),
 
@@ -21012,7 +21533,8 @@ POST_K1_K2_K3=MACRO(nom="POST_K1_K2_K3",op=post_k1_k2_k3_ops,sd_prod=table_sdast
                          GROUP_NO      = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
                          SANS_NOEUD    = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
                          SANS_GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                         TOUT          = SIMP(statut='f',typ='TXM',into=("OUI",) )
+                         TOUT          = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                         EVOL_THER     = SIMP(statut='f',typ=(evol_ther),fr="Température sur le fond de fissure")
                          ),
          b_fissure   =BLOC (condition="(FISSURE!= None)",
                          MAILLAGE       = SIMP(statut='o',typ=maillage_sdaster),
@@ -21042,11 +21564,11 @@ POST_K1_K2_K3=MACRO(nom="POST_K1_K2_K3",op=post_k1_k2_k3_ops,sd_prod=table_sdast
              ),
          SYME_CHAR       =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","SANS") ),
          INFO          =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
-         VECT_K1       =SIMP(statut='o',typ='R',max=3,
+         VECT_K1       =SIMP(statut='f',typ='R',max=3,
                              fr="Vecteur normal au plan de fissure, orienté de la lèvre inférieure vers la lèvre supérieure"),  
          TITRE         =SIMP(statut='f',typ='TXM',max='**'),  
 )  ;
-#& MODIF COMMANDE  DATE 03/01/2006   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 03/06/2008   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21063,9 +21585,8 @@ POST_K1_K2_K3=MACRO(nom="POST_K1_K2_K3",op=post_k1_k2_k3_ops,sd_prod=table_sdast
 # 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.      
-#                                                                       
-#                                                                       
 # ======================================================================
+# RESPONSABLE C.MESSELIER-GOUZE
 #
 POST_K_BETA=OPER(nom="POST_K_BETA",op=198,sd_prod=table_sdaster,
                    fr="Calcul des facteurs d'intensité de contraintes par la méthode K_BETA",
@@ -21089,7 +21610,7 @@ POST_K_BETA=OPER(nom="POST_K_BETA",op=198,sd_prod=table_sdaster,
          ),
          TITRE         = SIMP(statut='f',typ='TXM',max='**'),  
 );
-#& MODIF COMMANDE  DATE 31/10/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21107,6 +21628,7 @@ POST_K_BETA=OPER(nom="POST_K_BETA",op=198,sd_prod=table_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
 
 from Macro.post_k_trans_ops import post_k_trans_ops
 
@@ -21152,7 +21674,7 @@ POST_K_TRANS=MACRO(nom="POST_K_TRANS",op=post_k_trans_ops,sd_prod=table_sdaster,
         TITRE           =SIMP(statut='f',typ='TXM'),
 )
 
-#& MODIF COMMANDE  DATE 15/05/2007   AUTEUR GENIAUT S.GENIAUT 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21170,16 +21692,21 @@ POST_K_TRANS=MACRO(nom="POST_K_TRANS",op=post_k_trans_ops,sd_prod=table_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
 POST_MAIL_XFEM=OPER(nom="POST_MAIL_XFEM",op= 187,sd_prod=maillage_sdaster,
                     reentrant='n',UIinfo={"groupes":("Maillage",)},
             fr="Crée un maillage se conformant à la fissure pour le post-traitement des éléments XFEM",
     MODELE        = SIMP(statut='o',typ=modele_sdaster),
     MAILLAGE_SAIN = SIMP(statut='o',typ=maillage_sdaster),
+    PREF_NOEUD_X   =SIMP(statut='f',typ='TXM',defaut="NX",validators=LongStr(1,2),),
+    PREF_NOEUD_M   =SIMP(statut='f',typ='TXM',defaut="NM",validators=LongStr(1,2),),
+    PREF_NOEUD_P   =SIMP(statut='f',typ='TXM',defaut="NP",validators=LongStr(1,2),),
+    PREF_MAILLE_X  =SIMP(statut='f',typ='TXM',defaut="MX",validators=LongStr(1,2),),
     TITRE         = SIMP(statut='f',typ='TXM',max='**'),
     INFO           =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
 
 );                     
-#& MODIF COMMANDE  DATE 03/04/2007   AUTEUR VIVAN L.VIVAN 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21196,7 +21723,7 @@ POST_MAIL_XFEM=OPER(nom="POST_MAIL_XFEM",op= 187,sd_prod=maillage_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE JMBHH01 J.M.PROIX
+# RESPONSABLE GALENNE E.GALENNE
 POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster,
                fr="Vérification des critères de niveau 0 et certains critères de niveau A du RCC-M-B3200 (Edition 1991)",
                reentrant='n',
@@ -21334,8 +21861,8 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster,
               NUME_SITU        =SIMP(statut='o',typ='I',fr="numéro de la situation" ),
               NOM_SITU         =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
               COMBINABLE       =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ),
-              NUME_GROUPE      =SIMP(statut='o',typ='I',fr="numéro du groupe de la situation" ),
-              NUME_PASSAGE     =SIMP(statut='f',typ='I',max=2,fr="numéro des deux groupes en relation" ),
+              NUME_GROUPE      =SIMP(statut='f',typ='I',max=2,
+                 fr="numéro du groupe de la situation,si 2 numéros cette situation est une situation de passage" ),
               NUME_RESU_THER   =SIMP(statut='f',typ='I',max='**',fr="numeros de transitoires thermiques" ),
               CHAR_ETAT_A      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
               CHAR_ETAT_B      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat B" ),
@@ -21422,8 +21949,8 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster,
               NUME_SITU        =SIMP(statut='o',typ='I',fr="numéro de la situation" ),
               NOM_SITU         =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
               COMBINABLE       =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ),
-              NUME_GROUPE      =SIMP(statut='o',typ='I',fr="numéro du groupe de la situation" ),
-              NUME_PASSAGE     =SIMP(statut='f',typ='I',max=2,fr="numéro des deux groupes en relation" ),
+              NUME_GROUPE      =SIMP(statut='f',typ='I',max=2,
+                 fr="numéro du groupe de la situation,si 2 numéros cette situation est une situation de passage" ),
               NUME_RESU_THER   =SIMP(statut='f',typ='I',max='**',fr="numeros de transitoires thermiques" ),
               CHAR_ETAT_A      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
               CHAR_ETAT_B      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat B" ),
@@ -21434,7 +21961,7 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster,
                                ),
                ),
 )  ;
-#& MODIF COMMANDE  DATE 09/05/2007   AUTEUR VIVAN L.VIVAN 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 # ======================================================================
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21452,7 +21979,7 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE G8BHHXD X.DESROCHES
+# RESPONSABLE DESROCHES X.DESROCHES
 POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=table_sdaster,reentrant='f',
             fr="Extraire des valeurs de composantes de champs de grandeurs pour y effectuer des calculs (moyenne,invariants,..)"
                +" ou pour les exprimer dans d'autres repères",
@@ -21588,7 +22115,7 @@ POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=table_sdaster,reentrant='f'
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
 )  ;
-#& MODIF COMMANDE  DATE 03/01/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21606,6 +22133,7 @@ POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=table_sdaster,reentrant='f'
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
 POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=table_sdaster,reentrant='f',
             UIinfo={"groupes":("Post traitements",)},
                 fr="Calcul des volumes d'usure et des profondeurs d'usure d'après la puissance d'usure",
@@ -21707,7 +22235,7 @@ POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=table_sdaster,reentrant='f',
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21725,6 +22253,7 @@ POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=table_sdaster,reentrant='f',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE TAHERI S.TAHERI
 POST_ZAC=OPER(nom="POST_ZAC",op= 175,sd_prod=mult_elas,reentrant='n',
             UIinfo={"groupes":("Post traitements",)},
               fr="Déterminer l'état adapté ou accommodé par la méthode de Zarka-Casier d'une structure sous"
@@ -21752,7 +22281,7 @@ POST_ZAC=OPER(nom="POST_ZAC",op= 175,sd_prod=mult_elas,reentrant='n',
          CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
 
 )  ;
-#& MODIF COMMANDE  DATE 19/02/2007   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21770,6 +22299,8 @@ POST_ZAC=OPER(nom="POST_ZAC",op= 175,sd_prod=mult_elas,reentrant='n',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+
 POURSUITE=MACRO(nom="POURSUITE",op=ops.build_poursuite,repetable='n',
                 fr="Poursuite d'une étude à partir de la sauvegarde au format JEVEUX ou HDF de sa base globale",
                 sd_prod = ops.POURSUITE,
@@ -21821,20 +22352,26 @@ POURSUITE=MACRO(nom="POURSUITE",op=ops.build_poursuite,repetable='n',
            PARTITION       =SIMP(statut='f',typ='R' ),
            DYNAMIQUE       =SIMP(statut='f',typ='I'),
          ),
-         RESERVE_CPU     =FACT(fr="reserve de temps pour terminer une execution",statut='f',max=1,
+         RESERVE_CPU     =FACT(fr="reserve de temps pour terminer une execution",statut='d',max=1,
            regles=(EXCLUS('VALE','POURCENTAGE'),),
            VALE            =SIMP(statut='f',typ='I',val_min=0),
+#                            valeur par défaut fixée à 10. dans le FORTRAN si CODE présent
            POURCENTAGE     =SIMP(statut='f',typ='R',val_min=0.,val_max=1.0),
-#          valeur en pourcentage du temps maximum bornée à 180 secondes
-           BORNE           =SIMP(statut='f',typ='I',val_min=0,defaut=180)
-         ),
-         CODE            =FACT("définition d un nom pour l'esemble d'une étude",
+#                           valeur par défaut fixée à 10% dans le FORTRAN
+           BORNE           =SIMP(statut='f',typ='I',val_min=0,defaut=900) ),
+#          valeur en pourcentage du temps maximum bornée à 900 secondes
+
+         CODE            =FACT("définition d'un nom pour l'ensemble d'une étude",
                                statut='f',min=1,max=1,
            NOM             =SIMP(statut='o',typ='TXM'),
-           UNITE           =SIMP(statut='f',typ='I',defaut=15),
          ),
+
+
+         IGNORE_ALARM = SIMP(statut='f', typ='TXM', max='**', fr="Alarmes que l'utilisateur souhaite délibérément ignorer"),
+
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21852,13 +22389,15 @@ POURSUITE=MACRO(nom="POURSUITE",op=ops.build_poursuite,repetable='n',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
 PRE_GIBI=PROC(nom="PRE_GIBI",op=49,
             UIinfo={"groupes":("Gestion du travail",)},
               fr="Conversion d'un fichier de maillage GIBI au format Aster",
          UNITE_GIBI      =SIMP(statut='f',typ='I',defaut=19),  
          UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21876,6 +22415,7 @@ PRE_GIBI=PROC(nom="PRE_GIBI",op=49,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
 
 PRE_GMSH=PROC(nom="PRE_GMSH",op=47,
             UIinfo={"groupes":("Gestion du travail",)},
@@ -21883,7 +22423,7 @@ PRE_GMSH=PROC(nom="PRE_GMSH",op=47,
          UNITE_GMSH      =SIMP(statut='f',typ='I',defaut=19),  
          UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21901,6 +22441,7 @@ PRE_GMSH=PROC(nom="PRE_GMSH",op=47,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE MIKCHEVITCH A.MIKCHEVITCH
 PRE_IDEAS=PROC(nom="PRE_IDEAS",op=47,
             UIinfo={"groupes":("Gestion du travail",)},
                fr="Conversion d'un fichier universel IDEAS-SUPERTAB au format Aster",
@@ -21908,7 +22449,7 @@ PRE_IDEAS=PROC(nom="PRE_IDEAS",op=47,
          UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
          CREA_GROUP_COUL =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
 )  ;
-#& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21926,6 +22467,7 @@ PRE_IDEAS=PROC(nom="PRE_IDEAS",op=47,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE PELLET J.PELLET
 
 PROD_MATR_CHAM=OPER(nom="PROD_MATR_CHAM",op= 156,sd_prod=cham_no_sdaster,
                     fr="Effectuer le produit d'une matrice par un vecteur",
@@ -21935,7 +22477,7 @@ PROD_MATR_CHAM=OPER(nom="PROD_MATR_CHAM",op= 156,sd_prod=cham_no_sdaster,
          CHAM_NO         =SIMP(statut='o',typ=cham_no_sdaster),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 09/05/2007   AUTEUR VIVAN L.VIVAN 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21953,23 +22495,34 @@ PROD_MATR_CHAM=OPER(nom="PROD_MATR_CHAM",op= 156,sd_prod=cham_no_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE PELLET J.PELLET
 def proj_champ_prod(RESULTAT=None,CHAM_NO_REFE=None,**args ):
     if AsType(RESULTAT) != None : return AsType(RESULTAT)
     if CHAM_NO_REFE     != None : return cham_no_sdaster
     raise AsException("type de concept resultat non prevu")
 
+
 PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f',
             UIinfo={"groupes":("Résultats et champs",)},
                 fr="Projeter les champs aux noeuds d'une SD résultat de type evol_xxx sur un autre maillage",
-#
+
+
          METHODE         =SIMP(statut='f',typ='TXM',defaut="ELEM",
                                into=("NUAGE_DEG_0","NUAGE_DEG_1","ELEM",) ),
+
+
+         # Méthode NUAGE_xxx :
+         #--------------------
          b_nuage         =BLOC(condition="(METHODE=='NUAGE_DEG_1') or (METHODE=='NUAGE_DEG_0')",
                                fr="Lissage d'un nuage de points",
            CHAM_NO         =SIMP(statut='o',typ=cham_no_sdaster),
            CHAM_NO_REFE    =SIMP(statut='o',typ=cham_no_sdaster),
          ),
+
+
+
+         # Méthode ELEM :
+         #--------------------
          b_elem          =BLOC(condition="METHODE=='ELEM'",
                               fr="Utilisation des fonctions de forme du maillage initial",
            regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','LIST_INST','LIST_FREQ','LIST_ORDRE'),
@@ -21988,9 +22541,8 @@ PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f',
            TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
 
-#          POUR IMPOSER LA NUMEROTATION DES DDLS :
-#          ------------------------------------------------------------------
-           NUME_DDL        =SIMP(statut='f',typ=(nume_ddl_sdaster) ),
+           NUME_DDL        =SIMP(statut='f',typ=(nume_ddl_sdaster),
+                fr="Utile en dynamique pour pouvoir imoser la numérotation des cham_no."),
 
 
            TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -22004,7 +22556,8 @@ PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f',
            NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
 
 
-           CAS_FIGURE      =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",) ),
+           CAS_FIGURE      =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",),
+                fr="Pour indiquer au programme le type de projection souhaité"),
            DISTANCE_MAX    =SIMP(statut='f',typ='R',
                 fr="Distance maximale entre le noeud et l'élément le plus proche, lorsque le noeud n'est dans aucun élément."),
            TRANSF_GEOM_2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
@@ -22017,11 +22570,17 @@ PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f',
                 fr="Pour forcer le type des champs projetés. NOEU -> cham_no"),
 
            PROL_ZERO       =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
-                fr="Si le résultat est un mode_xxx ou une base_xxx, on peut prolonger"
-                   +" les champs par zéro la ou la projection ne donne pas de valeurs."),
+                fr="Pour prolonger les champs par zéro là ou la projection ne donne pas de valeurs."),
 
          ),
 
+
+
+         # Mots clés utilisables avec les 2 méthodes :
+         #---------------------------------------------
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+
          VIS_A_VIS       =FACT(statut='f',max='**',
            regles=(AU_MOINS_UN('TOUT_1','GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
                    AU_MOINS_UN('TOUT_2','GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),),
@@ -22040,11 +22599,8 @@ PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f',
                 fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
                    " aux noeuds du MODELE_2 avant la projection."),
          ),
-
-         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
-         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22062,6 +22618,7 @@ PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
 def matr_asse_gene_prod(MATR_ASSE,MATR_ASSE_GENE,**args):
   if AsType(MATR_ASSE) == matr_asse_depl_r  : return matr_asse_gene_r
   if AsType(MATR_ASSE_GENE) == matr_asse_gene_r  : return matr_asse_gene_r
@@ -22080,7 +22637,7 @@ PROJ_MATR_BASE=OPER(nom="PROJ_MATR_BASE",op=  71,sd_prod=matr_asse_gene_prod,
          MATR_ASSE_GENE  =SIMP(statut='f',typ=(matr_asse_gene_r,matr_asse_gene_c) ),
 )  ;
 
-#& MODIF COMMANDE  DATE 19/06/2006   AUTEUR VABHHTS J.PELLET 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22098,6 +22655,7 @@ PROJ_MATR_BASE=OPER(nom="PROJ_MATR_BASE",op=  71,sd_prod=matr_asse_gene_prod,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ANDRIAM H.ANDRIAMBOLOLONA
 def proj_mesu_modal_prod(MODELE_MESURE,**args):
      vale=MODELE_MESURE['MESURE']
      if  AsType(vale) == dyna_trans   : return tran_gene
@@ -22142,7 +22700,7 @@ PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193,
              ),
 
           ); 
-#& MODIF COMMANDE  DATE 30/05/2007   AUTEUR ADOBES A.ADOBES 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22160,6 +22718,7 @@ PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
 PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=table_fonction,reentrant='n',
             UIinfo={"groupes":("Matrices/vecteurs",)},
             fr="Projecter un ou plusieurs spectres de turbulence sur une (ou plusieurs) base(s) modale(s) ",
@@ -22181,7 +22740,7 @@ PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=table_fonction,reentran
          ORIG_AXE        =SIMP(statut='f',typ='R',min=3,max=3 ),  
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22199,6 +22758,7 @@ PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=table_fonction,reentran
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
 
 PROJ_VECT_BASE=OPER(nom="PROJ_VECT_BASE",op=  72,sd_prod=vect_asse_gene,
                     fr="Projection d'un vecteur assemblé sur une base (modale ou de RITZ)",
@@ -22211,7 +22771,7 @@ PROJ_VECT_BASE=OPER(nom="PROJ_VECT_BASE",op=  72,sd_prod=vect_asse_gene,
          VECT_ASSE       =SIMP(statut='f',typ=cham_no_sdaster),
          VECT_ASSE_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
 )  ;
-#& MODIF COMMANDE  DATE 30/04/2007   AUTEUR ABBAS M.ABBAS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22229,6 +22789,7 @@ PROJ_VECT_BASE=OPER(nom="PROJ_VECT_BASE",op=  72,sd_prod=vect_asse_gene,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
 
 PROPA_XFEM=OPER(nom="PROPA_XFEM",op=10,sd_prod=fiss_xfem,reentrant='n',
                 UIinfo={"groupes":("Modélisation",)},
@@ -22253,7 +22814,7 @@ PROPA_XFEM=OPER(nom="PROPA_XFEM",op=10,sd_prod=fiss_xfem,reentrant='n',
 
     INFO           =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 03/01/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22271,6 +22832,7 @@ PROPA_XFEM=OPER(nom="PROPA_XFEM",op=10,sd_prod=fiss_xfem,reentrant='n',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE PARROT A.PARROT
 RECA_WEIBULL=OPER(nom="RECA_WEIBULL",op= 197,sd_prod=table_sdaster,
                      fr="Recaler les paramètres du modèle de WEIBULL sur des données expérimentales",reentrant='n',
             UIinfo={"groupes":("Post traitements",)},
@@ -22299,7 +22861,7 @@ RECA_WEIBULL=OPER(nom="RECA_WEIBULL",op= 197,sd_prod=table_sdaster,
          ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
                        )  ;
-#& MODIF COMMANDE  DATE 09/05/2007   AUTEUR VIVAN L.VIVAN 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22317,7 +22879,7 @@ RECA_WEIBULL=OPER(nom="RECA_WEIBULL",op= 197,sd_prod=table_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-# RESPONSABLE MCOURTOI M.COURTOIS
+# RESPONSABLE COURTOIS M.COURTOIS
 def recu_fonction_prod(RESULTAT=None,TABLE=None,RESU_GENE=None,
                        BASE_ELAS_FLUI=None,CHAM_GD=None,NAPPE=None,
                        NOM_PARA_TABL=None,**args):
@@ -22529,7 +23091,7 @@ RECU_FONCTION=OPER(nom="RECU_FONCTION",op=90,sd_prod=recu_fonction_prod,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22547,6 +23109,7 @@ RECU_FONCTION=OPER(nom="RECU_FONCTION",op=90,sd_prod=recu_fonction_prod,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
 RECU_GENE=OPER(nom="RECU_GENE",op=  76,sd_prod=vect_asse_gene,reentrant='n',
             UIinfo={"groupes":("Résultats et champs",)},
                fr="Extraire d'un champ de grandeur (déplacements, vitesses ou accélérations) à partir de résultats"
@@ -22558,7 +23121,7 @@ RECU_GENE=OPER(nom="RECU_GENE",op=  76,sd_prod=vect_asse_gene,reentrant='n',
          CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF" ,into=("ABSOLU","RELATIF") ),
          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22576,7 +23139,7 @@ RECU_GENE=OPER(nom="RECU_GENE",op=  76,sd_prod=vect_asse_gene,reentrant='n',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE COURTOIS M.COURTOIS
 RECU_TABLE=OPER(nom="RECU_TABLE",op= 174,sd_prod=table_sdaster,
          fr="Récupérer dans une table les valeurs d'un paramètre d'une SD Résultat ou d'extraire une table contenue"
             +" dans une autre SD pour celles qui le permettent",
@@ -22587,71 +23150,47 @@ RECU_TABLE=OPER(nom="RECU_TABLE",op= 174,sd_prod=table_sdaster,
          NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),  
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
 )  ;
-#& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  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.      
+# COPYRIGHT (C) 1991 - 2007  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.        
 # ======================================================================
+# RESPONSABLE PELLET J.PELLET
 
-RESO_GRAD=OPER(nom="RESO_GRAD",op=  84,sd_prod=cham_no_sdaster,
-               fr="Résolution d'un système linéaire par la méthode du gradient conjugué préconditionné",
-               reentrant='f',
-            UIinfo={"groupes":("Résolution",)},
-         MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+RESOUDRE=OPER(nom="RESOUDRE",op=15,sd_prod=cham_no_sdaster,reentrant='f',
+               fr="Résolution par méthode directe un système d'équations linéaires préalablement factorisé par FACT_LDLT"+
+                  "ou Résolution d'un système linéaire par la méthode du gradient conjugué préconditionné",
+               UIinfo={"groupes":("Résolution",)},
+         MATR           =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,
+                                               matr_asse_temp_c,matr_asse_pres_r,matr_asse_pres_c) ),
          CHAM_NO         =SIMP(statut='o',typ=cham_no_sdaster),
          CHAM_CINE       =SIMP(statut='f',typ=cham_no_sdaster),
-         MATR_FACT       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+
+         # mot-clé commun aux solveurs MUMPS et GCPC:
+         RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.E-6),
+
+         # mots-clés pour solver GCPC:
+         MATR_PREC       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
          NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),  
          REPRISE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
-         RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1E-6 ),  
-         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
-)  ;
-#& MODIF COMMANDE  DATE 21/02/2006   AUTEUR REZETTE C.REZETTE 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2001  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.
-# ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
 
-RESO_LDLT=OPER(nom="RESO_LDLT",op=15,sd_prod=cham_no_sdaster,reentrant='f',
-               fr="Résoudre par méthode directe un système d'équations linéaires préalablement factorisé par FACT_LDLT",
-            UIinfo={"groupes":("Résolution",)},
-         MATR_FACT       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,
-                                               matr_asse_temp_c,matr_asse_pres_r,matr_asse_pres_c) ),
-         CHAM_NO         =SIMP(statut='o',typ=cham_no_sdaster),
-         CHAM_CINE       =SIMP(statut='f',typ=cham_no_sdaster),
-         # RESI_RELA : précision utilisée si SOLVEUR=MUMPS
-         RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.e-6),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 12/03/2007   AUTEUR DEVESA G.DEVESA 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22746,7 +23285,7 @@ REST_BASE_PHYS=OPER(nom="REST_BASE_PHYS",op=  75,sd_prod=rest_base_phys_prod,
          SECTEUR         =SIMP(statut='f',typ='I',defaut= 1 ),  
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 10/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22764,15 +23303,17 @@ REST_BASE_PHYS=OPER(nom="REST_BASE_PHYS",op=  75,sd_prod=rest_base_phys_prod,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
 REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=table_fonction,
                     reentrant='n',
             fr="Calculer la réponse d'une structure dans la base physique",
             UIinfo={"groupes":("Matrices/vecteurs",)},
-         regles=(AU_MOINS_UN('BASE_ELAS_FLUI','MODE_MECA'),),
+         regles=(AU_MOINS_UN('BASE_ELAS_FLUI','MODE_MECA'),),        
          BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu_sdaster ),
-         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         MODE_MECA       =SIMP(statut='f',typ=(mode_meca, base_modale ),),
          BANDE           =SIMP(statut='f',typ='R',min=2,validators=NoRepeat(),max=2    ),  
-         NUME_ORDRE      =SIMP(statut='f',typ='I'      ,validators=NoRepeat(),max='**' ),  
+         NUME_ORDRE      =SIMP(statut='f',typ='I'      ,validators=NoRepeat(),max='**' ),
+         TOUT_ORDRE       =SIMP(statut='f',typ='TXM',defaut="NON",  into=("OUI","NON")  ),
          INTE_SPEC_GENE  =SIMP(statut='o',typ=table_fonction),
          NOEUD           =SIMP(statut='o',typ=no   ,max='**'),
          MAILLE          =SIMP(statut='f',typ=ma   ,max='**'),
@@ -22790,7 +23331,7 @@ REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=table_fonction,
                                into=("DIAG_TOUT","DIAG_DIAG","TOUT_TOUT","TOUT_DIAG") ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 23/04/2007   AUTEUR PROIX J-M.PROIX 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22808,6 +23349,7 @@ REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=table_fonction,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE PROIX J.M.PROIX
 # -*- coding: iso-8859-1 -*-
 
 from Macro.simu_point_mat_ops import simu_point_mat_ops
@@ -22919,7 +23461,7 @@ SIMU_POINT_MAT=MACRO(nom="SIMU_POINT_MAT", op=simu_point_mat_ops,sd_prod=table_s
      NUME_INIT       =SIMP(statut='f',typ='I'),
      DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
      CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
-            into=("DEPL","SIEF_ELGA","VARI_ELGA","VARI_NON_LOCAL","LANL_ELGA")),
+            into=("DEPL","SIEF_ELGA","VARI_ELGA","LANL_ELGA")),
             ),       
    MODELISATION  =SIMP(statut='f',typ='TXM',defaut="3D",validators=NoRepeat(),max=1,
                        into=("3D","C_PLAN","D_PLAN",)),                                                       
@@ -23001,7 +23543,7 @@ SIMU_POINT_MAT=MACRO(nom="SIMU_POINT_MAT", op=simu_point_mat_ops,sd_prod=table_s
    INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )
 
-#& MODIF COMMANDE  DATE 15/05/2006   AUTEUR ASSIRE A.ASSIRE 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -23019,6 +23561,7 @@ SIMU_POINT_MAT=MACRO(nom="SIMU_POINT_MAT", op=simu_point_mat_ops,sd_prod=table_s
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
 
 from Macro.stanley_ops import stanley_ops
 
@@ -23035,7 +23578,7 @@ STANLEY=MACRO(nom="STANLEY",op=stanley_ops,sd_prod=None,
                                fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit les md5"),
 
 )  ;
-#& MODIF COMMANDE  DATE 30/05/2007   AUTEUR ABBAS M.ABBAS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -23053,7 +23596,7 @@ STANLEY=MACRO(nom="STANLEY",op=stanley_ops,sd_prod=None,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-# RESPONSABLE MABBAS M.ABBAS
+# RESPONSABLE ABBAS M.ABBAS
 STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
                    fr="Calcul de l'évolution mécanique ou thermo-hydro-mécanique couplée, en quasi-statique,"
                       +" d'une structure en non linéaire",
@@ -23085,11 +23628,12 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
            RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
                                  into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
            RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
-                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC",
+                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS",
                                       "ELAS_POUTRE_GR","CABLE","ELAS_HYPER")),
            ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
            ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
            ELAS_VMIS_LINE  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+           ELAS_VMIS_PUIS  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
            ELAS_HYPER      =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
            ELAS_POUTRE_GR  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
            CABLE           =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
@@ -23101,16 +23645,14 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
          ),
          b_reuse =BLOC(condition = "reuse",fr="en mode concept reentrant : ETAT_INIT obligatoire",
            ETAT_INIT       =FACT(statut='o',
-             regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI','VARI_NON_LOCAL',),
+             regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI',),
                      EXCLUS('EVOL_NOLI','DEPL',),
                      EXCLUS('EVOL_NOLI','SIGM',),
                      EXCLUS('EVOL_NOLI','VARI',),
-                     EXCLUS('EVOL_NOLI','VARI_NON_LOCAL',),
                      EXCLUS('NUME_ORDRE','INST'), ),
              DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
              SIGM            =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
              VARI            =SIMP(statut='f',typ=cham_elem),
-             VARI_NON_LOCAL  =SIMP(statut='f',typ=cham_no_sdaster),
              EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
              NUME_ORDRE      =SIMP(statut='f',typ='I'),
              INST            =SIMP(statut='f',typ='R'),
@@ -23121,16 +23663,14 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
          ),),
          b_not_reuse =BLOC(condition = "not reuse",fr="en mode concept non reentrant : ETAT_INIT facultatif",
            ETAT_INIT       =FACT(statut='f',
-             regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI','VARI_NON_LOCAL',),
+             regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI',),
                      EXCLUS('EVOL_NOLI','DEPL',),
                      EXCLUS('EVOL_NOLI','SIGM',),
                      EXCLUS('EVOL_NOLI','VARI',),
-                     EXCLUS('EVOL_NOLI','VARI_NON_LOCAL',),
                      EXCLUS('NUME_ORDRE','INST'), ),
              DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
              SIGM            =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
              VARI            =SIMP(statut='f',typ=cham_elem),
-             VARI_NON_LOCAL  =SIMP(statut='f',typ=cham_no_sdaster),
              EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
              NUME_ORDRE      =SIMP(statut='f',typ='I'),
              INST            =SIMP(statut='f',typ='R'),
@@ -23149,6 +23689,9 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
            INST_INIT       =SIMP(statut='f',typ='R'),
            NUME_INST_FIN   =SIMP(statut='f',typ='I'),
            INST_FIN        =SIMP(statut='f',typ='R'),
+           ERRE_TEMPS      =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
+                                 fr="Adaptation temporelle pour les modélisations HM instationnaires",
+                                 ang="Time adaptation for unstationary HM models"),
            PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
            # DEBUT DE BLOC POUR LA SUBDIVISION DES PAS DE TEMPS
            SUBD_METHODE    =SIMP( statut='f',typ='TXM',
@@ -23202,7 +23745,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
            EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
          ),
          RECH_LINEAIRE   =FACT(statut='f',
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="CORDE",into=("CORDE","MIXTE") ),         
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CORDE",into=("CORDE","MIXTE") ),
            RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-1 ),
            ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3),
            ITER_LINE_CRIT  =SIMP(statut='f',typ='I',defaut= 20),
@@ -23231,18 +23774,20 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
          CONVERGENCE     =FACT(statut='d',
            regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA'),),
            b_refe_rela    =BLOC(condition = "RESI_REFE_RELA != None",
-             regles=(AU_MOINS_UN('SIGM_REFE','EPSI_REFE','FLUX_THER_REFE',
+             regles=(AU_MOINS_UN('SIGM_REFE','EPSI_REFE','FLUX_THER_REFE','FORC_REFE',
                                   'FLUX_HYD1_REFE','FLUX_HYD2_REFE','VARI_REFE'),),
+             FORC_REFE       =SIMP(statut='f',typ='R',min=2,max=2,
+                fr="Force et Moment de référence pour les éléments de structure."),
              SIGM_REFE       =SIMP(statut='f',typ='R'),
              EPSI_REFE       =SIMP(statut='f',typ='R'),
              FLUX_THER_REFE  =SIMP(statut='f',typ='R'),
              FLUX_HYD1_REFE  =SIMP(statut='f',typ='R'),
              FLUX_HYD2_REFE  =SIMP(statut='f',typ='R'),
-             VARI_REFE       =SIMP(statut='f',typ='R'),                     
+             VARI_REFE       =SIMP(statut='f',typ='R'),
            ),
-           
-           
-           
+
+
+
            RESI_REFE_RELA  =SIMP(statut='f',typ='R'),
            RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
            RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
@@ -23251,15 +23796,16 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
            ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
          ),
          SOLVEUR         =FACT(statut='d',
-           METHODE=SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","FETI") ),
+           METHODE=SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","FETI","PETSC") ),
+          
            b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
            ),
            b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
              RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
            ),
-           b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
-                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+           b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' or METHODE == 'FETI'",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
              NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
              STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON","DECOUPE") ),
            ),
@@ -23272,12 +23818,24 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
            ),
            b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
-             SCALING         =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
              RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="CENTRALISE",
+                                   into=("CENTRALISE","DISTRIBUE_MC","DISTRIBUE_MD","DISTRIBUE_SD")),
+             PARTITION       =SIMP(statut='f',typ=sd_feti_sdaster),
+             CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,min=0,max=100),
+             CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,min=0),
              ),
+           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+             VARIANTE        =SIMP(statut='f',typ='TXM',into=("GMRES","BCGS","CR","CG","BICG","CHEBYCHEV",),defaut="GMRES" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("ILU","SOR","BJACOBI"),defaut="ILU" ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-8),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
+           ),
            b_feti          =BLOC(condition = "METHODE == 'FETI' ",fr="Paramètres de la méthode FETI 1",
              PARTITION       =SIMP(statut='o',typ=sd_feti_sdaster),
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -23308,8 +23866,8 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
            ARCH_ETAT_INIT  =SIMP(statut='f',typ='TXM',into=("OUI",)),
            NUME_INIT       =SIMP(statut='f',typ='I'),
            DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
-           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","SIEF_ELGA","VARI_ELGA",
-                                                                     "VARI_NON_LOCAL","LANL_ELGA")),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                                 into=("DEPL","SIEF_ELGA","VARI_ELGA","LANL_ELGA")),
          ),
          OBSERVATION     =FACT(statut='f',max='**',
            NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),
@@ -23384,51 +23942,16 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
            NB_FREQ         =SIMP(statut='f',typ='I',max=1,defaut=3),
            CHAR_CRIT       =SIMP(statut='f',typ='R',min=2,max=2,defaut=(-10.0,10),
                             fr="Valeur des deux charges critiques délimitant la bande de recherche en HPP"),
+           INST_CALCUL       =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ),
          ),
            SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
                                fr="Liste des paramètres de sensibilité",
                                ang="List of sensitivity parameters"),
-           SOLV_NON_LOCAL  =FACT(statut='f',
-             METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS") ),
-             b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
-               RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
-             ),
-             b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
-               RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
-             ),
-             b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
-                                    fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
-               NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
-               STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-             ),
-             b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
-               TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
-               SCALING         =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
-             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
-               PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
-               RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
-             ),
-             b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
-               PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC",),defaut="LDLT_INC" ),
-               NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
-               RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
-               NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
-             ),
-             EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-           ),
-           LAGR_NON_LOCAL  =FACT(statut='f',
-             ITER_DUAL_MAXI  =SIMP(statut='f',typ='I',defaut= 50),
-             RESI_DUAL_ABSO  =SIMP(statut='o',typ='R'),
-             RESI_PRIM_ABSO  =SIMP(statut='o',typ='R'),
-             R               =SIMP(statut='f',typ='R',defaut= 1000.),
-             ITER_PRIM_MAXI  =SIMP(statut='f',typ='I',defaut= 10),
-           ),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
  )
 
-#& MODIF COMMANDE  DATE 22/05/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -23446,8 +23969,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-
-# RESPONSABLE MCOURTOI M.COURTOIS
+# RESPONSABLE COURTOIS M.COURTOIS
 
 from Macro.test_fichier_ops import test_fichier_ops
 
@@ -23455,11 +23977,17 @@ TEST_FICHIER=MACRO(nom="TEST_FICHIER", op=test_fichier_ops,
                    UIinfo={"groupes":("Impression",)},
                    fr="Tester la non régression de fichiers produits par des commandes aster",
    FICHIER          =SIMP(statut='o',typ='TXM',validators=LongStr(1,255)),
-   NB_CHIFFRE      =SIMP(statut='o',typ='I',),   # defaut=6        pas de defaut, il faut
-   EPSILON         =SIMP(statut='o',typ='R',),   # defaut=1.E-12   se poser la question !
-   EXPR_IGNORE     =SIMP(statut='f',typ='TXM',max='**',
-                         fr="Liste d'expressions régulières permettant d'ignorer certaines lignes"),
-   VALE_K          =SIMP(statut='o',typ='TXM' ),
+   EXPR_IGNORE      =SIMP(statut='f',typ='TXM',max='**',
+                          fr="Liste d'expressions régulières permettant d'ignorer certaines lignes"),
+
+   TYPE_TEST       =SIMP(statut='f',typ='TXM',defaut='SOMM',into=("SOMM_ABS","SOMM","MAXI","MINI","MAXI_ABS","MINI_ABS")),
+   NB_VALE         =SIMP(statut='o',typ='I',),
+   VALE            =SIMP(statut='f',typ='R',max='**'),
+   VALE_K          =SIMP(statut='f',typ='TXM'),
+
+   CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+   PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+
    REFERENCE       =SIMP(statut='f',typ='TXM',
                          into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
 
@@ -23469,7 +23997,7 @@ TEST_FICHIER=MACRO(nom="TEST_FICHIER", op=test_fichier_ops,
 
    INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )
-#& MODIF COMMANDE  DATE 17/10/2006   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -23487,7 +24015,7 @@ TEST_FICHIER=MACRO(nom="TEST_FICHIER", op=test_fichier_ops,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE MCOURTOI M.COURTOIS
+# RESPONSABLE COURTOIS M.COURTOIS
 TEST_FONCTION=PROC(nom="TEST_FONCTION",op= 135,
             fr="Extraction d'une valeur numérique ou d'un attribut de fonction pour comparaison à une valeur de référence",
             UIinfo={"groupes":("Impression",)},
@@ -23559,8 +24087,7 @@ TEST_FONCTION=PROC(nom="TEST_FONCTION",op= 135,
            ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 10/10/2006   AUTEUR REZETTE C.REZETTE 
-# RESPONSABLE VABHHTS J.PELLET
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -23580,6 +24107,7 @@ TEST_FONCTION=PROC(nom="TEST_FONCTION",op= 135,
 #
 #
 # ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 TEST_RESU=PROC(nom="TEST_RESU",op=23,
             UIinfo={"groupes":("Impression",)},
          fr="Extraction d'une valeur d'une structure de donnée et comparaison à une valeur de référence",
@@ -23711,12 +24239,11 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,
          ),
 
          OBJET           =FACT(statut='f',max='**',
-           regles=(UN_PARMI('S_I','S_R','RESUME',),
-                   UN_PARMI('VALE','VALE_I','VALE_C','RESUME','S_R','S_I'),),
+           regles=(UN_PARMI('S_I','S_R',),
+                   UN_PARMI('VALE','VALE_I','VALE_C','S_R','S_I'),),
            NOM             =SIMP(statut='o',typ='TXM'),
            S_R             =SIMP(statut='f',typ='R'),
            S_I             =SIMP(statut='f',typ='I'),
-           RESUME          =SIMP(statut='f',typ='I'),
            VALE            =SIMP(statut='f',typ='R'),
            VALE_I          =SIMP(statut='f',typ='I'),
            VALE_C          =SIMP(statut='f',typ='C'),
@@ -23728,7 +24255,7 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,
            VERSION         =SIMP(statut='f',typ='TXM' ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 17/04/2007   AUTEUR COURTOIS M.COURTOIS 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -23746,7 +24273,7 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
+# RESPONSABLE COURTOIS M.COURTOIS
 TEST_TABLE=PROC(nom="TEST_TABLE",op= 177,
             UIinfo={"groupes":("Impression",)},
          fr="Tester une cellule ou une colonne d'une table",
@@ -23788,7 +24315,7 @@ TEST_TABLE=PROC(nom="TEST_TABLE",op= 177,
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 13/12/2006   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -23806,6 +24333,7 @@ TEST_TABLE=PROC(nom="TEST_TABLE",op= 177,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE DURAND C.DURAND
 THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f',
             UIinfo={"groupes":("Résolution",)},
                    fr="Résoudre un problème thermique linéaire stationnaire ou transitoire",
@@ -23818,17 +24346,28 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f',
            FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
          ),
          INCREMENT       =FACT(statut='f',
-           LIST_INST       =SIMP(statut='o',typ=listr8_sdaster ),
-           NUME_INIT       =SIMP(statut='f',typ='I'),
-           NUME_FIN        =SIMP(statut='f',typ='I'),
+           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
+           LIST_INST       =SIMP(statut='o',typ=listr8_sdaster),
+           EVOLUTION       =SIMP(statut='f',typ='TXM',defaut="CHRONOLOGIQUE",
+                                 into=("CHRONOLOGIQUE","RETROGRADE","SANS",) ),
+           NUME_INST_INIT  =SIMP(statut='f',typ='I'),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           NUME_INST_FIN   =SIMP(statut='f',typ='I'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
          ),
-         TEMP_INIT       =FACT(statut='f',
+         ETAT_INIT       =FACT(statut='f',
            regles=(EXCLUS('STATIONNAIRE','EVOL_THER','CHAM_NO','VALE'),),
-           STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",)),
            EVOL_THER       =SIMP(statut='f',typ=evol_ther),
            CHAM_NO         =SIMP(statut='f',typ=cham_no_sdaster),
            VALE            =SIMP(statut='f',typ='R'),
-           NUME_INIT       =SIMP(statut='f',typ='I'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
          ),
          SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
                                fr="Liste des paramètres de sensibilité.",
@@ -23841,7 +24380,7 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f',
              NUME_INIT       =SIMP(statut='f',typ='I'),
            ),
          SOLVEUR         =FACT(statut='d',
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS") ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
            b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
            ),
@@ -23862,29 +24401,44 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f',
            ),
            b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
-             SCALING         =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
              RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
-             RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.E-6,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="CENTRALISE",
+                                   into=("CENTRALISE","DISTRIBUE_MC","DISTRIBUE_MD","DISTRIBUE_SD")),
+             PARTITION       =SIMP(statut='f',typ=sd_feti_sdaster),
+             CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,min=0,max=100),
+             CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,min=0),
              ),
+
+           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+             VARIANTE        =SIMP(statut='f',typ='TXM',into=("GMRES","BCGS","CR","CG","BICG","CHEBYCHEV",),defaut="GMRES" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("ILU","SOR","BJACOBI"),defaut="ILU" ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-8),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
+           ),
          ),
          PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57),
          ARCHIVAGE       =FACT(statut='f',
-           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH','LIST_INST','INST'),),
-           LIST_ARCH       =SIMP(statut='f',typ=listis_sdaster),
-           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
-           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
-           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",
-                                 into=("RELATIF","ABSOLU")),
-           PAS_ARCH        =SIMP(statut='f',typ='I'),
-           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',into=("VARI",)),
+           regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
+                   EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
+           LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+           ARCH_ETAT_INIT  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+           DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                                 into=("VARI",)),
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 13/12/2006   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -23902,6 +24456,7 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE DURAND C.DURAND
 THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f',
             UIinfo={"groupes":("Résolution",)},
                    fr="Résoudre un problème thermique non linéaire (conditions limites ou comportement matériau)"
@@ -23930,17 +24485,65 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f',
            FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
          ),
          INCREMENT       =FACT(statut='f',
+           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
            LIST_INST       =SIMP(statut='o',typ=listr8_sdaster),
-           NUME_INIT       =SIMP(statut='f',typ='I'),
-           NUME_FIN        =SIMP(statut='f',typ='I'),
+           EVOLUTION       =SIMP(statut='f',typ='TXM',defaut="CHRONOLOGIQUE",
+                                 into=("CHRONOLOGIQUE","RETROGRADE","SANS",) ),
+           NUME_INST_INIT  =SIMP(statut='f',typ='I'),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           NUME_INST_FIN   =SIMP(statut='f',typ='I'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+           # DEBUT DE BLOC POUR LA SUBDIVISION DES PAS DE TEMPS
+           SUBD_METHODE    =SIMP( statut='f',typ='TXM',
+              into =("AUCUNE","UNIFORME","EXTRAPOLE"),
+              defaut="AUCUNE",
+              fr="Méthode de subdivision des pas de temps en cas de non-convergence"
+           ),
+           b_subd_unif=BLOC(condition = "SUBD_METHODE == 'UNIFORME'",
+             regles=(AU_MOINS_UN('SUBD_NIVEAU','SUBD_PAS_MINI'),),
+             SUBD_COEF_PAS_1=SIMP(statut='f',typ='R',defaut=1.0,val_min=0.0,
+                fr="Coefficient multiplicateur de la 1ère subdivision"),
+             SUBD_PAS       =SIMP(statut='f',typ='I',defaut=4,val_min=2,
+                fr="Nombre de subdivision d'un pas de temps"),
+             SUBD_NIVEAU=SIMP(statut='f',typ='I',val_min=2,
+                fr="Nombre maximum de niveau de subdivision d'un pas de temps"),
+             SUBD_PAS_MINI=SIMP(statut='f',typ='R',val_min=0.0,
+                fr="Pas de temps en dessous duquel on ne subdivise plus"),
+           ),
+           b_subd_extr=BLOC(condition = "SUBD_METHODE == 'EXTRAPOLE'",
+             regles=(AU_MOINS_UN('SUBD_NIVEAU','SUBD_PAS_MINI'),),
+             SUBD_OPTION    =SIMP(statut='f',typ='TXM',
+                into =("IGNORE_PREMIERES","GARDE_DERNIERES",),
+                defaut="IGNORE_PREMIERES",
+                fr="Technique d'extrapolation : les 1ere itérations sont ignorées ou les dernières sont gardées"),
+             SUBD_ITER_IGNO =SIMP(statut='c',typ='I',defaut=3,val_min=0,
+                fr="Les n premières itérations sont ignorées pour l'extrapolation"),
+             SUBD_ITER_FIN  =SIMP(statut='c',typ='I',defaut=8,val_min=3,
+                fr="Seules les n dernières itérations sont prises pour l'extrapolation"),
+             SUBD_PAS       =SIMP(statut='c',typ='I',defaut=4,val_min=2,
+                fr="Nombre de subdivision d'un pas de temps en cas divergence"),
+             SUBD_NIVEAU=SIMP(statut='f',typ='I',val_min=2,
+                fr="Nombre maximum de niveau de subdivision d'un pas de temps"),
+             SUBD_PAS_MINI=SIMP(statut='f',typ='R',val_min=0.0,
+                fr="Pas de temps en dessous duquel on ne subdivise plus"),
+             SUBD_ITER_PLUS =SIMP(statut='c',typ='I',defaut=50,val_min=20,
+                fr="% itération autorisée en plus"),
+           ),
+           # FIN DE BLOC POUR LA SUBDIVISION DES PAS DE TEMPS
          ),
-         TEMP_INIT       =FACT(statut='f',
+         ETAT_INIT       =FACT(statut='f',
            regles=(EXCLUS('STATIONNAIRE','EVOL_THER','CHAM_NO','VALE'),),
            STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",)),
            EVOL_THER       =SIMP(statut='f',typ=evol_ther),
            CHAM_NO         =SIMP(statut='f',typ=cham_no_sdaster),
            VALE            =SIMP(statut='f',typ='R'),
-           NUME_INIT       =SIMP(statut='f',typ='I'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
          ),
          NEWTON          =FACT(statut='d',
            REAC_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
@@ -23957,7 +24560,7 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f',
                                ang="List of sensitivity parameters",
          ),
          SOLVEUR         =FACT(statut='d',
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS") ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
            b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Parametres de la méthode multi frontale",
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
            ),
@@ -23978,24 +24581,55 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f',
            ),
            b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
-             SCALING         =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
              RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="CENTRALISE",
+                                   into=("CENTRALISE","DISTRIBUE_MC","DISTRIBUE_MD","DISTRIBUE_SD")),
+             PARTITION       =SIMP(statut='f',typ=sd_feti_sdaster),
+             CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,min=0,max=100),
+             CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,min=0),
              ),
+
+           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+             VARIANTE        =SIMP(statut='f',typ='TXM',into=("GMRES","BCGS","CR","CG","BICG","CHEBYCHEV",),defaut="GMRES" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("ILU","SOR","BJACOBI"),defaut="ILU" ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-8),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
+           ),
            SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
          ),
          PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57 ),
          ARCHIVAGE       =FACT(statut='f',
-           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH','LIST_INST','INST', ),),
-           LIST_ARCH       =SIMP(statut='f',typ=(listis_sdaster) ),
+           regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
+                   EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
            LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
-           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
-           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
-           PAS_ARCH        =SIMP(statut='f',typ='I'),
-           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',into=("VARI",)),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+           ARCH_ETAT_INIT  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+           DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                                 into=("VARI",)),
+         ),
+         OBSERVATION     =FACT(statut='f',max='**',
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),
+           SUIVI_DDL       =SIMP(statut='c',typ='TXM',defaut="NON",max=1,into=("NON",)),
+         b_non_suivi      =BLOC(condition = "SUIVI_DDL == 'NON' ",
+                                regles=(UN_PARMI('NOEUD','GROUP_NO')),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("TEMP",)),
+             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+             LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+             PAS_OBSE        =SIMP(statut='f',typ='I'),
+             LIST_ARCH       =SIMP(statut='f',typ=listis_sdaster),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),),
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          OPTION          =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=2,
@@ -24003,7 +24637,7 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f',
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 
 )  ;
-#& MODIF COMMANDE  DATE 22/06/2005   AUTEUR REZETTE C.REZETT
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVR
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -24021,6 +24655,7 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
+# RESPONSABLE DURAND C.DURAND
 THER_NON_LINE_MO=OPER(nom="THER_NON_LINE_MO",op= 171,sd_prod=evol_ther,
                      fr="Résoudre un problème thermique non linéaire (conditions limites ou comportement matériau)"
                         +" stationnaire avec chargement mobile",
@@ -24033,9 +24668,9 @@ THER_NON_LINE_MO=OPER(nom="THER_NON_LINE_MO",op= 171,sd_prod=evol_ther,
            CHARGE          =SIMP(statut='o',typ=char_ther ),
            FONC_MULT       =SIMP(statut='c',typ=(fonction_sdaster,nappe_sdaster,formule) ),
          ),
-         TEMP_INIT       =FACT(statut='f',
+         ETAT_INIT       =FACT(statut='f',
            EVOL_THER       =SIMP(statut='f',typ=evol_ther ),
-           NUME_INIT       =SIMP(statut='f',typ='I',defaut= 0 ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',defaut= 0 ),
          ),
          CONVERGENCE     =FACT(statut='d',
            CRIT_TEMP_RELA  =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
index 16a3f8c6632a910c40873ea97094f9dc374c51f3..90a38f53e0adb593e6b24af8ba871f6ac52b8865 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF ops Cata  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF ops Cata  DATE 02/06/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -38,13 +38,13 @@ try:
    Build.B_CODE.CODE.codex=aster
    
    from Utilitai.Utmess   import UTMESS
-   from Utilitai.as_timer import ASTER_TIMER
-   from Macro.Sensibilite import MEMORISATION_SENSIBILITE
+   from Build.B_SENSIBILITE_MEMO_NOM_SENSI import MEMORISATION_SENSIBILITE
+   from Execution.E_Global import MessageLog
 except:
    aster_exists = False
 
 
-def commun_DEBUT_POURSUITE(jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG):
+def commun_DEBUT_POURSUITE(jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM):
    """Fonction sdprod partie commune à DEBUT et POURSUITE.
    (on stocke un entier au lieu du logique)
    """
@@ -57,13 +57,22 @@ def commun_DEBUT_POURSUITE(jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG):
    if CODE != None:
       jdc.fico = CODE['NOM']
    if aster_exists:
-      jdc.timer = ASTER_TIMER(format='aster')
       # en POURSUITE, ne pas écraser la mémorisation existante.
       if not hasattr(jdc, 'memo_sensi'):
          jdc.memo_sensi = MEMORISATION_SENSIBILITE()
+         jdc.memo_sensi.reparent(jdc)
 
+      if hasattr(jdc, 'msg_init') and jdc.msg_init == 1:
+         # messages d'alarmes désactivés
+         if IGNORE_ALARM:
+            if not type(IGNORE_ALARM) in (list, tuple):
+               IGNORE_ALARM = [IGNORE_ALARM]
+            for idmess in IGNORE_ALARM:
+               MessageLog.disable_alarm(idmess)
+      jdc.msg_init = True
 
-def DEBUT(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args):
+
+def DEBUT(self, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM, **args):
    """
        Fonction sdprod de la macro DEBUT
    """
@@ -71,7 +80,7 @@ def DEBUT(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args):
    if self.jdc is not self.parent :
       raise Accas.AsException("La commande DEBUT ne peut exister qu'au niveau jdc")
 
-   commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG)
+   commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM)
 
 
 def build_debut(self,**args):
@@ -94,7 +103,7 @@ def build_debut(self,**args):
    self.definition.op=None
    return ier
 
-def POURSUITE(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args):
+def POURSUITE(self, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM, **args):
    """
        Fonction sdprod de la macro POURSUITE
    """
@@ -102,7 +111,7 @@ def POURSUITE(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args):
    if self.jdc is not self.parent :
       raise Accas.AsException("La commande POURSUITE ne peut exister qu'au niveau jdc")
 
-   commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG)
+   commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM)
    
    if (self.codex and os.path.isfile("glob.1") or os.path.isfile("bhdf.1")):
      # Le module d'execution est accessible et glob.1 est present
@@ -150,10 +159,10 @@ def POURSUITE(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args):
      # On supprime du pickle_context les concepts valant None, ca peut 
      # etre le cas des concepts non executés, placés après FIN.
      pickle_context=get_pickled_context()
-     self.jdc.restore_pickled_attrs(pickle_context)
      if pickle_context==None :
-        UTMESS('F','Poursuite',"Erreur a la relecture du fichier pick.1 : aucun objet sauvegardé ne sera récupéré")
+        UTMESS('F','SUPERVIS_86')
         return
+     self.jdc.restore_pickled_attrs(pickle_context)
      from Cata.cata  import ASSD,entier
      from Noyau.N_CO import CO
      for elem in pickle_context.keys():
@@ -162,18 +171,21 @@ def POURSUITE(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args):
             # on rattache chaque assd au nouveau jdc courant (en poursuite)
             pickle_context[elem].jdc=self.jdc
             pickle_context[elem].parent=self.jdc
+            # pour que sds_dict soit cohérent avec g_context
+            self.jdc.sds_dict[elem] = pickle_context[elem]
+            assert elem == pickle_context[elem].nom
             # rétablir le parent pour les attributs de la SD
             pickle_context[elem].reparent_sd()
             if elem in self.g_context.keys():
                poursu_class=self.g_context[elem].__class__
                if poursu_class!=pickle_class :
-                  UTMESS('F','Poursuite',"Types incompatibles entre glob.1 et pick.1 pour concept de nom "+elem)
+                  UTMESS('F','SUPERVIS_87',valk=[elem])
                   return
             elif isinstance(pickle_context[elem],ASSD) and pickle_class not in (CO,entier) : 
             # on n'a pas trouvé le concept dans la base et sa classe est ASSD : ce n'est pas normal
             # sauf dans le cas de CO : il n'a alors pas été typé et c'est normal qu'il soit absent de la base
             # meme situation pour le type 'entier' produit uniquement par DEFI_FICHIER
-               UTMESS('F','Poursuite',"Concept de nom "+elem+" et de type "+str(pickle_class)+" introuvable dans la base globale")
+               UTMESS('F','SUPERVIS_88',valk=[elem,str(pickle_class)])
                return
          if pickle_context[elem]==None : del pickle_context[elem]
      self.g_context.update(pickle_context)
@@ -194,14 +206,14 @@ def get_pickled_context():
        les objets python qui auraient été sauvegardés, sous forme pickled, lors d'une 
        précédente étude. Un fichier pick.1 doit etre présent dans le répertoire de travail
     """
-    if os.path.isfile("pick.1"):
-       file="pick.1"
-    else: return None
+    fpick = 'pick.1'
+    if not os.path.isfile(fpick):
+       return None
    
     # Le fichier pick.1 est présent. On essaie de récupérer les objets python sauvegardés
     context={}
     try:
-       file=open(file,'r')
+       file=open(fpick,'r')
        # Le contexte sauvegardé a été picklé en une seule fois. Il est seulement
        # possible de le récupérer en bloc. Si cette opération echoue, on ne récupère
        # aucun objet.
@@ -209,7 +221,7 @@ def get_pickled_context():
        file.close()
     except:
        # En cas d'erreur on ignore le contenu du fichier
-       traceback.print_exc()
+       traceback.print_exc()
        return None
 
     return context
@@ -224,7 +236,8 @@ def POURSUITE_context(self,d):
    # On ajoute directement les concepts dans le contexte du jdc
    # XXX est ce que les concepts ne sont pas ajoutés plusieurs fois ??
    for v in self.g_context.values():
-      if isinstance(v,ASSD) : self.jdc.sds.append(v)
+      if isinstance(v,ASSD) :
+         self.jdc.sds.append(v)
 
 def build_poursuite(self,**args):
    """
@@ -276,49 +289,42 @@ def detruire(self,d):
    """
        Cette fonction est la fonction op_init de la PROC DETRUIRE
    """
+   if hasattr(self,"executed") and self.executed == 1:
+      return
    if self["CONCEPT"]!=None:
-     sd=[]
-     for mc in self["CONCEPT"]:
-       mcs=mc["NOM"]
-       if mcs is None:continue
-       if type(mcs) == types.ListType or type(mcs) == types.TupleType:
-         for e in mcs:
-           if isinstance(e,ASSD):
-             sd.append(e)
-             e=e.nom
-       # traitement particulier pour les listes de concepts, on va mettre à None
-       # le terme de l'indice demandé dans la liste :
-       # nomconcept_i est supprimé, nomconcept[i]=None
-           indice=e[e.rfind('_')+1:]
-           concept_racine=e[:e.rfind('_')]
-           if indice!='' and d.has_key(concept_racine) and type(d[concept_racine])==types.ListType:
-              try               :
-                                  indici=int(indice)
-                                  d[concept_racine][indici]=None
-              except ValueError : pass
-       # pour tous les concepts :
-           if d.has_key(e):del d[e]
-           if self.jdc.sds_dict.has_key(e):del self.jdc.sds_dict[e]
-       else:
-         if isinstance(mcs,ASSD):
-           sd.append(mcs)
-           mcs=mcs.nom
-       # traitement particulier pour les listes de concepts, on va mettre à None
-       # le terme de l'indice demandé dans la liste :
-       # nomconcept_i est supprimé, nomconcept[i]=None
-         indice=mcs[mcs.rfind('_')+1:]
-         concept_racine=mcs[:mcs.rfind('_')]
-         if indice!='' and d.has_key(concept_racine) and type(d[concept_racine])==types.ListType:
-            try               :
-                                indici=int(indice)
-                                d[concept_racine][indici]=None
-            except ValueError : pass
-       # pour tous les concepts :
-         if d.has_key(mcs):del d[mcs]
-         if self.jdc.sds_dict.has_key(mcs):del self.jdc.sds_dict[mcs]
-     for s in sd:
-       # On signale au parent que le concept s n'existe plus apres l'étape self 
-       self.parent.delete_concept_after_etape(self,s)
+      sd = []
+      for mc in self["CONCEPT"]:
+         mcs = mc["NOM"]
+         if mcs is None:
+            continue
+         if type(mcs) not in (list, tuple):
+            mcs = [mcs]
+       
+         for co in mcs:
+            if isinstance(co, ASSD):
+               sd.append(co)
+               co = co.nom
+            # traitement particulier pour les listes de concepts, on va mettre à None
+            # le terme de l'indice demandé dans la liste :
+            # nomconcept_i est supprimé, nomconcept[i]=None
+            i = co.rfind('_')
+            if i > 0 and not co.endswith('_'):
+               concept_racine = co[:i]
+               if d.has_key(concept_racine) and type(d[concept_racine]) is list:
+                  try:
+                     num = int(co[i+1:])
+                     d[concept_racine][num] = None
+                  except (ValueError, IndexError):
+                     # cas : RESU_aaa ou (RESU_8 avec RESU[8] non initialisé)
+                     pass
+            # pour tous les concepts :
+            if d.has_key(co):
+               del d[co]
+            if self.jdc.sds_dict.has_key(co):
+               del self.jdc.sds_dict[co]
+      for s in sd:
+         # On signale au parent que le concept s n'existe plus apres l'étape self 
+         self.parent.delete_concept_after_etape(self,s)
 
 def subst_materiau(text,NOM_MATER,EXTRACTION,UNITE_LONGUEUR):
    """
diff --git a/Aster/Cata/petitcata/ops.py b/Aster/Cata/petitcata/ops.py
new file mode 100644 (file)
index 0000000..c8163ee
--- /dev/null
@@ -0,0 +1,469 @@
+#@ MODIF ops Cata  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  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.      
+# ======================================================================
+
+
+# Modules Python
+import types
+import string,linecache,os,traceback,re
+import pickle
+
+# Modules Eficas
+import Accas
+from Accas import ASSD
+from Noyau.ascheckers     import CheckLog
+
+try:
+   import aster
+   aster_exists = True
+   # Si le module aster est présent, on le connecte
+   # au JDC
+   import Build.B_CODE
+   Build.B_CODE.CODE.codex=aster
+   
+   from Utilitai.Utmess   import UTMESS
+   from Macro.Sensibilite import MEMORISATION_SENSIBILITE
+except:
+   aster_exists = False
+
+
+def commun_DEBUT_POURSUITE(jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG):
+   """Fonction sdprod partie commune à DEBUT et POURSUITE.
+   (on stocke un entier au lieu du logique)
+   """
+   jdc.par_lot    = PAR_LOT
+   jdc.impr_macro = int(IMPR_MACRO == 'OUI')
+   jdc.jxveri     = int(DEBUG != None and DEBUG['JXVERI'] == 'OUI')
+   jdc.sdveri     = int(DEBUG != None and DEBUG['SDVERI'] == 'OUI')
+   jdc.fico       = None
+   jdc.sd_checker = CheckLog()
+   if CODE != None:
+      jdc.fico = CODE['NOM']
+   if aster_exists:
+      # on commence l'execution proprement dite, fin des initialisations
+      jdc.timer.Stop('JDC init')
+      # en POURSUITE, ne pas écraser la mémorisation existante.
+      if not hasattr(jdc, 'memo_sensi'):
+         jdc.memo_sensi = MEMORISATION_SENSIBILITE()
+
+
+def DEBUT(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args):
+   """
+       Fonction sdprod de la macro DEBUT
+   """
+   # La commande DEBUT ne peut exister qu'au niveau jdc
+   if self.jdc is not self.parent :
+      raise Accas.AsException("La commande DEBUT ne peut exister qu'au niveau jdc")
+
+   commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG)
+
+
+def build_debut(self,**args):
+   """
+   Fonction ops pour la macro DEBUT
+   """
+   self.jdc.UserError=self.codex.error
+
+   if self.jdc.par_lot == 'NON' :
+      self.jdc._Build()
+   # On execute la fonction debut pour initialiser les bases
+   # Cette execution est indispensable avant toute autre action sur ASTER
+   # op doit etre un entier car la fonction debut appelle GCECDU qui demande
+   # le numero de l'operateur associé (getoper)
+   self.definition.op=0
+   self.set_icmd(1)
+   lot,ier=self.codex.debut(self,1)
+   # On remet op a None juste apres pour eviter que la commande DEBUT
+   # ne soit executée dans la phase d'execution
+   self.definition.op=None
+   return ier
+
+def POURSUITE(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args):
+   """
+       Fonction sdprod de la macro POURSUITE
+   """
+   # La commande POURSUITE ne peut exister qu'au niveau jdc
+   if self.jdc is not self.parent :
+      raise Accas.AsException("La commande POURSUITE ne peut exister qu'au niveau jdc")
+
+   commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG)
+   
+   if (self.codex and os.path.isfile("glob.1") or os.path.isfile("bhdf.1")):
+     # Le module d'execution est accessible et glob.1 est present
+     # Pour eviter de rappeler plusieurs fois la sequence d'initialisation
+     # on memorise avec l'attribut fichier_init que l'initialisation
+     # est réalisée
+     if hasattr(self,'fichier_init'):return
+     self.fichier_init='glob.1'
+     self.jdc.initexec()
+     # le sous programme fortran appelé par self.codex.poursu demande le numero
+     # de l'operateur (GCECDU->getoper), on lui donne la valeur 0
+     self.definition.op=0
+     lot,ier,lonuti,concepts=self.codex.poursu(self,1)
+     # Par la suite pour ne pas executer la commande pendant la phase
+     # d'execution on le remet à None
+     self.definition.op=None
+     # On demande la numerotation de la commande POURSUITE avec l'incrément
+     # lonuti pour qu'elle soit numérotée à la suite des commandes existantes.
+####CD     self.set_icmd(lonuti)    Non : on repart à zéro
+     pos=0
+     d={}
+     while pos+80 < len(concepts)+1:
+       nomres=concepts[pos:pos+8]
+       concep=concepts[pos+8:pos+24]
+       nomcmd=concepts[pos+24:pos+40]
+       statut=concepts[pos+40:pos+48]
+       print nomres,concep,nomcmd,statut
+       if nomres[0] not in (' ','.','&') and statut != '&DETRUIT':
+          exec nomres+'='+string.lower(concep)+'()' in self.parent.g_context,d
+       elif statut == '&DETRUIT' : self.jdc.nsd = self.jdc.nsd+1
+       pos=pos+80
+     # ces ASSD seront écrasées par le pick.1,
+     # on vérifiera la cohérence de type entre glob.1 et pick.1
+     for k,v in d.items():
+       self.parent.NommerSdprod(v,k)
+     self.g_context=d
+
+     # Il peut exister un contexte python sauvegardé sous forme  pickled
+     # On récupère ces objets après la restauration des concepts pour que
+     # la récupération des objets pickled soit prioritaire.
+     # On vérifie que les concepts relus dans glob.1 sont bien tous
+     # presents sous le meme nom et du meme type dans pick.1
+     # Le contexte est ensuite updaté (surcharge) et donc enrichi des
+     # variables qui ne sont pas des concepts.
+     # On supprime du pickle_context les concepts valant None, ca peut 
+     # etre le cas des concepts non executés, placés après FIN.
+     pickle_context=get_pickled_context()
+     self.jdc.restore_pickled_attrs(pickle_context)
+     if pickle_context==None :
+        UTMESS('F','SUPERVIS_86')
+        return
+     from Cata.cata  import ASSD,entier
+     from Noyau.N_CO import CO
+     for elem in pickle_context.keys():
+         if isinstance(pickle_context[elem], ASSD):
+            pickle_class=pickle_context[elem].__class__
+            # on rattache chaque assd au nouveau jdc courant (en poursuite)
+            pickle_context[elem].jdc=self.jdc
+            pickle_context[elem].parent=self.jdc
+            # rétablir le parent pour les attributs de la SD
+            pickle_context[elem].reparent_sd()
+            if elem in self.g_context.keys():
+               poursu_class=self.g_context[elem].__class__
+               if poursu_class!=pickle_class :
+                  UTMESS('F','SUPERVIS_87',valk=[elem])
+                  return
+            elif isinstance(pickle_context[elem],ASSD) and pickle_class not in (CO,entier) : 
+            # on n'a pas trouvé le concept dans la base et sa classe est ASSD : ce n'est pas normal
+            # sauf dans le cas de CO : il n'a alors pas été typé et c'est normal qu'il soit absent de la base
+            # meme situation pour le type 'entier' produit uniquement par DEFI_FICHIER
+               UTMESS('F','SUPERVIS_88',valk=[elem,str(pickle_class)])
+               return
+         if pickle_context[elem]==None : del pickle_context[elem]
+     self.g_context.update(pickle_context)
+     return
+
+   else:
+     # Si le module d'execution n est pas accessible ou glob.1 absent on 
+     # demande un fichier (EFICAS)
+     # Il faut éviter de réinterpréter le fichier à chaque appel de
+     # POURSUITE
+     if hasattr(self,'fichier_init'):
+        return
+     self.make_poursuite()
+
+def get_pickled_context():
+    """
+       Cette fonction permet de réimporter dans le contexte courant du jdc (jdc.g_context)
+       les objets python qui auraient été sauvegardés, sous forme pickled, lors d'une 
+       précédente étude. Un fichier pick.1 doit etre présent dans le répertoire de travail
+    """
+    if os.path.isfile("pick.1"):
+       file="pick.1"
+    else: return None
+   
+    # Le fichier pick.1 est présent. On essaie de récupérer les objets python sauvegardés
+    context={}
+    try:
+       file=open(file,'r')
+       # Le contexte sauvegardé a été picklé en une seule fois. Il est seulement
+       # possible de le récupérer en bloc. Si cette opération echoue, on ne récupère
+       # aucun objet.
+       context=pickle.load(file)
+       file.close()
+    except:
+       # En cas d'erreur on ignore le contenu du fichier
+       # traceback.print_exc()
+       return None
+
+    return context
+
+def POURSUITE_context(self,d):
+   """
+       Fonction op_init de la macro POURSUITE
+   """
+   # self représente la macro POURSUITE ...
+   d.update(self.g_context)
+   # Une commande POURSUITE n'est possible qu'au niveau le plus haut
+   # On ajoute directement les concepts dans le contexte du jdc
+   # XXX est ce que les concepts ne sont pas ajoutés plusieurs fois ??
+   for v in self.g_context.values():
+      if isinstance(v,ASSD) : self.jdc.sds.append(v)
+
+def build_poursuite(self,**args):
+   """
+   Fonction ops pour la macro POURSUITE
+   """
+   # Pour POURSUITE on ne modifie pas la valeur initialisee dans ops.POURSUITE
+   # Il n y a pas besoin d executer self.codex.poursu (c'est deja fait dans
+   # la fonction sdprod de la commande (ops.POURSUITE))
+   self.set_icmd(1)
+   self.jdc.UserError=self.codex.error
+   return 0
+
+def INCLUDE(self,UNITE,**args):
+   """ 
+       Fonction sd_prod pour la macro INCLUDE
+   """
+   if not UNITE : return
+   if hasattr(self,'unite'):return
+   self.unite=UNITE
+
+   if self.jdc and self.jdc.par_lot == 'NON':
+      # On est en mode commande par commande, on appelle la methode speciale
+      self.Execute_alone()
+
+   self.make_include(unite=UNITE)
+
+def INCLUDE_context(self,d):
+   """ 
+       Fonction op_init pour macro INCLUDE
+   """
+   for k,v in self.g_context.items():
+      d[k]=v
+
+def build_include(self,**args):
+   """
+   Fonction ops de la macro INCLUDE appelée lors de la phase de Build
+   """
+   # Pour presque toutes les commandes (sauf FORMULE et POURSUITE)
+   # le numero de la commande n est pas utile en phase de construction
+   # La macro INCLUDE ne sera pas numérotée (incrément=None)
+   ier=0
+   self.set_icmd(None)
+   icmd=0
+   # On n'execute pas l'ops d'include en phase BUILD car il ne sert a rien.
+   #ier=self.codex.opsexe(self,icmd,-1,1)
+   return ier
+
+def detruire(self,d):
+   """
+       Cette fonction est la fonction op_init de la PROC DETRUIRE
+   """
+   if hasattr(self,"executed") and self.executed == 1:
+      return
+   if self["CONCEPT"]!=None:
+     sd=[]
+     for mc in self["CONCEPT"]:
+       mcs=mc["NOM"]
+       if mcs is None:continue
+       if type(mcs) == types.ListType or type(mcs) == types.TupleType:
+         for e in mcs:
+           if isinstance(e,ASSD):
+             sd.append(e)
+             e=e.nom
+       # traitement particulier pour les listes de concepts, on va mettre à None
+       # le terme de l'indice demandé dans la liste :
+       # nomconcept_i est supprimé, nomconcept[i]=None
+           indice=e[e.rfind('_')+1:]
+           concept_racine=e[:e.rfind('_')]
+           if indice!='' and d.has_key(concept_racine) and type(d[concept_racine])==types.ListType:
+              try               :
+                                  indici=int(indice)
+                                  d[concept_racine][indici]=None
+              except ValueError : pass
+       # pour tous les concepts :
+           if d.has_key(e):del d[e]
+           if self.jdc.sds_dict.has_key(e):del self.jdc.sds_dict[e]
+       else:
+         if isinstance(mcs,ASSD):
+           sd.append(mcs)
+           mcs=mcs.nom
+       # traitement particulier pour les listes de concepts, on va mettre à None
+       # le terme de l'indice demandé dans la liste :
+       # nomconcept_i est supprimé, nomconcept[i]=None
+         indice=mcs[mcs.rfind('_')+1:]
+         concept_racine=mcs[:mcs.rfind('_')]
+         if indice!='' and d.has_key(concept_racine) and type(d[concept_racine])==types.ListType:
+            try               :
+                                indici=int(indice)
+                                d[concept_racine][indici]=None
+            except ValueError : pass
+       # pour tous les concepts :
+         if d.has_key(mcs):del d[mcs]
+         if self.jdc.sds_dict.has_key(mcs):del self.jdc.sds_dict[mcs]
+     for s in sd:
+       # On signale au parent que le concept s n'existe plus apres l'étape self 
+       self.parent.delete_concept_after_etape(self,s)
+
+def subst_materiau(text,NOM_MATER,EXTRACTION,UNITE_LONGUEUR):
+   """
+       Cette fonction retourne un texte obtenu à partir du texte passé en argument (text)
+       en substituant le nom du materiau par NOM_MATER 
+       et en réalisant les extractions spéciifées dans EXTRACTION
+   """
+   lines=string.split(text,'\n')
+
+##### traitement de UNIT : facteur multiplicatif puissance de 10
+   regmcsu=re.compile(r" *(.*) *= *([^ ,]*) *## +([^ ]*) *([^ ]*)")
+   ll_u=[]
+   for l in lines:
+       m=regmcsu.match(l)
+       if m:
+          if m.group(3) == "UNIT":
+             if   UNITE_LONGUEUR=='M'  : coef = '0'
+             elif UNITE_LONGUEUR=='MM' : coef = m.group(4)
+             ll_u.append(m.group(1)+" = "+m.group(2)+coef)
+          else : ll_u.append(l)
+       else : ll_u.append(l)
+
+##### traitement de EXTRACTION
+   if EXTRACTION:
+     regmcf=re.compile(r" *(.*) *= *_F\( *## +(.*) +(.*)")
+     regmcs=re.compile(r" *(.*) *= *([^ ,]*) *, *## +([^ ]*) *([^ ]*)")
+     regfin=re.compile(r" *\) *")
+     ll=[]
+     temps={};lmcf=[]
+     for e in EXTRACTION:
+       mcf=e['COMPOR']
+       lmcf.append(mcf)
+       temps[mcf]=e['TEMP_EVAL']
+     FLAG=0
+     for l in ll_u:
+       m=regmcf.match(l)
+       if m: # On a trouve un mot cle facteur "commentarise"
+         if m.group(2) == "SUBST": # il est de plus substituable
+           if temps.has_key(m.group(3)): # Il est a substituer
+             ll.append(" "+m.group(3)+"=_F(")
+             mcf=m.group(3)
+             TEMP=temps[mcf]
+             FLAG=1 # Indique que l'on est en cours de substitution
+           else: # Il n est pas a substituer car il n est pas dans la liste demandee
+             ll.append(l)
+         else: # Mot cle facteur commentarise non substituable
+           ll.append(l)
+       else:  # La ligne ne contient pas un mot cle facteur commentarise
+         if FLAG == 0: # On n est pas en cours de substitution
+           ll.append(l)
+         else: # On est en cours de substitution. On cherche les mots cles simples commentarises
+           m=regmcs.match(l)
+           if m: # On a trouve un mot cle simple commentarise
+             if m.group(3) == "EVAL":
+               ll.append("  "+m.group(1)+' = '+m.group(4)+"("+str(TEMP)+'),')
+             elif m.group(3) == "SUPPR":
+               pass
+             else:
+               ll.append(l)
+           else: # On cherche la fin du mot cle facteur en cours de substitution
+             m=regfin.match(l)
+             if m: # On l a trouve. On le supprime de la liste
+               FLAG=0
+               del temps[mcf]
+             ll.append(l)
+   else:
+     ll=ll_u
+
+   lines=ll
+   ll=[]
+   for l in lines:
+     l=re.sub(" *MAT *= *",NOM_MATER+" = ",l,1)
+     ll.append(l)
+   text=string.join(ll,'\n')
+   return text
+
+def post_INCLUDE(self):
+  """
+      Cette fonction est executée apres toutes les commandes d'un INCLUDE (RETOUR)
+      Elle sert principalement pour les INCLUDE_MATERIAU : remise a blanc du prefixe Fortran
+  """
+  self.codex.opsexe(self,0,-1,2)
+
+def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER,
+                    EXTRACTION,UNITE_LONGUEUR,INFO,**args):
+  """ 
+      Fonction sd_prod pour la macro INCLUDE_MATERIAU
+  """
+  mat=string.join((NOM_AFNOR,'_',TYPE_MODELE,'_',VARIANTE,'.',TYPE_VALE),'')
+  if not hasattr(self,'mat') or self.mat != mat or self.nom_mater != NOM_MATER :
+    # On récupère le répertoire des matériaux dans les arguments 
+    # supplémentaires du JDC
+    rep_mat=self.jdc.args.get("rep_mat","NOrep_mat")
+    f=os.path.join(rep_mat,mat)
+    self.mat=mat
+    self.nom_mater=NOM_MATER
+    if not os.path.isfile(f):
+       del self.mat
+       self.make_contexte(f,"#Texte sans effet pour reinitialiser le contexte a vide\n")
+       raise "Erreur sur le fichier materiau: "+f
+    # Les materiaux sont uniquement disponibles en syntaxe Python
+    # On lit le fichier et on supprime les éventuels \r
+    text=string.replace(open(f).read(),'\r\n','\n')
+    # On effectue les substitutions necessaires
+    self.text= subst_materiau(text,NOM_MATER,EXTRACTION,UNITE_LONGUEUR)
+    if INFO == 2:
+      print "INCLUDE_MATERIAU: ", self.mat,' ',NOM_MATER,'\n'
+      print self.text
+    # on execute le texte fourni dans le contexte forme par
+    # le contexte de l etape pere (global au sens Python)
+    # et le contexte de l etape (local au sens Python)
+    # Il faut auparavant l'enregistrer aupres du module linecache (utile pour nommage.py)
+    linecache.cache[f]=0,0,string.split(self.text,'\n'),f
+
+    self.postexec=post_INCLUDE
+
+    if self.jdc.par_lot == 'NON':
+      # On est en mode commande par commande, on appelle la methode speciale
+      self.Execute_alone()
+
+    self.make_contexte(f,self.text)
+    for k,v in self.g_context.items() :
+        if isinstance(v,ASSD) and k!=v.nom : del self.g_context[k]
+
+def build_procedure(self,**args):
+    """
+    Fonction ops de la macro PROCEDURE appelée lors de la phase de Build
+    """
+    ier=0
+    # Pour presque toutes les commandes (sauf FORMULE et POURSUITE)
+    # le numero de la commande n est pas utile en phase de construction
+    # On ne numérote pas une macro PROCEDURE (incrément=None)
+    self.set_icmd(None)
+    icmd=0
+    #ier=self.codex.opsexe(self,icmd,-1,3)
+    return ier
+
+def build_DEFI_FICHIER(self,**args):
+    """
+    Fonction ops de la macro DEFI_FICHIER
+    """
+    ier=0
+    self.set_icmd(1)
+    icmd=0
+    ier=self.codex.opsexe(self,icmd,-1,26)
+    return ier
index 1f14ec0e345ab0febde2878ce8244d512c9f6964..485c0f7726ca590f9bd7149e7552a76da50108e9 100644 (file)
@@ -1,5 +1,4 @@
 
-
 DEBUT();
 
 MA=LIRE_MAILLAGE();
@@ -10,10 +9,10 @@ kk=DEFI_MATERIAU(ELAS=_F(E=56.24,
 uu=DEFI_MATERIAU(ELAS=_F(E=56.24,
                          NU=0.3,),);
 
-sansnom=DEFI_MATERIAU(ELAS=_F(E=56.24,
-                           NU=0.3,),);
+zezea=DEFI_MATERIAU(ELAS=_F(E=56.24,
+                            NU=0.3,),);
 
-sansnom=DEFI_MATERIAU(ELAS=_F(E=56.24,
+SD_5=DEFI_MATERIAU(ELAS=_F(E=56.24,
                            NU=0.3,),);
 
 FIN();
index 1b55b9f8e8b23afb0c925c3a411faae851b738e4..7aa78c2f5547a5c01157d93e8bc592915101c517 100644 (file)
@@ -1,3 +1,6 @@
-DEBUT();
-INCLUDE(UNITE=11)
+
+DEBUT(PAR_LOT='OUI',);
+
+INCLUDE(UNITE=11,);
+
 FIN();
index cf00cf86ea841bd26de8215622a4ec9b01d2bd37..35190d6514e61af8ca87e1588b12954459b53063 100644 (file)
@@ -1,3 +1,2 @@
 POURSUITE()
-INCLUDE(UNITE=11)
 FIN()
index de8d11dd443a25695a29912942483d12eaa85402..5f4979171b98b67522031fad4cb8ba08434ff7af 100644 (file)
@@ -20,7 +20,7 @@
 
 import os
 
-import prefs
+from Aster import prefs
 
 rep_cata = os.path.join(prefs.REPINI,'Cata')
 rep_Pmw = os.path.join(prefs.REPINI,'../Pmw')
@@ -37,11 +37,12 @@ rep_travail     =   "/tmp"
 initialdir=os.curdir
 
 # Choix des catalogues
-rep_mat=os.path.join(rep_cata,'..','materiau')
+rep_mat_v85=os.path.join(rep_cata,'cataSTA8','materiau')
+rep_mat_v91=os.path.join(rep_cata,'cataSTA9','materiau')
 
 catalogues = (
               ('ASTER','v7.8',os.path.join(rep_cata,'cataSTA7'),'python'),
-              ('ASTER','v8.5',os.path.join(rep_cata,'cataSTA8'),'python'),
-              ('ASTER','v9.1',os.path.join(rep_cata,'cataSTA9'),'python','defaut'),
+              ('ASTER','v8.7',os.path.join(rep_cata,'cataSTA8'),'python'),
+              ('ASTER','v9.3',os.path.join(rep_cata,'cataSTA9'),'python','defaut'),
              )
 
index ea7a0f7fd715311411f8a27ff7067400a6f9ed17..ba90991e7ef167c8d44e580622510abba964d5e2 100644 (file)
 
 import os
 
-import prefs
+from Aster import prefs
 
 rep_cata = os.path.join(prefs.REPINI,'Cata')
-rep_homard = os.path.join(prefs.REPINI,'../Homard')
 rep_Pmw = os.path.join(prefs.REPINI,'../Pmw')
 
 # Accès à la documentation Aster
 path_doc              = os.path.join(rep_cata,'..','Doc')
-exec_acrobat    =       "/usr/bin/acroread"
+exec_acrobat    =       "acroread"
 # Utilisateur/Développeur
 isdeveloppeur   =       "NON"
 path_cata_dev   =       "/tmp/cata"
@@ -38,17 +37,11 @@ rep_travail     =   "/tmp"
 initialdir=os.curdir
 
 # Choix des catalogues
-rep_mat="//home/noyret/Install_Eficas/materiau"
+rep_mat=os.path.join(rep_cata,'..','materiau')
 
 catalogues = (
-              #('ASTER','v5',os.path.join(rep_cata,'cataSTA5'),'asterv5'),
-              #('ASTER','v6',os.path.join(rep_cata,'cataSTA6'),'python6'),
-              #('ASTER','v73',os.path.join(rep_cata,'cataSTA73'),'python','defaut'),
-              #('ASTER','v74',os.path.join(rep_cata,'cataSTA74'),'python'),
-              ('ASTER','v7.6',os.path.join(rep_cata,'cataSTA76'),'python'),
-              #('ASTER','v8',os.path.join(rep_cata,'cataSTA8'),'python','defaut'),
-              ('ASTER','v8.3',os.path.join(rep_cata,'cataSTA8'),'python','defaut'),
-              #('ASTER','v75',os.path.join(rep_cata,'cataSTA75'),'python','defaut'),
-              ('HOMARD','v1',os.path.join(rep_homard,'homard_cata_V73.py'),'homard'),
+#              ('ASTER','v7.8',os.path.join(rep_cata,'cataSTA7'),'python'),
+#              ('ASTER','v8.5',os.path.join(rep_cata,'cataSTA8'),'python'),
+              ('ASTER','v9.1',os.path.join(rep_cata,'cataSTA9'),'python','defaut'),
              )
 
diff --git a/Aster/editeur_salome.ini b/Aster/editeur_salome.ini
new file mode 100644 (file)
index 0000000..d0881d5
--- /dev/null
@@ -0,0 +1,48 @@
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import os
+
+from Aster import prefs
+
+rep_cata = os.path.join(prefs.REPINI,'Cata')
+rep_Pmw = os.path.join(prefs.REPINI,'../Pmw')
+
+# Accès à la documentation Aster
+path_doc              = os.path.join(rep_cata,'..','Doc')
+exec_acrobat    =       "acroread"
+# Utilisateur/Développeur
+isdeveloppeur   =       "NON"
+path_cata_dev   =       "/tmp/cata"
+# Répertoire temporaire
+rep_travail     =   "/tmp"
+# Répertoire initial
+initialdir=os.curdir
+
+# Choix des catalogues
+rep_mat_v85=os.path.join(rep_cata,'cataSTA8','materiau')
+rep_mat_v91=os.path.join(rep_cata,'cataSTA9','materiau')
+
+catalogues = (
+              ('ASTER','v7.8',os.path.join(rep_cata,'cataSTA7'),'python'),
+              ('ASTER','v8.5',os.path.join(rep_cata,'cataSTA8'),'python'),
+              ('ASTER','v9.1',os.path.join(rep_cata,'cataSTA9'),'python','defaut'),
+             )
+
index 1d298b5810833ed94fccc64048802c3f9aff57ba..a13a68ce052a04f905c0703d30c49a194b932fd1 100755 (executable)
@@ -27,6 +27,6 @@
 
 # Modules Eficas
 import prefs
-from Editeur import eficas_go
+from InterfaceTK import eficas_go
 
-eficas_go.lance_eficas()
+eficas_go.lance_eficas(code=prefs.code)
index 5eb25ff93f6fd8c9e99b1432875006f9fcd491cb..743c70beb936b22adc56571184f127e4549bbd8c 100755 (executable)
@@ -1,14 +1,14 @@
 #unalias do
 #set -x
-version=NEW82
-passe=2
+version=NEW9
+passe=1
 rm -rf ./Batch/${version}/ok_${passe}
 rm -rf ./Batch/${version}/bad_${passe} 
 rm -rf ./Batch/${version}/badfile_${passe}
 rm -rf ./Batch/${version}/nt_${passe}
 for file in `cat ./Batch/${version}/aTester`
 do
-        #echo $file
+        echo $file
         grep "VISU_EFICAS='NON'" $file > /dev/null 2>/dev/null
         rc=$?
         if [ "$rc" != "0" ]
index 13b16d0d0904d72ab5b9a4de7c3ee6feeafb4d0b..5fc73e58bd4c2ec9e1fc5caabbc639939aff61ba 100644 (file)
@@ -34,21 +34,39 @@ INSTALLDIR=os.path.join(REPINI,'..')
 # Par défaut on utilise les modules de INSTALLDIR
 # Peut valoir None (defaut)
 CODE_PATH = None
-#CODE_PATH = os.path.join(REPINI,'../../Superv')
 
 # la variable code donne le nom du code a selectionner
 code="ASTER" 
 
-# ICONDIR sert à localiser le répertoire contenant les icones
-# Par défaut on utilise le répertoire icons dans Editeur
-ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
-
 # lang indique la langue utilisée pour les chaines d'aide : fr ou ang
 lang='fr'
 
 # Codage des strings qui accepte les accents (en remplacement de 'ascii')
 encoding='iso-8859-1'
 
+
+EditeurDir=INSTALLDIR+"/Editeur"
+sys.path[:0]=[INSTALLDIR]
+
+ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
+
+# Preference
+if os.name == 'nt':
+   userprefs = os.sep.join( [ os.environ['HOMEDRIVE'], os.environ['HOMEPATH'], 'Eficas_install', 'prefs.py' ])
+else :
+   userprefs=os.path.expanduser("~/Eficas_install/prefs.py")
+
+if os.path.isfile(userprefs):
+   try:
+      execfile(userprefs)
+   except:
+      pass
+
+
+#-------------------------------------------------------------------
+# Partie pour TK
+#-------------------------------------------------------------------
+
 labels= ('Fichier','Edition','Jeu de commandes',
                 'Options',
                 'Aide',
@@ -56,7 +74,6 @@ labels= ('Fichier','Edition','Jeu de commandes',
            )
 
 appli_composants=['readercata','bureau',
-#                  'browser',
                    'options',
            ]
 
@@ -94,15 +111,3 @@ menu_defs={ 'bureau': [
               ),
              ]
            }
-
-if os.name == 'nt':
-   userprefs = os.sep.join( [ os.environ['HOMEDRIVE'], os.environ['HOMEPATH'], 'Eficas_install', 'prefs.py' ])
-else :
-   userprefs=os.path.expanduser("~/Eficas_install/prefs.py")
-if os.path.isfile(userprefs):
-   try:
-      execfile(userprefs)
-   except:
-      pass
-
-sys.path[:0]=[INSTALLDIR]
index 582b24270f58844d3037ba8aa654009e6c83ce45..726077224eefd159bcc6d2ef68b3e267e7b00bce 100644 (file)
@@ -20,6 +20,6 @@
 #     IDENTIFICATION DU GESTIONNAIRE DE COMMANDE ACCAS A PARTIR
 #     DE LA VERSION DU CODE_ASTER ASSOCIE
 #----------------------------------------------------------------------
-version = "9.0.30"
-date = "08/06/2007"
+version = "9.1.15"
+date = "17/10/2007"
 exploit = False
diff --git a/Aster/qtEficas_aster.py b/Aster/qtEficas_aster.py
new file mode 100755 (executable)
index 0000000..e3736bd
--- /dev/null
@@ -0,0 +1,32 @@
+#!/usr/bin/env python
+# -*- 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.
+#
+#
+# ======================================================================
+
+"""
+   Ce module sert à lancer EFICAS configuré pour Code_Aster
+"""
+# Modules Python
+
+# Modules Eficas
+import prefs
+from InterfaceQT import eficas_go
+
+eficas_go.lance_eficas(code=prefs.code)
index c9c481c32b4a25bb8fa88cac62f1b74d51a42762..9b0f3af71107d1f0b6653931f2214e0a09826c54 100644 (file)
@@ -37,6 +37,9 @@ def main():
    copyfiles('.',path_distrib,['LICENSE.TERMS','INSTALL','NEWS'])
 
    copyfiles('../Editeur',os.path.join(path_distrib,'Editeur'),['*.py','faqs.txt'])
+   copyfiles('../InterfaceTK',os.path.join(path_distrib,'InterfaceTK'),['*.py','faqs.txt'])
+   copyfiles('../InterfaceQT',os.path.join(path_distrib,'InterfaceQT'),['*.py'])
+   copyfiles('../Ui',os.path.join(path_distrib,'Ui'),['*.ui','makefile'])
    copyfiles('../Traducteur',os.path.join(path_distrib,'Traducteur'),['*.py'])
    copyfiles('../Ihm',os.path.join(path_distrib,'Ihm'),['*.py'])
    copyfiles('../Extensions',os.path.join(path_distrib,'Extensions'),['*.py'])
@@ -50,9 +53,11 @@ def main():
    # Code_Aster
    copyfiles('../Aster',os.path.join(path_distrib,'Aster'),['prefs.py',
                                                             'editeur.ini',
+                                                            'editeur_salome.ini',
                                                             'eficas_aster.py',
                                                            'test_eficas.py',
-                                                           'style.py'
+                                                           'style.py',
+                                                            '__init__.py'
                                                            ])
 
    # Les Catalogues, Macros, Materiaux et SD
@@ -86,6 +91,7 @@ def main():
    copyfiles('../generator',os.path.join(path_distrib,'generator'),['*.py'])
    copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.gif'])
    copyfiles('../Editeur/Patrons',os.path.join(path_distrib,'Editeur','Patrons'),['*.com*'])
+   copyfiles('../Editeur/Patrons/ASTER',os.path.join(path_distrib,'Editeur','Patrons','ASTER'),['*.com*'])
 
    copyfiles(os.path.join(path_Noyau,'Noyau'),os.path.join(path_distrib,'Noyau'),['*.py'])
    copyfiles(os.path.join(path_Noyau,'Validation'),os.path.join(path_distrib,'Validation'),['*.py'])
index 5529fe6a764337197f44000d2bcab0b4f3b2ad75..4576e99d95b4f1c00eefc455ca0e4d408cde96e9 100755 (executable)
@@ -38,8 +38,8 @@ if hasattr(prefs,'encoding'):
 
 sys.path[:0]=[prefs.INSTALLDIR]
 
-import Editeur
-from Editeur import eficas_test
+import InterfaceTK
+from InterfaceTK import eficas_test
 
 if len(sys.argv) > 1 :
     # on veut ouvrir un fichier directement au lancement d'Eficas
diff --git a/Editeur/Interp.py b/Editeur/Interp.py
deleted file mode 100644 (file)
index 8fb9582..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-# -*- coding: utf-8 -*-
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-#
-#
-# ======================================================================
-
-import Tkinter,ScrolledText
-import os, sys, string, traceback 
-import code
-
-sys.ps1 = ">>> "
-sys.ps2 = "... "
-
-class PythonInterpreter( code.InteractiveConsole):
-    def __init__( self, text, namespace = None):
-        code.InteractiveConsole.__init__( self, namespace)
-        self.text = text
-
-    def showtraceback( self):
-        start = self.text.pos + " - 1 lines"
-        code.InteractiveConsole.showtraceback( self)
-        end = self.text.pos
-        self.text.tag_add( "exception", start, end)
-
-class InterpWindow(Tkinter.Toplevel):
-    def __init__(self,namespace, parent=None):
-        Tkinter.Toplevel.__init__(self,parent)
-        self._initTkWidgets()
-        self.stdout = self.stderr = self
-        self.pos = '1.0'
-        self.history = [ '' ]
-        self.hpos = 0
-        self.tabCount = 0
-        self.shell = PythonInterpreter( self,namespace)
-        self.write("Python %s on %s\n%s\n(%s)\n" %
-                       (sys.version, sys.platform, sys.copyright,
-                        self.__class__.__name__))
-        self.write( sys.ps1)
-        self.text.focus_set()
-
-    def _initTkWidgets( self):
-        self.text = ScrolledText.ScrolledText( self, bg = "white",fg="black", wrap="word")
-        self.text.pack( fill='both', expand = 1)
-        self.text.bind( '<KeyPress>', self.clearMsg)
-        self.text.bind( '<Return>', self.inputhandler)
-        self.text.bind( '<KP_Enter>', self.inputhandler)
-        self.text.bind( '<Up>', self.uphistory)
-        self.text.bind( '<Down>', self.downhistory)
-        self.text.bind( '<Control-a>', self.goto_sol)
-        self.text.bind( '<Control-d>', self.sendeof)
-        self.text.tag_config("exception", foreground = "red")
-
-    def swapStdFiles(self):
-        sys.stdout,self.stdout = self.stdout,sys.stdout
-        sys.stderr,self.stderr = self.stderr,sys.stderr
-
-    def write(self, data):
-        self.text.insert("end", data)
-        self.pos = self.text.index("end - 1 char")
-        self.text.yview_pickplace("end")
-
-    def tag_add( self, tag, start, end):
-        self.text.tag_add( tag, start, end)
-
-    def inputhandler(self, *args):
-        # Remove any extraneous stuff
-        self.text.delete( self.pos + " lineend", "end")
-        # Now get the line
-        line = self.text.get(self.pos, "end - 1 char")
-        self.text.insert("end", "\n")
-        self.pos = self.text.index("end")
-        self.addHistory( line)
-        self.swapStdFiles()
-        if self.shell.push( line):
-            self.write(sys.ps2)
-        else:
-            self.write(sys.ps1)
-        self.swapStdFiles()
-        self.text.mark_set("insert", "end")
-        return "break"
-
-    def addHistory( self, line):
-        if line:
-            self.history.insert( len( self.history) - 1, line)
-            self.hpos = len( self.history) - 1
-
-    def sendeof(self, *args):
-        self.destroy()
-        return "break"
-
-    def uphistory(self, event=None):
-        if not self.history: return "break"
-
-        if self.hpos > 0:
-            self.hpos = self.hpos - 1
-
-        line = self.history[ self.hpos]
-        self.text.delete( self.pos, "end")
-        self.text.insert( self.pos, line)
-
-        return "break"
-
-    def downhistory( self, event=None):
-        if not self.history: return "break"
-
-        if self.hpos < (len( self.history) - 1):
-            self.hpos = self.hpos + 1
-
-        line = self.history[ self.hpos]
-        self.text.delete( self.pos, "end")
-        self.text.insert( self.pos, line)
-
-        return "break"
-
-    def goto_sol( self, event=None):
-        """
-        Met en mode edition la ligne courante
-        """
-        self.text.mark_set( 'insert', 'insert linestart + 4 chars')
-        return "break"
-        
-    def clearMsg( self, event=None):
-        index = self.text.index( "insert")
-        self.text.delete( "insert lineend", "end")
-        self.tabCount = 0
-
-if __name__ == "__main__":
-    app = Tkinter.Tk()
-    d={'a':1}
-
-    def go():
-      InterpWindow(d,parent=app)
-
-    Tkinter.Button(app,text="Interp",command=go).pack()
-    Tkinter.Button(app,text="Quit",command=app.destroy).pack()
-
-    app.mainloop()
-
index 21998b578ea53a6e5d76bbdc22def68cafbfb1f8..0882abb5962dab745363280c0bf6c8ff8f11a4fd 100644 (file)
@@ -27,7 +27,6 @@ from copy import copy,deepcopy
 
 # import du chargeur de composants
 from comploader import make_objecttreeitem
-import treewidget
 from Ihm import CONNECTOR
 
 myrepr = Repr()
@@ -51,7 +50,7 @@ class TreeItem:
     # ou treeOrNode est le noeud parent, item est l'item associé
     # command est une fonction python appelée sur sélection graphique
     # du noeud et rmenu est une fonction python appelée sur click droit sur le noeud
-    itemNode=treewidget.Node
+    itemNode=None
 
     def __init__(self):
         """Constructor.  Do whatever you need to do."""
@@ -130,7 +129,7 @@ class Delegate:
     def cachereport(self):
         keys = self.__cache.keys()
         keys.sort()
-        print keys
+        #print keys
 
 
 class ObjectTreeItem(TreeItem,Delegate):
diff --git a/Editeur/Patrons/ASTER/AnalyseModale.salome.comm b/Editeur/Patrons/ASTER/AnalyseModale.salome.comm
new file mode 100644 (file)
index 0000000..898d571
--- /dev/null
@@ -0,0 +1,64 @@
+DEBUT();
+
+# 1 - MISE EN DONNEES :
+# LECTURE DU MAILLAGE MED
+
+MAIL=LIRE_MAILLAGE(UNITE=21,
+                   FORMAT='MED',);
+#
+# DEFINITION DES ELEMENTS FINIS UTILISES
+
+MODELE=AFFE_MODELE(MAILLAGE=MAIL,
+                   AFFE=_F(TOUT='OUI',
+                           PHENOMENE='MECANIQUE',
+                           MODELISATION='3D',),);
+#
+# DEFINITION DU MATERIAU UTILISE
+
+ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11,
+                            NU=0.3,
+                            RHO=7800.0,),);
+
+CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL,
+                    AFFE=_F(TOUT='OUI',
+                            MATER=ACIER,),);
+                            
+#
+# DEFINITION DES CONDITIONS AUX LIMITES 
+
+BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE,
+                        DDL_IMPO=_F(GROUP_MA='ABB1A1',
+                                    DX=0.0,
+                                    DY=0.0,
+                                    DZ=0.0,),);
+                                    
+# 2 - CALCUL DES CINQ PREMIERS MODES PROPRES
+#
+# CALCUL DES MATRICES ASSEMBLEES K ET M
+
+MACRO_MATR_ASSE(MODELE=MODELE,
+                CHAM_MATER=CHMAT,
+                CHARGE=BLOQUAGE,
+                NUME_DDL=CO('NUMEDDL'),
+                MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'),
+                              OPTION='RIGI_MECA',),
+                           _F(MATRICE=CO('MASSE'),
+                              OPTION='MASS_MECA',),),);
+#
+
+MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE,
+                       MATR_B=MASSE,
+                       CALC_FREQ=_F(
+                       OPTION='PLUS_PETITE',
+                       NMAX_FREQ=5,),);
+#
+# ECRITURE DES MODES AU FORMAT MED
+
+IMPR_RESU(MODELE=MODELE,
+          FORMAT='MED',
+          RESU=_F(MAILLAGE=MAIL,
+                  RESULTAT=MODES,
+                  NOM_CHAM='DEPL',),);
+
+FIN();
+#
diff --git a/Editeur/Patrons/ASTER/elasticite.salome.comm b/Editeur/Patrons/ASTER/elasticite.salome.comm
new file mode 100644 (file)
index 0000000..454762b
--- /dev/null
@@ -0,0 +1,55 @@
+DEBUT();
+
+MA=DEFI_MATERIAU(ELAS=_F(E=210000000000, 
+                         NU=0.3,),);
+
+
+
+MAIL=LIRE_MAILLAGE(UNITE=21,
+                   FORMAT='MED',
+                   INFO_MED=2,);
+
+MODE=AFFE_MODELE(MAILLAGE=MAIL,
+                AFFE=_F(TOUT='OUI',
+                                PHENOMENE='MECANIQUE',
+                                MODELISATION= '3D',),);
+
+
+
+MATE=AFFE_MATERIAU(MAILLAGE=MAIL,
+                   AFFE=_F(TOUT='OUI',
+                           MATER=MA,),);
+
+CHAR=AFFE_CHAR_MECA(MODELE=MODE,
+                        FACE_IMPO=(
+                                _F(GROUP_MA='ABB1A1',
+                                                DX=0,
+                                                DY=0,
+                                                DZ=0,),),
+                        PRES_REP=(
+                                _F(GROUP_MA='CDD1C1',
+                                                PRES=10000,),),);
+
+RESU=MECA_STATIQUE(MODELE=MODE,
+                   CHAM_MATER=MATE,
+                   EXCIT=_F(CHARGE=CHAR,),);
+
+RESU=CALC_ELEM(reuse =RESU,
+               MODELE=MODE,
+               CHAM_MATER=MATE,
+               RESULTAT=RESU,
+               OPTION=('SIGM_ELNO_DEPL','EQUI_ELNO_SIGM',),
+               EXCIT=_F(
+               CHARGE=CHAR,),);
+
+RESU=CALC_NO(reuse =RESU,
+             RESULTAT=RESU,
+             OPTION=('SIGM_NOEU_DEPL', 'EQUI_NOEU_SIGM', ),);
+
+IMPR_RESU(FORMAT='MED',
+          UNITE=80,
+          RESU=_F(MAILLAGE=MAIL,
+                  RESULTAT=RESU,
+                  NOM_CHAM=('SIGM_NOEU_DEPL','EQUI_NOEU_SIGM','DEPL',),),);
+
+FIN();
\ No newline at end of file
diff --git a/Editeur/Patrons/ASTER/limaillage.comm b/Editeur/Patrons/ASTER/limaillage.comm
new file mode 100644 (file)
index 0000000..bb12c44
--- /dev/null
@@ -0,0 +1,11 @@
+
+
+DEBUT(CODE=_F(NOM='VIDE',
+              NIV_PUB_WEB='INTERNET',),);
+#
+
+MA=LIRE_MAILLAGE();
+
+
+FIN();
+#
diff --git a/Editeur/Patrons/ASTER/modes_3D.comm b/Editeur/Patrons/ASTER/modes_3D.comm
new file mode 100644 (file)
index 0000000..aafe1f2
--- /dev/null
@@ -0,0 +1,57 @@
+
+# PATRON
+# ANALYSE MODALE
+# 3D
+
+DEBUT();
+# MISE EN DONNEES
+
+MAIL=LIRE_MAILLAGE();
+
+MODELE=AFFE_MODELE(MAILLAGE=MAIL,
+                   AFFE=_F(GROUP_MA='OBJET',
+                           PHENOMENE='MECANIQUE',
+                           MODELISATION='3D',),);
+# MATERIAU
+
+ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11,
+                            NU=0.3,
+                            RHO=7800.0,),);
+
+CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL,
+                    AFFE=_F(GROUP_MA='OBJET',
+                            MATER=ACIER,),);
+
+# CONDITIONS AUX LIMITES ET CHARGEMENT
+# CONDITIONS AUX LIMITES 
+
+BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE,
+                        DDL_IMPO=_F(GROUP_MA='ENCAST',
+                                    LIAISON='ENCASTRE',),);
+# CALCUL DES MATRICES ASSEMBLEES K ET M
+
+MACRO_MATR_ASSE(MODELE=MODELE,
+                CHAM_MATER=CHMAT,
+                CHARGE=BLOQUAGE,
+                NUME_DDL=CO('NUMEDDL'),
+                MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'),
+                              OPTION='RIGI_MECA',),
+                           _F(MATRICE=CO('MASSE'),
+                              OPTION='MASS_MECA',),),);
+# CALCUL DES CINQ PREMIERS MODES
+
+MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE,
+                       MATR_B=MASSE,
+                       CALC_FREQ=_F(
+                       OPTION='PLUS_PETITE',
+                       NMAX_FREQ=5,),);
+# ECRITURE DES MODES AU FORMAT GMSH
+
+IMPR_RESU(MODELE=MODELE,
+          FORMAT='GMSH',
+          UNITE=19,
+          RESU=_F(MAILLAGE=MAIL,
+                  RESULTAT=MODES,
+                  NOM_CHAM='DEPL',),);
+
+FIN();
diff --git a/Editeur/Patrons/ASTER/modes_pou.comm b/Editeur/Patrons/ASTER/modes_pou.comm
new file mode 100644 (file)
index 0000000..fc72e23
--- /dev/null
@@ -0,0 +1,63 @@
+
+# PATRON
+# ANALYSE MODALE
+# POUTRE
+
+DEBUT();
+# MISE EN DONNEES
+
+MAIL=LIRE_MAILLAGE();
+
+MODELE=AFFE_MODELE(MAILLAGE=MAIL,
+                   AFFE=_F(GROUP_MA='OBJET',
+                           PHENOMENE='MECANIQUE',
+                           MODELISATION='3D',),);
+# MATERIAU
+
+ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11,
+                            NU=0.3,
+                            RHO=7800.0,),);
+
+CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL,
+                    AFFE=_F(GROUP_MA='OBJET',
+                            MATER=ACIER,),);
+
+CARELEM=AFFE_CARA_ELEM(MODELE=MODELE,
+                       POUTRE=_F(GROUP_MA='OBJET',
+                                 SECTION='CERCLE',
+                                 CARA=('R','EP',),
+                                 VALE=(1.0,0.01,),),);
+# CONDITIONS AUX LIMITES 
+
+BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE,
+                        DDL_IMPO=_F(GROUP_MA='ENCAST',
+                                    LIAISON='ENCASTRE',),);
+#MATRICES ASSEMBLEES K, M
+#
+
+MACRO_MATR_ASSE(MODELE=MODELE,
+                CHAM_MATER=CHMAT,
+                CARA_ELEM=CARELEM,
+                CHARGE=BLOQUAGE,
+                NUME_DDL=CO('NUMEDDL'),
+                MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'),
+                              OPTION='RIGI_MECA',),
+                           _F(MATRICE=CO('MASSE'),
+                              OPTION='MASS_MECA',),),);
+#5 PREMIERS MODES
+
+MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE,
+                       MATR_B=MASSE,
+                       CALC_FREQ=_F(
+                       OPTION='PLUS_PETITE',
+                       NMAX_FREQ=5,),);
+# MODES AU FORMAT GMSH
+
+IMPR_RESU(MODELE=MODELE,
+          FORMAT='GMSH',
+          UNITE=19,
+          RESU=_F(MAILLAGE=MAIL,
+                  RESULTAT=MODES,
+                  NOM_CHAM='DEPL',),);
+
+FIN();
diff --git a/Editeur/Patrons/ASTER/statlin_3D.comm b/Editeur/Patrons/ASTER/statlin_3D.comm
new file mode 100644 (file)
index 0000000..39f7057
--- /dev/null
@@ -0,0 +1,57 @@
+
+# PATRON 
+# ANALYSE STATIQUE
+# 3D
+
+DEBUT();
+# MISE EN DONNEES
+
+MAIL=LIRE_MAILLAGE();
+
+MAIL=DEFI_GROUP(reuse =MAIL,
+                MAILLAGE=MAIL,
+                CREA_GROUP_MA=_F(NOM='TOUT',
+                                 TOUT='OUI',),);
+
+MODMECA=AFFE_MODELE(MAILLAGE=MAIL,
+                    AFFE=_F(GROUP_MA='TOUT',
+                            PHENOMENE='MECANIQUE',
+                            MODELISATION='3D',),);
+
+ACIER=DEFI_MATERIAU(ELAS=_F(E=2.E11,
+                            NU=0.3,),);
+
+CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL,
+                    AFFE=_F(TOUT='OUI',
+                            MATER=ACIER,),);
+# CONDITIONS AUX LIMITES ET CHARGEMENT
+#POINT A : ENCASTREMENT
+
+BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODMECA,
+                        DDL_IMPO=_F(GROUP_MA='ENCAST',
+                                    LIAISON='ENCASTRE',),);
+#POINT B : FORCE IMPOSEE
+
+CHARGT=AFFE_CHAR_MECA(MODELE=MODMECA,
+                      FORCE_NODALE=_F(GROUP_NO='PB',
+                                      FY=1000.0,),);
+# RESOLUTION DU PROBLEME ELASTIQUE
+
+RESU1=MECA_STATIQUE(MODELE=MODMECA,
+                    CHAM_MATER=CHMAT,
+                    EXCIT=(_F(CHARGE=BLOQUAGE,),
+                           _F(CHARGE=CHARGT,),),);
+# CALCUL DES EFFORTS
+
+RESU1=CALC_ELEM(reuse =RESU1,
+                RESULTAT=RESU1,
+                OPTION='EFGE_ELNO_DEPL',);
+# RESULTATS FORMAT GMSH
+
+IMPR_RESU(MODELE=MODMECA,
+          FORMAT='GMSH',
+          RESU=_F(MAILLAGE=MAIL,
+                  RESULTAT=RESU1,
+                  NOM_CHAM=('DEPL','EFGE_ELNO_DEPL',),),);
+
+FIN();
diff --git a/Editeur/Patrons/ASTER/statlin_pou.comm b/Editeur/Patrons/ASTER/statlin_pou.comm
new file mode 100644 (file)
index 0000000..0dd06eb
--- /dev/null
@@ -0,0 +1,70 @@
+
+# PATRON 
+# ANALYSE STATIQUE
+# POUTRE
+
+DEBUT();
+# MISE EN DONNEES
+
+MAIL=LIRE_MAILLAGE();
+
+MAIL=DEFI_GROUP(reuse =MAIL,
+                MAILLAGE=MAIL,
+                CREA_GROUP_MA=_F(NOM='TOUT',
+                                 TOUT='OUI',),);
+
+MODMECA=AFFE_MODELE(MAILLAGE=MAIL,
+                    AFFE=_F(GROUP_MA='TOUT',
+                            PHENOMENE='MECANIQUE',
+                            MODELISATION='POU_D_T',),);
+
+ACIER=DEFI_MATERIAU(ELAS=_F(E=2.E10,
+                            NU=0.3,),);
+
+CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL,
+                    AFFE=_F(TOUT='OUI',
+                            MATER=ACIER,),);
+R1 = 1.0;
+
+EP1 = 0.001;
+
+
+CARA_POU=AFFE_CARA_ELEM(MODELE=MODMECA,
+                        POUTRE=_F(GROUP_MA='TOUT',
+                                  SECTION='CERCLE',
+                                  CARA=('R','EP',),
+                                  VALE=(R1,EP1,),),);
+
+# CONDITIONS AUX LIMITES ET CHARGEMENT
+
+#POINT A : ENCASTREMENT
+
+BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODMECA,
+                        DDL_IMPO=_F(GROUP_NO='PA',
+                                    LIAISON='ENCASTRE',),);
+#POINT B : FORCE IMPOSEE
+
+CHARGT=AFFE_CHAR_MECA(MODELE=MODMECA,
+                      FORCE_NODALE=_F(GROUP_NO='PB',
+                                      FY=1000.0,),);
+# RESOLUTION DU PROBLEME ELASTIQUE
+
+RESU1=MECA_STATIQUE(MODELE=MODMECA,
+                    CHAM_MATER=CHMAT,
+                    CARA_ELEM=CARA_POU,
+                    EXCIT=(_F(CHARGE=BLOQUAGE,),
+                           _F(CHARGE=CHARGT,),),);
+# CALCUL DES EFFORTS
+
+RESU1=CALC_ELEM(reuse =RESU1,
+                RESULTAT=RESU1,
+                OPTION='EFGE_ELNO_DEPL',);
+# RESULTATS FORMAT GMSH
+
+IMPR_RESU(MODELE=MODMECA,
+          FORMAT='GMSH',
+          RESU=_F(MAILLAGE=MAIL,
+                  RESULTAT=RESU1,
+                  NOM_CHAM=('DEPL','EFGE_ELNO_DEPL',),),);
+
+FIN();
diff --git a/Editeur/Patrons/ASTER/thermique.salome.comm b/Editeur/Patrons/ASTER/thermique.salome.comm
new file mode 100644 (file)
index 0000000..61c6fa1
--- /dev/null
@@ -0,0 +1,34 @@
+
+
+DEBUT();
+
+MESH=LIRE_MAILLAGE(UNITE=21,
+                   FORMAT='MED',);
+
+MATER=DEFI_MATERIAU(THER=_F(LAMBDA=1.2,),);
+
+MODEL=AFFE_MODELE(MAILLAGE=MESH,
+                  AFFE=_F(TOUT='OUI',
+                          PHENOMENE='THERMIQUE',
+                          MODELISATION='3D',),);
+
+MATFIELD=AFFE_MATERIAU(MAILLAGE=MESH,
+                       AFFE=_F(TOUT='OUI',
+                               MATER=MATER,),);
+
+LOADING=AFFE_CHAR_THER(MODELE=MODEL,
+                       TEMP_IMPO=_F(GROUP_MA='Bloq',
+                                    TEMP=23.,),
+                       FLUX_REP=_F(GROUP_MA='Press',
+                                   FLUN=2.,),
+                       SOURCE=_F(GROUP_MA='Source',
+                                 SOUR=2.,),);
+
+TEMP=THER_LINEAIRE(MODELE=MODEL,
+                   CHAM_MATER=MATFIELD,
+                   EXCIT=_F(CHARGE=LOADING,),);
+
+IMPR_RESU(FORMAT='MED',
+          RESU=_F(RESULTAT=TEMP,),);
+
+FIN();
diff --git a/Editeur/Patrons/ASTER/tradir_3D.comm b/Editeur/Patrons/ASTER/tradir_3D.comm
new file mode 100644 (file)
index 0000000..41d17e5
--- /dev/null
@@ -0,0 +1,72 @@
+
+# PATRON
+# ANALYSE MODALE
+# 3D
+
+DEBUT();
+# MISE EN DONNEES
+
+MAIL=LIRE_MAILLAGE();
+
+MODELE=AFFE_MODELE(MAILLAGE=MAIL,
+                   AFFE=_F(GROUP_MA='OBJET',
+                           PHENOMENE='MECANIQUE',
+                           MODELISATION='3D',),);
+# MATERIAU
+
+ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11,
+                            NU=0.3,
+                            RHO=7800.0,),);
+
+CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL,
+                    AFFE=_F(GROUP_MA='OBJET',
+                            MATER=ACIER,),);
+# CONDITIONS AUX LIMITES ET CHARGEMENT
+# CONDITIONS AUX LIMITES 
+
+BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE,
+                        DDL_IMPO=_F(GROUP_MA='ENCAST',
+                                    LIAISON='ENCASTRE',),);
+# CALCUL DES MATRICES ASSEMBLEES K ET M
+
+MACRO_MATR_ASSE(MODELE=MODELE,
+                CHAM_MATER=CHMAT,
+                CHARGE=BLOQUAGE,
+                NUME_DDL=CO('NUMEDDL'),
+                MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'),
+                              OPTION='RIGI_MECA',),
+                           _F(MATRICE=CO('MASSE'),
+                              OPTION='MASS_MECA',),),);
+# CALCUL DES CINQ PREMIERS MODES
+
+MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE,
+                       MATR_B=MASSE,
+                       CALC_FREQ=_F(
+                       OPTION='PLUS_PETITE',
+                       NMAX_FREQ=5,),);
+#CHARGEMENT
+
+EXCIT=AFFE_CHAR_MECA(MODELE=MODELE,
+                     PRES_REP=_F(GROUP_MA='PRESSE',
+                                 PRES=100.e5,),);
+
+EXCEL=CALC_VECT_ELEM(OPTION='CHAR_MECA',
+                     CHARGE=EXCIT,);
+
+EXCASS=ASSE_VECTEUR(VECT_ELEM=EXCEL,
+                    NUME_DDL=NUMEDDL,);
+OMEGA = 10.0;
+
+
+SINU = FORMULE(VALE='sin(OMEGA*INST)',
+               NOM_PARA='INST',);
+#CALCUL TRANSITOIRE
+
+TRADIR=DYNA_LINE_TRAN(MATR_MASS=MASSE,
+                      MATR_RIGI=RIGIDITE,
+                      NEWMARK=_F(),
+                      EXCIT=_F(VECT_ASSE=EXCASS,),
+                      INCREMENT=_F(PAS=.01,
+                                   INST_FIN=10.,),);
+
+FIN();
diff --git a/Editeur/Patrons/ASTER/tramod_3D.comm b/Editeur/Patrons/ASTER/tramod_3D.comm
new file mode 100644 (file)
index 0000000..9a68bc5
--- /dev/null
@@ -0,0 +1,86 @@
+
+# PATRON
+# ANALYSE MODALE
+# 3D
+
+DEBUT();
+# MISE EN DONNEES
+
+MAIL=LIRE_MAILLAGE();
+
+MODELE=AFFE_MODELE(MAILLAGE=MAIL,
+                   AFFE=_F(GROUP_MA='OBJET',
+                           PHENOMENE='MECANIQUE',
+                           MODELISATION='3D',),);
+# MATERIAU
+
+ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11,
+                            NU=0.3,
+                            RHO=7800.0,),);
+
+CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL,
+                    AFFE=_F(GROUP_MA='OBJET',
+                            MATER=ACIER,),);
+# CONDITIONS AUX LIMITES ET CHARGEMENT
+# CONDITIONS AUX LIMITES 
+
+BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE,
+                        DDL_IMPO=_F(GROUP_MA='ENCAST',
+                                    LIAISON='ENCASTRE',),);
+# CALCUL DES MATRICES ASSEMBLEES K ET M
+
+MACRO_MATR_ASSE(MODELE=MODELE,
+                CHAM_MATER=CHMAT,
+                CHARGE=BLOQUAGE,
+                NUME_DDL=CO('NUMEDDL'),
+                MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'),
+                              OPTION='RIGI_MECA',),
+                           _F(MATRICE=CO('MASSE'),
+                              OPTION='MASS_MECA',),),);
+
+P=POST_ELEM(MASS_INER=_F(TOUT='OUI',
+                         GROUP_MA='M',),);
+# CALCUL DES CINQ PREMIERS MODES
+
+MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE,
+                       MATR_B=MASSE,
+                       CALC_FREQ=_F(
+                       OPTION='PLUS_PETITE',
+                       NMAX_FREQ=5,),);
+#CHARGEMENT
+
+EXCIT=AFFE_CHAR_MECA(MODELE=MODELE,
+                     PRES_REP=_F(GROUP_MA='PRESSE',
+                                 PRES=100.e5,),);
+
+EXCEL=CALC_VECT_ELEM(OPTION='CHAR_MECA',
+                     CHARGE=EXCIT,);
+
+EXCASS=ASSE_VECTEUR(VECT_ELEM=EXCEL,
+                    NUME_DDL=NUMEDDL,);
+OMEGA = 10.0;
+
+
+SINU = FORMULE(VALE='sin(OMEGA*INST)',
+               NOM_PARA='INST',);
+#PROJECTION
+
+MACRO_PROJ_BASE(BASE=MODES,
+                MATR_ASSE_GENE=(_F(MATRICE=CO('MASSPROJ'),
+                                   MATR_ASSE=MASSE,),
+                                _F(MATRICE=CO('RIGIPROJ'),
+                                   MATR_ASSE=RIGIDITE,),),
+                VECT_ASSE_GENE=_F(VECTEUR=CO('EXCPROJ'),
+                                  VECT_ASSE=EXCASS,),);
+#CALCUL TRANSITOIRE
+
+TRAMOD=DYNA_TRAN_MODAL(MASS_GENE=MASSPROJ,
+                       RIGI_GENE=RIGIPROJ,
+                       AMOR_REDUIT=(.02,.01,),
+                       INCREMENT=_F(INST_INIT=0.0,
+                                    INST_FIN=10.0,
+                                    PAS=.001,),
+                       EXCIT=_F(VECT_GENE=EXCPROJ,
+                                FONC_MULT=SINU,),);
+
+FIN();
diff --git a/Editeur/Patrons/AnalyseModale.salome.comm b/Editeur/Patrons/AnalyseModale.salome.comm
deleted file mode 100644 (file)
index 898d571..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-DEBUT();
-
-# 1 - MISE EN DONNEES :
-# LECTURE DU MAILLAGE MED
-
-MAIL=LIRE_MAILLAGE(UNITE=21,
-                   FORMAT='MED',);
-#
-# DEFINITION DES ELEMENTS FINIS UTILISES
-
-MODELE=AFFE_MODELE(MAILLAGE=MAIL,
-                   AFFE=_F(TOUT='OUI',
-                           PHENOMENE='MECANIQUE',
-                           MODELISATION='3D',),);
-#
-# DEFINITION DU MATERIAU UTILISE
-
-ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11,
-                            NU=0.3,
-                            RHO=7800.0,),);
-
-CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL,
-                    AFFE=_F(TOUT='OUI',
-                            MATER=ACIER,),);
-                            
-#
-# DEFINITION DES CONDITIONS AUX LIMITES 
-
-BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE,
-                        DDL_IMPO=_F(GROUP_MA='ABB1A1',
-                                    DX=0.0,
-                                    DY=0.0,
-                                    DZ=0.0,),);
-                                    
-# 2 - CALCUL DES CINQ PREMIERS MODES PROPRES
-#
-# CALCUL DES MATRICES ASSEMBLEES K ET M
-
-MACRO_MATR_ASSE(MODELE=MODELE,
-                CHAM_MATER=CHMAT,
-                CHARGE=BLOQUAGE,
-                NUME_DDL=CO('NUMEDDL'),
-                MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'),
-                              OPTION='RIGI_MECA',),
-                           _F(MATRICE=CO('MASSE'),
-                              OPTION='MASS_MECA',),),);
-#
-
-MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE,
-                       MATR_B=MASSE,
-                       CALC_FREQ=_F(
-                       OPTION='PLUS_PETITE',
-                       NMAX_FREQ=5,),);
-#
-# ECRITURE DES MODES AU FORMAT MED
-
-IMPR_RESU(MODELE=MODELE,
-          FORMAT='MED',
-          RESU=_F(MAILLAGE=MAIL,
-                  RESULTAT=MODES,
-                  NOM_CHAM='DEPL',),);
-
-FIN();
-#
diff --git a/Editeur/Patrons/elasticite.salome.comm b/Editeur/Patrons/elasticite.salome.comm
deleted file mode 100644 (file)
index 454762b..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-DEBUT();
-
-MA=DEFI_MATERIAU(ELAS=_F(E=210000000000, 
-                         NU=0.3,),);
-
-
-
-MAIL=LIRE_MAILLAGE(UNITE=21,
-                   FORMAT='MED',
-                   INFO_MED=2,);
-
-MODE=AFFE_MODELE(MAILLAGE=MAIL,
-                AFFE=_F(TOUT='OUI',
-                                PHENOMENE='MECANIQUE',
-                                MODELISATION= '3D',),);
-
-
-
-MATE=AFFE_MATERIAU(MAILLAGE=MAIL,
-                   AFFE=_F(TOUT='OUI',
-                           MATER=MA,),);
-
-CHAR=AFFE_CHAR_MECA(MODELE=MODE,
-                        FACE_IMPO=(
-                                _F(GROUP_MA='ABB1A1',
-                                                DX=0,
-                                                DY=0,
-                                                DZ=0,),),
-                        PRES_REP=(
-                                _F(GROUP_MA='CDD1C1',
-                                                PRES=10000,),),);
-
-RESU=MECA_STATIQUE(MODELE=MODE,
-                   CHAM_MATER=MATE,
-                   EXCIT=_F(CHARGE=CHAR,),);
-
-RESU=CALC_ELEM(reuse =RESU,
-               MODELE=MODE,
-               CHAM_MATER=MATE,
-               RESULTAT=RESU,
-               OPTION=('SIGM_ELNO_DEPL','EQUI_ELNO_SIGM',),
-               EXCIT=_F(
-               CHARGE=CHAR,),);
-
-RESU=CALC_NO(reuse =RESU,
-             RESULTAT=RESU,
-             OPTION=('SIGM_NOEU_DEPL', 'EQUI_NOEU_SIGM', ),);
-
-IMPR_RESU(FORMAT='MED',
-          UNITE=80,
-          RESU=_F(MAILLAGE=MAIL,
-                  RESULTAT=RESU,
-                  NOM_CHAM=('SIGM_NOEU_DEPL','EQUI_NOEU_SIGM','DEPL',),),);
-
-FIN();
\ No newline at end of file
diff --git a/Editeur/Patrons/limaillage.comm b/Editeur/Patrons/limaillage.comm
deleted file mode 100644 (file)
index bb12c44..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-DEBUT(CODE=_F(NOM='VIDE',
-              NIV_PUB_WEB='INTERNET',),);
-#
-
-MA=LIRE_MAILLAGE();
-
-
-FIN();
-#
diff --git a/Editeur/Patrons/modes_3D.comm b/Editeur/Patrons/modes_3D.comm
deleted file mode 100644 (file)
index aafe1f2..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-
-# PATRON
-# ANALYSE MODALE
-# 3D
-
-DEBUT();
-# MISE EN DONNEES
-
-MAIL=LIRE_MAILLAGE();
-
-MODELE=AFFE_MODELE(MAILLAGE=MAIL,
-                   AFFE=_F(GROUP_MA='OBJET',
-                           PHENOMENE='MECANIQUE',
-                           MODELISATION='3D',),);
-# MATERIAU
-
-ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11,
-                            NU=0.3,
-                            RHO=7800.0,),);
-
-CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL,
-                    AFFE=_F(GROUP_MA='OBJET',
-                            MATER=ACIER,),);
-
-# CONDITIONS AUX LIMITES ET CHARGEMENT
-# CONDITIONS AUX LIMITES 
-
-BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE,
-                        DDL_IMPO=_F(GROUP_MA='ENCAST',
-                                    LIAISON='ENCASTRE',),);
-# CALCUL DES MATRICES ASSEMBLEES K ET M
-
-MACRO_MATR_ASSE(MODELE=MODELE,
-                CHAM_MATER=CHMAT,
-                CHARGE=BLOQUAGE,
-                NUME_DDL=CO('NUMEDDL'),
-                MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'),
-                              OPTION='RIGI_MECA',),
-                           _F(MATRICE=CO('MASSE'),
-                              OPTION='MASS_MECA',),),);
-# CALCUL DES CINQ PREMIERS MODES
-
-MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE,
-                       MATR_B=MASSE,
-                       CALC_FREQ=_F(
-                       OPTION='PLUS_PETITE',
-                       NMAX_FREQ=5,),);
-# ECRITURE DES MODES AU FORMAT GMSH
-
-IMPR_RESU(MODELE=MODELE,
-          FORMAT='GMSH',
-          UNITE=19,
-          RESU=_F(MAILLAGE=MAIL,
-                  RESULTAT=MODES,
-                  NOM_CHAM='DEPL',),);
-
-FIN();
diff --git a/Editeur/Patrons/modes_pou.comm b/Editeur/Patrons/modes_pou.comm
deleted file mode 100644 (file)
index fc72e23..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-
-# PATRON
-# ANALYSE MODALE
-# POUTRE
-
-DEBUT();
-# MISE EN DONNEES
-
-MAIL=LIRE_MAILLAGE();
-
-MODELE=AFFE_MODELE(MAILLAGE=MAIL,
-                   AFFE=_F(GROUP_MA='OBJET',
-                           PHENOMENE='MECANIQUE',
-                           MODELISATION='3D',),);
-# MATERIAU
-
-ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11,
-                            NU=0.3,
-                            RHO=7800.0,),);
-
-CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL,
-                    AFFE=_F(GROUP_MA='OBJET',
-                            MATER=ACIER,),);
-
-CARELEM=AFFE_CARA_ELEM(MODELE=MODELE,
-                       POUTRE=_F(GROUP_MA='OBJET',
-                                 SECTION='CERCLE',
-                                 CARA=('R','EP',),
-                                 VALE=(1.0,0.01,),),);
-# CONDITIONS AUX LIMITES 
-
-BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE,
-                        DDL_IMPO=_F(GROUP_MA='ENCAST',
-                                    LIAISON='ENCASTRE',),);
-#MATRICES ASSEMBLEES K, M
-#
-
-MACRO_MATR_ASSE(MODELE=MODELE,
-                CHAM_MATER=CHMAT,
-                CARA_ELEM=CARELEM,
-                CHARGE=BLOQUAGE,
-                NUME_DDL=CO('NUMEDDL'),
-                MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'),
-                              OPTION='RIGI_MECA',),
-                           _F(MATRICE=CO('MASSE'),
-                              OPTION='MASS_MECA',),),);
-#5 PREMIERS MODES
-
-MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE,
-                       MATR_B=MASSE,
-                       CALC_FREQ=_F(
-                       OPTION='PLUS_PETITE',
-                       NMAX_FREQ=5,),);
-# MODES AU FORMAT GMSH
-
-IMPR_RESU(MODELE=MODELE,
-          FORMAT='GMSH',
-          UNITE=19,
-          RESU=_F(MAILLAGE=MAIL,
-                  RESULTAT=MODES,
-                  NOM_CHAM='DEPL',),);
-
-FIN();
diff --git a/Editeur/Patrons/statlin_3D.comm b/Editeur/Patrons/statlin_3D.comm
deleted file mode 100644 (file)
index 39f7057..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-
-# PATRON 
-# ANALYSE STATIQUE
-# 3D
-
-DEBUT();
-# MISE EN DONNEES
-
-MAIL=LIRE_MAILLAGE();
-
-MAIL=DEFI_GROUP(reuse =MAIL,
-                MAILLAGE=MAIL,
-                CREA_GROUP_MA=_F(NOM='TOUT',
-                                 TOUT='OUI',),);
-
-MODMECA=AFFE_MODELE(MAILLAGE=MAIL,
-                    AFFE=_F(GROUP_MA='TOUT',
-                            PHENOMENE='MECANIQUE',
-                            MODELISATION='3D',),);
-
-ACIER=DEFI_MATERIAU(ELAS=_F(E=2.E11,
-                            NU=0.3,),);
-
-CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL,
-                    AFFE=_F(TOUT='OUI',
-                            MATER=ACIER,),);
-# CONDITIONS AUX LIMITES ET CHARGEMENT
-#POINT A : ENCASTREMENT
-
-BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODMECA,
-                        DDL_IMPO=_F(GROUP_MA='ENCAST',
-                                    LIAISON='ENCASTRE',),);
-#POINT B : FORCE IMPOSEE
-
-CHARGT=AFFE_CHAR_MECA(MODELE=MODMECA,
-                      FORCE_NODALE=_F(GROUP_NO='PB',
-                                      FY=1000.0,),);
-# RESOLUTION DU PROBLEME ELASTIQUE
-
-RESU1=MECA_STATIQUE(MODELE=MODMECA,
-                    CHAM_MATER=CHMAT,
-                    EXCIT=(_F(CHARGE=BLOQUAGE,),
-                           _F(CHARGE=CHARGT,),),);
-# CALCUL DES EFFORTS
-
-RESU1=CALC_ELEM(reuse =RESU1,
-                RESULTAT=RESU1,
-                OPTION='EFGE_ELNO_DEPL',);
-# RESULTATS FORMAT GMSH
-
-IMPR_RESU(MODELE=MODMECA,
-          FORMAT='GMSH',
-          RESU=_F(MAILLAGE=MAIL,
-                  RESULTAT=RESU1,
-                  NOM_CHAM=('DEPL','EFGE_ELNO_DEPL',),),);
-
-FIN();
diff --git a/Editeur/Patrons/statlin_pou.comm b/Editeur/Patrons/statlin_pou.comm
deleted file mode 100644 (file)
index 0dd06eb..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-
-# PATRON 
-# ANALYSE STATIQUE
-# POUTRE
-
-DEBUT();
-# MISE EN DONNEES
-
-MAIL=LIRE_MAILLAGE();
-
-MAIL=DEFI_GROUP(reuse =MAIL,
-                MAILLAGE=MAIL,
-                CREA_GROUP_MA=_F(NOM='TOUT',
-                                 TOUT='OUI',),);
-
-MODMECA=AFFE_MODELE(MAILLAGE=MAIL,
-                    AFFE=_F(GROUP_MA='TOUT',
-                            PHENOMENE='MECANIQUE',
-                            MODELISATION='POU_D_T',),);
-
-ACIER=DEFI_MATERIAU(ELAS=_F(E=2.E10,
-                            NU=0.3,),);
-
-CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL,
-                    AFFE=_F(TOUT='OUI',
-                            MATER=ACIER,),);
-R1 = 1.0;
-
-EP1 = 0.001;
-
-
-CARA_POU=AFFE_CARA_ELEM(MODELE=MODMECA,
-                        POUTRE=_F(GROUP_MA='TOUT',
-                                  SECTION='CERCLE',
-                                  CARA=('R','EP',),
-                                  VALE=(R1,EP1,),),);
-
-# CONDITIONS AUX LIMITES ET CHARGEMENT
-
-#POINT A : ENCASTREMENT
-
-BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODMECA,
-                        DDL_IMPO=_F(GROUP_NO='PA',
-                                    LIAISON='ENCASTRE',),);
-#POINT B : FORCE IMPOSEE
-
-CHARGT=AFFE_CHAR_MECA(MODELE=MODMECA,
-                      FORCE_NODALE=_F(GROUP_NO='PB',
-                                      FY=1000.0,),);
-# RESOLUTION DU PROBLEME ELASTIQUE
-
-RESU1=MECA_STATIQUE(MODELE=MODMECA,
-                    CHAM_MATER=CHMAT,
-                    CARA_ELEM=CARA_POU,
-                    EXCIT=(_F(CHARGE=BLOQUAGE,),
-                           _F(CHARGE=CHARGT,),),);
-# CALCUL DES EFFORTS
-
-RESU1=CALC_ELEM(reuse =RESU1,
-                RESULTAT=RESU1,
-                OPTION='EFGE_ELNO_DEPL',);
-# RESULTATS FORMAT GMSH
-
-IMPR_RESU(MODELE=MODMECA,
-          FORMAT='GMSH',
-          RESU=_F(MAILLAGE=MAIL,
-                  RESULTAT=RESU1,
-                  NOM_CHAM=('DEPL','EFGE_ELNO_DEPL',),),);
-
-FIN();
diff --git a/Editeur/Patrons/thermique.salome.comm b/Editeur/Patrons/thermique.salome.comm
deleted file mode 100644 (file)
index 61c6fa1..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-DEBUT();
-
-MESH=LIRE_MAILLAGE(UNITE=21,
-                   FORMAT='MED',);
-
-MATER=DEFI_MATERIAU(THER=_F(LAMBDA=1.2,),);
-
-MODEL=AFFE_MODELE(MAILLAGE=MESH,
-                  AFFE=_F(TOUT='OUI',
-                          PHENOMENE='THERMIQUE',
-                          MODELISATION='3D',),);
-
-MATFIELD=AFFE_MATERIAU(MAILLAGE=MESH,
-                       AFFE=_F(TOUT='OUI',
-                               MATER=MATER,),);
-
-LOADING=AFFE_CHAR_THER(MODELE=MODEL,
-                       TEMP_IMPO=_F(GROUP_MA='Bloq',
-                                    TEMP=23.,),
-                       FLUX_REP=_F(GROUP_MA='Press',
-                                   FLUN=2.,),
-                       SOURCE=_F(GROUP_MA='Source',
-                                 SOUR=2.,),);
-
-TEMP=THER_LINEAIRE(MODELE=MODEL,
-                   CHAM_MATER=MATFIELD,
-                   EXCIT=_F(CHARGE=LOADING,),);
-
-IMPR_RESU(FORMAT='MED',
-          RESU=_F(RESULTAT=TEMP,),);
-
-FIN();
diff --git a/Editeur/Patrons/tradir_3D.comm b/Editeur/Patrons/tradir_3D.comm
deleted file mode 100644 (file)
index 41d17e5..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-
-# PATRON
-# ANALYSE MODALE
-# 3D
-
-DEBUT();
-# MISE EN DONNEES
-
-MAIL=LIRE_MAILLAGE();
-
-MODELE=AFFE_MODELE(MAILLAGE=MAIL,
-                   AFFE=_F(GROUP_MA='OBJET',
-                           PHENOMENE='MECANIQUE',
-                           MODELISATION='3D',),);
-# MATERIAU
-
-ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11,
-                            NU=0.3,
-                            RHO=7800.0,),);
-
-CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL,
-                    AFFE=_F(GROUP_MA='OBJET',
-                            MATER=ACIER,),);
-# CONDITIONS AUX LIMITES ET CHARGEMENT
-# CONDITIONS AUX LIMITES 
-
-BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE,
-                        DDL_IMPO=_F(GROUP_MA='ENCAST',
-                                    LIAISON='ENCASTRE',),);
-# CALCUL DES MATRICES ASSEMBLEES K ET M
-
-MACRO_MATR_ASSE(MODELE=MODELE,
-                CHAM_MATER=CHMAT,
-                CHARGE=BLOQUAGE,
-                NUME_DDL=CO('NUMEDDL'),
-                MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'),
-                              OPTION='RIGI_MECA',),
-                           _F(MATRICE=CO('MASSE'),
-                              OPTION='MASS_MECA',),),);
-# CALCUL DES CINQ PREMIERS MODES
-
-MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE,
-                       MATR_B=MASSE,
-                       CALC_FREQ=_F(
-                       OPTION='PLUS_PETITE',
-                       NMAX_FREQ=5,),);
-#CHARGEMENT
-
-EXCIT=AFFE_CHAR_MECA(MODELE=MODELE,
-                     PRES_REP=_F(GROUP_MA='PRESSE',
-                                 PRES=100.e5,),);
-
-EXCEL=CALC_VECT_ELEM(OPTION='CHAR_MECA',
-                     CHARGE=EXCIT,);
-
-EXCASS=ASSE_VECTEUR(VECT_ELEM=EXCEL,
-                    NUME_DDL=NUMEDDL,);
-OMEGA = 10.0;
-
-
-SINU = FORMULE(VALE='sin(OMEGA*INST)',
-               NOM_PARA='INST',);
-#CALCUL TRANSITOIRE
-
-TRADIR=DYNA_LINE_TRAN(MATR_MASS=MASSE,
-                      MATR_RIGI=RIGIDITE,
-                      NEWMARK=_F(),
-                      EXCIT=_F(VECT_ASSE=EXCASS,),
-                      INCREMENT=_F(PAS=.01,
-                                   INST_FIN=10.,),);
-
-FIN();
diff --git a/Editeur/Patrons/tramod_3D.comm b/Editeur/Patrons/tramod_3D.comm
deleted file mode 100644 (file)
index 9a68bc5..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-
-# PATRON
-# ANALYSE MODALE
-# 3D
-
-DEBUT();
-# MISE EN DONNEES
-
-MAIL=LIRE_MAILLAGE();
-
-MODELE=AFFE_MODELE(MAILLAGE=MAIL,
-                   AFFE=_F(GROUP_MA='OBJET',
-                           PHENOMENE='MECANIQUE',
-                           MODELISATION='3D',),);
-# MATERIAU
-
-ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11,
-                            NU=0.3,
-                            RHO=7800.0,),);
-
-CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL,
-                    AFFE=_F(GROUP_MA='OBJET',
-                            MATER=ACIER,),);
-# CONDITIONS AUX LIMITES ET CHARGEMENT
-# CONDITIONS AUX LIMITES 
-
-BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE,
-                        DDL_IMPO=_F(GROUP_MA='ENCAST',
-                                    LIAISON='ENCASTRE',),);
-# CALCUL DES MATRICES ASSEMBLEES K ET M
-
-MACRO_MATR_ASSE(MODELE=MODELE,
-                CHAM_MATER=CHMAT,
-                CHARGE=BLOQUAGE,
-                NUME_DDL=CO('NUMEDDL'),
-                MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'),
-                              OPTION='RIGI_MECA',),
-                           _F(MATRICE=CO('MASSE'),
-                              OPTION='MASS_MECA',),),);
-
-P=POST_ELEM(MASS_INER=_F(TOUT='OUI',
-                         GROUP_MA='M',),);
-# CALCUL DES CINQ PREMIERS MODES
-
-MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE,
-                       MATR_B=MASSE,
-                       CALC_FREQ=_F(
-                       OPTION='PLUS_PETITE',
-                       NMAX_FREQ=5,),);
-#CHARGEMENT
-
-EXCIT=AFFE_CHAR_MECA(MODELE=MODELE,
-                     PRES_REP=_F(GROUP_MA='PRESSE',
-                                 PRES=100.e5,),);
-
-EXCEL=CALC_VECT_ELEM(OPTION='CHAR_MECA',
-                     CHARGE=EXCIT,);
-
-EXCASS=ASSE_VECTEUR(VECT_ELEM=EXCEL,
-                    NUME_DDL=NUMEDDL,);
-OMEGA = 10.0;
-
-
-SINU = FORMULE(VALE='sin(OMEGA*INST)',
-               NOM_PARA='INST',);
-#PROJECTION
-
-MACRO_PROJ_BASE(BASE=MODES,
-                MATR_ASSE_GENE=(_F(MATRICE=CO('MASSPROJ'),
-                                   MATR_ASSE=MASSE,),
-                                _F(MATRICE=CO('RIGIPROJ'),
-                                   MATR_ASSE=RIGIDITE,),),
-                VECT_ASSE_GENE=_F(VECTEUR=CO('EXCPROJ'),
-                                  VECT_ASSE=EXCASS,),);
-#CALCUL TRANSITOIRE
-
-TRAMOD=DYNA_TRAN_MODAL(MASS_GENE=MASSPROJ,
-                       RIGI_GENE=RIGIPROJ,
-                       AMOR_REDUIT=(.02,.01,),
-                       INCREMENT=_F(INST_INIT=0.0,
-                                    INST_FIN=10.0,
-                                    PAS=.001,),
-                       EXCIT=_F(VECT_GENE=EXCPROJ,
-                                FONC_MULT=SINU,),);
-
-FIN();
index c0cc0d075233a0df8450b6018f09ba622fb7a125..7fa4ee8589e0a752e2d0e52deffa11fa94ef007d 100644 (file)
@@ -26,10 +26,9 @@ import generator
 
 class TroisDPilote:
 
-   def __init__(self,node,appli,parent):
+   def __init__(self,node,appli):
       self.node=node
       self.appli=appli
-      self.parent=parent
 
    def envoievisu(self):
       """ 
index 28da2d3d83d4ea0f619f39c24654712a58dd8cd0..1260b69abfa7b3a3b2bfcf3eee7130684668bc3e 100644 (file)
@@ -18,3 +18,7 @@
 #
 #
 # ======================================================================
+"""
+    Ce package contient les fonctionnalités COMMUNES nécessaires
+    aux deux éditeurs graphiques QT et TK
+"""
index c0947560b47a49ad0291e6d7b8e3a22b7f4a2de9..70d449bbb9082bb3f5365c6e15f24399d7074008 100644 (file)
@@ -24,7 +24,7 @@ import re,string,cPickle,os
 from Noyau.N_CR import CR
 
 #
-__Id__="$Id: analyse_catalogue.py,v 1.5.12.1 2007-04-26 07:56:07 cchris Exp $"
+__Id__="$Id: analyse_catalogue.py,v 1.6.6.1.4.1 2008-10-10 13:22:15 pnoyret Exp $"
 __version__="$Name:  $"
 #
 l_noms_commandes = ['OPER','PROC','MACRO','FORM']
diff --git a/Editeur/appli.py b/Editeur/appli.py
deleted file mode 100644 (file)
index 140d449..0000000
+++ /dev/null
@@ -1,447 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-    Ce module contient la classe APPLI qui est la classe mère de
-    l'application EFICAS. Elle prend en charge l'organisation générale
-    des composants graphiques et l'initialisation Tk
-    L'aspect applicatif doit etre pris en charge par la classe dérivée
-"""
-# Modules Python
-import os
-import string
-import sys
-import types
-import Pmw
-import Tkinter
-from widgets import showerror
-
-# Modules Eficas
-import splash
-import prefs
-import styles
-from styles import style
-import fontes
-import tooltip
-import properties
-import convert,generator
-import comploader
-from utils import extension_fichier,stripPath
-
-from widgets import Fenetre
-from Misc import MakeNomComplet
-import session
-import listeFichiers
-import listePatrons
-
-VERSION="EFICAS v1.12"
-
-class APPLI: 
-  def __init__ (self,master,code=prefs.code,fichier=None,test=0) :
-      self.code=code
-      self.top=master
-      self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS)
-
-      #dimensionnement de la fenetre principale
-      #aspect ratio de l'ecran
-      aspect=float(self.top.winfo_screenwidth())/float(self.top.winfo_screenheight())
-      #resolution (pixels par point). On utilise le fait qu'on a "normalement" 72 points par inch
-      resolution= self.top.winfo_screenwidth()/(self.top.winfo_screenmmwidth()/25.4*72)
-      DDY=max(20,resolution*(fontes.standard[1]+4)) #largeur d'un caractere fonte standard en pixel
-      x=int(45*DDY) #largeur d'ouverture de 45 caracteres de fonte standard 
-      y=int(25*DDY) #hauteur d'ouverture de 25 caracteres de fonte standard
-      minx=x*8/10 #largeur min (80 pour cent de largeur)
-      miny=y*8/10 #hauteur min (80 pour cent de hauteur)
-      self.top.minsize(minx,miny)
-      self.top.geometry('%dx%d' % (x,y))
-
-      self.top.title(VERSION + ' pour '+self.code)
-      self.titre=VERSION + ' pour '+self.code
-      self.top.withdraw()
-      self.initializeTk(master)
-      Pmw.initialise(master)
-
-      self.dict_reels={}
-      self.liste_simp_reel=[]
-      # L'attribut test permet d'activer les panneaux de splash et d'erreur (test=0)
-      # Si test est different de 0, les panneaux ne sont pas activés
-      self.test=test
-
-      # Lecture des parametres de configuration (fichier global editeur.ini 
-      # et utilisateur eficas.ini)
-      self.lecture_parametres()
-
-      self.format_fichier = Tkinter.StringVar()
-      self.message=''
-      # Avant la creation du bureau qui lit le catalogue
-      self.version_code=session.d_env.cata
-
-      # Creation de la menubar, toolbar, messagebar
-      self.cree_composants_graphiques()
-      # Creation des autres composants graphiques dont le bureau (parametrable par prefs.py)
-      self.load_appli_composants()                
-      self.listeFichiers=listeFichiers.listeFichiers(self)
-      self.listePatrons=listePatrons.listePatrons(self)
-      self.dir=None
-
-      # Fermer le splash et deiconifier la fenetre principale si on n'est pas en test
-      if (self.test == 0):
-           splash.fini_splash()
-           #self.affiche_FAQ()
-
-      # Ouverture des fichiers de commandes donnes sur la ligne de commande
-      cwd=os.getcwd()
-      self.dir=cwd
-      for study in session.d_env.studies:
-          os.chdir(cwd)
-          d=session.get_unit(study,self)
-          self.bureau.openJDC(file=study["comm"],units=d)
-
-
-  def send_message(self,message):
-      self.message=message
-
-  def exitEFICAS(self):
-      self.quit()
-
-  def quit(self):
-      self.top.quit()
-
-  def lecture_parametres(self):
-      """
-          Active la lecture des paramètres standards et utilisateur
-      """
-      if (self.test == 0):
-         splash._splash.configure(text = "Chargement des paramètres utilisateur")
-      import configuration
-      self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
-      self.CONFIGStyle = configuration.make_config_style(self,prefs.REPINI)
-
-  def cree_composants_graphiques(self):
-      """
-          Cree les constituants graphiques fixes de l'application :
-           - menubar
-           - toolbar
-           - statusbar
-      """
-      if (self.test == 0):
-         splash._splash.configure(text = "Chargement de l'IHM")
-         splash._splash.configure(text = "Chargement de la menubar")
-      import menubar
-      self.menubar=menubar.MENUBAR(self,self.top)
-      if (self.test == 0):
-         splash._splash.configure(text = "Chargement de la toolbar")
-      import toolbar
-      self.toolbar=toolbar.TOOLBAR(self,self.top)
-      if (self.test == 0):
-         splash._splash.configure(text = "Chargement de la statusbar")
-      import statusbar
-      self.statusbar=statusbar.STATUSBAR(self.top,styles.style.statusfont)
-
-  def load_appli_composants(self):
-      """
-          Cree les autres constituants graphiques de l'application :
-           - bureau 
-           - readercata
-           - ...
-          Cette creation est parametrable par fichier prefs.py
-      """
-      if (self.test == 0):
-         splash._splash.configure(text = "Chargement des appli_composants")
-      for mname in self.appli_composants:
-         self.load_appli_composant(mname)
-
-  def load_appli_composant(self,mname):
-      module=__import__(mname,globals(),locals())
-      factory=getattr(module,mname.upper())
-      appli_composant=factory(self,self.top)
-      setattr(self,mname,appli_composant)
-      self.fill_menus(appli_composant,appli_composant.menu_defs)
-      self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant)
-
-  def affiche_FAQ(self):
-      import faq
-      faq.affiche(self.top)
-
-  def affiche_infos(self,message):
-      self.statusbar.affiche_infos(message)
-      return
-
-  def  initializeTk(self, root):
-        """
-        Initialize platform specific options
-        """
-        if sys.platform == 'mac':
-            self.initializeTk_mac(root)
-        elif sys.platform == 'win32':
-            self.initializeTk_win32(root)
-        else:
-            self.initializeTk_unix(root)
-
-  def initializeTk_win32(self, root):
-        root.option_add('*Font', fontes.standard)
-        root.option_add('*EntryField.Entry.Font', fontes.standard)
-        root.option_add('*Listbox*Font',fontes.standard)
-
-  def initializeTk_colors_common(self, root):
-        root.option_add('*background', style.background)
-        root.option_add('*foreground', style.foreground)
-        root.option_add('*EntryField.Entry.background', style.entry_background)
-        root.option_add('*Entry*background', style.entry_background)
-        root.option_add('*Listbox*background', style.list_background)
-        root.option_add('*Listbox*selectBackground', style.list_select_background)
-        root.option_add('*Listbox*selectForeground', style.list_select_foreground)
-
-  def initializeTk_mac(self, root):
-        self.initializeTk_colors_common(root)
-
-  def initializeTk_unix(self, root):
-      root.option_add('*Font', fontes.standard)
-      root.option_add('*EntryField.Entry.Font',fontes.standard )
-      root.option_add('*Listbox*Font', fontes.standard)
-      self.initializeTk_colors_common(root)
-
-  def get_texte_infos(self):
-      """
-          Retourne un texte d'informations sur la session courante d'EFICAS
-      """
-      texte = VERSION + '\n\n'
-      texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n'
-      texte = texte + 'Equipe : SINETICS\n\n'
-      texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
-      return texte
-
-  def efface_aide(self,event):
-      """
-          Efface la bulle d'aide d'un panneau
-      """
-      try:
-          self.aide.destroy()
-      except:
-          pass
-      return
-
-  def affiche_aide(self,event,aide):
-      """
-          Affiche l'aide concernant un panneau
-      """
-      x=event.x
-      y=event.y
-      widget=event.widget
-      self.aide=tooltip.TOOLTIP(widget)
-      self.aide.xoffset = 10
-      self.aide.yoffset = - widget.winfo_height()/2
-      self.aide.setText(aide)
-      self.aide._showTip()
-      return 
-
-  def cree_menu(self,menu,itemlist,appli_composant):
-      """
-          Ajoute les items du tuple itemlist
-          dans le menu menu
-      """
-      number_item=0
-      radio=None
-      for item in itemlist:
-         number_item=number_item + 1
-         raccourci_label=""
-         if not item :
-            #menu.add_separator()
-            pass
-         else:
-            if len(item)==3:
-               raccourci=item[2]
-               raccourci_label="   "+raccourci
-               newitem=(item[0],item[1])
-            else :
-               if len(item)==4:
-                  raccourci=item[2]
-                  raccourci_label="   "+item[3]
-                  newitem=(item[0],item[1])
-               else :
-                  raccourci=""
-                  newitem=item
-            item=newitem
-            label,method=item
-            if type(method) == types.TupleType:
-               # On a un tuple => on cree une cascade
-               menu_cascade=Tkinter.Menu(menu)
-               menu.add_cascade(label=label,menu=menu_cascade)
-               self.cree_menu(menu_cascade,method,appli_composant)
-            elif method[0] == '&':
-               # On a une chaine avec & en tete => on cree un radiobouton
-               command=getattr(appli_composant,method[1:])
-               menu.add_radiobutton(label=label,command=command)
-               if radio == None:radio=number_item
-            else:
-               command=getattr(appli_composant,method)
-               menu.add_command(label=label,accelerator=raccourci_label,command=command)
-               if raccourci != "" :
-                  self.top.bind(raccourci,command)
-      # Si au moins un radiobouton existe on invoke le premier
-      if radio:menu.invoke(radio)
-
-  def fill_menus(self,appli_composant,defs):
-      menudict=self.menubar.menudict
-      for mname,itemlist in defs:
-          menu=menudict.get(mname)
-          if not menu:continue
-          self.cree_menu(menu,itemlist,appli_composant)
-
-  def update_jdc_courant(self):
-      self.bureau.update_jdc_courant()
-
-  def affiche_alerte(self,titre,message):
-      f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)
-      f.wait()
-
-
-class valeur:
-   def __init__(self,v=None):
-      self.v=v
-   def set(self,v):
-      self.v=v
-   def get(self):
-      return self.v
-
-class STANDALONE(APPLI):
-   def __init__ (self,code=prefs.code,fichier=None,version='v8.2') :
-      self.code=code
-      self.top=None
-      self.format_fichier=valeur()
-
-      self.dict_reels={}
-      self.liste_simp_reel=[]
-      # L'attribut test doit valoir 1 si on ne veut pas creer les fenetres
-      self.test=1
-      self.titre="STANDALONE POUR TEST"
-
-      # Lecture des parametres de configuration (fichier global editeur.ini
-      # et utilisateur eficas.ini)
-      self.lecture_parametres()
-
-      self.message=''
-      # Avant la creation du bureau qui lit le catalogue
-      self.version_code=version
-      import readercata
-      self.readercata=readercata.READERCATA(self,None)
-
-      self.dir=None
-
-   def affiche_infos(self,message):
-      return
-
-   def get_text_JDC(self,JDC,format):
-      if generator.plugins.has_key(format):
-         # Le generateur existe on l'utilise
-         g=generator.plugins[format]()
-         jdc_formate=g.gener(JDC,format='beautifie')
-         return jdc_formate
-      else:
-         # Il n'existe pas c'est une erreur
-         return
-
-   def newJDC(self):
-      CONTEXT.unset_current_step()
-      J=self.readercata.cata[0].JdC(procedure="",
-                                    appli=self,
-                                    cata=self.readercata.cata,
-                                    cata_ord_dico=self.readercata.cata_ordonne_dico,
-                                    rep_mat=self.CONFIGURATION.rep_mat,
-                                   )
-      J.analyse()
-      return J
-
-   def openJDC(self,file):
-      self.fileName = file
-      e=extension_fichier(file)
-      self.JDCName=stripPath(file)
-      self.initialdir = os.path.dirname(os.path.abspath(file))
-      format=self.format_fichier.get()
-      # 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('exec',self)
-         if not p.cr.estvide():
-             raise ValueError(str(p.cr))
-
-      # On se met dans le repertoire ou se trouve le fichier de commandes
-      # pour trouver les eventuels fichiers include ou autres
-      # localises a cote du fichier de commandes
-      os.chdir(self.initialdir)
-      CONTEXT.unset_current_step()
-      J=self.readercata.cata[0].JdC(procedure=text,
-                                    appli=self,
-                                    cata=self.readercata.cata,
-                                    cata_ord_dico=self.readercata.cata_ordonne_dico,
-                                    nom=self.JDCName,
-                                    rep_mat=self.CONFIGURATION.rep_mat,
-                                   )
-      J.analyse()
-      txt= J.cr.get_mess_exception()
-      if txt:raise ValueError(txt)
-      return J
-
-   def openTXT(self,text):
-      self.JDCName="TEXT"
-      CONTEXT.unset_current_step()
-      J=self.readercata.cata[0].JdC(procedure=text,
-                                    appli=self,
-                                    cata=self.readercata.cata,
-                                    cata_ord_dico=self.readercata.cata_ordonne_dico,
-                                    nom=self.JDCName,
-                                    rep_mat=self.CONFIGURATION.rep_mat,
-                                   )
-      J.analyse()
-      txt= J.cr.get_mess_exception()
-      if txt:raise ValueError(txt)
-      return J
-
-   def create_item(self,obj):
-      return comploader.make_objecttreeitem(self,getattr(obj,"nom","item"),obj)
-
-   def get_file(self,unite=None,fic_origine = ''):
-      """
-          Retourne le nom du fichier correspondant a l unite logique unite (entier)
-          ou d'un fichier poursuite
-      """
-      f,ext=os.path.splitext(fic_origine)
-      if unite :
-          #include
-          finclude=f+".%d" % unite
-      else:
-          #poursuite
-          n=ext[-1]
-          if n == '0':
-             ext=".comm"
-          else: 
-             ext=".com%d" % (string.atoi(n)-1)
-             if ext == '.com0' and not os.path.isfile(f+".com0"):
-                ext=".comm"
-          finclude=f+ext
-      ff=open(finclude)
-      text=ff.read()
-      ff.close()
-      return finclude,text
-
-   def affiche_alerte(self,titre,message):
-      print titre+ "\n\n" + message
diff --git a/Editeur/basestyle.py b/Editeur/basestyle.py
deleted file mode 100644 (file)
index e4287b7..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-class STYLE:
-    background='gray90'
-    foreground='black'
-    entry_background='white'
-    list_background='white'
-    list_select_background='#00008b'
-    list_select_foreground='grey'
-    tooltip_background="yellow"
-
-    standard = ("Helvetica",12)
-    standard_italique = ("Helvetica",12,'italic')
-    standard_gras = ("Helvetica",12,'bold')
-    standard_gras_souligne = ("Helvetica",12,'bold','underline')
-
-    canvas = ('Helvetica',10)
-    canvas_italique = ('Helvetica',10,'italic')
-    canvas_gras = ("Helvetica",10,'bold')
-    canvas_gras_italique = ("Helvetica",12,'bold','italic')
-
-    standard12 = ("Helvetica",14)
-    standard12_gras = ("Helvetica",14,'bold')
-    standard12_gras_italique = ( "Helvetica",14,'bold','italic')
-
-    standardcourier10 = ("Courier",14)
-    statusfont = ("Helvetica",16)
-
-style=STYLE()
diff --git a/Editeur/browser.py b/Editeur/browser.py
deleted file mode 100644 (file)
index 51c4e3a..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-"""
-# Modules Python
-import os,string
-
-# Modules Eficas
-import Interp
-import catabrowser
-import cataediteur
-
-class BROWSER:
-
-   menu_defs=[
-              ('Browsers',[
-                           ('Browser catalogue','browser_catalogue'),
-                           ('Editeur catalogue','edite_catalogue'),
-                           ('Shell','shell'),
-                         ]
-              )
-             ]
-
-   button_defs=[]
-
-   def __init__(self,appli,parent):
-      self.appli=appli
-      self.parent=parent
-      self.cataitem = catabrowser.CATAItem(self,"Catalogue "+self.appli.readercata.code,
-                                           self.appli.readercata.cata,
-                                           objet_cata_ordonne = self.appli.readercata.cata_ordonne_dico)
-
-   def shell(self,event=None):
-      if not hasattr(self.appli.bureau.JDCDisplay_courant,'jdc'):return
-      d={'j':self.appli.bureau.JDCDisplay_courant.jdc}
-      Interp.InterpWindow(d,parent=self.parent)
-
-   def browser_catalogue(self,event=None):
-      catabrowser.CataBrowser(parent=self.parent,appli=self.appli,
-                                cata = self.appli.readercata.cata,
-                                item = self.cataitem)
-
-   def edite_catalogue(self,event=None):
-      cataediteur.CataEditeur(parent=self.parent,appli=self.appli,cata=self.appli.readercata.cata)
-
-
-
diff --git a/Editeur/bureau.py b/Editeur/bureau.py
deleted file mode 100644 (file)
index b1a408d..0000000
+++ /dev/null
@@ -1,768 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-   Ce module contient la classe BUREAU qui gere les JDC ouverts
-"""
-# Modules Python
-import os,string,sys
-import traceback
-import Pmw
-from widgets import askopenfilename,asksaveasfilename
-from widgets import showinfo,askyesno,showerror
-
-# Modules Eficas
-import splash
-import prefs
-import convert
-import generator
-import AIDE
-import os
-from jdcdisplay import JDCDISPLAY
-from utils import extension_fichier,stripPath,save_in_file
-from widgets import Fenetre,Ask_Format_Fichier,FenetreSurLigneWarning
-from fenetre_mc_inconnus import fenetre_mc_inconnus
-from Ihm import CONNECTOR
-from Traducteur import traduitV7V8 
-
-import comploader
-
-class BUREAU:
-   menu_defs=[
-              ('Fichier',[
-                           ('Nouveau','newJDC','<Control-n>'),
-                           ('Ouvrir','openJDC','<Control-o>'),
-                           ('Enregistrer','saveJDC','<Control-e>'),
-                           ('Enregistrer sous','saveasJDC','<Control-s>'),
-                           None,
-                           ('Fermer','closeJDC','<Control-f>'),
-                           ('Quitter','exitEFICAS','<Control-q>'),
-                         ]
-              ),
-              ('Edition',[
-                           ('Copier','copy','<Control-c>'),
-                           ('Couper','cut','<Control-x>'),
-                           ('Coller','paste','<Control-v>'),
-                         ]
-              ),
-              ('Jeu de commandes',[
-                                   ('Rapport de validation','visuCRJDC','<Control-r>'),
-                                   ('Fichier à plat','visu_a_plat','<Control-p>'),
-                                   ('Fichier .py','visuJDC_py'),
-                                   ('Fichier source','visu_txt_brut_JDC','<Control-b>'),
-                                   ('Paramètres Eficas','affichage_fichier_ini'),
-                                   ('Mots-clés inconnus','mc_inconnus'),
-                                  ]
-              ),
-              ('Traduction',[
-                             ('Traduction v7 en v8','TraduitFichier','<Control-t>','Ctrl+T')
-                            ]
-              ),
-              ('Aide',[
-                        ('Aide EFICAS','aideEFICAS'),
-                      ]
-              ),
-             ]
-
-   button_defs  =      (('New24',"newJDC","Création d'un nouveau fichier",'always'),
-                        ('Open24',"openJDC","Ouverture d'un fichier existant",'always'),
-                        ('Save24',"saveJDC","Sauvegarde du fichier courant",'always'),
-                        ('Fermer24',"closeJDC","Fermeture du fichier courant",'always'),
-                        ('Zoom24',"visuJDC","Visualisation du fichier de commandes",'always'),
-                        None,
-                        ('Copy24',"copy","Copie l'objet courant",'jdc'),
-                        ('Cut24',"cut","Coupe l'objet courant",'jdc'),
-                        ('Paste24',"paste","Colle l'objet copié après l'objet courant",'jdc'),
-                        None,
-                        ('Delete24',"delete","Supprime l'objet courant",'jdc'),
-                        ('Help24',"view_doc","Documentation de l'objet courant",'jdc')
-                       )
-   try:
-      menu_defs=prefs.menu_defs['bureau']
-   except:
-      pass
-   try:
-      button_defs=prefs.button_defs['bureau']
-   except:
-      pass
-
-   def __init__(self,appli,parent):
-      self.parent=parent
-      self.appli=appli
-      if self.appli.test == 0 :
-         splash._splash.configure(text = "Création du bureau")
-      self.nb = Pmw.NoteBook(self.parent,raisecommand=self.selectJDC)
-      self.nb.pack(fill='both',expand=1)
-      self.JDCDisplay_courant=None
-      self.fileName=None
-      self.liste_JDCDisplay=[]
-      comploader.charger_composants()
-      self.cree_cataitem()
-      self.text_reel=""
-      self.initialdir = self.appli.CONFIGURATION.initialdir
-
-   def cree_cataitem(self):
-      """
-          On récupère dans l'appli_composant readercata les variables 
-          qui servent par la suite pour la création des JDC
-      """
-      self.cataitem=self.appli.readercata.cataitem
-      self.cata=self.appli.readercata.cata
-      self.cata_ordonne_dico=self.appli.readercata.cata_ordonne_dico
-      self.code=self.appli.readercata.code
-      self.version_code=self.appli.readercata.version_code
-      self.fic_cata=self.appli.readercata.fic_cata
-
-   def selectJDC(self,event=None):
-      """
-          Cette méthode est appelée chaque fois que l'on sélectionne 
-          l'onglet d'un JDC dans le NoteBook des JDC.
-          Elle permet de stocker dans les variable self.JDC et 
-          self.JDCDisplay_courant les valeurs concernant le JDC courant
-      """
-      if len(self.liste_JDCDisplay) == 0 : return
-      #if self.JDCDisplay_courant : self.JDCDisplay_courant.jdc.unset_context()
-      numero_jdc = self.nb.index(self.nb.getcurselection())
-      self.JDCDisplay_courant.unselect()
-      self.JDCDisplay_courant = self.liste_JDCDisplay[numero_jdc]
-      self.JDC = self.JDCDisplay_courant.jdc
-      self.JDCName = self.JDC.nom
-      self.JDCDisplay_courant.select()
-      #print "selectJDC",numero_jdc,self.JDCDisplay_courant,self.JDCName
-
-
-   def newJDC_include(self,event=None):
-      """
-          Initialise un nouveau JDC include vierge
-      """
-      import Extensions.jdc_include
-      JdC_aux=Extensions.jdc_include.JdC_include
-
-      self.appli.statusbar.reset_affichage_infos()
-
-      CONTEXT.unset_current_step()
-      jaux=self.cata[0].JdC(procedure="",appli=self.appli,
-                         cata=self.cata,cata_ord_dico=self.cata_ordonne_dico,
-                         rep_mat=self.appli.CONFIGURATION.rep_mat,
-                         )
-      jaux.analyse()
-
-      J=JdC_aux(procedure="",appli=self.appli,
-                         cata=self.cata,cata_ord_dico=self.cata_ordonne_dico,
-                         jdc_pere=jaux,
-                         rep_mat=self.appli.CONFIGURATION.rep_mat,
-                         )
-      J.analyse()
-      self.JDCName=J.nom
-      self.fileName=None
-      self.ShowJDC(J,self.JDCName)
-      self.appli.toolbar.active_boutons()
-      return J
-
-   def newJDC(self,event=None):
-      """
-          Initialise un nouveau JDC vierge
-      """
-      self.appli.statusbar.reset_affichage_infos()
-
-      CONTEXT.unset_current_step()
-      J=self.cata[0].JdC(procedure="",appli=self.appli,
-                         cata=self.cata,cata_ord_dico=self.cata_ordonne_dico,
-                         rep_mat=self.appli.CONFIGURATION.rep_mat,
-                         )
-      J.analyse()
-      self.JDCName=J.nom
-      self.fileName=None
-      self.ShowJDC(J,self.JDCName)
-      self.appli.toolbar.active_boutons()
-      return J
-
-   def ShowJDC(self,JDC,nom,label_onglet=None,JDCDISPLAY=JDCDISPLAY,enregistre="non"):
-      """
-          Lance l'affichage du JDC cad création du JDCDisplay
-          Rajoute le JDCDisplay à la liste des JDCDisplay si label_onglet == None cad si on crée
-          bien un nouveau JDCDisplay et non si on remplace (renommage de l'onglet)
-      """
-      self.JDC=JDC
-      self.JDCName = self.JDC.nom = nom
-      if label_onglet == None :
-          # On veut un nouvel onglet
-          label_onglet = self.GetLabelJDC()
-          self.nb.add(label_onglet,tab_text = nom,tab_width=20)
-          new = 'oui'
-      else :
-          new = 'non'
-      self.JDCDisplay_courant=JDCDISPLAY(self.JDC,nom,appli=self.appli,parent=self.nb.page(label_onglet))
-      if new == 'oui':
-          self.liste_JDCDisplay.append(self.JDCDisplay_courant)
-      self.JDCDisplay_courant.modified='n'
-      if enregistre != "non" :
-         self.JDCDisplay_courant.fichier=self.fileName
-      else :
-         self.initialdir = self.appli.CONFIGURATION.rep_user
-      self.nb.selectpage(label_onglet)
-      self.nb.setnaturalsize()
-      self.nb.bind_all("<Key-Next>",lambda e,s=self:s.selectArbreDown())
-      self.nb.bind_all("<Key-Prior>",lambda e,s=self:s.selectArbreUp())
-      self.nb.bind_all("<Insert>",lambda e,s=self:s.deplieReplieNode())
-      texte = "Jeu de commandes :" + self.JDCName+" ouvert"
-      CONNECTOR.Connect(JDC,"close",self.onClose,(self.JDCDisplay_courant,))
-      self.appli.affiche_infos(texte)
-
-   def onClose(self,jdcdisplay):
-      #print "onClose",jdcdisplay
-      self.closeJDCDISPLAY(jdcdisplay)
-
-   def closeJDCDISPLAY(self,jdc):
-      """
-        Ferme le jdcdisplay spécifié par l'argument jdc
-      """
-      if jdc is self.JDCDisplay_courant:
-         # on ferme le jdcdisplay courant
-         self.closeSelectedJDC()
-      else:
-         # on ferme un autre jdcdisplay que le courant
-         old_JDCDisplay=self.JDCDisplay_courant
-         old_page=self.nb.getcurselection()
-
-         self.JDCDisplay_courant=jdc
-         self.JDC=jdc.jdc
-         numero_jdc=self.liste_JDCDisplay.index(jdc)
-         self.nb.selectpage(numero_jdc)
-         #print numero_jdc
-      
-         self.closeSelectedJDC()
-         self.JDCDisplay_courant=old_JDCDisplay
-         self.JDC=old_JDCDisplay.jdc
-         self.nb.selectpage(old_page)
-
-   def closeJDC (self,event=None) :
-      """
-          Ferme le JDC associé au JDCDISPLAY selectionné
-      """
-      if self.JDCDisplay_courant :
-         self.JDCDisplay_courant.jdc.close()
-
-   def closeSelectedJDC (self) :
-      """
-      Ferme le JDC courant et détruit l'onglet associé dans le notebook self.nb
-      """
-      if self.JDCDisplay_courant.modified == 'o' :
-          message = "Voulez-vous sauvegarder le jeu de commandes "+self.JDC.nom+" courant ?"
-          reponse = askyesno(title="Sauvegarde du jdc courant",
-                             message=message)
-          if reponse :
-              test = self.saveJDC()
-              if test == 0 :
-                  self.appli.affiche_infos("Sauvegarde impossible")
-                  return
-
-      CONNECTOR.Disconnect(self.JDCDisplay_courant.jdc,"close",self.onClose,(self.JDCDisplay_courant,))
-      self.JDCDisplay_courant.supprime()
-      self.JDCDisplay_courant.jdc.supprime()
-      self.liste_JDCDisplay.remove(self.JDCDisplay_courant)
-      # Active le mecanisme de selection du notebook (selectJDC)
-      self.nb.delete(self.nb.getcurselection())
-
-      try:
-          index = self.nb.index(self.nb.getcurselection())
-          self.JDCDisplay_courant = self.liste_JDCDisplay[index]
-          self.JDC = self.JDCDisplay_courant.jdc
-      except:
-          self.JDC = None
-          self.JDCDisplay_courant = None
-          self.appli.toolbar.inactive_boutons()
-
-   def visuCRJDC(self,event=None):
-      return self.visuCR(mode='JDC')
-
-   def visuCR(self,mode):
-      """
-      Méthode permettant l'affichage du rapport de validation
-      """
-      if mode == 'JDC':
-          if not hasattr(self,'JDC') : return
-          if self.JDC == None : return
-          titre="rapport de validation du jeu de commandes courant"
-          cr = self.JDC.report()
-          #self.update_jdc_courant()
-      elif mode == 'CATA':
-          from Noyau.N_CR import CR
-          cr = CR()
-          cr.debut = "Début rapport de validation du catalogue"
-          cr.fin = "Fin rapport de validation du catalogue"
-          titre="rapport de validation du catalogue"
-          if hasattr(self,'cata_ordonne_cr') :
-              cr.add(self.cata_ordonne_cr)
-          if hasattr(self,'cata_dev_ordonne_cr') :
-              cr.add(self.cata_dev_ordonne_cr)
-          for cata in self.cata:
-              if hasattr(cata,'JdC'):
-                  cr.add(cata.JdC.report())
-      texte_cr = str(cr)
-      self.visu_texte_cr = Fenetre(self.appli,titre=titre,texte=texte_cr)
-
-   def openJDC(self,event=None,file=None,units=None,enregistre="oui"):
-      """
-          Demande à l'utilisateur quel JDC existant il veut ouvrir
-      """
-      if self.code == 'ASTER':
-          filetypes = ( ("format "+self.appli.format_fichier.get(), ".com*"),("Tous",'*'))
-      elif self.code == 'HOMARD' :
-          filetypes = ( ("format "+self.appli.format_fichier.get(), ".py"),("Tous",'*'))
-      else:
-          filetypes = ( ("format "+self.appli.format_fichier.get(), ".py"),)
-      if not hasattr(self,'initialdir'):
-         self.initialdir = self.appli.CONFIGURATION.initialdir
-
-      if not file :
-          file = askopenfilename(title="Ouverture d'un fichier de commandes Aster",
-                                 defaultextension=".comm",
-                                 filetypes = filetypes,
-                                 initialdir = self.initialdir)
-      if file :
-          self.fileName = file
-          e=extension_fichier(file)
-          self.JDCName=stripPath(file)
-          self.initialdir = os.path.dirname(os.path.abspath(file))
-      else :
-          return
-
-      format=self.appli.format_fichier.get()
-      # 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('exec',self.appli)
-         if not p.cr.estvide(): 
-            self.appli.affiche_infos("Erreur à la conversion")
-            Fenetre(self.appli,
-                    titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier",
-                    texte = str(p.cr)).wait()
-            return
-         if enregistre == "oui" :
-            self.appli.listeFichiers.aOuvert(file)
-      else:
-         # Il n'existe pas c'est une erreur
-         self.appli.affiche_infos("Type de fichier non reconnu")
-         showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")
-         return
-
-      # On se met dans le repertoire ou se trouve le fichier de commandes
-      # pour trouver les eventuels fichiers include ou autres
-      # localises a cote du fichier de commandes
-      os.chdir(self.initialdir)
-      CONTEXT.unset_current_step()
-      J=self.cata[0].JdC(procedure=text,appli=self.appli,
-                         cata=self.cata,cata_ord_dico=self.cata_ordonne_dico,
-                         nom = self.JDCName,
-                         rep_mat=self.appli.CONFIGURATION.rep_mat,
-                         )
-      if units is not None:
-         J.recorded_units=units
-         J.old_recorded_units=units
-
-      J.analyse()
-      txt_exception = J.cr.get_mess_exception()
-      if txt_exception :
-          # des exceptions ont été levées à la création du JDC 
-          # --> on affiche les erreurs mais pas le JDC
-          self.JDC=J
-          self.appli.affiche_infos("Erreur fatale au chargement de %s" %file)
-          if self.appli.test == 0 :
-             showerror("Erreur fatale au chargement d'un fichier",txt_exception)
-      else:
-          self.ShowJDC(J,self.JDCName,enregistre=enregistre)
-          self.appli.toolbar.active_boutons()
-          # si le JDC ne contient rien (vide), on retourne ici
-          if len(self.JDC.etapes) == 0 : return
-          # dans le cas où le JDC est invalide, on affiche son CR
-          if not self.JDC.isvalid():
-             self.appli.top.update()
-             self.visuCR(mode='JDC')
-      return J
-
-   def deplieReplieNode(self):
-       self.JDCDisplay_courant.tree.tree.deplieReplieNode()
-
-   def selectArbreDown(self):
-       self.JDCDisplay_courant.tree.tree.canvas.focus_set()
-       self.JDCDisplay_courant.tree.tree.mot_down_force()
-
-   def selectArbreUp(self):
-       self.JDCDisplay_courant.tree.tree.canvas.focus_set()
-       self.JDCDisplay_courant.tree.tree.mot_up_force()
-
-   def GetLabelJDC(self,nb_jdc = 'absent'):
-      """
-      Retourne le label de l'onglet du NoteBook associé au JDC à afficher
-      """
-      if nb_jdc == 'absent':
-          nb_jdc = len(self.nb.pagenames())
-      nb_jdc = nb_jdc+1
-      label_onglet = 'JDC'+`nb_jdc`
-      if label_onglet not in self.nb.pagenames() :
-          return label_onglet
-      else :
-          return self.GetLabelJDC(nb_jdc)
-
-   def saveasJDC(self,event=None):
-      """ 
-           Sauvegarde le JDC courant en demandant impérativement à l'utilisateur de
-           donner le nom du fichier de sauvegarde 
-      """
-      self.saveJDC(echo='oui')
-
-   def saveJDC(self,echo='non'):
-      """ 
-          Sauvegarde le JDC courant.
-          Retourne 1 si la sauvegarde s'est bien faite, 0 sinon.
-
-            - Si echo = 'oui' : interactif (l'utilisateur donne le nom sous lequel il 
-                            veut sauver le JDC
-            - Si echo = 'non' : muet (sauvegarde le JDC dans JDC.procedure)
-      """
-      ok = 0
-      if not hasattr(self,'JDC') : return 0
-      format=self.appli.format_fichier.get()
-      if generator.plugins.has_key(format):
-         # Le generateur existe on l'utilise
-         g=generator.plugins[format]()
-         jdc_formate=g.gener(self.JDC,format='beautifie')
-         if format == 'homard':
-            self.jdc_homard=g.get_homard()
-         if not g.cr.estvide():
-            self.appli.affiche_infos("Erreur à la generation")
-            showerror("Erreur à la generation","EFICAS ne sait pas convertir ce JDC")
-            return
-      else:
-         # Il n'existe pas c'est une erreur
-         self.appli.affiche_infos("Format %s non reconnu" % format)
-         showerror("Format %s non reconnu" % format,"EFICAS ne sait pas convertir le JDC")
-         return
-      self.jdc_fini = string.replace(jdc_formate,'\r\n','\n')
-
-      if echo =='oui' or self.JDCDisplay_courant.fichier == None:
-         ok = self.asknomsauvegardeJDC()
-      elif self.JDCDisplay_courant.fichier != None :
-         # le JDC a déjà un nom : on sauvegarde directement sans demander
-         # un autre nom au développeur
-         if not save_in_file(self.JDCDisplay_courant.fichier,self.jdc_fini,self.appli.dir) :
-              showinfo("Erreur","Problème à la sauvegarde du fichier :" + `self.JDCDisplay_courant.fichier`)
-              #return 0
-              ok = 0
-         else :
-              if self.appli.format_fichier.get() == 'homard':
-                  self.save_homard(self.JDCDisplay_courant.fichier,self.jdc_homard)
-              self.JDCDisplay_courant.stop_modif()
-              self.appli.affiche_infos("sauvegarde de "+`self.JDCDisplay_courant.fichier`+" effectuée")
-              ok = 1
-
-      if ok and hasattr( self.appli, 'salome'):
-         # eficas a été lancé à partir deSalome
-         #1)ajout dans l'arbre d'étude du nom du jdc
-         ok, msg = self.appli.addJdcInSalome( self.JDCDisplay_courant.fichier )
-
-         #2)CS_pbruno ??
-         from panelsSalome import SALOME_UNIQUE_BASE_Panel
-         if len(SALOME_UNIQUE_BASE_Panel.dict_fichier_unite) > 0 :
-            print 'CS_pbruno if len(SALOMchier_unite) > 0 :???????'
-            self.appli.creeConfigTxt( self.appli.CONFIGURATION.initialdir, SALOME_UNIQUE_BASE_Panel.dict_fichier_unite )
-
-         #3)création/mise à jours d'un maillage dans Salome
-         self.appli.createOrUpdateMesh()
-      return ok
-
-   def asknomsauvegardeJDC(self):
-      """ Demande à l'utilsateur le nom sous lequel il veut sauvegarder le JDC courant """
-      titre = "Sauvegarde d'un fichier de commandes "+self.code
-      if self.code == 'ASTER':
-          defext = ".comm"
-          filtyp = ( ("ASTER", ".comm"),)
-      else :
-          defext = ".py"
-          filtyp = ( (self.code, ".py"),)
-      sauvegarde = asksaveasfilename(title=titre,
-                                     defaultextension=defext,
-                                     filetypes = filtyp,
-                                     initialdir = self.initialdir)
-                            #initialdir = self.appli.CONFIGURATION.initialdir)
-                            #initialdir = self.appli.CONFIGURATION.rep_user)
-      if sauvegarde :
-          if not save_in_file(sauvegarde,self.jdc_fini,None) :
-              showinfo("Erreur","Problème à la sauvegarde du fichier "+`sauvegarde`)
-              return 0
-          else :
-              if self.appli.format_fichier.get() == 'homard':
-                  self.save_homard(sauvegarde,self.jdc_homard)
-              self.JDCDisplay_courant.stop_modif()
-              self.appli.affiche_infos("Sauvegarde effectuée")
-              if sauvegarde != self.JDCDisplay_courant.fichier :
-                  # l'utilisateur a sauvegardé le JDC sous un autre nom
-                  self.JDCDisplay_courant.fichier = sauvegarde
-                  self.JDCName = self.JDC.nom = stripPath(sauvegarde)
-                  self.JDC.changefichier(sauvegarde)
-                  self.changeNomPage()
-              return 1
-      else :
-          return 0
-
-   def changeNomPage(self):
-      """ Change le nom de l'onglet contenant le JDC courant : en fait détruit l'actuel
-          et recrée un autre onglet à la même place avec le bon nom 
-      """
-      nom = self.JDCName
-      self.JDCDisplay_courant.jdc.nom = nom
-      nom_page = self.nb.getcurselection()
-      num_page = self.nb.index(nom_page)
-      tab = self.nb.tab(num_page)
-      tab.configure(text = nom)
-
-   def exitEFICAS(self,event=None):
-      """
-          Permet de sortir d'EFICAS en demandant à l'utilisateur
-          s'il veut sauvegarder les modifications en cours
-      """
-      liste = self.GetListeJDCaSauvegarder()
-      if liste != [] :
-          # Certains fichiers n'ont pas été sauvegardés ...
-          if askyesno("Enregistrer modifications","Enregistrer les modifications ?") :
-              test = self.saveall(liste)
-              if test != 1 :
-                  return
-      if askyesno ("Quitter","Voulez-vous vraiment quitter l'application ?") :
-          for JDCDisplay in self.liste_JDCDisplay:
-              JDCDisplay.jdc.supprime()
-          self.appli.quit()
-          return
-
-   def GetListeJDCaSauvegarder(self) :
-      """ Retourne parmi la liste de tous les JDC ouverts la liste de ceux qui ont été modifiés """
-      if not self.JDCDisplay_courant : return []
-      if len(self.liste_JDCDisplay) == 0 : return l
-      l = []
-      for JDCDisplay in self.liste_JDCDisplay:
-          if JDCDisplay.modified == 'o' :
-              l.append(JDCDisplay)
-      return l
-
-   def copy(self,event=None):
-      """
-          Lance la copie sur le JDC courant
-      """
-      if self.JDCDisplay_courant : self.JDCDisplay_courant.doCopy()
-
-   def paste(self,event=None):
-      """
-           Lance le collage sur le JDC courant
-      """
-      if self.JDCDisplay_courant : self.JDCDisplay_courant.doPaste()
-
-   def cut(self,event=None):
-      """
-         Lance le cut sur le JDC courant
-      """
-      if self.JDCDisplay_courant: self.JDCDisplay_courant.doCut()
-
-   def delete(self):
-      """
-          Lance la suppression du noeud courant
-      """
-      if not self.JDCDisplay_courant : return
-      self.JDCDisplay_courant.init_modif()
-      self.JDCDisplay_courant.node_selected.delete()
-
-   def visuJDC_py(self,event=None):
-      """ 
-          Méthode permettant d'afficher dans une fenêtre à part l'écho au 
-          format python du jdc courant 
-      """
-      if not hasattr(self,'JDC') : return
-      jdc_fini = self.get_text_JDC('python')
-      if jdc_fini == None : return
-      Fenetre(self.appli,
-              titre = 'fichier '+ self.JDCName + ' à la syntaxe Python',
-              texte = jdc_fini)
-
-   def visuJDC(self):
-      """ 
-          Méthode permettant d'afficher dans une fenêtre à part l'écho au 
-          format .comm ou .py du jdc courant 
-      """
-      if not hasattr(self,'JDC') : return
-      titre = 'fichier '+ self.JDCName + ' à la syntaxe '+ self.code
-      format=self.appli.format_fichier.get()
-      self.jdc_fini = self.get_text_JDC(format)
-      if self.jdc_fini == None : return
-      self.visu_fichier_cmd = Fenetre(self.appli,titre=titre,texte = self.jdc_fini)
-
-   def get_text_JDC(self,format):
-      if generator.plugins.has_key(format):
-         # Le generateur existe on l'utilise
-         g=generator.plugins[format]()
-         jdc_formate=g.gener(self.JDC,format='beautifie')
-         if not g.cr.estvide():
-            self.appli.affiche_infos("Erreur à la generation")
-            showerror("Erreur à la generation","EFICAS ne sait pas convertir ce JDC")
-            return
-         else:
-            return jdc_formate
-      else:
-         # Il n'existe pas c'est une erreur
-         self.appli.affiche_infos("Format %s non reconnu" % format)
-         showerror("Format %s non reconnu" % format,"EFICAS ne sait pas convertir le JDC en format %s "% format)
-         return
-
-   def view_doc(self):
-      """
-          Permet d'ouvrir le fichier doc U de la commande au format pdf avec Acrobat Reader
-          - Ne fonctionne pas sous UNIX (chemin d'accès Acrobat Reader)
-          - indication du chemin d'accès aux fichiers pdf à revoir : trop statique
-      """
-      if not self.JDCDisplay_courant : return
-      try:
-          cle_doc = self.JDCDisplay_courant.node_selected.item.get_docu()
-          if cle_doc == None : return
-          cle_doc = string.replace(cle_doc,'.','')
-          cle_doc = string.replace(cle_doc,'-','')
-          commande = self.appli.CONFIGURATION.exec_acrobat
-          nom_fichier = cle_doc+".pdf"
-          fichier = os.path.abspath(os.path.join(self.appli.CONFIGURATION.path_doc,nom_fichier))
-          if os.name == 'nt':
-              os.spawnv(os.P_NOWAIT,commande,(commande,fichier,))
-          elif os.name == 'posix':
-              script ="#!/usr/bin/sh \n%s %s&" %(commande,fichier)
-              pid = os.system(script)
-      except AttributeError:
-          traceback.print_exc()
-          pass
-
-   def visu_a_plat(self,event=None):
-      """ 
-          Méthode permettant d'afficher dans une fenêtre à part l'écho 'à plat' du jdc courant 
-      """
-      if not hasattr(self,'JDC') : return
-      titre = 'fichier '+ self.JDCName + ' à plat '
-      self.jdc_fini = self.get_text_JDC('aplat')
-      if self.jdc_fini == None : return
-      self.visu_fichier_cmd = Fenetre(self.appli,titre=titre,texte = self.jdc_fini)
-
-   def visu_txt_brut_JDC(self,event=None):
-      """
-           Méthode permettant d'afficher le jeu de commandes tel qu'il a été passé au JDC
-      """
-      if not hasattr(self,'JDC') : return
-      titre = "fichier de commandes utilisateur"
-      #texte = self.JDC.procedure
-      #if texte == None:
-      if self.JDCDisplay_courant.fichier == None:
-            self.appli.affiche_infos("Pas de fichier initial")
-            showerror("Impossible de visualiser le fichier initial",
-                      "EFICAS ne peut visualiser le fichier initial.\nIl s'agit d'un nouveau JDC")
-            return
-      os.chdir(self.appli.dir)
-      f=open(self.JDCDisplay_courant.fichier,'r')
-      texte=f.read()
-      f.close()
-      self.visu_texte_JDC = Fenetre(self.appli,titre=titre,texte=texte)
-
-   def affichage_fichier_ini(self):
-      """
-           Affichage des valeurs des paramètres relus par Eficas
-      """
-      self.appli.CONFIGURATION.affichage_fichier_ini()
-
-   def saveall(self,liste):
-      """ 
-           Sauvegarde tous les JDC contenus dans liste 
-      """
-      test = 1
-      for JDCDisplay in liste :
-          self.JDCDisplay_courant=JDCDisplay
-          self.JDC = JDCDisplay.jdc
-          test = test * self.saveJDC(echo = 'non')
-      return test
-
-   def save_homard(self,nom,texte):
-       file_homard=nom+'.conf_homard'
-       try:
-           f=open(file_homard,'w')
-           for ligne in texte:
-               f.write(ligne)
-               f.write('\n')
-           f.close()
-       except:
-           print "Pb a la sauvegarde sous le format homard"
-       if hasattr( self.appli, 'salome'):
-           import eficasEtude
-           self.appli.salome.rangeInStudy(file_homard,"_CONF")
-
-# ---------------------------------------------------------------------------
-#                             Méthodes liées aux mots-clés inconnus
-# ---------------------------------------------------------------------------
-
-   def mc_inconnus(self):
-      l_mc = self.JDCDisplay_courant.jdc.get_liste_mc_inconnus()
-      o = fenetre_mc_inconnus(l_mc)
-      l = o.wait_new_list()
-      #print "mc_inconnus_new_list: ",l
-      #CCAR: Il n' y a pas de retour vers le JDC
-
-   def aideEFICAS(self,event=None):
-      AIDE.go(master=self.parent)
-
-   def update_jdc_courant(self):
-      self.JDCDisplay_courant.update()
-
-   def TraduitFichier(self):
-      directory = self.appli.CONFIGURATION.rep_user
-      FichieraTraduire = askopenfilename(title="Nom du  Fichier à Traduire",
-                                 defaultextension=".comm",
-                                 initialdir = directory 
-                                 )
-      if (FichieraTraduire == "" or FichieraTraduire == () ) : return
-      i=FichieraTraduire.rfind(".")
-      Feuille=FichieraTraduire[0:i]
-      FichierTraduit=Feuille+"v8.comm"
-      log=self.initialdir+"/convert.log"
-      os.system("rm -rf "+log)
-      os.system("rm -rf "+FichierTraduit)
-      Pmw.showbusycursor()
-      traduitV7V8.traduc(FichieraTraduire,FichierTraduit,log)
-      Pmw.hidebusycursor()
-      Entete="Fichier Traduit : "+FichierTraduit +"\n\n"
-      titre = "conversion de "+ FichieraTraduire
-
-      if  os.stat(log)[6] != 0L :
-          f=open(log)
-          texte_cr= f.read()
-          f.close()
-      else :
-          texte_cr = Entete  
-          commande="diff "+FichieraTraduire+" "+FichierTraduit+" >/dev/null"
-          try :
-            if os.system(commande) == 0 :
-               texte_cr = texte_cr + "Pas de difference entre le fichier V7 et le fichier traduit"
-          except :
-               pass
-
-      cptrendu = FenetreSurLigneWarning(self.appli,titre=titre,texte=texte_cr)
-
diff --git a/Editeur/catabrowser.py b/Editeur/catabrowser.py
deleted file mode 100644 (file)
index e1ed7fc..0000000
+++ /dev/null
@@ -1,398 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import os
-import sys
-import types
-import string
-import Pmw
-from Tkinter import *
-
-# Modules Eficas
-import fontes
-from treewidget import Tree
-from Objecttreeitem import TreeItem
-from Accas import AsException
-from Noyau.N_CR import justify_text
-from Accas import OPER,PROC,MACRO,FORM
-from Accas import FACT,BLOC,SIMP
-
-#
-__version__="$Name:  $"
-__Id__="$Id: catabrowser.py,v 1.3 2002/09/10 15:59:37 eficas Exp $"
-#
-class Tableau:
-  incr = 10
-  def __init__(self,parent,colonnes):
-    self.parent = parent
-    self.colonnes = colonnes
-    self.init()
-
-  def init(self):
-    # recherche du nombre maxi de lignes et de colonnes....
-    for col in self.colonnes :
-      nb_l = 0
-      if len(col) > nb_l : nb_l = len(col)
-    self.nb_lignes = nb_l
-    self.nb_colonnes = len(self.colonnes)
-    # initialisation des coordonnées dans le canvas
-    self.x0 = self.incr
-    self.y0 = self.incr
-    self.x = self.x0 + self.incr
-    self.y = self.y0 + self.incr
-
-  def affiche(self):    
-    self.scrolledcanvas=Pmw.ScrolledCanvas(self.parent,
-                                           hull_width=1.,
-                                           hull_height=1.,
-                                           borderframe=1)
-    Pmw.Color.changecolor(self.scrolledcanvas.component('canvas'),background='gray95')
-    self.scrolledcanvas.pack(padx=10,pady=10,expand=1, fill="both")
-    self.canvas = self.scrolledcanvas.component('canvas')
-    self.affiche_colonnes()
-
-  def affiche_colonnes(self):
-    for i in range(self.nb_lignes):
-      self.affiche_ligne(i)
-    self.aligne_colonnes()
-    self.trace_traits()
-    self.scrolledcanvas.resizescrollregion()
-
-  def get_xy_max(self):
-    try:
-      x0,y0,xmax,ymax = self.canvas.bbox(ALL)
-      return xmax,ymax
-    except:
-      return None,None
-    
-  def trace_traits(self):
-    xmax,ymax = self.get_xy_max()
-    if not xmax : return
-    xmax = xmax+self.incr
-    ymax = ymax+self.incr
-    # trace les traits horizontaux
-    for i in range(self.nb_lignes):
-      tag_lig = 'ligne_'+`i`
-      l_id = self.canvas.find_withtag(tag_lig)
-      x0,y0,x1,y1 = self.bbox(l_id)
-      self.canvas.create_line(x0-self.incr,y0-self.incr,xmax,y0-self.incr)
-    self.canvas.create_line(self.x0,ymax,xmax,ymax)  
-    # trace les traits verticaux
-    for j in range(self.nb_colonnes):
-      tag_col = 'colonne_'+`j`
-      l_id = self.canvas.find_withtag(tag_col)
-      x0,y0,x1,y1 = self.bbox(l_id)
-      self.canvas.create_line(x0-self.incr,y0-self.incr,x0-self.incr,ymax)
-    self.canvas.create_line(xmax,self.y0,xmax,ymax)
-    
-  def bbox(self,l_id):
-    x0,y0,x1,y1 = self.canvas.bbox(l_id[0])
-    for id in l_id[1:]:
-      x2,y2,x3,y3 = self.canvas.bbox(id)
-      x0 = min(x2,x0)
-      y0 = min(y2,y0)
-      x1 = max(x3,x1)
-      y1 = max(y3,y1)
-    return x0,y0,x1,y1
-  
-  def affiche_ligne(self,num_lig):
-    tag_lig = 'ligne_'+`num_lig`
-    num_col = 0
-    for col in self.colonnes:
-      tag_col = 'colonne_'+`num_col`
-      x = 100*num_col+self.x
-      id = self.canvas.create_text(x,self.y,
-                                   text = justify_text(col[num_lig],cesure=60),
-                                   tag=(tag_lig,tag_col),
-                                   anchor='nw',
-                                   font = fontes.canvas)
-      x0,y0,x1,y1 = self.canvas.bbox(id)
-      num_col = num_col+1
-    l_id = self.canvas.find_withtag(tag_lig)
-    x0,y0,x1,y1 = self.bbox(l_id)
-    self.y = y1 + 2*self.incr
-
-  def aligne_colonnes(self):
-    num_col = 0
-    for col in self.colonnes:
-      tag_col = 'colonne_'+`num_col`
-      l_id = self.canvas.find_withtag(tag_col)
-      if not l_id : continue
-      x0,y0,x1,y1 = self.bbox(l_id)
-      self.move(x1+self.incr,self.colonnes[num_col+1:],num_col+1)
-      num_col = num_col+1
-
-  def move(self,x,colonnes,num):
-    num_col = num
-    for col in colonnes:
-      tag_col = 'colonne_'+`num_col`
-      l_id = self.canvas.find_withtag(tag_col)
-      if not l_id : continue
-      x0,y0,x1,y1 = self.canvas.bbox(l_id[0])
-      self.canvas.move(tag_col,x+self.incr-x0,0)
-      num_col = num_col+1
-    
-class CATAPanel(Frame) :
-  """ Classe servant à créer le panneau représentant l'objet sélectionné dans l'arbre"""
-  def __init__(self,parent,panneau,node) :
-    self.parent=parent
-    self.panneau = panneau
-    self.node=node
-    Frame.__init__(self,self.panneau)
-    self.place(x=0,y=0,relheight=1,relwidth=1)
-    self.init()
-
-  def init(self):
-    # création du label initial
-    label = Label(self,
-                  text = 'Attributs de '+self.node.item.labeltext,
-                  font = fontes.standard_gras_souligne)
-    label.pack(side='top',pady=10)
-    # création des listes correspondant aux colonnes du tableau à afficher
-    colonne1,colonne2 = self.get_listes()
-    # affichage du tableau
-    self.tableau = Tableau(self,(colonne1,colonne2))
-    self.tableau.affiche()
-
-  def get_listes(self):    
-    self.node.item.get_dico_attributs()
-    l_cles_attributs = self.node.item.d_attributs.keys()
-    l_cles_attributs.sort()
-    ind=0
-    liste1 = []
-    liste2=[]
-    for nom_attr in l_cles_attributs :
-      valeur = self.node.item.d_attributs[nom_attr]
-      if type(valeur) == types.TupleType:
-        texte =''
-        for elem in valeur:
-          if type(elem) == types.ClassType:
-            texte = texte + elem.__name__
-          else:
-            texte = texte + str(elem)
-      elif type(valeur) == types.ClassType :
-        texte = valeur.__name__
-      else:
-        texte = str(valeur)
-      liste1.append(nom_attr)
-      liste2.append(texte)
-    return liste1,liste2
-
-class CATAItem(TreeItem):
-  panel = CATAPanel
-  def __init__(self,appli,labeltext,object,setfunction=None,objet_cata_ordonne = None):
-    self.appli = appli
-    self.labeltext = labeltext
-    self.object=object
-    self.setfunction = setfunction
-    self.objet_cata_ordonne = objet_cata_ordonne
-
-  def get_dico_fils(self):
-    d_fils = {}
-    if type(self.object) != types.TupleType:
-      for e in dir(self.object):
-        cmd = getattr(self.object,e)
-        if isCMD(cmd) :
-          d_fils[string.strip(cmd.nom)] = cmd
-    else:
-      for obj in self.object :
-        for e in dir(obj):
-          cmd = getattr(obj,e)
-          if isCMD(cmd) :
-            d_fils[string.strip(cmd.nom)] = cmd
-    self.d_fils = d_fils
-
-  def get_dico_attributs(self):
-    d_attributs ={}
-    if type(self.object) == types.TupleType :
-      self.d_attributs = d_attributs
-      return
-    l_noms_attributs = ['nom','op','sd_prod','reentrant','repetable','fr','docu','into','valide_vide','actif',
-                        'regles','op_init','niveau','definition','code','niveaux','statut',
-                        'defaut','min','max','homo','position','val_min','val_max','condition']
-    for nom_attribut in l_noms_attributs :
-      if hasattr(self.object,nom_attribut):
-        attr = getattr(self.object,nom_attribut)
-        d_attributs[nom_attribut] = attr
-    self.d_attributs = d_attributs
-
-  def get_liste_mc_ordonnee(self):
-    """ Retourne la liste ordonnée (suivant le catalogue) brute des fils
-    de l'entite courante """
-    if hasattr(self.objet_cata_ordonne,'ordre_mc'):
-      return self.objet_cata_ordonne.ordre_mc
-    else :
-      l=self.objet_cata_ordonne.keys()
-      l.sort()
-      return l
-      
-  def GetLabelText(self):
-    return self.labeltext,None,None
-
-  def get_fr(self):
-    return ''
-  
-  def isMCList(self):
-    return 0
-  
-  def GetSubList(self):
-    sublist=[]
-    if not hasattr(self,'d_fils'):
-      self.get_dico_fils()
-    # on classe les fils dans l'odre du catalogue ...
-    l_cles_fils = self.get_liste_mc_ordonnee()
-    for k in l_cles_fils :
-      if type(self.objet_cata_ordonne) == types.InstanceType :
-        objet_cata = self.objet_cata_ordonne.entites[k]
-      else :
-        objet_cata = self.objet_cata_ordonne.get(k,None)
-      item = make_objecttreeitem(self.appli,k + " : ",self.d_fils[k],
-                                 objet_cata_ordonne = objet_cata)
-      sublist.append(item)
-    return sublist
-
-  def GetIconName(self):
-    return 'ast-green-square'
-
-  def isactif(self):
-    return 1
-  
-class CMDItem(CATAItem):
-
-  def get_dico_fils(self):
-    self.d_fils = self.object.entites
-
-class SIMPItem(CATAItem):
-  d_fils={}
-  d_attributs={}
-
-  def GetIconName(self):
-    return 'ast-green-ball'
-
-  def IsExpandable(self):
-    return 0
-  
-class FACTItem(CMDItem):
-  def GetIconName(self):
-    return 'ast-green-los'
-
-class BLOCItem(FACTItem): pass
-
-class ATTRIBUTItem(SIMPItem):
-  def get_dico_attributs(self):
-    self.d_attributs = {}
-
-  def GetSubList(self):
-    return []
-
-  def IsExpandable(self):
-    return 0
-
-  def GetText(self):
-    return self.object
-
-  def GetIconName(self):
-    return 'aucune'  
-
-class CataBrowser:
-  def __init__(self,parent,appli,cata,item = None):
-    self.parent = parent
-    self.cata = cata
-    self.appli = appli
-    self.item = item
-    self.init()
-
-  def close(self):
-    self.top.destroy()
-
-  def init(self):
-    self.nodes={}
-    self.top = Pmw.Dialog(self.parent,
-                          title = "Visualisation d'un catalogue",
-                          buttons=('OK',),
-                          command = self.quit)
-    self.pane = Pmw.PanedWidget(self.top.component('dialogchildsite'),
-                                hull_width = 800,
-                                hull_height = 500,
-                                orient = 'horizontal')
-    self.pane.add('canvas',min = 0.4, max = 0.6, size = 0.5)
-    self.pane.add('panel',min = 0.4, max = 0.6, size = 0.5)
-    self.pane.pack(expand =1, fill = 'both')
-    self.scrolledcanvas = Pmw.ScrolledCanvas(self.pane.pane('canvas'),
-                                             hull_width=1.,
-                                             hull_height=1.,
-                                             borderframe=1)
-    Pmw.Color.changecolor(self.scrolledcanvas.component('canvas'),background='gray95')
-    self.scrolledcanvas.pack(padx=10,pady=10,expand=1, fill="both")
-    if self.item == None :
-      self.item = CATAItem(self.appli,"Catalogue",self.cata)
-    self.tree = Tree(self.appli,self.item,self.scrolledcanvas,command = self.select_node)
-    self.tree.draw()
-    self.node = self.tree.node_selected
-
-  def select_node(self,node):
-    self.nodes[node]=self.create_panel(node)
-
-  def create_panel(self,node):
-    if hasattr(node.item,"panel"):
-      return getattr(node.item,"panel")(self,self.pane.pane('panel'),node)
-      
-  def quit(self,nom_bouton) :
-    self.top.destroy()
-    
-  def settitle(self):
-    self.top.wm_title("Browser de catalogue " )
-    self.top.wm_iconname("CataBrowser")
-
-dispatch = {
-    OPER  : CMDItem,
-    PROC  : CMDItem,
-    MACRO  : CMDItem,
-    SIMP : SIMPItem,
-    FACT : FACTItem,
-    BLOC : BLOCItem,
-}
-
-def TYPE(o):
-  if isinstance(o,OPER):return OPER
-  elif isinstance(o,PROC):return PROC
-  elif isinstance(o,MACRO):return MACRO
-  elif isinstance(o,FORM):return MACRO
-  elif isinstance(o,SIMP):return SIMP
-  elif isinstance(o,FACT):return FACT
-  elif isinstance(o,BLOC):return BLOC
-  else:return type(o)
-
-def make_objecttreeitem(appli,labeltext, object, setfunction=None,objet_cata_ordonne=None):
-    t = TYPE(object)
-    if dispatch.has_key(t):
-      c = dispatch[t]
-    else:
-      #print 'on a un objet de type :',t,'  ',object
-      c = ATTRIBUTItem
-    return c(appli,labeltext, object, setfunction = setfunction,objet_cata_ordonne=objet_cata_ordonne)
-
-def isCMD(cmd):
-   return isinstance(cmd,OPER) or isinstance(cmd,PROC) or isinstance(cmd,MACRO) or isinstance(cmd,FORM)
-
-
-
diff --git a/Editeur/cataediteur.py b/Editeur/cataediteur.py
deleted file mode 100644 (file)
index cac0254..0000000
+++ /dev/null
@@ -1,975 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import os
-import sys
-import types
-import string
-import Pmw
-from widgets import showinfo
-from Tkinter import *
-
-# Modules Eficas
-import fontes
-from widgets import *
-from treewidget import Tree
-from Objecttreeitem import TreeItem
-from Accas import AsException
-from Noyau.N_CR import justify_text
-
-from Accas import ASSD,GEOM
-import definition_cata
-
-#
-__version__="$Name:  $"
-__Id__="$Id: cataediteur.py,v 1.8 2005/11/29 11:14:14 eficas Exp $"
-#
-
-Fonte_Niveau = fontes.canvas_gras_italique
-
-class Panel(Frame) :
-  """ Classe servant de classe mère à toutes celles représentant les
-      panneaux à afficher en fonction de la nature de l'objet en cours
-      Elle est toujours dérivée."""
-  def __init__(self,parent,panneau,node) :
-      self.parent=parent
-      self.panneau = panneau
-      self.node=node
-      Frame.__init__(self,self.panneau)
-      self.place(x=0,y=0,relheight=1,relwidth=1)
-      #self.creer_boutons()
-      self.init()
-
-  def creer_boutons(self):
-      """ Méthode créant les boutons se trouvant dans la partie contextuelle d'EFICAS
-      (à droite sous les onglets ) """
-      self.fr_but = Frame(self,height=30)
-      self.fr_but.pack(side='bottom',fill='x')
-      self.bouton_com = Button(self.fr_but,
-                               text = 'Commentaire',
-                               command = self.ajout_commentaire,
-                               width=14)
-      self.bouton_sup = Button(self.fr_but,
-                               text = "Supprimer",
-                               command=self.supprimer,
-                               width=14)
-      self.bouton_doc = Button(self.fr_but,
-                               text="Documentation",
-                               command=self.visu_doc,
-                               width=14)
-      self.bouton_cata = Button(self.fr_but,
-                                text = "Catalogue",
-                                command = self.show_catalogue,
-                                width=14)
-      if self.parent.appli.CONFIGURATION.isdeveloppeur == 'OUI':
-          self.bouton_sup.place(relx=0.25,rely = 0.5,relheight = 0.8,anchor='w')
-          self.bouton_cata.place(relx=0.5,rely = 0.5,relheight = 0.8,anchor='w')
-          self.bouton_doc.place(relx=0.75,rely = 0.5,relheight = 0.8,anchor='w')
-      else:
-          self.bouton_sup.place(relx=0.3,rely = 0.5,relheight = 0.8,anchor='w')
-          self.bouton_doc.place(relx=0.7,rely = 0.5,relheight = 0.8,anchor='w')
-
-  def show_catalogue(self):
-      try:
-          genea = self.node.item.get_genealogie()
-          self.parent.appli.browser_catalogue_objet(genea)
-      except Exception,e:
-          traceback.print_exc()
-      
-  def efface(self):
-      self.node.efface()
-      
-  def ajout_commentaire(self,ind='after'):
-      """ Ajoute un commentaire à l'intérieur du JDC, par défaut après le noeud en cours"""
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      return self.node.append_brother("COMMENTAIRE",ind)
-    
-  def ajout_commentaire_first(self):
-      """ Ajoute un commentaire en début de JDC"""
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      return self.node.append_child("COMMENTAIRE",'first')
-        
-  def visu_doc(self):
-      """ Permet d'ouvrir le fichier doc U de la commande au format pdf avec Acrobat Reader
-        - Ne fonctionne pas sous UNIX (chemin d'accès Acrobat Reader)
-        - indication du chemin d'accès aux fichiers pdf à revoir : trop statique"""
-      cle_doc = self.parent.appli.get_docu(self.node)
-      if cle_doc == None : return
-      cle_doc = string.replace(cle_doc,'.','')
-      commande = self.parent.appli.CONFIGURATION.exec_acrobat
-      nom_fichier = cle_doc+".doc"
-      rep_fichier = cle_doc[0:2]
-      fichier = os.path.abspath(os.path.join(self.parent.appli.CONFIGURATION.path_doc,rep_fichier,nom_fichier))
-      print 'commande =',commande
-      print 'fichier =',fichier
-      print 'existe =',os.path.isfile(fichier)
-      if os.name == 'nt':
-          os.spawnv(os.P_NOWAIT,commande,(commande,fichier))
-      elif os.name == 'posix':
-          script ="#!/usr/bin/sh \n%s %s" %(commande,nom_fichier)
-          pid = os.system(script)
-      
-  def supprimer(self):
-      """ Suppression du noeud courant """
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      pere = self.node.parent
-      self.node.delete()
-      pere.select()
-      
-  def affiche(self):
-      """ Force l'affichage des fenêtres en cours """
-      self.tkraise()
-
-  def selectMC(self,name):
-      """ On retrouve le mot-clé sous le curseur pour affichage du fr """
-      cmd=self.node.item.get_definition()
-      texte_infos = ''
-      for e in cmd.entites.keys() :
-          if e == name :
-              texte_infos=getattr(cmd.entites[e],'fr')
-              break
-      if texte_infos == '' : texte_infos="Pas d'infos disponibles"
-      self.parent.appli.affiche_infos(texte_infos)
-
-  def defMC(self,name):
-      """ On ajoute un mot-clé à la commande : subnode """
-      if name == SEPARATEUR:return
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      if name != "COMMENTAIRE":
-          self.node.append_child(name)
-      else :
-          self.ajout_commentaire()    
-
-  def selectFilsCmd(self,name):
-      pass
-          
-  def defFilsCmd(self,name):
-      pass
-    
-  def defCmdFirst(self,name):
-      """ On ajoute une commande ou un commentaire au début du fichier de commandes """
-      if name == SEPARATEUR:return
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      if name != "COMMENTAIRE":
-          new_node = self.node.append_child(name,'first')
-      else :
-          new_node = self.ajout_commentaire_first()
-
-  def add_commande_avant(self,event=None):
-    pass
-
-  def add_commande_apres(self,event=None):
-    pass          
-        
-class OngletPanel(Panel) :
-  """ Cette classe est virtuelle et doit être dérivée
-      Elle contient les principales méthodes d'affichage des différents onglets"""
-
-  def raisecmd(self,page):
-      self.nb.page(page).focus_set()
-      if page == 'Concept': self._any.focus()
-
-  def affiche(self):
-      page=self.nb.getcurselection()
-      self.nb.page(page).focus_set()
-      if page == 'Concept':self._any.component('entry').focus_set()
-      self.tkraise()
-
-  def makeConceptPage(self,page):
-      """ Crée la page de saisie du nom du concept """
-      self.label = Label(page,text='Nom du concept :')
-      self.label.place(relx=0.1,rely=0.4)
-      self._any = Entry(page,relief='sunken')
-      self._any.place(relx=0.35,rely=0.4,relwidth=0.5)
-      self._any.bind("<Return>",lambda e,s=self:s.execConcept())
-      self._any.bind("<KP_Enter>",lambda e,s=self:s.execConcept())
-      self._any.insert(0,self.node.item.GetText())
-      type_sd = self.node.item.object.get_type_sd_prod()
-      if type_sd :
-          txt = "L'opérateur courant retourne un objet de type %s" %type_sd
-          self.label = Label(page, text = txt)
-          self.label.place(relx=0.5,rely=0.55,anchor='n')
-      self._any.focus()
-          
-  def makeCommandePage(self,page):
-      """ Affiche la page d'ajout d'une commande relativement à l'objet commande sélectionné """
-      titre = "Où voulez-vous insérer une commande par rapport à %s" %self.node.item.object.nom
-      Label(page,text=titre).place(relx=0.5,rely=0.2,anchor='w')
-      b_avant = Button(page,text='AVANT',
-                       command = self.node.item.add_commande_avant)
-      b_apres = Button(page,text='APRES',
-                       command = self.node.item.add_commande_apres)
-      b_avant.place(relx=0.35,rely=0.5,anchor='w')
-      b_apres.place(relx=0.65,rely=0.5,anchor='w')
-
-  def deselectMC(self,name):
-      self.parent.appli.affiche_infos('')
-    
-  def get_liste_cmd(self):
-      listeCmd = self.node.item.object.niveau.definition.get_liste_cmd()
-      return listeCmd
-
-  def get_liste_fils_cmd(self):
-      return ['Mot-clé simple','Mot-clé facteur','Bloc']
-
-  def makeMoclesPage(self,page):
-      frame1 = Frame(page,height = 20)
-      frame1.pack(side='top',fill='x')
-      label = Label(frame1,text ="Le mot-clé choisi sera ajouté à la fin du catalogue")
-      label.pack(side='top')
-      frame2 = Frame(page)
-      frame2.pack(side='top',fill='both',expand=1)
-      liste_cmd = self.get_liste_fils_cmd()
-      liste_commandes = (("<Enter>",self.selectFilsCmd),
-                         ("<Leave>",self.deselectFilsCmd),
-                         ("<Double-Button-1>",self.defFilsCmd))
-      Liste = ListeChoix(self,frame2,liste_cmd,liste_commandes = liste_commandes,titre = "Mots-clés")
-      Liste.affiche_liste()
-
-  def deselectFilsCmd(self,name):
-      pass
-    
-  def makeJDCPage(self,page):
-      liste_cmd = self.get_liste_cmd()
-      liste_commandes = (("<Enter>",self.selectCmd),
-                         ("<Leave>",self.deselectCmd),
-                         ("<Double-Button-1>",self.defCmdFirst))
-      Liste = ListeChoix(self,page,liste_cmd,liste_commandes = liste_commandes,filtre='oui',titre = "Commandes")
-      Liste.affiche_liste()
-
-  def makeReglesPage(self,page) :
-    regles = []
-    regles = self.node.item.get_regles()
-    dictionnaire = self.node.item.get_mc_presents()
-    texte_regles = []
-    l_regles_en_defaut=[]
-    if len(regles) > 0:
-      i = 0
-      for regle in regles :
-        texte_regles.append(regle.gettext())
-        texte,test = regle.verif(dictionnaire)
-        if test == 0 : l_regles_en_defaut.append(i)
-        i = i+1
-    Liste = ListeChoix(self,page,texte_regles,liste_marques=l_regles_en_defaut,active='non',titre="Règles")
-    Liste.affiche_liste()
-    #self.afficheListe(page,texte_regles,self.selectRegle,self.execRegle)
-
-  def execConcept(self):
-      """ Nomme le concept SD retourné par l'étape """
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      nom = self._any.get()
-      # Pourquoi node.etape ???
-      #test,mess = self.node.etape.item.nomme_sd(nom)
-      test,mess = self.node.item.nomme_sd(nom)
-      self.parent.appli.affiche_infos(mess)
-      self.node.racine.update()
-  
-  def changed(self):
-      pass
-
-  def makeAttributsPage(self,page):
-    l_attributs=self.node.item.object.attributs
-    d_defauts = self.node.item.object.attributs_defauts
-    for attribut in l_attributs :
-      attr = self.node.item.object.entites_attributs.get(attribut,None)
-      if attr.valeur is d_defauts[attribut] :
-        texte = attribut+' = '+repr(attr.valeur)+' (defaut)'
-      else:
-        texte = attribut+' = '+repr(attr.valeur)
-      Label(page,text=texte).pack(side='top')
-
-  def makeSimpPage(self,page):
-    texte = "Où voulez-vous ajouter un mot-clé simple ?"
-    Label(page,text=texte).place(relx=0.5,rely=0.3,anchor='center')
-    b1 = Button(page,text='AVANT '+self.node.item.object.nom,command=self.add_simp_avant)
-    b2 = Button(page,text='APRES '+self.node.item.object.nom,command=self.add_simp_apres)
-    b1.place(relx=0.5,rely=0.5,anchor='center')
-    b2.place(relx=0.5,rely=0.6,anchor='center')
-
-  def add_simp_avant(self,event=None):
-    """
-    Ajoute un mot-clé simple avant celui courant
-    """
-    self.node.append_brother('new_simp','before')
-    self.node.update()
-
-  def add_simp_apres(self,event=None):
-    """
-    Ajoute un mot-clé simple après celui courant
-    """
-    self.node.append_brother('new_simp','after')
-    self.node.update()    
-    
-class TYPEPanel(Frame):
-  def __init__(self,parent,panneau,node) :
-      self.parent=parent
-      self.panneau = panneau
-      self.node=node
-      Frame.__init__(self,self.panneau)
-      self.place(x=0,y=0,relheight=1,relwidth=1)
-      self.creer_texte()
-
-  def creer_texte(self):
-      texte = "Le noeud sélectionné correspond à un type\n"
-      self.label = Label(self,text=texte)
-      self.label.place(relx=0.5,rely=0.4,relwidth=0.8,anchor='center')
-
-class OPERPanel(OngletPanel):
-  def init(self):
-    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
-    
-    nb.pack(fill = 'both', expand = 1)
-    self.nb=nb
-    nb.add('Mocles', tab_text='Ajouter mots-clés')
-    nb.add('Commandes',tab_text='Ajouter une commande')
-    self.makeMoclesPage(nb.page("Mocles"))
-    self.makeCommandePage(nb.page("Commandes"))
-    nb.tab('Mocles').focus_set()
-    nb.setnaturalsize()
-    self.affiche()
-
-class SIMPPanel(OngletPanel):
-  def init(self):
-    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
-    nb.pack(fill = 'both', expand = 1)
-    self.nb=nb
-    nb.add('generaux', tab_text='Données générales')
-    nb.add('ihm',tab_text='Données IHM')
-    nb.add('mocle',tab_text='Ajouter un mot-cle simple')
-    self.makeAttributsGenerauxPage(nb.page("generaux"))
-    self.makeAttributsIHMPage(nb.page("ihm"))
-    self.makeSimpPage(nb.page('mocle'))
-    nb.tab('generaux').focus_set()
-    nb.setnaturalsize()
-    self.affiche()
-
-  def makeAttributsGenerauxPage(self,page):
-    fr1 = Frame(page,bd=1,relief='raised')
-    fr2 = Frame(page,bd=1,relief='raised')
-    fr3 = Frame(page,bd=1,relief='raised')
-    fr4 = Frame(page,bd=1,relief='raised')
-    fr5 = Frame(page,bd=1,relief='raised')
-    fr1.place(relheight=0.14,relwidth=1,rely=0)
-    fr2.place(relheight=0.14,relwidth=1,rely=0.14)
-    fr3.place(relheight=0.29,relwidth=1,rely=0.28)
-    fr4.place(relheight=0.14,relwidth=1,rely=0.57)
-    fr5.place(relheight=0.28,relwidth=1,rely=0.71)
-    # nom du mot-clé
-    Label(fr1,text = 'Nom :').place(relx=0.05,rely=0.3,anchor='w')
-    self.e_nom = Entry(fr1)
-    self.e_nom.place(relx=0.35,rely=0.3,relwidth=0.3,anchor='w')
-    self.e_nom.bind("<Return>",lambda e,s=self : s.set_valeur_attribut('nom',None))
-    self.e_nom.bind("<KP_Enter>",lambda e,s=self : s.set_valeur_attribut('nom',None))
-    self.e_nom.insert(0,self.get_valeur_attribut('nom'))
-    # Statut
-    Label(fr1,text='Statut : ').place(relx=0.05,rely=0.7,anchor='w')
-    self.statut=StringVar()
-    valeurs_statut=[('obligatoire','o'),
-                    ('facultatif','f'),
-                    ('caché','c')
-                    ]
-    self.statut.set(self.node.item.object.get_valeur_attribut('statut'))
-    i=0
-    for text,mode in valeurs_statut:
-      b=Radiobutton(fr1,text=text,variable=self.statut,value=mode,
-                    command = lambda s=self,m=mode : s.set_valeur_attribut('statut',m))
-      b.place(relx=0.25+i*0.25,rely=0.7,anchor='w')
-      i=i+1
-    # Type ...
-    Label(fr2,text='Type de la valeur : ').place(relx=0.05,rely=0.5,anchor='w')
-    self.e_type = Entry(fr2)
-    self.e_type.place(relx=0.35,rely=0.5,relwidth=0.5,anchor='w')
-    self.e_type.insert(0,self.node.item.object.get_valeur_attribut('type'))
-    # Domaine de validité
-    Label(fr3,text='Domaine de validité : ').place(relx=0.05,rely=0.2,anchor='w')
-    self.domaine = StringVar()
-    self.domaine.set(self.node.item.object.get_valeur_attribut('domaine_validité'))
-    b1=Radiobutton(fr3,text='continu',variable=self.domaine,value='continu',
-                   command=lambda s=self,f=fr3 :s.change_domaine(f))
-    b2=Radiobutton(fr3,text='discret',variable=self.domaine,value='discret',
-                   command=lambda s=self,f=fr3 :s.change_domaine(f))
-    b1.place(relx=0.35,rely=0.2,anchor='w')
-    b2.place(relx=0.65,rely=0.2,anchor='w')
-    self.change_domaine(fr3)
-    # Défaut ...
-    if self.domaine.get() == 'continu':
-      # le développeur peut donner la valeur qu'il souhaite, moyennant la vérification de type...
-      Label(fr4,text='Valeur par défaut : ').place(relx=0.05,rely=0.5,anchor='w')
-      self.e_defaut = Entry(fr4)
-      self.e_defaut.place(relx=0.35,rely=0.5,relwidth=0.5,anchor='w')
-      if self.node.item.object.get_valeur_attribut('defaut') :
-        self.e_defaut.insert(0,self.node.item.object.get_valeur_attribut('defaut'))
-      self.e_defaut.bind("<Return>",lambda e,s=self : s.set_valeur_attribut('defaut',None))
-      self.e_defaut.bind("<KP_Enter>",lambda e,s=self : s.set_valeur_attribut('defaut',None))
-    else :
-      # dans le cas discret, la valeur par défaut doit être dans l'ensemble des valeurs possibles (into)
-      liste = self.node.item.object.get_valeur_attribut('into')
-      if self.node.item.object.get_valeur_attribut('defaut') :
-        self.set_valeur_attribut('defaut',self.node.item.object.get_valeur_attribut('defaut'))
-      if liste == None : liste = []
-      self.e_defaut = Pmw.OptionMenu(fr4,labelpos='w',label_text = "Valeur par défaut : ",
-                                     items = self.node.item.object.get_valeur_attribut('into'),
-                                     menubutton_width=30)
-      self.e_defaut.configure(command = lambda e,s=self : s.set_valeur_attribut('defaut',None))
-      self.e_defaut.place(relx=0.05,rely=0.5,anchor='w')
-    # Liste de valeurs ?
-    Label(fr5,text='Liste de valeurs : ').place(relx=0.05,rely=0.2,anchor='w')
-    self.liste_valeurs = BooleanVar()
-    liste_valeurs = [('OUI',1),('NON',0)]
-    self.liste_valeurs.set(0)
-    i=0
-    for text,mode in liste_valeurs:
-      b=Radiobutton(fr5,text=text,variable=self.liste_valeurs,value=mode,
-                    command=lambda s=self,f=fr5 :s.change_liste_valeurs(f))
-      b.place(relx=0.35+i*0.2,rely=0.2,anchor='w')
-      i=i+1
-    self.change_liste_valeurs(fr5)
-
-  def makeAttributsIHMPage(self,page):
-    fr1 = Frame(page,height=100,bd=1,relief='raised')
-    fr2 = Frame(page,height=50,bd=1,relief='raised')
-    fr1.pack(side='top',fill='x')
-    fr2.pack(side='top',fill='x')
-    # Champ fr ...
-    Label(fr1,text='Champ fr : ').place(relx=0.05,rely=0.35,anchor='w')
-    self.e_fr = Entry(fr1)
-    self.e_fr.place(relx=0.35,rely=0.35,relwidth=0.6,anchor='w')
-    self.e_fr.insert(0,self.node.item.object.get_valeur_attribut('fr'))
-    # Champ ang ...
-    Label(fr1,text='Champ ang : ').place(relx=0.05,rely=0.70,anchor='w')
-    self.e_ang = Entry(fr1)
-    self.e_ang.place(relx=0.35,rely=0.70,relwidth=0.6,anchor='w')
-    self.e_ang.insert(0,self.node.item.object.get_valeur_attribut('ang'))
-    # Clé documentaire ...
-    Label(fr2,text='Clé documentaire : ').place(relx=0.05,rely=0.50,anchor='w')
-    self.e_docu = Entry(fr2)
-    self.e_docu.place(relx=0.35,rely=0.50,relwidth=0.6,anchor='w')
-    self.e_docu.insert(0,self.node.item.object.get_valeur_attribut('docu'))
-    
-  def detruit_widgets(self,l_widgets):
-    for nom_widg in l_widgets :
-      try:
-        widg = getattr(self,nom_widg)
-        widg.place_forget()
-        delattr(self,nom_widg)
-      except:
-        pass
-
-  def change_liste_valeurs(self,fr5):
-    valeur = self.liste_valeurs.get()
-    if valeur == 0 :
-      # pas de liste de valeurs
-      l_widgets=['l_homo','b1_homo','b2_homo','l_min','e_min','l_max','e_max']
-      self.detruit_widgets(l_widgets)
-    elif valeur == 1:
-      # pas de widgets à détruire ...
-      if hasattr(self,'l_homo') :
-        # on est déjà en mode 'liste' --> rien à faire
-        return 
-      # homo
-      self.l_homo = Label(fr5,text='Liste homogène : ')
-      self.l_homo.place(relx=0.05,rely=0.4,anchor='w')
-      self.homo = BooleanVar()
-      self.homo.set(self.node.item.object.get_valeur_attribut('homo'))
-      self.b1_homo=Radiobutton(fr5,text='OUI',variable=self.homo,value=1)
-      self.b2_homo=Radiobutton(fr5,text='NON',variable=self.homo,value=0)
-      self.b1_homo.place(relx=0.35,rely=0.4,anchor='w')
-      self.b2_homo.place(relx=0.65,rely=0.4,anchor='w')
-      # min ...
-      self.l_min = Label(fr5,text='Longueur minimale : ')
-      self.l_min.place(relx=0.05,rely=0.6,anchor='w')
-      self.e_min = Entry(fr5)
-      self.e_min.place(relx=0.4,rely=0.6,relwidth=0.3,anchor='w')
-      self.e_min.insert(0,self.node.item.object.get_valeur_attribut('min'))
-      # max ...
-      self.l_max = Label(fr5,text='Longueur maximale : ')
-      self.l_max.place(relx=0.05,rely=0.8,anchor='w')
-      self.e_max = Entry(fr5)
-      self.e_max.place(relx=0.4,rely=0.8,relwidth=0.3,anchor='w')
-      self.e_max.insert(0,self.node.item.object.get_valeur_attribut('max'))
-      
-  def change_domaine(self,fr3):
-    valeur = self.domaine.get()
-    if valeur == 'discret' :
-      l_widgets = ['l_val_min','l_val_max','e_val_min','e_val_max']
-      self.detruit_widgets(l_widgets)
-      # into
-      #self.l_into = Label(fr3,text='Ensemble de valeurs : ')
-      #self.l_into.place(relx=0.2,rely=0.5,anchor='w')
-      self.e_into = Pmw.ScrolledListBox(fr3,
-                                        items=self.node.item.object.get_valeur_attribut('into'),
-                                        labelpos='w',
-                                        label_text= 'Ensemble de valeurs : ',
-                                        listbox_height = 3,
-                                        dblclickcommand = self.change_into)
-      self.e_into.place(relx=0.05,rely=0.6,relwidth=0.9,anchor='w')
-      #self.e_into.insert(0,self.node.item.object.get_valeur_attribut('into'))
-    elif valeur == 'continu':
-      l_widgets = ['l_into','e_into']
-      self.detruit_widgets(l_widgets)
-      if hasattr(self,'l_val_min'):
-        # on est déjà en mode 'continu' --> rien à faire
-        return
-      # val_min
-      self.l_val_min = Label(fr3,text='Valeur minimale : ')
-      self.l_val_min.place(relx=0.05,rely=0.5,anchor='w')
-      self.e_val_min = Entry(fr3)
-      self.e_val_min.place(relx=0.35,rely=0.5,relwidth=0.5,anchor='w')
-      self.e_val_min.bind("<Return>",lambda e,s=self : s.set_valeur_attribut('val_min',None))
-      self.e_val_min.bind("<KP_Enter>",lambda e,s=self : s.set_valeur_attribut('val_min',None))
-      self.set_valeur_attribut('val_min',self.get_valeur_attribut('val_min'))
-      # val_max
-      self.l_val_max = Label(fr3,text='Valeur maximale : ')
-      self.l_val_max.place(relx=0.05,rely=0.8,anchor='w')
-      self.e_val_max = Entry(fr3)
-      self.e_val_max.place(relx=0.35,rely=0.8,relwidth=0.5,anchor='w')
-      self.e_val_max.bind("<Return>",lambda e,s=self : s.set_valeur_attribut('val_max',None))
-      self.e_val_max.bind("<KP_Enter>",lambda e,s=self : s.set_valeur_attribut('val_max',None))
-      self.set_valeur_attribut('val_max',self.get_valeur_attribut('val_max'))
-
-# ------------------------------------------------------------------
-# Méthodes de validation des entrées faites par l'utilisateur
-# ------------------------------------------------------------------
-
-  def get_valeur_attribut(self,nom_attr):
-    """
-    Demande à l'item de retourner la valeur de l'attribut nom_attr
-    """
-    return self.node.item.get_valeur_attribut(nom_attr)
-  
-  def set_valeur_attribut(self,nom_attr,new_valeur):
-    """
-    Affecte la valeur new_valeur à l'attribut nom_attr
-    Vérifie si celle-ci est valide, sinon restaure l'ancienne
-    """
-    if new_valeur is None :
-      widget = getattr(self,'e_'+nom_attr)
-      if hasattr(widget,'getcurselection'):
-        new_valeur = widget.getcurselection()
-      else:
-        new_valeur = widget.get()
-    print "on affecte %s a %s" %(str(new_valeur),nom_attr)
-    self.node.item.set_valeur_attribut(nom_attr,new_valeur)
-    self.node.update()
-
-  def change_into(self):
-    """
-    Méthode activée par double clic sur la ListBox d'affichage des valeurs discrètes possibles :
-    permet de changer la liste de ces valeurs
-    """
-    showinfo("Fonction non encore disponible",
-             "Vous ne pouvez pas encore modifier la liste into par cette IHM")
-    
-class OBJECTItem(TreeItem):
-  def __init__(self,appli,labeltext,object,setfunction=None,objet_cata_ordonne = None):
-    self.appli = appli
-    self.labeltext = labeltext
-    self.object=object
-    self.setfunction = setfunction
-    self.objet_cata_ordonne = objet_cata_ordonne
-    
-  def GetLabelText(self):
-    return self.labeltext,None,None
-
-  def get_fr(self):
-    return ''
-  
-  def isMCList(self):
-    return 0
-
-  def isactif(self):
-    return 1
-
-  def add_commande_avant(self):
-    pass
-
-  def add_commande_apres(self):
-    pass
-
-  def set_valeur_attribut(self,nom_attr,new_valeur):
-    """
-    Affecte la valeur new_valeur à l'attribut nom_attr
-    Vérifie si celle-ci est valide, sinon restaure l'ancienne
-    """
-    old_valeur = self.object.get_valeur_attribut(nom_attr)
-    self.object.set_valeur_attribut(nom_attr,new_valeur)
-    verificateur = 'verif_'+nom_attr
-    if hasattr(self.object,verificateur):
-      if not getattr(self.object,verificateur)():
-        # la nouvelle valeur de nom_attr n'est pas valide : on restaure l'ancienne (sans vérification)
-        self.object.set_valeur_attribut(nom_attr,old_valeur)
-        print 'changement de valeur refuse'
-        return
-    print 'changement de valeur accepte'
-    self.object.init_modif()
-
-  def get_valeur_attribut(self,nom_attr):
-    """
-    Retourne la valeur de l'attribut nom_attr
-    """
-    return self.object.get_valeur_attribut(nom_attr)
-        
-class CATAItem(OBJECTItem):
-  def GetSubList(self):
-    sublist=[]
-    for fils in self.object.entites_fils:
-      item = make_objecttreeitem(self.appli,fils.objet.label + " : ",fils,objet_cata_ordonne=self.objet_cata_ordonne)
-      sublist.append(item)
-    return sublist
-  
-  def GetIconName(self):
-    if self.object.isvalid():
-      return 'ast-green-square'
-    else:
-      return 'ast-red-square'
-
-  def GetText(self):
-    return "Catalogue %s" %self.appli.code
-
-  def add_commande_avant(self):
-    pass
-
-  def add_commande_apres(self):
-    pass
-
-     
-def transforme_liste_dico(liste):
-  d={}
-  for item in liste :
-    d[item.nom]=item
-  return d
-      
-class OPERItem(OBJECTItem):
-  panel = OPERPanel
-  def GetSubList(self):
-    sublist=[]
-    # on classe les fils dans l'ordre du catalogue ...
-    l_cles_fils = self.get_liste_mc_ordonnee()
-    # on crée les items fils ...
-    dico_fils = transforme_liste_dico(self.object.entites_fils)
-    for k in l_cles_fils :
-      typ = TYPE_COMPLET(dico_fils[k])
-      if type(self.objet_cata_ordonne) == types.InstanceType :
-        objet_cata = self.objet_cata_ordonne.entites[k]
-      else :
-        objet_cata = self.objet_cata_ordonne.get(k,None)
-      item = make_objecttreeitem(self.appli,typ + " : ",dico_fils[k],objet_cata_ordonne = objet_cata)
-      sublist.append(item)
-    return sublist
-
-  def GetText(self):
-    #return self.object.nom
-    return self.object.get_valeur_attribut('nom')
-
-  def get_liste_mc_ordonnee(self):
-    return self.objet_cata_ordonne.ordre_mc
-
-  def GetIconName(self):
-    if self.object.isvalid():
-      return 'ast-green-square'
-    else:
-      return 'ast-red-square'
-
-  def additem(self,name,pos):
-      if isinstance(name,TreeItem) :
-          cmd=self.object.addentite(name.getObject(),pos)
-      else :
-          cmd = self.object.addentite(name,pos)
-      typ = TYPE_COMPLET(cmd)
-      item = make_objecttreeitem(self.appli,typ + " : ", cmd)
-      return item
-
-  def get_attribut(self,nom):
-    if nom == 'nature': return 'OPERATEUR'
-
-  def get_liste_mc_presents(self):
-    return []
-
-  def verif_condition_regles(self,liste):
-    return []
-  
-class PROCItem(OPERItem):
-  panel = OPERPanel
-  
-class MACROItem(OPERItem):
-  panel = OPERPanel
-    
-class SIMPItem(OPERItem):
-  panel = SIMPPanel
-  
-  def GetIconName(self):
-    if self.object.isvalid():
-      return 'ast-green-ball'
-    else:
-      return 'ast-red-ball'
-
-  def IsExpandable(self):
-    return 0
-
-  def GetSubList(self):
-    return []
-  
-class FACTItem(OPERItem):
-  def GetIconName(self):
-    if self.object.isvalid():
-      return 'ast-green-los'
-    else:
-      return 'ast-red-los'
-
-class BLOCItem(FACTItem): pass
-
-class TYPEItem(SIMPItem):
-  panel = TYPEPanel
-  def get_dico_attributs(self):
-    self.d_attributs = {}
-
-  def GetSubList(self):
-    return []
-
-  def IsExpandable(self):
-    return 0
-
-  def GetText(self):
-    return self.object.nom
-
-class NIVEAUItem(OPERItem):
-  def IsExpandable(self):
-      return 1
-
-  def get_liste_mc_ordonnee(self):
-    l=[]
-    for fils in self.object.entites_fils:
-      l.append(fils.nom)
-    return l
-  
-  def GetSubList(self):
-    sublist=[]
-    # on classe les fils dans l'ordre du catalogue ...
-    l_cles_fils = self.get_liste_mc_ordonnee()
-    # on crꥠles items fils ...
-    dico_fils = transforme_liste_dico(self.object.entites_fils)
-    for k in l_cles_fils :
-      typ = TYPE_COMPLET(dico_fils[k])
-      if type(self.objet_cata_ordonne) == types.InstanceType :
-        objet_cata = self.objet_cata_ordonne.entites[k]
-      else :
-        objet_cata = self.objet_cata_ordonne.get(k,None)
-      item = make_objecttreeitem(self.appli,typ + " : ",dico_fils[k],objet_cata_ordonne = objet_cata)
-      sublist.append(item)
-    return sublist
-  
-  def GetLabelText(self):
-      """ Retourne 3 valeurs :
-        - le texte à afficher dans le noeud représentant l'item
-        - la fonte dans laquelle afficher ce texte
-        - la couleur du texte
-      """
-      return self.labeltext,Fonte_Niveau,'#00008b'
-    
-  def GetIconName(self):
-    if self.object.isvalid():
-      return "ast-green-text"
-    else:
-      return 'ast-red-text'
-
-  def additem(self,name,pos):
-      if isinstance(name,TreeItem) :
-          cmd=self.object.addentite(name.getObject(),pos)
-      else :
-          cmd = self.object.addentite(name,pos)
-      typ = TYPE_COMPLET(obj)
-      item = make_objecttreeitem(self.appli,typ+ " : ", cmd)
-      return item
-
-  def suppitem(self,item) :
-    # item = item de l'ETAPE à supprimer du JDC
-    # item.getObject() = ETAPE ou _C
-    # self.object = JDC
-    itemobject=item.getObject()
-    if self.object.suppentite(itemobject):
-       if isinstance(itemobject,_C):
-          message = "Commentaire supprimé"
-       else :
-          message = "Commande " + itemobject.nom + " supprimée"
-       self.appli.affiche_infos(message)
-       return 1
-    else:
-       self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet")
-       return 0
-
-  def GetText(self):
-      return ''
-    
-class ATTRIBUTItem(SIMPItem):
-  def get_dico_attributs(self):
-    self.d_attributs = {}
-
-  def GetSubList(self):
-    return []
-
-  def IsExpandable(self):
-    return 0
-
-  def GetText(self):
-    return self.object
-
-  def GetIconName(self):
-    return 'aucune' 
-
-class CataEditeur:
-  def __init__(self,parent,appli,cata):
-    self.parent = parent
-    self.cata = definition_cata.CATALOGUE(cata)
-    self.appli = appli
-    self.top = Toplevel()
-    self.top.geometry("800x500")
-    self.top.title("Edition d'un catalogue")
-    self.init()
-
-  def close(self):
-    self.top.destroy()
-
-  def init(self):
-    self.nodes={}
-    self.creerbarremenus()
-    self.pane = Pmw.PanedWidget(self.top,
-                                hull_width = 800,
-                                hull_height = 500,
-                                orient = 'horizontal')
-    self.pane.add('canvas',min = 0.4, max = 0.6, size = 0.45)
-    self.pane.add('panel',min = 0.4, max = 0.6, size = 0.55)
-    self.pane.pack(expand =1, fill = 'both')
-    self.scrolledcanvas = Pmw.ScrolledCanvas(self.pane.pane('canvas'),
-                                             hull_width=1.,
-                                             hull_height=1.,
-                                             borderframe=1)
-    Pmw.Color.changecolor(self.scrolledcanvas.component('canvas'),background='gray95')
-    self.scrolledcanvas.pack(padx=10,pady=10,expand=1, fill="both")
-    self.item = CATAItem(self.appli,"Catalogue",
-                           self.cata,
-                          objet_cata_ordonne = self.appli.readercata.cata_ordonne_dico)
-
-    self.tree = Tree(self.appli,self.item,self.scrolledcanvas,command = self.select_node)
-    self.tree.draw()
-    self.node = self.tree.node_selected
-
-  def creerbarremenus(self) :
-      self.menubar=Menu(self.top)
-      self.filemenu=Menu(self.menubar,tearoff=0)
-      self.filemenu.add_command(label='Quitter',command=self.quit)
-
-      self.editmenu=Menu(self.menubar,tearoff=0)
-      #self.editmenu.add_command(label='Copier',command=self.copy)
-      #self.editmenu.add_command(label='Couper',command=self.cut)
-      #self.editmenu.add_command(label='Coller',command=self.paste)
-
-      self.affichagemenu=Menu(self.menubar,tearoff=0)
-      self.affichagemenu.add_command(label='Rapport de validation',
-                                     command = self.visuCR)
-      self.affichagemenu.add_command(label='shell',command = self.shell)
-      #self.affichagemenu.add_command(label='Fichier ࡰlat',command=self.visu_a_plat)
-      #self.affichagemenu.add_command(label='Fichier .py',command =self.visuJDC_py)
-      #self.affichagemenu.add_command(label='Fichier source',command = self.visu_txt_brut_JDC)
-      #self.affichagemenu.add_command(label='Param鵲es Eficas',command=self.affichage_fichier_ini)
-      
-      #self.optionmenu=Menu(self.menubar,tearoff=0)
-      #self.optionmenu.add_command(label='Catalogue d귥loppeur',command=self.choix_cata_developpeur)
-
-      self.menubar.add_cascade(label='Fichier',menu=self.filemenu)
-      self.menubar.add_cascade(label='Edition',menu=self.editmenu)
-      self.menubar.add_cascade(label='Jeu de commandes',menu=self.affichagemenu)
-      #self.menubar.add_cascade(label='Browsers',menu=self.browsermenu)
-      #self.menubar.add_cascade(label='Catalogue',menu=self.cataloguemenu)
-      #self.menubar.add_cascade(label='Options',menu=self.optionmenu)
-      self.top.configure(menu=self.menubar)
-      self.top.protocol("WM_DELETE_WINDOW",self.quit)
-      self.top.minsize(900,500)
-      self.top.geometry("900x500")
-
-  def shell(self,event=None):
-      import Interp
-      d={'j':self.tree.item.getObject()}
-      Interp.InterpWindow(d,parent=self.parent)
-      
-  def visuCR(self,mode='Cata'):
-    txt = str(self.cata.report())
-    titre="Rapport de validation du catalogue"
-    Fenetre(self.appli,titre=titre,texte=txt)
-  
-  def select_node(self,node):
-    self.nodes[node]=self.create_panel(node)
-
-  def create_panel(self,node):
-    if hasattr(node.item,"panel"):
-      return getattr(node.item,"panel")(self,self.pane.pane('panel'),node)
-      
-  def quit(self) :
-    self.top.destroy()
-    
-  def settitle(self):
-    self.top.wm_title("Browser de catalogue " )
-    self.top.wm_iconname("CataBrowser")
-
-dispatch = {
-    'OPER'   : OPERItem,
-    'PROC'   : PROCItem,
-    'MACRO'  : MACROItem,
-    'SIMP'   : SIMPItem,
-    'FACT'   : FACTItem,
-    'BLOC'   : BLOCItem,
-    'TYPE'   : TYPEItem,
-    'NIVEAU' : NIVEAUItem
-}
-
-def TYPE(o):
-  if isinstance(o,definition_cata.OPER_CATA):return 'OPER'
-  elif isinstance(o,definition_cata.PROC_CATA):return 'PROC'
-  elif isinstance(o,definition_cata.MACRO_CATA):return 'MACRO'
-  elif isinstance(o,definition_cata.SIMP_CATA):return 'SIMP'
-  elif isinstance(o,definition_cata.FACT_CATA):return 'FACT'
-  elif isinstance(o,definition_cata.BLOC_CATA):return 'BLOC'
-  elif isinstance(o,definition_cata.TYPE_CATA):return 'TYPE'
-  elif isinstance(o,definition_cata.NIVEAU_CATA) : return 'NIVEAU'
-  else:return type(o)
-
-def TYPE_COMPLET(o):
-  if isinstance(o,definition_cata.OPER_CATA):return "OPERATEUR"
-  elif isinstance(o,definition_cata.PROC_CATA):return "PROCEDURE"
-  elif isinstance(o,definition_cata.MACRO_CATA):return "MACRO"
-  elif isinstance(o,definition_cata.SIMP_CATA):return "Mot-clé SIMPLE"
-  elif isinstance(o,definition_cata.FACT_CATA):return "Mot-clé FACTEUR"
-  elif isinstance(o,definition_cata.BLOC_CATA):return "BLOC"
-  elif isinstance(o,definition_cata.TYPE_CATA):return "Type"
-  elif isinstance(o,definition_cata.NIVEAU_CATA):return "Niveau"
-  else: return "Inconnu ("+`type(o)`+")"
-  
-def make_objecttreeitem(appli,labeltext, object, setfunction=None,objet_cata_ordonne=None):
-    t = TYPE(object)
-    if dispatch.has_key(t):
-      c = dispatch[t]
-    else:
-      print 'on a un objet de type :',type(object),'  ',object
-      c = ATTRIBUTItem
-    return c(appli,labeltext, object, setfunction = setfunction,objet_cata_ordonne=objet_cata_ordonne)
-
-
-
diff --git a/Editeur/centerwindow.py b/Editeur/centerwindow.py
deleted file mode 100644 (file)
index 4acca2e..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-   Ce module contient la fonction utilitaire centerwindow
-   qui sert à centrer une fenetre
-"""
-import types
-
-def centerwindow(window,parent = 'avec'):
-    if parent =='avec':
-        parent = window.winfo_parent()
-        if type(parent) == types.StringType:
-            parent = window._nametowidget(parent)
-    # Find size of window.
-    window.update_idletasks()
-    width = window.winfo_width()
-    height = window.winfo_height()
-    if width == 1 and height == 1:
-        # If the window has not yet been displayed, its size is
-        # reported as 1x1, so use requested size.
-        width = window.winfo_reqwidth()
-        height = window.winfo_reqheight()
-    # Place in centre of screen:
-    if parent =='avec' :
-        x = (window.winfo_screenwidth() - width) / 2 - parent.winfo_vrootx()
-        y = (window.winfo_screenheight() - height) / 3 - parent.winfo_vrooty()
-    else:
-        x = (window.winfo_screenwidth() - width) / 2 
-        y = (window.winfo_screenheight() - height) / 3
-    if x < 0:
-        x = 0
-    if y < 0:
-        y = 0
-    window.geometry('+%d+%d' % (x, y))
-    
diff --git a/Editeur/change_comm.py b/Editeur/change_comm.py
deleted file mode 100755 (executable)
index 8b0a4bc..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-    Ce module permet de lancer l'application EFICAS en affichant
-    un ecran Splash pour faire patentier l'utilisateur
-"""
-# Modules Python
-import sys
-import os
-
-# Modules Eficas
-import import_code
-import session
-import prefs
-import convert
-import generator
-import string
-from utils import extension_fichier,stripPath, save_in_file
-
-class DUP :
-
-   def __init__(self,code):
-       """
-       """
-       self.format_fichier="python"
-       self.version_code=None
-       self.code=code
-
-       self.top=None
-       self.test=2
-       import configuration
-       self.CONFIGURATION=configuration.make_config(self,prefs.REPINI)
-
-       self.load_readercata()
-       self.cata=self.readercata.cata
-
-       self.JDC=None
-       self.JDCName=""
-       self.J2=None
-
-   def load_readercata(self):
-       mname='readercata'
-       module=__import__(mname,globals(),locals())
-       factory=getattr(module,mname.upper())
-       appli_composant=factory(self,self.top)
-       setattr(self,mname,appli_composant)
-
-
-   def openJDC(self,fichier):
-      if fichier :
-          self.fichier = fichier
-          e=extension_fichier(fichier)
-          self.JDCName=stripPath(fichier)
-          self.initialdir = os.path.dirname(os.path.abspath(fichier))
-      else :
-          return
-
-      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(fichier)
-         text=p.convert('exec',self)
-         if not p.cr.estvide(): 
-            print ("Erreur à la conversion")
-            print str(p.cr)
-            return
-
-      # On se met dans le repertoire ou se trouve le fichier de commandes
-      # pour trouver les eventuels fichiers include ou autres
-      # localises a cote du fichier de commandes
-      os.chdir(self.initialdir)
-      CONTEXT.unset_current_step()
-      J=self.cata[0].JdC(procedure=text,appli=self,
-                         cata=self.cata,cata_ord_dico=self.readercata.cata_ordonne_dico,
-                         nom = self.JDCName,
-                         rep_mat=self.CONFIGURATION.rep_mat,
-                         )
-
-      J.analyse()
-
-      txt_exception = J.cr.get_mess_exception()
-      if txt_exception :
-          # des exceptions ont été levées à la création du JDC 
-          # --> on affiche les erreurs mais pas le JDC
-          self.JDC=J
-          print("Erreur fatale au chargement de %s" %file)
-      else :
-          self.JDC=J
-
-   def modifieJDC(self,texte):
-         if texte == None or texte == "" : return
-         format="python"
-         lignes=string.split(texte,";")
-         textedecoup=""
-         for l in lignes :
-            textedecoup=textedecoup+l+'\n'
-         if convert.plugins.has_key(format):
-            p=convert.plugins[format]()
-            p.settext(textedecoup)
-            text=p.convert('exec',self)
-            print text
-         if not p.cr.estvide(): 
-            print ("Erreur à la conversion")
-            print str(p.cr)
-            return
-         self.J2=self.cata[0].JdC(procedure=text,appli=self,
-                         cata=self.cata,
-                         cata_ord_dico=self.readercata.cata_ordonne_dico,
-                         nom = self.JDCName+"2",
-                         rep_mat=self.CONFIGURATION.rep_mat,
-                         )
-         self.J2.definition.code = "MODIF"
-         self.J2.analyse()
-     
-
-   def saveJDC(self,fichierSortie):
-      """ 
-          Sauvegarde le JDC courant.
-          Retourne 1 si la sauvegarde s'est bien faite, 0 sinon.
-      """
-      if not hasattr(self,'JDC') : return 0
-
-      format="Modif"
-
-      if generator.plugins.has_key(format):
-         g=generator.plugins[format]()
-         jdc_formate=g.genermodifparam(self.JDC,self.J2)
-         if not g.cr.estvide():
-            self.affiche_infos("Erreur à la generation")
-            return 0
-      else:
-         self.affiche_infos("Format %s non reconnu" % format)
-         return 0
-
-      self.jdc_fini = string.replace(jdc_formate,'\r\n','\n')
-
-      if not save_in_file(fichierSortie,self.jdc_fini) :
-         self.affiche_infos("Problème à la sauvegarde du fichier")
-         return 0
-      else :
-         self.affiche_infos("sauvegarde effectuée")
-         return 1
-
-
-   def affiche_infos(self,mess):
-       print mess
-          
index c5a7c8466100efeaa141041f24f5b8bc7198f992..b20bfa9f2b95c1870d7dbfe2c740f4f5a588ef5e 100644 (file)
@@ -38,17 +38,24 @@ import os,glob,types
 # Ce dictionnaire est renseigné par la méthode charger_composants 
 composants = {}
 
-def charger_composants():
+def charger_composants(Ihm="TK"):
     """
         Cette fonction a pour but de charger tous les modules composants graphiques
         (fichiers compo*.py dans le même répertoire que ce module )
         et de remplir le dictionnaire composants utilisé par make_objecttreeitem
     """
-    repertoire=os.path.dirname(__file__)
+    reper=os.path.dirname(__file__)
+    if Ihm == "TK" :
+       repertoire=reper+"/../InterfaceTK"
+       package="InterfaceTK"
+    else :
+       repertoire=reper+"/../InterfaceQT"
+       package="InterfaceQT"
     listfich=glob.glob(os.path.join(repertoire, "compo*.py"))
     for fichier in listfich:
         m= os.path.basename(fichier)[:-3]
-        module=__import__(m,globals(),locals())
+        module=__import__(package,globals(),locals(),[m])
+        module = getattr(module, m)
         composants[module.objet]=module.treeitem
     return composants
 
diff --git a/Editeur/compobase.py b/Editeur/compobase.py
deleted file mode 100644 (file)
index df539df..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-import Objecttreeitem
-treeitem = Objecttreeitem.ObjectTreeItem
-objet = None
diff --git a/Editeur/compobloc.py b/Editeur/compobloc.py
deleted file mode 100644 (file)
index d2f2f3a..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-from Tkinter import *
-import Pmw
-
-import Objecttreeitem
-import compofact
-
-
-class BLOCTreeItem(compofact.FACTTreeItem):
-  panel = compofact.FACTPanel
-
-  def get_objet(self,name) :
-      for v in self.object.mc_liste:
-          if v.nom == name : return v
-      return None
-    
-  def iscopiable(self):
-    return 0
-
-
-import Accas
-treeitem = BLOCTreeItem
-objet = Accas.MCBLOC   
diff --git a/Editeur/compocomm.py b/Editeur/compocomm.py
deleted file mode 100644 (file)
index f0fdca5..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-from Tkinter import *
-import Pmw
-import string
-
-import Objecttreeitem
-import panels
-import fontes
-
-Fonte_Commentaire = fontes.standard_italique
-
-class COMMPanel(panels.OngletPanel):
-  
-  def init(self):
-    """
-    Initialise les frame des panneaux contextuels relatifs à un COMMENTAIRE
-    """
-    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
-    nb.pack(fill = 'both', expand = 1)
-    self.nb=nb
-    nb.add('TexteComm', tab_text='Texte Commentaire')
-    nb.add('Commande', tab_text='Nouvelle Commande')
-    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
-    self.makeCOMMPage(nb.page("TexteComm"))
-    self.makeCommandePage(nb.page("Commande"))
-    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
-    nb.tab('TexteComm').focus_set()
-    self.enlevebind()
-    self.creebind()
-    nb.setnaturalsize()
-    
-  def makeCOMMPage(self,page):
-    """
-    Crée la page qui permet d'afficher et d'éditer le texte du commentaire
-    """
-    self.frame_valeur = Frame(page)
-    self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
-    self.widget_text = Pmw.ScrolledText(self.frame_valeur,
-                                        borderframe=1,
-                                        labelpos='n',
-                                        label_text = 'Texte du commentaire\n ')
-    self.widget_text.pack(side='top',expand=1,fill='both')
-    self.widget_text.configure(hscrollmode='dynamic',
-                               vscrollmode='dynamic')
-    self.make_buttons()
-    self.display_valeur()
-
-  def make_buttons(self):
-    """
-    Crée les boutons du panneau
-    """
-    #self.bouton_sup.place_forget()
-    #self.bouton_doc.place_forget()
-    #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
-    #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
-
-    #self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
-    #self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
-    #self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
-
-    self.bouton_sup.pack_forget()
-    self.bouton_doc.pack_forget()
-    self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur)
-    self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur)
-
-    self.bouton_val.pack(side='left',padx=5, pady=5)
-    self.bouton_ann.pack(side='left',padx=5, pady=5)
-    self.bouton_sup.pack(side='right',padx=5, pady=5)
-
-  def change_valeur(self):
-    """
-    Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du commentaire
-    """
-    if self.parent.modified == 'n' : self.parent.init_modif()
-    new_valeur = self.widget_text.get()
-    self.node.item.set_valeur(new_valeur)
-    self.node.update()
-
-  def display_valeur(self):
-    """
-    Affiche dans self.widget_text la valeur de l'objet commentaire
-    (annule d'éventuelles modifications faite par l'utilisateur)
-    """
-    t=self.node.item.get_valeur()
-    try:
-        self.widget_text.settext(unicode(t))
-    except:
-        # Si probleme avec unicode
-        self.widget_text.settext(t)
-    
-class COMMTreeItem(Objecttreeitem.ObjectTreeItem):
-    panel = COMMPanel
-
-    def init(self):
-      self.setfunction = self.set_valeur
-
-    def GetIconName(self):
-      """
-      Retourne le nom de l'icône associée au noeud qui porte self,
-      dépendant de la validité de l'objet
-      NB : un commentaire est toujours valide ...
-      """
-      return "ast-white-percent"
-
-    def GetLabelText(self):
-        """ Retourne 3 valeurs :
-        - le texte à afficher dans le noeud représentant l'item
-        - la fonte dans laquelle afficher ce texte
-        - la couleur du texte
-        """
-        return 'commentaire',Fonte_Commentaire,None
-
-    def get_valeur(self):
-      """
-      Retourne la valeur de l'objet Commentaire cad son texte
-      """
-      return self.object.get_valeur() or ''
-    
-    def GetText(self):
-        texte = self.object.valeur
-        texte = string.split(texte,'\n')[0]
-        if len(texte) < 25 :
-            return texte
-        else :
-            return texte[0:24]
-
-    def set_valeur(self,valeur):
-      """
-      Afefcte valeur à l'objet COMMENTAIRE
-      """
-      self.object.set_valeur(valeur)
-      
-    def GetSubList(self):
-      """
-      Retourne la liste des fils de self
-      """
-      return []
-
-
-    def get_objet_commentarise(self):
-       """
-           La méthode get_objet_commentarise() de la classe compocomm.COMMTreeItem
-           surcharge la méthode get_objet_commentarise de la classe Objecttreeitem.ObjectTreeItem
-           elle a pour but d'empecher l'utilisateur final de commentariser un commentaire.
-       """
-       raise Exception( 'Citoyen : tu peux "commentariser" une commande MAIS PAS UN COMMENTAIRE' )
-  
-import Extensions
-treeitem =COMMTreeItem
-objet = Extensions.commentaire.COMMENTAIRE    
diff --git a/Editeur/compocommandecomm.py b/Editeur/compocommandecomm.py
deleted file mode 100644 (file)
index bbc3a47..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-# -*- coding: utf-8 -*-
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-#
-#
-# ======================================================================
-import traceback
-from Tkinter import *
-import Pmw
-import string
-from widgets import showerror
-
-import Objecttreeitem
-import panels
-import fontes
-
-Fonte_Commentaire = fontes.standard_italique
-
-class COMMANDE_COMMPanel(panels.OngletPanel):
-  """
-  Classe servant à définir le panel associé à une commande commentarisée
-  """
-  def init(self):
-    """
-    Initialise les frame des panneaux contextuels relatifs à une commande commentarisée
-    """
-    panneau=Frame(self)
-    panneau.pack(expand=1,fill='both')
-    self.make_buttons()
-    self.makeCOMMPage(panneau)
-    self.enlevebind()
-
-  def makeCOMMPage(self,page):
-    """
-    Crée la page qui permet d'afficher et d'éditer le texte de la commande commentarisée
-    """
-    self.frame_valeur = Frame(page)
-    self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
-    self.widget_text = Pmw.ScrolledText(self.frame_valeur,
-                                        borderframe=1,
-                                        labelpos='n',
-                                        label_text = 'Texte de la commande\n ')
-    self.widget_text.pack(side='top',expand=1,fill='both')
-    self.widget_text.configure(hscrollmode='dynamic',
-                               vscrollmode='dynamic')
-    self.display_valeur()
-
-  def make_buttons(self):
-    """
-    Crée les boutons du panneau
-    """
-    #self.bouton_sup.place_forget()
-    #self.bouton_doc.place_forget()
-    #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
-    #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
-    #self.bouton_unc = Button(self.fr_but,text='Décommentariser',command=self.uncomment,width=14)
-
-    #self.bouton_val.place(relx=0.1,rely=0.5,relheight=1,relwidth=0.20,anchor='center')
-    #self.bouton_ann.place(relx=0.30,rely=0.5,relheight=1,relwidth=0.20,anchor='center')
-    #self.bouton_sup.place(relx=0.50,rely=0.5,relheight=1,relwidth=0.20,anchor='center')
-    #self.bouton_unc.place(relx=0.75,rely=0.5,relheight=1,relwidth=0.25,anchor='center')
-
-    self.bouton_sup.pack_forget()
-    self.bouton_doc.pack_forget()
-    self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur)
-    self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur)
-    self.bouton_unc = Button(self.fr_but,text='Décommentariser',command=self.uncomment)
-    self.bouton_val.pack(side='left',padx=5, pady=5)
-    self.bouton_ann.pack(side='left',padx=5, pady=5)
-    self.bouton_sup.pack(side='left',padx=5, pady=5)
-    self.bouton_unc.pack(side='right',padx=5, pady=5)
-
-  def change_valeur(self):
-    """
-    Stocke la nouvelle valeur donnée par l'utilisateur comme valeur de la commande commentarisée
-    """
-    if self.parent.modified == 'n' : self.parent.init_modif()
-    new_valeur = self.widget_text.get()
-    self.node.item.set_valeur(new_valeur)
-    self.node.update()
-
-  def display_valeur(self):
-    """
-    Affiche dans self.widget_text la valeur de la commande commentarisée
-    (annule d'éventuelles modifications faite par l'utilisateur)
-    """
-    self.widget_text.settext(self.node.item.get_valeur())
-
-  def uncomment(self):
-      """
-      Réalise la décommentarisation de self
-      """
-      try:
-          pos=self.node.parent.children.index(self.node)
-          commande,nom = self.node.item.uncomment()
-          self.node.parent.children[pos].select()
-      except Exception,e:
-          showerror("Erreur !",str(e))
-          return
-      #self.parent.appli.bureau.JDCDisplay_courant.ReplaceObjectNode(self.node,commande,nom)
-    
-class COMMANDE_COMMTreeItem(Objecttreeitem.ObjectTreeItem):
-    panel = COMMANDE_COMMPanel
-
-    def init(self):
-      self.setfunction = self.set_valeur
-
-    def GetIconName(self):
-      """
-      Retourne le nom de l'icône associée au noeud qui porte self,
-      dépendant de la validité de l'objet
-      NB : une commande commentarisée est toujours valide ...
-      """
-      if self.isvalid():
-          return "ast-green-percent"
-      else:
-          return "ast-red-percent"
-
-    def GetLabelText(self):
-        """ Retourne 3 valeurs :
-        - le texte à afficher dans le noeud représentant l'item
-        - la fonte dans laquelle afficher ce texte
-        - la couleur du texte
-        """
-        return 'commande commentarisée',Fonte_Commentaire,None
-
-    def get_valeur(self):
-      """
-      Retourne la valeur de la commande commentarisée cad son texte
-      """
-      return self.object.get_valeur() or ''
-    
-    def GetText(self):
-        texte = self.object.valeur
-        texte = string.split(texte,'\n')[0]
-        if len(texte) < 25 :
-            return texte
-        else :
-            return texte[0:24]
-
-    def set_valeur(self,valeur):
-      """
-      Afefcte valeur à l'objet commande commentarisée
-      """
-      self.object.set_valeur(valeur)
-      
-    def GetSubList(self):
-      """
-      Retourne la liste des fils de self
-      """
-      return []
-
-    def uncomment(self):
-      """
-      Demande à l'objet commande commentarisée de se décommentariser.
-      Si l'opération s'effectue correctement, retourne l'objet commande
-      et éventuellement le nom de la sd produite, sinon lève une exception
-      """
-      try:
-        commande,nom = self.object.uncomment()
-      except Exception,e:
-        traceback.print_exc()
-        raise e
-      return commande,nom
-  
-import Accas
-treeitem =COMMANDE_COMMTreeItem
-objet = Accas.COMMANDE_COMM    
diff --git a/Editeur/compoerror.py b/Editeur/compoerror.py
deleted file mode 100644 (file)
index 814782c..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-from Tkinter import Label,Button
-
-#Modules Eficas
-from Noyau.N_OBJECT import ErrorObj
-import Objecttreeitem
-import panels
-
-class ERRORPanel(panels.Panel_Inactif):
-    def creer_texte(self):
-        texte = """Le noeud sélectionné correspond à un objet erroné """
-        label = Label(self,text=texte,justify='center')
-        label.place(relx=0.5,rely=0.4,relwidth=0.8,anchor='center')
-        bouton = Button(self,text = "Supprimer", command=self.supprimer)
-        bouton.place(relx=0.5,rely=0.5,anchor='center')
-
-class ERRORTreeItem(Objecttreeitem.AtomicObjectTreeItem):
-    panel = ERRORPanel
-    def GetIconName(self):
-        return "ast-red-ball"
-
-
-treeitem =ERRORTreeItem
-objet = ErrorObj
-
diff --git a/Editeur/compofact.py b/Editeur/compofact.py
deleted file mode 100644 (file)
index 51b3673..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-# -*- coding: utf-8 -*-
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-#
-#
-# ======================================================================
-import Pmw
-import Objecttreeitem
-import panels
-
-class FACTPanel(panels.OngletPanel) :
-  def init(self) :
-    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
-    nb.pack(fill = 'both', expand = 1) 
-    self.nb=nb
-    nb.add('Mocles', tab_text='Ajouter mots-clés')
-    panneau=Pmw.PanedWidget(nb.page("Mocles"),
-                            orient='horizontal')
-    panneau.add('left',min=0.4,max=0.6,size=0.5)
-    panneau.add('right',min=0.4,max=0.6,size=0.5)
-    panneau.pack(expand=1,fill='both')
-    self.makeMoclesPage(panneau.pane('left'))
-    self.makeReglesPage(panneau.pane('right'))
-    nb.tab('Mocles').focus_set()
-    nb.setnaturalsize()
-    self.enlevebind()
-    self.creebind()
-    self.affiche()
-
-import treewidget
-class Node(treewidget.Node):
-    def doPaste(self,node_selected):
-        objet_a_copier = self.item.get_copie_objet()
-        child=node_selected.doPaste_MCF(objet_a_copier)
-        return child
-
-    def doPaste_MCF(self,objet_a_copier):
-        child = self.parent.append_child(objet_a_copier,
-                                              pos=self.item,
-                                              retour='oui')
-        return child
-
-
-class FACTTreeItem(Objecttreeitem.ObjectTreeItem):
-  panel = FACTPanel
-  itemNode=Node
-  
-  def IsExpandable(self):
-    return 1
-
-  def GetText(self):
-      return  ''
-
-  def GetLabelText(self):
-      """ Retourne 3 valeurs :
-        - le texte à afficher dans le noeud représentant l'item
-        - la fonte dans laquelle afficher ce texte
-        - la couleur du texte
-      """
-      # None --> fonte et couleur par défaut
-      return self.object.getlabeltext(),None,None
-
-  def isvalid(self):
-    return self.object.isvalid()
-
-  def iscopiable(self):
-    return 1
-
-  def GetIconName(self):
-    if self.object.isvalid():
-      return "ast-green-los"
-    elif self.object.isoblig():
-      return "ast-red-los"
-    else:
-      return "ast-yel-los"
-
-  def keys(self):
-    keys=self.object.mc_dict.keys()
-    return keys
-
-  def GetSubList(self):
-      """
-         Reactualise la liste des items fils stockes dans self.sublist
-      """
-      liste=self.object.mc_liste
-      sublist=[None]*len(liste)
-      # suppression des items lies aux objets disparus
-      for item in self.sublist:
-         old_obj=item.getObject()
-         if old_obj in liste:
-            pos=liste.index(old_obj)
-            sublist[pos]=item
-         else:
-            pass # objets supprimes ignores
-      # ajout des items lies aux nouveaux objets
-      pos=0
-      for obj in liste:
-         if sublist[pos] is None:
-            # nouvel objet : on cree un nouvel item
-            def setfunction(value, object=obj):
-                object.setval(value)
-            item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
-            sublist[pos]=item
-         pos=pos+1
-
-      self.sublist=sublist
-      return self.sublist
-
-  def additem(self,name,pos):
-    #print "compofact.additem",name,pos
-    objet = self.object.addentite(name,pos)
-    return objet
-
-  def suppitem(self,item) :
-      """ 
-         Cette methode a pour fonction de supprimer l'item passé en argument
-         des fils de l'item FACT qui est son pere
-           - item = item du MOCLE à supprimer du MOCLE père
-           - item.getObject() = MCSIMP ou MCBLOC 
-      """
-      itemobject=item.getObject()
-      if itemobject.isoblig() :
-         self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
-         return 0
-
-      if self.object.suppentite(itemobject):
-         message = "Mot-clé " + itemobject.nom + " supprimé"
-         self.appli.affiche_infos(message)
-         return 1
-      else:
-         self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
-         return 0
-
-import Accas
-objet = Accas.MCFACT
-treeitem = FACTTreeItem
diff --git a/Editeur/compoformule.py b/Editeur/compoformule.py
deleted file mode 100644 (file)
index d134713..0000000
+++ /dev/null
@@ -1,411 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-Ce module contient les classes permettant de définir les objets graphiques
-représentant un objet de type FORMULE, cad le panneau et l'item de l'arbre
-d'EFICAS
-"""
-
-# import modules Python
-from Tkinter import *
-import Pmw
-import string
-
-# import modules EFICAS
-import widgets
-import panels
-import fontes
-import compooper
-
-Fonte_TITRE = fontes.standard_gras_souligne
-
-
-class FORMULEPanel(panels.OngletPanel):
-  """
-  Classe servant à construire le panneau associé à un paramètre.
-  C'est au moyen de ce panneau que l'utilisateur peut accéder
-  aux nom et valeur du paramètre en vue éventuellement de les
-  modifier.
-  """
-
-  def init(self):
-    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
-    nb.pack(fill = 'both', expand = 1)
-    self.nb=nb
-    nb.add('Formule', tab_text='Définition Formule')
-    nb.add('Commande', tab_text='Nouvelle Commande')
-    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
-    self.makeFormulePage(nb.page("Formule"))
-    self.makeCommandePage(nb.page("Commande"))
-    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
-    nb.tab('Formule').focus_set()
-    self.enlevebind()
-    self.creebind()
-    nb.setnaturalsize()
-    
-  def makeFormulePage(self,page):
-    """
-    Crée la page qui permet d'afficher et d'éditer le texte de la FORMULE
-    """
-    self.frame_valeur = Frame(page)
-    self.frame_valeur.pack(fill='both',expand=1)
-    #self.frame_valeur.place(relwidth=0.95,relheight=0.95,relx=0.05,rely=0.05,anchor='nw')
-    #self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
-    # affichage du titre du panneau
-    self.titre = StringVar()
-    self.titre.set("FORMULE "+self.node.item.get_nom())
-
-    self.entry_nom = Entry(self.frame_valeur)
-    #Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.,anchor='n')
-    Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).grid(row=0,columnspan=2,padx=5,pady=5)
-    # création des labels et entries associés aux nom, type retourné, arguments et corps de la FORMULE
-    
-    #Label(self.frame_valeur,text= 'Nom de la formule : ').place(relx=0.,rely=0.1)
-    Label(self.frame_valeur,text= 'Nom de la formule : ').grid(row=1,sticky=W,padx=5,pady=5)
-    #Label(self.frame_valeur,text= 'Arguments : ').place(relx=0.,rely=0.40)
-    Label(self.frame_valeur,text= 'Arguments : ').grid(row=2,sticky=W,padx=5,pady=5)
-    self.entry_arg = Entry(self.frame_valeur)
-    #Label(self.frame_valeur,text= 'Expression : ').place(relx=0.,rely=0.65)
-    Label(self.frame_valeur,text= 'Expression : ').grid(row=4,sticky=W,padx=5,pady=5)
-    self.entry_exp = Entry(self.frame_valeur)
-
-    # binding sur les entries
-    self.entry_nom.bind("<Return>",self.verif_nom)
-    self.entry_nom.bind("<KP_Enter>",self.verif_nom)
-    self.entry_arg.bind("<Return>",self.verif_arguments)
-    self.entry_arg.bind("<KP_Enter>",self.verif_arguments)
-    self.entry_exp.bind("<Return>",self.verif_corps)
-    self.entry_exp.bind("<KP_Enter>",self.verif_corps)
-    # affichage des entries
-    #self.entry_nom.place(relx=0.35,rely=0.10,relwidth=0.2)
-    self.entry_nom.grid(row=1,column=1,sticky=W,padx=5,pady=5)
-    #self.entry_arg.place(relx=0.35,rely=0.40,relwidth=0.4)
-    self.entry_arg.grid(row=2,column=1,sticky=W,padx=5,pady=5)
-
-    # affichage d'une phrase d'aide pour les arguments
-    aide = """Entrer les arguments sous la forme
-de VARIABLES séparées par des virgules (,)
-Exemple X,Y,Z """
-    #Label(self.frame_valeur,text=aide, justify="l").place(relx=0.5,rely=0.47,anchor='n') 
-    Label(self.frame_valeur,text=aide, justify="l").grid(row=3,columnspan=2,padx=5,pady=5)
-
-    #self.entry_exp.place(relx=0.35,rely=0.65,relwidth=0.60)
-    self.entry_exp.grid(row=4,column=1,sticky=W,padx=5,pady=5)
-    # affichage d'une phrase d'aide pour l'expression
-    aide = """Un retour de chariot dans une zone de saisie vous permet de vérifier si
-la valeur que vous avez entrée est valide.
-Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
-valeurs seront effectivement prises en compte."""
-    #Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.75,anchor='n')
-    Label(self.frame_valeur,text=aide).grid(row=5,columnspan=2,padx=5,pady=5)
-    self.frame_valeur.columnconfigure(1,weight=1)
-
-    # affichage des nom, type retourné, arguments et corps de la FORMULE
-    self.display_valeur()
-    # affichage des boutons
-    self.make_buttons()
-    # entry_nom prend le focus
-    self.entry_nom.focus()
-
-  def make_buttons(self):
-    """
-    Crée les boutons du panneau
-    """
-    #self.bouton_sup.place_forget()
-    #self.bouton_doc.place_forget()
-    #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
-    #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
-
-    #self.bouton_val.place(relx=0.15,rely=0.5,relheight=0.8,anchor='center')
-    #self.bouton_ann.place(relx=0.40,rely=0.5,relheight=0.8,anchor='center')
-    #self.bouton_sup.place(relx=0.65,rely=0.5,relheight=0.8,anchor='center')
-    #self.bouton_doc.place(relx=0.90,rely=0.5,relheight=0.8,anchor='center')
-
-    self.bouton_sup.pack_forget()
-    self.bouton_doc.pack_forget()
-    self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur)
-    self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur)
-
-    self.bouton_val.pack(side='left',padx=5, pady=5)
-    self.bouton_ann.pack(side='left',padx=5, pady=5)
-    self.bouton_sup.pack(side='left',padx=5, pady=5)
-    self.bouton_doc.pack(side='right',padx=5, pady=5)
-
-  def change_valeur(self):
-    """
-    Stocke la nouvelle FORMULE décrite par l'utilisateur
-    """
-    if self.parent.modified == 'n' : self.parent.init_modif()
-    # on récupère les nouveaux nom, type retourné, arguments et corps de la FORMULE
-    new_nom = self.entry_nom.get()
-    new_typ="REEL" 
-    new_arg = self.entry_arg.get()
-    new_exp = self.entry_exp.get()
-    self.verif_arguments()
-    self.verif_corps()
-    # on essaie de les stocker
-    test,erreur = self.node.item.save_formule(new_nom,new_typ,new_arg,new_exp)
-    if test :
-        # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage
-        self.node.update()
-        self.display_valeur()
-        self.parent.appli.affiche_infos("FORMULE %s modifiée" %self.node.item.get_nom())
-    else:
-        # la formule est incorrecte : on affiche les erreurs
-        widgets.showerror("Formule incorrecte",erreur)
-        self.parent.appli.affiche_infos("FORMULE %s non modifiée" %self.node.item.get_nom())
-    
-  def display_valeur(self):
-    """
-    Affiche dans self.widget_text de la valeur de l'objet FORMULE
-    (annule d'éventuelles modifications faite par l'utilisateur)
-    """
-    # on efface tout texte affiché dans les entries
-    self.entry_nom.delete(0,END)
-    self.entry_arg.delete(0,END)
-    self.entry_exp.delete(0,END)
-    # on rafraîchit le titre du panneau
-    self.titre.set('FORMULE '+self.node.item.get_nom())
-    # on insére les nouveaux nom, type retourné, arguments et corps de la FORMULE
-    nom = self.node.item.get_nom()
-    if nom != '':
-        self.entry_nom.insert(END,nom)
-    args = self.node.item.get_args()
-    if args:
-        texte_args=""
-        for i in args :
-            if texte_args != "" :
-               texte_args = texte_args +","
-            texte_args=texte_args + i
-        self.entry_arg.insert(END,texte_args)
-    corps = self.node.item.get_corps()
-    if corps :
-        self.entry_exp.insert(END,self.node.item.get_corps())
-
-  def verif_nom(self,event=None):
-        """
-        Lance la vérification du nom présent dans entry_nom
-        """
-        nom = self.entry_nom.get()
-        if nom == '':
-            test,erreur = 0,"Aucun nom fourni !"
-        else:
-            test,erreur = self.node.item.verif_nom(nom)
-        if not test:
-            widgets.showerror("Nom invalide",erreur)
-            self.entry_nom.focus()
-            self.entry_nom.selection_range(0,END)
-            self.parent.appli.affiche_infos("%s n'est pas un nom valide pour une FORMULE" %nom)
-        else:
-            self.parent.appli.affiche_infos("%s est un nom valide pour une FORMULE" %nom)
-            self.entry_arg.focus()
-
-  def verif_arguments(self,event=None):
-        """
-        Lance la vérification des arguments présents dans entry_arg
-        """
-        arguments = self.entry_arg.get()
-        if arguments == '' :
-            test,erreur = 0,"Aucun argument fourni"
-        else:
-            test,erreur = self.node.item.verif_arguments(arguments)
-        if not test:
-            widgets.showerror("Argument(s) invalide(s)",erreur)
-            self.entry_arg.focus()
-            self.entry_arg.selection_range(0,END)
-            self.parent.appli.affiche_infos("Argument(s) invalide(s) pour une FORMULE")
-        else:
-            self.parent.appli.affiche_infos("Argument(s) valide(s) pour une FORMULE")
-            self.entry_exp.focus()
-
-  def verif_corps(self,event=None):
-        """
-        Lance la vérification du corps de formule présent dans entry_exp
-        """
-        new_nom = self.entry_nom.get()
-        new_typ="REEL"
-        new_arg = self.entry_arg.get()
-        new_exp = self.entry_exp.get()
-        if new_exp == '':
-            test,erreur = 0,"Aucune expression fournie !"
-        else:
-            test,erreur = self.node.item.verif_formule_python((new_nom,new_typ,new_arg,new_exp))
-        if not test:
-            widgets.showerror("Corps de FORMULE invalide",erreur)
-            self.entry_exp.focus()
-            self.entry_exp.selection_range(0,END)
-            self.parent.appli.affiche_infos("Corps de FORMULE invalide")
-        else:
-            self.parent.appli.affiche_infos("Corps de FORMULE valide")
-            
-class FORMULETreeItem(compooper.EtapeTreeItem):
-    """
-    Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
-    qui représente la FORMULE
-    """
-    panel = FORMULEPanel
-
-    def init(self):
-      self.setfunction = self.set_valeur
-
-# ---------------------------------------------------------------------------
-#                   API de FORMULE pour l'arbre 
-# ---------------------------------------------------------------------------
-    def GetSubList(self):
-      """
-      Retourne la liste des fils de self
-      On considère que FORMULE n'a pas de fils
-      --> modification par rapport à MACRO classique
-      """
-      # dans EFICAS on ne souhaite pas afficher les mots-clés fils de FORMULE
-      # de façon traditionnelle
-      return []
-
-    def GetIconName(self):
-      """
-      Retourne le nom de l'icône à afficher dans l'arbre
-      Ce nom dépend de la validité de l'objet
-      """
-      if self.object.isactif():
-        self.object.state="modified"
-        if self.object.isvalid():
-          return "ast-green-square"
-        else:
-          return "ast-red-square"
-      else:
-        return "ast-white-text"
-
-    def GetLabelText(self):
-      """ Retourne 3 valeurs :
-      - le texte à afficher dans le noeud représentant l'item
-      - la fonte dans laquelle afficher ce texte
-      - la couleur du texte
-      """
-      if self.object.isactif():
-        # None --> fonte et couleur par défaut
-        return self.labeltext,None,None
-      else:
-        return self.labeltext,fontes.standard_italique,None
-    
-# ---------------------------------------------------------------------------
-#       Méthodes permettant la modification et la lecture des attributs
-#       du paramètre = API graphique de la FORMULE pour Panel et EFICAS
-# ---------------------------------------------------------------------------
-
-    def get_nom(self):
-      """
-      Retourne le nom de la FORMULE
-      """
-      return self.object.get_nom()
-
-    def get_type(self):
-      """
-      Retourne le type de la valeur retournée par la FORMULE
-      """
-      return self.object.type_retourne
-
-    def get_args(self):
-      """
-      Retourne les arguments de la FORMULE
-      """
-      args=""
-      for mot in self.object.mc_liste:
-          if mot.nom == 'NOM_PARA':
-             args=mot.valeur
-             break
-      if args :
-          if args[0] == "(" and args[-1] ==")":
-             args=args[1:-1]
-          # transforme en tuple si ce n est pas déjà le casa
-          try :
-             args=string.split(args,',')
-          except :
-             pass
-      return args
-
-    def get_corps(self):
-      """
-      Retourne le corps de la FORMULE
-      """
-      corps=""
-      for mot in self.object.mc_liste:
-          if mot.nom == 'VALE':
-             corps=mot.valeur
-             break
-      return corps
-
-
-    def get_liste_types_autorises(self):
-      """
-         Retourne la liste des types autorises pour les valeurs de sortie 
-         d'une FORMULE
-      """
-      return self.object.l_types_autorises
-
-    def save_formule(self,new_nom,new_typ,new_arg,new_exp):
-      """
-      Vérifie si (new_nom,new_typ,new_arg,new_exp) définit bien une FORMULE 
-      licite :
-          - si oui, stocke ces paramètres comme nouveaux paramètres de la 
-            FORMULE courante et retourne 1
-          - si non, laisse les paramètres anciens de la FORMULE inchangés et 
-            retourne 0
-      """
-      test,erreur = self.object.verif_formule_python(formule=(new_nom,new_typ,new_arg,
-                                                       new_exp))
-      if test :
-          # la formule est bien correcte : on sauve les nouveaux paramètres
-          test=self.object.update_formule_python(formule=(new_nom,new_typ,new_exp,new_arg))
-      return test,erreur
-
-# ---------------------------------------------------------------------------
-#          Accès aux méthodes de vérification de l'objet FORM_ETAPE
-# ---------------------------------------------------------------------------
-
-    def verif_nom(self,nom):
-        """
-        Lance la vérification du nom passé en argument
-        """
-        return self.object.verif_nom(nom)
-
-    def verif_arguments(self,arguments):
-        """
-        Lance la vérification des arguments passés en argument
-        """
-        return self.object.verif_arguments('('+arguments+')')
-
-    def verif_formule(self,formule):
-        """
-        Lance la vérification de FORMULE passée en argument
-        """
-        return self.object.verif_formule(formule=formule)
-
-
-    def verif_formule_python(self,formule):
-        """
-        Lance la vérification de FORMULE passée en argument
-        """
-        return self.object.verif_formule_python(formule=formule)
-
-import Accas
-treeitem =FORMULETreeItem
-objet = Accas.FORM_ETAPE
diff --git a/Editeur/compojdc.py b/Editeur/compojdc.py
deleted file mode 100644 (file)
index 8572c13..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-# -*- coding: utf-8 -*-
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-#
-#
-# ======================================================================
-import Pmw
-import Objecttreeitem
-import panels
-
-from widgets import ListeChoix
-
-class JDCPanel(panels.OngletPanel):
-  def init(self):
-      """ Initialise les frame des panneaux contextuels relatifs à un JDC """
-      panneau=Pmw.PanedWidget(self,orient='horizontal')
-      panneau.add('left',min=0.4,max=0.6,size=0.5)
-      panneau.add('right',min=0.4,max=0.6,size=0.5)
-      panneau.pack(expand=1,fill='both')
-      self.bouton_com.pack_forget()
-      self.makeJDCPage(panneau.pane('left'))
-      self.makeReglesPage(panneau.pane('right'))
-      self.enlevebind()
-    
-  def makeReglesPage(self,page) :
-    regles = []
-    regles = self.node.item.get_regles()
-    texte_regles = []
-    l_regles_en_defaut=[]
-    if len(regles) > 0:
-      l_noms_etapes = self.node.item.get_l_noms_etapes()
-      i = 0
-      for regle in regles :
-        texte_regles.append(regle.gettext())
-        texte,test = regle.verif(l_noms_etapes)
-        if test == 0 : l_regles_en_defaut.append(i)
-        i = i+1
-    Liste = ListeChoix(self,page,texte_regles,liste_marques=l_regles_en_defaut,active='non',titre="Règles")
-    Liste.affiche_liste()
-    # aide associée au panneau
-    bulle_aide="""Ce panneau contient la liste des règles qui s'appliquent à l'objet
-    en cours d'édition.
-    - en noir : règles valides
-    - en rouge : règles violées"""
-    Liste.MCbox.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
-    Liste.MCbox.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-
-import treewidget
-class Node(treewidget.Node):
-    def doPaste_Commande(self,objet_a_copier):
-        """
-          Réalise la copie de l'objet passé en argument qui est nécessairement
-          une commande
-        """
-        #child = self.item.append_child(objet_a_copier,pos='first')
-        child = self.append_child(objet_a_copier,pos='first',retour='oui')
-        #if child is None : return 0
-        return child
-
-
-class JDCTreeItem(Objecttreeitem.ObjectTreeItem):
-  panel = JDCPanel
-  itemNode=Node
-  
-  def IsExpandable(self):
-    return 1
-
-  def GetText(self):
-      return  "    "
-
-  def GetLabelText(self):
-      # None --> fonte et couleur par défaut
-      return self.object.nom,None,None
-
-  def get_jdc(self):
-    """
-    Retourne l'objet pointé par self
-    """
-    return self.object
-  
-  def GetIconName(self):
-    if self.object.isvalid():
-      return "ast-green-square"
-    else:
-      return "ast-red-square"
-
-  def keys(self):
-      if self.object.etapes_niveaux != []:
-          return range(len(self.object.etapes_niveaux))
-      else:
-          return range(len(self.object.etapes))
-
-  def additem(self,name,pos):
-      cmd = self._object.addentite(name,pos)
-      return cmd
-
-  def suppitem(self,item) :
-    # item = item de l'ETAPE à supprimer du JDC
-    # item.getObject() = ETAPE ou COMMENTAIRE
-    # self.object = JDC
-    itemobject=item.getObject()
-    if self.object.suppentite(itemobject):
-       if itemobject.nature == "COMMENTAIRE" :
-          message = "Commentaire supprimé"
-       else :
-          message = "Commande " + itemobject.nom + " supprimée"
-       self.appli.affiche_infos(message)
-       return 1
-    else:
-       self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet")
-       return 0
-
-  def GetSubList(self):
-    """
-       Retourne la liste des items fils de l'item jdc.
-       Cette liste est conservee et mise a jour a chaque appel
-    """
-    if self.object.etapes_niveaux != []:
-        liste = self.object.etapes_niveaux
-    else:
-        liste = self.object.etapes
-    sublist=[None]*len(liste)
-    # suppression des items lies aux objets disparus
-    for item in self.sublist:
-       old_obj=item.getObject()
-       if old_obj in liste:
-          pos=liste.index(old_obj)
-          sublist[pos]=item
-       else:
-          pass # objets supprimes ignores
-    # ajout des items lies aux nouveaux objets
-    pos=0
-    for obj in liste:
-       if sublist[pos] is None:
-          # nouvel objet : on cree un nouvel item
-          item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj)
-          sublist[pos]=item
-       pos=pos+1
-
-    self.sublist=sublist
-    return self.sublist
-
-  def get_l_noms_etapes(self):
-      """ Retourne la liste des noms des étapes de self.object"""
-      return self.object.get_l_noms_etapes()
-
-  def get_liste_cmd(self):
-      #print "get_liste_cmd",self.object.niveau.definition
-      listeCmd = self.object.niveau.definition.get_liste_cmd()
-      return listeCmd
-
-import Accas
-treeitem =JDCTreeItem
-objet = Accas.JDC    
diff --git a/Editeur/compomacro.py b/Editeur/compomacro.py
deleted file mode 100644 (file)
index ba42307..0000000
+++ /dev/null
@@ -1,311 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import os,sys,string
-import types
-import Tkinter
-import Pmw
-import traceback
-
-# Modules Eficas
-import Objecttreeitem
-import panels
-import fontes
-import compooper
-import convert
-from widgets import askopenfilename
-from widgets import Fenetre,FenetreYesNo
-from widgets import showinfo,showerror
-
-#
-__version__="$Name:  $"
-__Id__="$Id: compomacro.py,v 1.25.10.1 2006/11/15 17:59:30 cchris Exp $"
-#
-
-class MACROPanel(panels.OngletPanel):
-  def init(self):
-    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
-    nb.pack(fill = 'both', expand = 1)
-    self.nb=nb
-    nb.add('Mocles', tab_text='Ajouter mots-clés')
-    typsd=self.node.item.object.get_type_produit()
-    ficini = self.node.item.wait_fichier_init()
-    if typsd != None:
-      nb.add('Concept', tab_text='Nommer concept')
-    if ficini == 1:
-      nb.add('Fichierinit',tab_text = 'Fichier %s' %self.node.item.get_nom())
-    nb.add('Commande', tab_text='Nouvelle Commande')
-    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
-    panneau=Pmw.PanedWidget(nb.page("Mocles"),
-                            orient='horizontal')
-    panneau.add('left',min=0.4,max=0.6,size=0.5)
-    panneau.add('right',min=0.4,max=0.6,size=0.5)
-    panneau.pack(expand=1,fill='both')
-    self.makeCommandePage(nb.page("Commande"))
-    if typsd != None:
-      self.makeConceptPage(nb.page("Concept"))
-    if ficini == 1 :
-      self.makeFichierPage(nb.page('Fichierinit'))
-    self.makeMoclesPage(panneau.pane('left'))
-    self.makeReglesPage(panneau.pane('right'))
-    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
-    nb.tab('Mocles').focus_set()
-    nb.setnaturalsize()
-    self.enlevebind()
-    self.creebind()
-    self.affiche()
-
-  def makeFichierPage(self,page):
-    """
-    Affiche la page d'onglet correspondant au changement du fichier
-    dont a besoin la macro
-    """
-    titre = Tkinter.Label(page,text="La commande %s requiert un fichier " %self.node.item.get_nom())
-    titre.place(relx=0.5,rely=0.2,anchor='center')
-    frameMain=Tkinter.Frame(page)
-    frameMain.place(relx=0.5,rely=0.4,anchor='center',relwidth=1.)
-    Tkinter.Label(frameMain,text="Fichier :").pack(side='left',padx=5)
-    self.entry = Tkinter.Entry(frameMain,relief='sunken',bg='white')
-    self.entry.pack(side='left',padx=5,fill='x',expand=1)
-    frameButtons=Tkinter.Frame(page)
-    but1=Tkinter.Button(frameButtons,text='Valider',command = self.change_fichier_init)
-    but2=Tkinter.Button(frameButtons,text='Browse',command = self.browse_fichier_init)
-    but3=Tkinter.Button(frameButtons,text='Annuler',command = self.annule_fichier_init)
-    but1.grid(row=0,column=0,padx=5,pady=5)
-    but2.grid(row=0,column=1,padx=5,pady=5)
-    but3.grid(row=0,column=2,padx=5,pady=5)
-    frameButtons.place(relx=0.5,rely=0.6,anchor='center')
-
-    if hasattr(self.node.item.object,'fichier_ini'):
-      if self.node.item.object.fichier_ini :
-        self.entry.insert(0,self.node.item.object.fichier_ini)
-    self.entry.focus()
-
-  def convert_file(self,file):
-     """
-         Methode pour convertir le fichier file dans le format courant
-     """
-     format=self.parent.appli.format_fichier.get()
-     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.parent.appli.affiche_infos("Erreur à la conversion")
-            Fenetre(self,
-                    titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier",
-                    texte = str(p.cr))
-            return None
-         return text
-     else:
-         # Il n'existe pas c'est une erreur
-         self.parent.appli.affiche_infos("Type de fichier non reconnu")
-         showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")
-         return None
-
-  def change_fichier_init(self,event=None):
-    """ 
-        Effectue le changement de fichier d'initialisation s'il est valide 
-    """
-    new_fic = self.entry.get()
-    if not os.path.isfile(new_fic) :
-      showinfo("Fichier introuvable","Le fichier que vous avez saisi\n"+
-               "n'est pas un nom de fichier valide !")
-      self.parent.appli.affiche_infos("Fichier introuvable")
-      return
-    # On convertit le fichier
-    text=self.convert_file(new_fic)
-    # Si probleme a la lecture-conversion on arrete le traitement
-    if not text:
-       return
-
-    try:
-      self.node.item.object.change_fichier_init(new_fic,text)
-      self.parent.appli.affiche_infos("Fichier %s modifié" %self.node.item.get_nom())
-    except:
-      # Erreurs lors de l'evaluation de text dans un JDC auxiliaire
-      self.parent.appli.affiche_infos("Fichier invalide")
-      l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
-      f=FenetreYesNo(self.parent.appli,titre="Fichier invalide : voulez vous retablir l ancien fichier ?",
-                             texte="Erreur dans l'interprétation du nouveau fichier ...\n\n"+string.join(l),
-                             yes="Retablir",no="Changer")
-      f.wait()
-      reponse=f.result
-      if reponse:
-         # On retablit l'ancien fichier
-         self.entry.delete(0,Tkinter.END)
-         self.node.item.object.restore_fichier_init()
-         self.parent.appli.affiche_infos("Fichier invalide ... Ancien fichier restauré")
-         fic=self.node.item.object.fichier_ini
-         if fic:
-             self.entry.insert(0,fic)
-      else:
-         self.node.item.object.force_fichier_init()
-         self.parent.appli.affiche_infos("Fichier invalide ... Nouveau fichier mémorisé")
-
-  def annule_fichier_init(self,event=None):
-    """ Restaure dans self.entry le nom de fichier_init"""
-    self.entry.delete(0,Tkinter.END)
-    if self.node.item.object.fichier_ini:
-       self.entry.insert(0,self.node.item.object.fichier_ini)
-
-  def browse_fichier_init(self,event=None):
-    """ 
-         Propose à l'utilisateur une Bsf et retourne le fichier 
-         sélectionné dans self.entry 
-    """
-    file = askopenfilename(title="Choix du fichier %s" %self.node.item.get_nom())
-    if file :
-      self.entry.delete(0,Tkinter.END)
-      self.entry.insert(0,file)
-    
-  def update_panel(self):
-    if hasattr(self,"entry"):
-       self.annule_fichier_init()
-    
-class MACROTreeItem(compooper.EtapeTreeItem):
-  """ Cette classe hérite d'une grande partie des comportements
-      de la classe compooper.EtapeTreeItem
-  """
-  panel=MACROPanel
-
-class INCLUDETreeItemBase(MACROTreeItem):
-  rmenu_specs=[("View","makeView"),
-               ("Edit","makeEdit"),
-              ]
-
-  def __init__(self,appli, labeltext, object, setfunction):
-    MACROTreeItem.__init__(self,appli, labeltext, object, setfunction)
-
-  def iscopiable(self):
-      """
-      Retourne 1 si l'objet est copiable, 0 sinon
-      """
-      return 0
-
-  def makeEdit(self,appli,node):
-    #print "makeEdit",self.object,self.object.nom
-    #print "makeEdit",self.object.jdc_aux,self.object.jdc_aux.nom
-    #print "makeEdit",self.object.jdc_aux.context_ini
-    if self.object.text_converted == 0:
-        # Le texte du fichier inclus n'a pas pu etre converti par le module convert
-        msg="Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n"
-        msg=msg+self.object.text_error
-        Fenetre(self,titre="Include non editable",texte=msg,wrap='none')
-        return
-
-    if not hasattr(self.object,"jdc_aux") or self.object.jdc_aux is None:
-       #L'include n'est pas initialise
-       self.object.build_include(None,"")
-
-    # On cree un nouvel onglet dans le bureau
-    appli.bureau.ShowJDC(self.object.jdc_aux,self.object.jdc_aux.nom,
-                             label_onglet=None,
-                             JDCDISPLAY=macrodisplay.MACRODISPLAY)
-
-  def makeView(self,appli,node):
-    if not hasattr(self.object,"jdc_aux") or self.object.jdc_aux is None:
-         showerror("Include vide",
-                 "L'include doit etre correctement initialisé pour etre visualisé")
-         return
-
-    nom=self.object.nom
-    if hasattr(self.object,'fichier_ini'):
-       if self.object.fichier_ini is None:
-          nom=nom+' '+"Fichier non défini"
-       else:
-          nom=nom+' '+self.object.fichier_ini
-    macdisp=macrodisplay.makeMacroDisplay(appli,self,nom)
-
-class INCLUDEPanel(MACROPanel):
-  def makeFichierPage(self,page):
-    """
-    Affiche la page d'onglet correspondant au changement du fichier INCLUDE
-    """
-    if not hasattr(self.node.item.object,'fichier_ini'):
-       titre = Tkinter.Label(page,text="L'INCLUDE n'a pas de fichier associé\nIl faut d'abord choisir un numero d'unité " )
-       titre.place(relx=0.5,rely=0.5,anchor='center')
-    else:
-       MACROPanel.makeFichierPage(self,page)
-
-class INCLUDETreeItem(INCLUDETreeItemBase):
-   panel=INCLUDEPanel
-
-class POURSUITETreeItem(INCLUDETreeItemBase): 
-  def makeEdit(self,appli,node):
-    if self.object.text_converted == 0:
-        # Le texte du fichier inclus n'a pas pu etre converti par le module convert
-        msg="Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n"
-        msg=msg+self.object.text_error
-        Fenetre(self,titre="Poursuite non editable",texte=msg,wrap='none')
-        return
-
-    if not hasattr(self.object,"jdc_aux") or self.object.jdc_aux is None:
-       #La poursuite n'est pas initialisee
-       text="""DEBUT()
-FIN()"""
-       self.object.build_poursuite(None,text)
-
-    # On cree un nouvel onglet dans le bureau
-    appli.bureau.ShowJDC(self.object.jdc_aux,self.object.jdc_aux.nom,
-                             label_onglet=None,
-                             JDCDISPLAY=macrodisplay.MACRODISPLAY)
-
-  def makeView(self,appli,node):
-    if not hasattr(self.object,"jdc_aux") or self.object.jdc_aux is None:
-         showerror("Poursuite vide","Une POURSUITE doit etre correctement initialisée pour etre visualisée")
-         return
-    nom=self.object.nom
-    if hasattr(self.object,'fichier_ini'):
-       if self.object.fichier_ini is None:
-          nom=nom+' '+"Fichier non défini"
-       else:
-          nom=nom+' '+self.object.fichier_ini
-    macdisp=macrodisplay.makeMacroDisplay(appli,self,nom)
-
-class INCLUDE_MATERIAUTreeItem(INCLUDETreeItemBase):
-  rmenu_specs=[("View","makeView"),
-              ]
-  def iscopiable(self):
-      """
-      Retourne 1 si l'objet est copiable, 0 sinon
-      """
-      return 1
-
-
-def treeitem(appli, labeltext, object, setfunction=None):
-   """ Factory qui retourne l'item adapté au type de macro : 
-       INCLUDE, POURSUITE, MACRO
-   """
-   if object.nom == "INCLUDE_MATERIAU":
-      return INCLUDE_MATERIAUTreeItem(appli, labeltext, object, setfunction)
-   elif object.nom == "INCLUDE":
-      return INCLUDETreeItem(appli, labeltext, object, setfunction)
-   elif object.nom == "POURSUITE":
-      return POURSUITETreeItem(appli, labeltext, object, setfunction)
-   else:
-      return MACROTreeItem(appli, labeltext, object, setfunction)
-
-import Accas
-objet=Accas.MACRO_ETAPE
-    
-import macrodisplay
diff --git a/Editeur/compomclist.py b/Editeur/compomclist.py
deleted file mode 100644 (file)
index ae92e03..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-# -*- coding: utf-8 -*-
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-#
-#
-# ======================================================================
-import types
-from Tkinter import *
-import Pmw
-
-from Noyau.N_OBJECT import ErrorObj
-import Objecttreeitem
-import panels
-import traceback
-
-class MCLISTPanel(panels.Panel):
-    def init(self):
-        test_ajout = self.node.item.ajout_possible()
-        nom_mcfact = self.node.item.get_nom()
-        if test_ajout:
-            texte = "Pour ajouter une autre occurrence du mot-clé facteur %s, cliquez ci-dessous" %nom_mcfact
-        else:
-            texte = "Vous ne pouvez pas ajouter une autre occurrence du mot-clé facteur %s ?" %nom_mcfact
-        self.label = Label(self,text = texte)
-        self.label.place(relx=0.5,rely=0.4,anchor='center')
-        if test_ajout:
-            self.but=Button(self,text="AJOUTER",command=self.ajout_occurrence)
-            self.but.place(relx=0.5,rely=0.6,anchor='center')
-            #Button(self,text="NON",command=None).place(relx=0.6,rely=0.6,anchor='center')
-
-    def ajout_occurrence(self,event=None):
-        self.node.parent.append_child(self.node.item.get_nom())
-
-import compofact
-import compoerror
-import treewidget
-
-class Node(treewidget.Node):
-    def doPaste(self,node_selected):
-        objet_a_copier = self.item.get_copie_objet()
-        child=node_selected.doPaste_MCF(objet_a_copier)
-        #print "doPaste",child
-        return child
-
-    def doPaste_MCF(self,objet_a_copier):
-        if self.item.isMCList() :
-          # le noeud courant est une MCList
-          child = self.append_child(objet_a_copier,pos='first',retour='oui')
-          #child = self.parent.append_child(objet_a_copier,pos='first',retour='oui')
-        elif self.item.isMCFact() :
-          # le noeud courant est un MCFACT
-          if self.parent.item.isMCList():
-             # le noeud selectionne est un MCFACT dans une MCList
-             child = self.parent.append_child(objet_a_copier,
-                                              pos=self.item,
-                                              retour='oui')
-          else:
-             # le noeud MCFACT selectionne n'est pas dans une MCList
-             child = self.parent.append_child(objet_a_copier,retour='oui')
-        else:
-          showinfo("Copie impossible",
-                   "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
-          self.appli.affiche_infos("Copie refusée")
-          child=None
-        #print "doPaste_MCF",child
-        return child
-
-class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
-    """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
-        du noyau Accas instances de la classe MCLIST.
-        Elle adapte ces objets pour leur permettre d'etre intégrés en tant que
-        noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
-        Cette classe délègue les appels de méthode et les accès
-        aux attributs à l'objet du noyau soit manuellement soit 
-        automatiquement (voir classe Delegate et attribut object).
-    """
-    itemNode=Node
-
-    def init(self):
-        # Si l'objet Accas (MCList) a moins d'un mot cle facteur
-        # on utilise directement ce mot cle facteur comme delegue
-        self.updateDelegate()
-
-    def updateDelegate(self):
-        if len(self._object) > 1:
-           self.setdelegate(self._object)
-        else:
-           self.setdelegate(self._object.data[0])
-
-    def panel(self,jdcdisplay,pane,node):
-        """ Retourne une instance de l'objet panneau associe a l'item (self)
-            Si la liste ne contient qu'un mot clé facteur, on utilise le panneau
-            FACTPanel.
-            Si la liste est plus longue on utilise le panneau MCLISTPanel.
-        """
-        if len(self._object) > 1:
-           return MCLISTPanel(jdcdisplay,pane,node)
-        elif isinstance(self._object.data[0],ErrorObj):
-           return compoerror.ERRORPanel(jdcdisplay,pane,node)
-        else:
-           return compofact.FACTPanel(jdcdisplay,pane,node)
-
-    def IsExpandable(self):
-        if len(self._object) > 1:
-           return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
-        else:
-           return compofact.FACTTreeItem.IsExpandable(self)
-
-    def GetSubList(self):
-        self.updateDelegate()
-        if len(self._object) <= 1:
-           self._object.data[0].alt_parent=self._object
-           return compofact.FACTTreeItem.GetSubList(self)
-
-        liste=self._object.data
-        sublist=[None]*len(liste)
-        # suppression des items lies aux objets disparus
-        for item in self.sublist:
-           old_obj=item.getObject()
-           if old_obj in liste:
-              pos=liste.index(old_obj)
-              sublist[pos]=item
-           else:
-              pass # objets supprimes ignores
-        # ajout des items lies aux nouveaux objets
-        pos=0
-        for obj in liste:
-           if sublist[pos] is None:
-              # nouvel objet : on cree un nouvel item
-              def setfunction(value, object=obj):
-                  object=value
-              item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
-              sublist[pos]=item
-              #Attention : on ajoute une information supplementaire pour l'actualisation de 
-              # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
-              # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
-              # informations de validite. alt_parent permet de remedier a ce defaut.
-              obj.alt_parent=self._object
-           pos=pos+1
-
-        self.sublist=sublist
-        return self.sublist
-
-    def GetIconName(self):
-        if self._object.isvalid():
-            return "ast-green-los"
-        elif self._object.isoblig():
-            return "ast-red-los"
-        else:
-            return "ast-yel-los"
-
-    def get_docu(self):
-        """ Retourne la clé de doc de l'objet pointé par self """
-        return self.object.get_docu()    
-
-    def iscopiable(self):
-        if len(self._object) > 1:
-           return Objecttreeitem.SequenceTreeItem.iscopiable(self)
-        else:
-           return compofact.FACTTreeItem.iscopiable(self)
-
-    def isMCFact(self):
-        """
-        Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
-        """
-        return len(self._object) <= 1
-
-    def isMCList(self):
-        """
-        Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
-        """
-        return len(self._object) > 1
-        
-    def get_copie_objet(self):
-        return self._object.data[0].copy()
-
-    def additem(self,obj,pos):
-        #print "compomclist.additem",obj,pos
-        if len(self._object) <= 1:
-           return compofact.FACTTreeItem.additem(self,obj,pos)
-
-        o= self.object.addentite(obj,pos)
-        return o
-
-    def suppitem(self,item):
-        """
-        Retire un objet MCFACT de la MCList (self.object) 
-        """
-        #print "compomclist.suppitem",item
-        obj=item.getObject()
-        if len(self._object) <= 1:
-           return compofact.FACTTreeItem.suppitem(self,item)
-
-        if self.object.suppentite(obj):
-           if len(self._object) == 1: self.updateDelegate()
-           message = "Mot-clé " + obj.nom + " supprimé"
-           self.appli.affiche_infos(message)
-           return 1
-        else:
-           self.appli.affiche_infos('Impossible de supprimer ce mot-clé')
-           return 0
-
-            
-import Accas
-objet = Accas.MCList    
-
-def treeitem(appli,labeltext,object,setfunction):
-  """ Factory qui produit un objet treeitem adapte a un objet 
-      Accas.MCList (attribut objet de ce module)
-  """
-  return MCListTreeItem(appli,labeltext,object,setfunction)
diff --git a/Editeur/componiveau.py b/Editeur/componiveau.py
deleted file mode 100644 (file)
index 0a74d55..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-
-from Tkinter import *
-import Pmw
-
-import Objecttreeitem
-import panels
-import fontes
-from Extensions import commentaire 
-
-Fonte_Niveau = fontes.canvas_gras_italique
-Fonte_Niveau_inactif = fontes.canvas_italique
-
-class NIVEAUPanel(panels.OngletPanel):
-    def init(self):
-        """ Initialise les frame des panneaux contextuels relatifs à un JDC """
-        panneau=Pmw.PanedWidget(self,orient='horizontal')
-        panneau.add('left',min=0.4,max=0.6,size=0.5)
-        panneau.add('right',min=0.4,max=0.6,size=0.5)
-        panneau.pack(expand=1,fill='both')
-        self.bouton_com.pack_forget()
-        self.makeJDCPage(panneau.pane('left'))
-        self.enlevebind()
-
-
-import treewidget
-class Node(treewidget.Node):pass
-
-
-class NIVEAUTreeItem(Objecttreeitem.ObjectTreeItem):
-  panel = NIVEAUPanel
-  itemNode=Node
-
-  def isactif(self):
-      return self.object.isactif()
-    
-  def IsExpandable(self):
-      return 1
-    
-  def GetLabelText(self):
-      """ Retourne 3 valeurs :
-        - le texte à afficher dans le noeud représentant l'item
-        - la fonte dans laquelle afficher ce texte
-        - la couleur du texte
-      """
-      if self.isactif():
-          fonte = Fonte_Niveau
-      else :
-          fonte = Fonte_Niveau_inactif
-      return self.labeltext,fonte,'#00008b'
-    
-  def GetIconName(self):
-      if self.isactif():
-          if self.object.isvalid():
-              return "ast-green-text"
-          else:
-              return "ast-red-text"
-      else:
-          return "ast-white-text"
-  
-  def keys(self):
-      if self.object.etapes_niveaux != []:
-          return range(len(self.object.etapes_niveaux))
-      else:
-          return range(len(self.object.etapes))
-
-  def GetSubList(self):
-    sublist=[]
-    for key in self.keys():
-      if self.object.etapes_niveaux != []:
-          liste = self.object.etapes_niveaux
-      else:
-          liste = self.object.etapes
-      try:
-        value = liste[key]
-      except KeyError:
-        continue
-      def setfunction(value, key=key, object=liste):
-        object[key] = value
-      item =self.make_objecttreeitem(self.appli,value.ident() + " : ", value, setfunction)
-      sublist.append(item)
-    return sublist
-
-  def additem(self,name,pos):
-      if isinstance(name,Objecttreeitem.TreeItem) :
-          cmd=self.object.addentite(name.getObject(),pos)
-      else :
-          cmd = self.object.addentite(name,pos)
-      item = self.make_objecttreeitem(self.appli,cmd.nom + " : ", cmd)
-      return item
-
-  def suppitem(self,item) :
-    # item = item de l'ETAPE à supprimer du JDC
-    # item.getObject() = ETAPE ou COMMENTAIRE
-    # self.object = JDC
-    itemobject=item.getObject()
-    if self.object.suppentite(itemobject):
-       if isinstance(item.object,commentaire.COMMENTAIRE):
-          message = "Commentaire supprimé"
-       else :
-          message = "Commande " + itemobject.nom + " supprimée"
-       self.appli.affiche_infos(message)
-       return 1
-    else:
-       self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet")
-       return 0
-
-  def GetText(self):
-      return ''
-
-    
-import Accas
-treeitem = NIVEAUTreeItem
-objet = Accas.ETAPE_NIVEAU    
diff --git a/Editeur/componuplet.py b/Editeur/componuplet.py
deleted file mode 100644 (file)
index 5098b97..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import types
-import Tkinter
-import Pmw
-from repr import Repr
-from copy import copy,deepcopy
-
-# Modules Eficas
-import Objecttreeitem
-import panels
-
-#
-__version__="$Name:  $"
-__Id__="$Id: componuplet.py,v 1.8 2005/11/03 09:03:48 eficas Exp $"
-#
-
-myrepr = Repr()
-myrepr.maxstring = 100
-myrepr.maxother = 100
-
-# Si Expandable vaut 1 les éléments du nuplet apparaissent dans l'arbre
-# Si Expandable vaut 0 les éléments n'apparaissent pas
-Expandable=1
-
-class NUPLETPanel(panels.OngletPanel):
-  def init(self):
-      """ Initialise les frame des panneaux contextuels relatifs \340 un NUPLET """
-      self.nb=Pmw.NoteBook(self,raisecommand=self.raisecmd)
-      self.nb.pack(fill = 'both', expand = 1)
-      self.nb.add("Valeurs",tab_text="Saisir valeurs")
-      self.makeValeurPage(self.nb.page('Valeurs'))
-      self.enlevebind()
-      self.creebind()
-      self.nb.setnaturalsize()
-    
-  def makeValeurPage(self,page):
-    label = Tkinter.Label(page,text='Valeurs :').pack(side=Tkinter.LEFT)
-    i=0
-    for obj in self.node.item.object.mc_liste:
-      frame_valeur=Tkinter.Frame(page)
-      frame_valeur.pack(side=Tkinter.LEFT)
-      if hasattr(obj,'definition'):
-         objet_mc=obj.definition
-      else:  
-         objet_mc=None
-      valeur=obj.valeur
-      if type(valeur) == types.InstanceType :
-        valeur=obj.getval()
-      aide=self.gen_aide(obj)
-      if objet_mc.into != None :
-        l_choix=list(objet_mc.into)
-        #obj.set_valeur(l_choix[0],evaluation='non')
-        obj.set_valeur(l_choix[0])
-        option=Pmw.OptionMenu (frame_valeur,
-                items = l_choix,
-                menubutton_width = 10,
-                command = lambda e,obj=obj,s=self:s.record_valeur(val=e,obj=obj),
-        )
-        option.pack(side=Tkinter.LEFT,padx=1)
-      else :
-        entry = Tkinter.Entry(frame_valeur,relief='sunken',width=10)
-        entry.pack(side=Tkinter.LEFT,padx=1)
-        entry.bind("<Return>",
-                lambda e,obj=obj,s=self:s.valid_valeur(e,obj=obj))
-        entry.bind("<KP_Enter>",
-                lambda e,obj=obj,s=self:s.valid_valeur(e,obj=obj))
-        if i==0:entry.focus_set()
-        #aide = Tkinter.Label(frame_valeur, text = aide)
-        #aide.place(relx=0.5,rely=0.55,anchor='n')
-        if valeur != None :
-          entry.delete(0,Tkinter.END)
-          entry.insert(0,obj.getval())
-      i=i+1
-
-  def record_valeur(self,val=None,obj=None,mess='Valeur du mot-cl\351 enregistr\351e'):
-    """ 
-      Enregistre  val comme valeur de self.node.item.object SANS faire de 
-      test de validité
-    """
-    #obj.set_valeur(val,evaluation='non')
-    obj.set_valeur(val)
-    self.parent.appli.affiche_infos(mess)
-    #self.node.parent.verif()
-    #self.node.update()
-
-  def valid_valeur(self,e,obj=None,mess='Valeur du mot-cl\351 enregistr\351e'):
-    """ 
-      Enregistre  val comme valeur de self.node.item.object avec
-      test de validité
-    """
-    valeur=e.widget.get()
-    e.widget.delete(0,Tkinter.END)
-    anc_val=obj.getval()
-    if anc_val == None:anc_val=''
-    test=obj.set_valeur(valeur)
-    if test:
-      if obj.isvalid():
-          self.parent.appli.affiche_infos('Valeur du mot-cl\351 enregistr\351e')
-          e.widget.insert(0,obj.getval())
-      else:
-          #obj.set_valeur(anc_val,evaluation='non')
-          obj.set_valeur(anc_val)
-          self.parent.appli.affiche_infos("valeur du mot-cl\351 non autoris\351e")
-          e.widget.insert(0,anc_val)
-    else:
-      print "impossible d'\351valuer : %s " %valeur
-      print "test =",test
-      self.parent.appli.affiche_infos("valeur du mot-cl\351 non autoris\351e")
-      e.widget.delete(0,Tkinter.END)
-      e.widget.insert(0,anc_val)
-          
-    #self.node.parent.verif()
-    #self.node.update()
-
-  def gen_aide(self,obj):
-    return ""
-    
-
-class NUPLETTreeItem(Objecttreeitem.ObjectTreeItem):
-  panel=NUPLETPanel
-
-  def IsExpandable(self):
-    return Expandable
-
-  def GetText(self):
-      return  ''
-
-  def isvalid(self):
-    return self.object.isvalid()
-
-  def GetIconName(self):
-    if self.object.isvalid():
-      return "ast-green-los"
-    elif self.object.isoblig():
-      return "ast-red-los"
-    else:
-      return "ast-yel-los"
-
-  def GetSubList(self):
-    if not Expandable:return []
-    sublist=[]
-    for obj in self.object.mc_liste:
-      item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, None)    
-      sublist.append(item)
-    return sublist
-
-  def additem(self,name,pos):
-    raise "NUPLET"
-
-  def suppitem(self,item) :
-    raise "NUPLET"
-
-import Accas
-treeitem=NUPLETTreeItem
-objet=Accas.MCNUPLET
diff --git a/Editeur/compooper.py b/Editeur/compooper.py
deleted file mode 100644 (file)
index 2fcbfff..0000000
+++ /dev/null
@@ -1,325 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-from Tkinter import *
-import Pmw
-import traceback
-import Objecttreeitem
-import panels
-import fontes
-
-class OPERPanel(panels.OngletPanel):
-
-  def init(self):
-    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
-    nb.pack(fill = 'both', expand = 1)
-    self.nb=nb
-    nb.add('Mocles', tab_text='Nouveau mot-clé')
-    nb.add('Concept', tab_text='Nommer concept')
-    nb.add('Commande', tab_text='Nouvelle Commande')
-    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
-    panneau=Pmw.PanedWidget(nb.page("Mocles"),
-                            orient='horizontal')
-    panneau.add('left',min=0.4,max=0.60,size=0.50)
-    panneau.add('right',min=0.4,max=0.60,size=0.50)
-    panneau.pack(expand=1,fill='both')
-    panneau.setnaturalsize()
-    self.makeCommandePage(nb.page("Commande"))
-    self.makeConceptPage_oper(nb.page("Concept"))
-    self.makeMoclesPage(panneau.pane('left'))
-    self.makeReglesPage(panneau.pane('right'))
-    #self.makeCommentairePage(nb.page("Commentaire"))
-    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
-    nb.tab('Mocles').focus_set()
-    self.nb.setnaturalsize()
-    self.enlevebind()
-    self.creebind()
-    self.affiche()
-
-  def makeConceptPage_oper(self,page):
-      """ Crée la page de saisie du nom du concept """
-      if self.node.item.is_reentrant():
-          # commande obligatoirement reentrante
-          self.makeConceptPage_reentrant(page)
-      else:
-          # commande non reentrante ou facultativement reentrante
-          self.makeConceptPage(page)
-
-  def makeConceptPage_reentrant(self,page):
-      """ Crée la page de saisie du nom de concept pour un opérateur reentrant
-      cad propose dans la liste des SD utilisées dans la commande celle(s) dont le
-      type est compatible avec celui que retourne l'opérateur """
-      liste_noms_sd = self.node.item.get_noms_sd_oper_reentrant()
-      self.listbox = Pmw.ScrolledListBox(page,
-                                         items=liste_noms_sd,
-                                         labelpos='n',
-                                         label_text="Structure(s) de données à enrichir par l'opérateur courant :",
-                                         listbox_height = 6,
-                                         selectioncommand=self.select_valeur_from_list,
-                                         dblclickcommand=lambda s=self,c=self.execConcept : s.choose_valeur_from_list(c))
-      self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
-      Label(page,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6)
-      self.valeur_choisie = StringVar()
-      self.label_valeur = Label(page,textvariable=self.valeur_choisie)
-      self.label_valeur.place(relx=0.45,rely=0.6)
-      if len(liste_noms_sd) == 1 :
-          self.valeur_choisie.set(liste_noms_sd[0])
-
-  def select_valeur_from_list(self):
-      try:
-          choix = self.listbox.getcurselection()[0]
-          self.valeur_choisie.set(choix)
-      except:
-          traceback.print_exc()
-          
-
-  def choose_valeur_from_list(self,command):
-      try:
-          choix = self.listbox.getcurselection()[0]
-          self.valeur_choisie.set(choix)
-          apply(command,(),{})
-      except:
-          traceback.print_exc()
-
-import treewidget
-class Node(treewidget.Node):
-    def doPaste(self,node_selected):
-        """
-            Déclenche la copie de l'objet item avec pour cible
-            l'objet passé en argument : node_selected
-        """
-        objet_a_copier = self.item.get_copie_objet()
-        child=node_selected.doPaste_Commande(objet_a_copier)
-        return child
-
-    def doPaste_Commande(self,objet_a_copier):
-        """
-          Réalise la copie de l'objet passé en argument qui est nécessairement
-          une commande
-        """
-        parent=self.parent
-        #child = parent.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 doPaste_MCF(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',retour='oui')
-        return child
-
-
-class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
-  """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
-      Accas. Elle leur permet d'etre affichés comme des noeuds
-      d'un arbre graphique.
-      Cette classe a entre autres deux attributs importants :
-        - _object qui est un pointeur vers l'objet du noyau
-        - object qui pointe vers l'objet auquel sont délégués les
-          appels de méthode et les accès aux attributs
-      Dans le cas d'une ETAPE, _object et object pointent vers le 
-      meme objet.
-  """
-  panel = OPERPanel
-  itemNode=Node
-  
-  def IsExpandable(self):
-      return 1
-
-  def GetIconName(self):
-      """
-      Retourne le nom de l'icône à afficher dans l'arbre
-      Ce nom dépend de la validité de l'objet
-      """
-      if not self.object.isactif():
-         return "ast-white-square"
-      elif self.object.isvalid():
-         return "ast-green-square"
-      else:
-         return "ast-red-square"
-
-  def GetLabelText(self):
-      """ Retourne 3 valeurs :
-      - le texte à afficher dans le noeud représentant l'item
-      - la fonte dans laquelle afficher ce texte
-      - la couleur du texte
-      """
-      if self.object.isactif():
-        # None --> fonte et couleur par défaut
-        return self.labeltext,None,None
-      else:
-        return self.labeltext,fontes.standard_italique,None
-      
-  def get_objet(self,name) :
-      for v in self.object.mc_liste:
-          if v.nom == name : return v
-      return None
-      
-  def get_type_sd_prod(self):
-      """
-         Retourne le nom du type du concept résultat de l'étape
-      """
-      sd_prod=self.object.get_type_produit()
-      if sd_prod:
-         return sd_prod.__name__
-      else:
-         return ""
-
-  def additem(self,name,pos):
-      #print "compooper.additem",name,pos
-      mcent = self._object.addentite(name,pos)
-      return mcent
-
-  def suppitem(self,item) :
-      # item : item du MOCLE de l'ETAPE à supprimer
-      # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList 
-      itemobject=item.getObject()
-      if itemobject.isoblig() :
-          self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
-          return 0
-      if self.object.suppentite(itemobject):
-          message = "Mot-clé " + itemobject.nom + " supprimé"
-          self.appli.affiche_infos(message)
-          return 1
-      else :
-          self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
-          return 0
-
-  def GetText(self):
-      try:
-          return self.object.get_sdname()
-      except:
-          return ''
-
-  def keys(self):
-      keys=self.object.mc_dict.keys()
-      return keys
-
-  def GetSubList(self):
-      """
-         Reactualise la liste des items fils stockes dans self.sublist
-      """
-      if self.isactif():
-         liste=self.object.mc_liste
-      else:
-         liste=[]
-
-      sublist=[None]*len(liste)
-      # suppression des items lies aux objets disparus
-      for item in self.sublist:
-         old_obj=item.getObject()
-         if old_obj in liste:
-            pos=liste.index(old_obj)
-            sublist[pos]=item
-         else:
-            pass # objets supprimes ignores
-
-      # ajout des items lies aux nouveaux objets
-      pos=0
-      for obj in liste:
-         if sublist[pos] is None:
-            # nouvel objet : on cree un nouvel item
-            def setfunction(value, object=obj):
-                object.setval(value)
-            item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
-            sublist[pos]=item
-         pos=pos+1
-
-      self.sublist=sublist
-      return self.sublist
-
-  def isvalid(self):
-      return self.object.isvalid()
-
-  def iscopiable(self):
-      """
-      Retourne 1 si l'objet est copiable, 0 sinon
-      """
-      return 1
-
-  def update(self,item):
-      if item.sd and item.sd.nom:
-         self.nomme_sd(item.sd.nom)
-
-  def nomme_sd(self,nom):
-      """ Lance la méthode de nommage de la SD """
-      oldnom=""
-      if self.object.sd != None :
-         oldnom=self.object.sd.nom
-      test,mess= self.object.nomme_sd(nom)
-      if test:self.object.parent.reset_context()
-      if (test and self.appli.dict_reels.has_key(oldnom) ):
-              self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom]
-      return test,mess
-
-  def is_reentrant(self):
-      return self.object.is_reentrant()
-    
-  def get_noms_sd_oper_reentrant(self):
-      return self.object.get_noms_sd_oper_reentrant()
-
-  def get_objet_commentarise(self):
-      """
-          Cette méthode retourne un objet commentarisé
-          représentatif de self.object
-      """
-      # Format de fichier utilisé
-      format=self.appli.format_fichier.get()
-      return self.object.get_objet_commentarise(format)
-
-  def get_objet_commentarise_BAK(self):
-      """
-          Cette méthode retourne un objet commentarisé
-          représentatif de self.object
-      """
-      import generator,string,Accas
-      # Format de fichier utilisé
-      format=self.appli.format_fichier.get()
-      g=generator.plugins[format]()
-      texte_commande = g.gener(self.object,format='beautifie')
-      # Il faut enlever la première ligne vide de texte_commande que 
-      # rajoute le generator
-      rebut,texte_commande = string.split(texte_commande,'\n',1)
-      # on construit l'objet COMMANDE_COMM repésentatif de self mais non 
-      # enregistré dans le jdc
-      commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
-                                             parent=self.object.parent)
-      commande_comment.niveau = self.object.niveau
-      commande_comment.jdc = commande_comment.parent = self.object.jdc
-
-      pos=self.object.parent.etapes.index(self.object)
-      parent=self.object.parent
-      self.object.parent.suppentite(self.object)
-      parent.addentite(commande_comment,pos)
-
-      return commande_comment
-
-  def visu_3D(self,appli,node) :
-      import TroisDPal
-      troisD=TroisDPal.TroisDPilote(node.item,appli,node.parent)
-      troisD.envoievisu()
-
-import Accas
-treeitem = EtapeTreeItem
-objet = Accas.ETAPE    
-
diff --git a/Editeur/compoparam.py b/Editeur/compoparam.py
deleted file mode 100644 (file)
index 98f7a7c..0000000
+++ /dev/null
@@ -1,248 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-   Ce module contient les classes permettant de définir les objets graphiques
-   représentant un objet de type PARAMETRE, cad le panneau et l'item de l'arbre
-   d'EFICAS
-"""
-
-# import modules Python
-from Tkinter import *
-import Pmw
-import string
-
-# import modules EFICAS
-import Objecttreeitem
-import panels
-import fontes
-
-
-Fonte_PARAMETRE = fontes.standard_italique
-Fonte_TITRE = fontes.standard_gras_souligne
-
-
-class PARAMPanel(panels.OngletPanel):
-  """
-  Classe servant à construire le panneau associé à un paramètre.
-  C'est au moyen de ce panneau que l'utilisateur peut accéder
-  aux nom et valeur du paramètre en vue éventuellement de les
-  modifier.
-  """
-
-  def init(self):
-    """
-    Initialise les frame des panneaux contextuels relatifs à un PARAMETRE
-    """
-    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
-    nb.pack(fill = 'both', expand = 1)
-    self.nb=nb
-    nb.add('Parametre', tab_text='Valeur Paramètre')
-    nb.add('Commande', tab_text='Nouvelle Commande')
-    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
-    self.makeParametrePage(nb.page("Parametre"))
-    self.makeCommandePage(nb.page("Commande"))
-    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
-    nb.tab('Parametre').focus_set()
-    nb.setnaturalsize()
-    self.make_buttons()
-    self.enlevebind()
-    self.creebind()
-    
-  def makeParametrePage(self,page):
-    """
-    Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE
-    """
-    self.frame_valeur = Frame(page)
-    #self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
-    self.frame_valeur.pack(expand=1)
-    # affichage du titre du panneau
-    self.titre = StringVar()
-    self.titre.set("PARAMETRE "+self.node.item.get_nom())
-    #Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n')
-    Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).grid(row=0,columnspan=2,padx=5,pady=5)
-    # création des labels et entries associés aux nom et valeur du paramètre
-    #Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3)
-    Label(self.frame_valeur,text= 'Nom du paramètre : ').grid(row=1,sticky=W,padx=5,pady=5)
-    self.entry_nom = Entry(self.frame_valeur)
-    #Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5)
-    Label(self.frame_valeur,text= 'Valeur du paramètre : ').grid(row=2,sticky=W,padx=5,pady=5)
-    self.entry_val = Entry(self.frame_valeur)
-    # binding sur entry_nom
-    self.entry_nom.bind("<Return>",lambda e,s=self : s.entry_val.focus())
-    self.entry_val.bind("<Return>",lambda e,s=self : s.change_valeur())
-    self.entry_nom.bind("<KP_Enter>",lambda e,s=self : s.entry_val.focus())
-    self.entry_val.bind("<KP_Enter>",lambda e,s=self : s.change_valeur())
-    # affichage des entries
-    #self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3)
-    self.entry_nom.grid(row=1,column=1,sticky=W,padx=5,pady=5)
-    #self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5)
-    self.entry_val.grid(row=2,column=1,sticky=W,padx=5,pady=5)
-    # affichage d'une phrase d'aide
-    aide = """
-    Un retour de chariot dans une zone de saisie vous permet de vérifier si
-    la valeur que vous avez entrée est valide.
-    Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
-    valeurs seront effectivement prises en compte
-    """
-    #Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n')
-    Label(self.frame_valeur,text=aide).grid(row=3,columnspan=2,padx=5,pady=5)
-    self.frame_valeur.columnconfigure(1,weight=1)
-    # affichage des nom et valeur du paramètre
-    self.display_valeur()
-    self.entry_nom.focus()
-
-  def make_buttons(self):
-    """
-    Crée les boutons du panneau
-    """
-    #self.bouton_sup.place_forget()
-    #self.bouton_doc.place_forget()
-    #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
-    #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
-    #self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
-    #self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
-    #self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
-
-    self.bouton_sup.pack_forget()
-    self.bouton_doc.pack_forget()
-    self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur)
-    self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur)
-    self.bouton_val.pack(side='left',padx=5, pady=5)
-    self.bouton_ann.pack(side='left',padx=5, pady=5)
-    self.bouton_sup.pack(side='right',padx=5, pady=5)
-
-  def change_valeur(self):
-    """
-    Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE
-    """
-    if self.parent.modified == 'n' : self.parent.init_modif()
-    new_nom = self.entry_nom.get()
-    new_val = self.entry_val.get()
-    self.node.item.set_nom(new_nom)
-    self.node.item.set_valeur(new_val)
-    self.node.update()
-    self.display_valeur()
-    
-  def display_valeur(self):
-    """
-    Affiche dans self.widget_text la valeur de l'objet PARAMETRE
-    (annule d'éventuelles modifications faite par l'utilisateur)
-    """
-    self.entry_nom.delete(0,END)
-    self.entry_val.delete(0,END)
-    self.titre.set('PARAMETRE '+self.node.item.get_nom())
-    self.entry_nom.insert(END,self.node.item.get_nom())
-    self.entry_val.insert(END,self.node.item.get_valeur())
-
-class PARAMTreeItem(Objecttreeitem.ObjectTreeItem):
-    """
-    Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
-    qui représente le PARAMETRE
-    """
-    panel = PARAMPanel
-
-    def init(self):
-      self.setfunction = self.set_valeur
-
-# ---------------------------------------------------------------------------
-#                   API du PARAMETRE pour l'arbre 
-# ---------------------------------------------------------------------------
-
-    def GetIconName(self):
-      """
-      Retourne le nom de l'icône associée au noeud qui porte self,
-      dépendant de la validité de l'objet
-      NB : un PARAMETRE est toujours valide ...
-      """
-      if self.isactif():
-          if self.isvalid():
-              return "ast-green-square"
-          else:
-              return "ast-red-square"
-      else:
-          return "ast-white-square"
-
-    def GetLabelText(self):
-        """ Retourne 3 valeurs :
-        - le texte à afficher dans le noeud représentant l'item
-        - la fonte dans laquelle afficher ce texte
-        - la couleur du texte
-        """
-        return 'Paramètre',Fonte_PARAMETRE,None
-
-    def GetText(self):
-      """
-      Retourne le texte à afficher après le nom de la commande (ici après 'paramètre')
-      Ce texte est tronqué à 25 caractères
-      """
-      texte = repr(self.object)
-      texte = string.split(texte,'\n')[0]
-      if len(texte) < 25 :
-          return texte
-      else :
-          return texte[0:24]+'...'
-
-    def GetSubList(self):
-      """
-      Retourne la liste des fils de self
-      """
-      return []
-    
-# ---------------------------------------------------------------------------
-#       Méthodes permettant la modification et la lecture des attributs
-#       du paramètre = API graphique du PARAMETRE pour Panel et EFICAS
-# ---------------------------------------------------------------------------
-
-    def get_valeur(self):
-      """
-      Retourne la valeur de l'objet PARAMETRE cad son texte
-      """
-      if self.object.valeur is None: return ''
-      else: return self.object.valeur 
-
-    def get_nom(self):
-      """
-      Retourne le nom du paramètre
-      """
-      return self.object.nom
-
-    def set_valeur(self,new_valeur):
-      """
-      Affecte valeur à l'objet PARAMETRE
-      """
-      self.object.set_valeur(new_valeur)
-
-    def set_nom(self,new_nom):
-      """
-      Renomme le paramètre
-      """
-      self.object.set_nom(new_nom)
-      #self.object.set_attribut('nom',new_nom)
-
-    def get_fr(self):
-      """
-      Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS
-      """
-      return "Définition d'un paramètre"
-    
-import Extensions.parametre
-treeitem =PARAMTreeItem
-objet = Extensions.parametre.PARAMETRE
diff --git a/Editeur/compoparameval.py b/Editeur/compoparameval.py
deleted file mode 100644 (file)
index 41c6e29..0000000
+++ /dev/null
@@ -1,311 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-Ce module contient les classes permettant de définir les objets graphiques
-représentant un objet de type PARAMETRE_EVAL, cad le panneau et l'item de l'arbre
-d'EFICAS
-"""
-
-# import modules Python
-from Tkinter import *
-import Pmw
-import string
-
-# import modules EFICAS
-import widgets
-import Objecttreeitem
-import panels
-import fontes
-
-
-Fonte_PARAMETRE = fontes.standard_italique
-Fonte_TITRE = fontes.standard_gras_souligne
-
-
-class PARAM_EVALPanel(panels.OngletPanel):
-  """
-  Classe servant à construire le panneau associé à un paramètre.
-  C'est au moyen de ce panneau que l'utilisateur peut accéder
-  aux nom et valeur du paramètre en vue éventuellement de les
-  modifier.
-  """
-
-  def init(self):
-    """
-    Initialise les frame des panneaux contextuels relatifs à un PARAMETRE
-    """
-    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
-    nb.pack(fill = 'both', expand = 1)
-    self.nb=nb
-    nb.add('Parametre', tab_text='Paramètre EVAL')
-    nb.add('Commande', tab_text='Nouvelle Commande')
-    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
-    self.makeParametrePage(nb.page("Parametre"))
-    self.makeCommandePage(nb.page("Commande"))
-    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
-    nb.tab('Parametre').focus_set()
-    nb.setnaturalsize()
-    self.make_buttons()
-    
-  def makeParametrePage(self,page):
-    """
-    Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE
-    """
-    self.frame_valeur = Frame(page)
-    self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
-    # affichage du titre du panneau
-    self.titre = StringVar()
-    self.titre.set("PARAMETRE EVAL "+self.node.item.get_nom())
-    Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n')
-    # création des labels et entries associés aux nom et valeur du paramètre
-    Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3)
-    self.entry_nom = Entry(self.frame_valeur)
-    Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5)
-    self.entry_val = Entry(self.frame_valeur)
-    # binding sur entry_nom
-    self.entry_nom.bind("<Return>",lambda e,s=self : s.verif_nom())
-    self.entry_val.bind("<Return>",lambda e,s=self : s.verif_eval())
-    self.entry_nom.bind("<KP_Enter>",lambda e,s=self : s.verif_nom())
-    self.entry_val.bind("<KP_Enter>",lambda e,s=self : s.verif_eval())
-    # affichage des entries
-    self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3)
-    self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5)
-    # affichage d'une phrase d'aide
-    aide = """
-    Un retour de chariot dans une zone de saisie vous permet de vérifier si
-    la valeur que vous avez entrée est valide.
-    Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
-    valeurs seront effectivement prises en compte
-    """
-    Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n')
-    # affichage des nom et valeur du paramètre
-    self.display_valeur()
-    self.entry_nom.focus()
-
-  def make_buttons(self):
-    """
-    Crée les boutons du panneau
-    """
-    #self.bouton_sup.place_forget()
-    #self.bouton_doc.place_forget()
-    self.bouton_sup.pack_forget()
-    self.bouton_doc.pack_forget()
-    #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
-    #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
-    self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur)
-    self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur)
-    self.bouton_val.bind("<Return>",lambda e,s=self : s.bouton_val.invoke())
-    self.bouton_val.bind("<KP_Enter>",lambda e,s=self : s.bouton_val.invoke())
-    #self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
-    #self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
-    #self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
-    self.bouton_val.pack(side='left',padx=5, pady=5)
-    self.bouton_ann.pack(side='left',padx=5, pady=5)
-    self.bouton_sup.pack(side='left',padx=5, pady=5)
-
-  def change_valeur(self):
-    """
-    Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE
-    """
-    if self.parent.modified == 'n' : self.parent.init_modif()
-    new_nom = self.entry_nom.get()
-    new_val = self.entry_val.get()
-    #self.node.item.set_nom(new_nom)
-    #self.node.item.set_valeur(new_val)
-    #self.node.update()
-    #self.display_valeur()
-    # on essaie de stocker les noms et valeurs
-    test,erreur = self.node.item.save_parametre_eval(new_nom,new_val)
-    if test :
-        # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage
-        self.node.update()
-        self.display_valeur()
-        self.parent.appli.affiche_infos("Expression EVAL %s modifiée" %self.node.item.get_nom())
-    else:
-        # la formule est incorrecte : on affiche les erreurs
-        widgets.showerror("Expression EVAL incorrecte",erreur)
-        self.parent.appli.affiche_infos("Expression EVAL %s non modifiée" %self.node.item.get_nom())
-    
-  def display_valeur(self):
-    """
-    Affiche dans self.widget_text la valeur de l'objet PARAMETRE
-    (annule d'éventuelles modifications faite par l'utilisateur)
-    """
-    self.entry_nom.delete(0,END)
-    self.entry_val.delete(0,END)
-    self.titre.set('PARAMETRE '+self.node.item.get_nom())
-    self.entry_nom.insert(END,self.node.item.get_nom())
-    self.entry_val.insert(END,self.node.item.get_valeur())
-
-  def verif_nom(self):
-    """
-    Lance la vérification du nom donné par l'utilisateur dans entry_nom
-    """
-    nom = self.entry_nom.get()
-    test,erreur = self.node.item.verif_nom(nom)
-    if not test :
-        widgets.showerror("Nom invalide",erreur)
-        self.entry_nom.focus()
-        self.entry_nom.selection_range(0,END)
-        self.parent.appli.affiche_infos("Nom du paramètre refusé")
-    else:
-        self.parent.appli.affiche_infos("Nom du paramètre accepté")
-        
-  def verif_eval(self,event=None):
-    """
-    Lance la vérification de l'expression EVAL présente dans entry_val
-    """
-    exp_eval = self.entry_val.get()
-    test,erreur = self.node.item.verif_eval(exp_eval)
-    if not test:
-        widgets.showerror("Expression EVAL invalide",erreur)
-        self.entry_val.focus()
-        self.entry_val.selection_range(0,END)
-        self.parent.appli.affiche_infos("Expression EVAL refusée")
-    else:
-        self.parent.appli.affiche_infos("Expression EVAL acceptée")
-
-class PARAM_EVALTreeItem(Objecttreeitem.ObjectTreeItem):
-    """
-    Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
-    qui représente le PARAMETRE
-    """
-    panel = PARAM_EVALPanel
-
-    def init(self):
-      self.setfunction = self.set_valeur
-
-# ---------------------------------------------------------------------------
-#                   API du PARAMETRE pour l'arbre 
-# ---------------------------------------------------------------------------
-
-    def GetIconName(self):
-      """
-      Retourne le nom de l'icône associée au noeud qui porte self,
-      dépendant de la validité de l'objet
-      NB : un PARAMETRE est toujours valide ...
-      """
-      if self.isactif():
-          if self.isvalid():
-              return "ast-green-square"
-          else:
-              return "ast-red-square"
-      else:
-          return "ast-white-square"
-
-    def GetLabelText(self):
-        """ Retourne 3 valeurs :
-        - le texte à afficher dans le noeud représentant l'item
-        - la fonte dans laquelle afficher ce texte
-        - la couleur du texte
-        """
-        return 'EVAL',Fonte_PARAMETRE,None
-
-    def GetText(self):
-      """
-      Retourne le texte à afficher après le nom de la commande (ici après 'paramètre')
-      Ce texte est tronqué à 25 caractères
-      """
-      texte = repr(self.object)
-      texte = string.split(texte,'\n')[0]
-      if len(texte) < 25 :
-          return texte
-      else :
-          return texte[0:24]+'...'
-
-    def GetSubList(self):
-      """
-      Retourne la liste des fils de self
-      """
-      return []
-    
-# ---------------------------------------------------------------------------
-#       Méthodes permettant la modification et la lecture des attributs
-#       du paramètre = API graphique du PARAMETRE pour Panel et EFICAS
-# ---------------------------------------------------------------------------
-
-    def isvalid(self):
-      """
-      Indique si l'objet pointé par self est valide
-      """
-      return self.object.isvalid()
-    
-    def get_valeur(self):
-      """
-      Retourne une chaîne représentant la valeur de l'objet PARAMETRE
-      cad de l'objet class_eval.EVAL
-      """
-      return self.object.get_valeur() or ''
-
-    def get_nom(self):
-      """
-      Retourne le nom du paramètre
-      """
-      return self.object.get_nom()
-
-    def set_valeur(self,new_valeur):
-      """
-      Affecte new_valeur à l'objet PARAMETRE_EVAL
-      """
-      # on construit le texte de la nouvelle valeur
-      new_valeur = 'EVAL("""'+new_valeur+'""")'
-      # on affecte la nouvelle valeur à self.object
-      self.object.set_valeur(new_valeur)
-
-    def set_nom(self,new_nom):
-      """
-      Renomme le paramètre
-      """
-      self.object.set_nom(new_nom)
-
-    def get_fr(self):
-      """
-      Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS
-      """
-      return "Définition d'un paramètre de type EVAL"
-
-    def verif_nom(self,nom):
-      """
-      Lance la vérification de validité du nom passé en argument
-      """
-      return self.object.verif_nom(nom = nom)
-
-    def verif_eval(self,valeur):
-      """
-      Lance la vérification de validité de l'expression EVAL passée en argument
-      """
-      return self.object.verif_eval(exp_eval = valeur)
-
-    def save_parametre_eval(self,new_nom,new_val):
-      """
-      Vérifie si (new_nom,new_val) définit bien un EVAL licite :
-          - si oui, stocke ces paramètres comme nouveaux paramètres de l'EVAL courant et retourne 1
-          - si non, laisse les paramètres anciens de EVAL inchangés et retourne 0
-      """
-      test,erreur = self.object.verif_parametre_eval(param=(new_nom,new_val))
-      if test :
-          # la formule est bien correcte : on sauve les nouveaux paramètres
-          self.object.update(param=(new_nom,new_val))
-      return test,erreur
-      
-import Extensions.parametre_eval
-treeitem =PARAM_EVALTreeItem
-objet = Extensions.parametre_eval.PARAMETRE_EVAL
diff --git a/Editeur/compoproc.py b/Editeur/compoproc.py
deleted file mode 100644 (file)
index cb24795..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-from Tkinter import *
-import Pmw
-
-import Objecttreeitem
-import panels
-import fontes
-import compooper
-
-class PROCPanel(panels.OngletPanel):
-  def init(self):
-    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
-    self.nb=nb
-    nb.pack(fill = 'both', expand = 1)
-    nb.add('Mocles', tab_text='Ajouter mots-clés')
-    nb.add('Commande', tab_text='Nouvelle Commande')
-    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
-    panneau=Pmw.PanedWidget(nb.page("Mocles"),
-                            orient='horizontal')
-    panneau.add('left',min=0.4,max=0.6,size=0.5)
-    panneau.add('right',min=0.4,max=0.6,size=0.5)
-    panneau.pack(expand=1,fill='both')
-    self.makeCommandePage(nb.page("Commande"))
-    self.makeMoclesPage(panneau.pane('left'))
-    self.makeReglesPage(panneau.pane('right'))
-    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
-    nb.setnaturalsize()
-    self.enlevebind()
-    self.creebind()
-    self.affiche()
-
-class ProcEtapeTreeItem(compooper.EtapeTreeItem):
-  panel = PROCPanel
-  
-import Accas
-treeitem = ProcEtapeTreeItem
-objet = Accas.PROC_ETAPE    
-
diff --git a/Editeur/composimp.py b/Editeur/composimp.py
deleted file mode 100644 (file)
index 7be5ba4..0000000
+++ /dev/null
@@ -1,652 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import string,types,os
-from Tkinter import *
-import Pmw
-from copy import copy,deepcopy
-import traceback
-
-# Modules Eficas
-import Objecttreeitem
-import prefs
-import panels
-import images
-from widgets import ListeChoix
-from widgets import FenetreDeSelection
-
-from Noyau.N_CR import justify_text
-from utils import substract_list
-
-      
-class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
-  from newsimppanel import newSIMPPanel
-  panel = newSIMPPanel
-
-  def init(self) :
-      self.expandable = 0
-      self.affect_panel()
-
-
-  def affect_panel(self):
-      """
-      Cette méthode attribue le panel à l'objet pointé par self en fonction de la
-      nature de la valeur demandée pour cet objet
-      """
-      from uniquepanel import UNIQUE_Panel
-      from plusieurspanel import PLUSIEURS_Panel
-
-      #print "affect_panel : ",self.nom,self.is_list(),self.has_into()
-      # Attention l ordre des if est important
-
-      if self.wait_shell():
-          # l'objet attend un shell
-          from shellpanel import SHELLPanel
-          self.panel = SHELLPanel
-      elif self.has_into():
-          # l'objet prend sa (ses) valeur(s) dans un ensemble discret de valeurs
-          if self.is_list() :
-             from plusieursintopanel import PLUSIEURS_INTO_Panel
-             self.panel = PLUSIEURS_INTO_Panel
-          else:
-             from uniqueintopanel import UNIQUE_INTO_Panel
-             self.panel = UNIQUE_INTO_Panel
-      else:
-          # l'objet prend une ou des valeurs à priori quelconques
-          if self.is_list() :
-              # on attend une liste de valeurs mais de quel type ?
-              if self.wait_assd():
-                  # on attend une liste de SD
-                  from plusieursassdpanel import PLUSIEURS_ASSD_Panel
-                  self.panel = PLUSIEURS_ASSD_Panel
-              else:
-                  # on attend une liste de valeurs de types debase (entiers, réels,...)
-                  #from plusieursbasepanel import PLUSIEURS_BASE_OR_UNELISTE_Panel
-                  #self.panel = PLUSIEURS_BASE_OR_UNELISTE_Panel
-                  from plusieursbasepanel import PLUSIEURS_BASE_Panel
-                  self.panel = PLUSIEURS_BASE_Panel
-          else:
-              # on n'attend qu'une seule valeur mais de quel type ?
-              if self.wait_co():
-                  # on attend une SD ou un objet de la classe CO (qui n'existe pas encore)
-                  from uniquesdcopanel import UNIQUE_SDCO_Panel
-                  self.panel = UNIQUE_SDCO_Panel
-              elif self.wait_assd():
-                  # on attend une SD
-                  from uniqueassdpanel import UNIQUE_ASSD_Panel
-                  from uniqueassdpanel import UNIQUE_ASSD_Panel_Reel
-                  if 'R' in self.GetType():
-                     self.panel = UNIQUE_ASSD_Panel_Reel
-                  else :
-                     self.panel = UNIQUE_ASSD_Panel
-              else:
-                  # on attend une valeur d'un type de base (entier,réel,...)
-                  if self.wait_complex():
-                      # on attend un complexe
-                      from uniquecomppanel import UNIQUE_COMP_Panel
-                      self.panel = UNIQUE_COMP_Panel
-                  else:
-                      # on attend un entier, un réel ou une string
-                      from uniquebasepanel import UNIQUE_BASE_Panel
-                      self.panel = UNIQUE_BASE_Panel
-      # cas particulier des fonctions
-      genea = self.get_genealogie()
-      if "VALE" in genea or "VALE_C" in genea:
-         if "DEFI_FONCTION" in genea :
-            from fonctionpanel import FONCTION_Panel
-            self.panel=FONCTION_Panel
-      #---------------------------------------------------------
-      # PN ajout pour lancement de Salome
-      #---------------------------------------------------------
-      if hasattr( self.appli, 'salome' ):
-          import panelsSalome
-
-          self.select_noeud_maille=0
-          self.clef_fonction="SALOME"
-          for i in range(0,len( genea )) :
-             self.clef_fonction=self.clef_fonction+"_"+ genea[i]
-             #if genea[i] == "GROUP_NO" or genea[i] == "GROUP_MA":
-          if "GROUP_NO" in genea[len(genea)-1] or "GROUP_MA" in genea[len(genea)-1]:
-             self.select_noeud_maille=1
-
-          recherche=panelsSalome.dict_classes_salome[self.panel]
-          if hasattr(recherche,self.clef_fonction):
-             self.panel=recherche
-          if self.select_noeud_maille==1 :
-             self.panel=recherche
-
-
-  #-----------------------------------------------
-  #
-  # Methodes liees aux informations sur le Panel
-  # ou au mot-clef simple
-  #
-  #-----------------------------------------------
-  # is_list
-  # get_into                a priori inutile --> commentee
-  # has_into
-  # wait_into                a priori inutile --> commentee
-  # GetMinMax
-  # GetMultiplicite
-  # GetIntervalle
-  # GetListeValeurs
-  # get_liste_possible
-
-  def is_list(self):
-      """
-          Cette méthode indique si le mot cle simple attend une liste (valeur de retour 1)
-          ou s'il n'en attend pas (valeur de retour 0)
-
-          Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
-          Dans le cas sans validateur, l'information est donnée par l'attribut max
-          de la definition du mot cle.
-          Dans le cas avec validateur, il faut combiner l'information précédente avec
-          celle issue de l'appel de la méthode is_list sur le validateur.On utilisera
-          l'operateur ET pour effectuer cette combinaison (AndVal).
-      """
-      is_a_list=0
-      min,max = self.GetMinMax()
-      assert (min <= max)
-      if max > 1 :
-                is_a_list=1
-      # Dans le cas avec validateurs, pour que le mot cle soit considéré
-      # comme acceptant une liste, il faut que max soit supérieur a 1
-      # ET que la méthode is_list du validateur retourne 1. Dans les autres cas
-      # on retournera 0 (n'attend pas de liste)
-      if self.definition.validators :
-         is_a_list= self.definition.validators.is_list() * is_a_list
-      return is_a_list 
-
-  #def get_into(self,liste_courante=None):
-  #    """
-  #        Cette méthode retourne la liste de choix proposée par le mot cle. Si le mot cle ne propose
-  #        pas de liste de choix, la méthode retourne None.
-  #        L'argument d'entrée liste_courante, s'il est différent de None, donne la liste des choix déjà
-  #        effectués par l'utilisateur. Dans ce cas, la méthode get_into doit calculer la liste des choix
-  #        en en tenant compte.
-  #        Cette méthode part du principe que la relation entre into du mot clé et les validateurs est
-  #        une relation de type ET (AndVal).
-  #    """
-  #    if not self.object.definition.validators :
-  #       return self.object.definition.into
-  #    else:
-  #       return self.object.definition.validators.get_into(liste_courante,self.definition.into)
-
-  def has_into(self):
-      """
-          Cette méthode indique si le mot cle simple propose un choix (valeur de retour 1)
-          ou s'il n'en propose pas (valeur de retour 0)
-
-          Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
-          Dans le cas sans validateur, l'information est donnée par l'attribut into
-          de la definition du mot cle.
-          Dans le cas avec validateurs, pour que le mot cle soit considéré
-          comme proposant un choix, il faut que into soit présent OU
-          que la méthode has_into du validateur retourne 1. Dans les autres cas
-          on retournera 0 (ne propose pas de choix)
-      """
-      has_an_into=0
-      if self.definition.into:
-               has_an_into=1
-      elif self.definition.validators :
-         has_an_into= self.definition.validators.has_into()
-      return has_an_into
-
-#  def wait_into(self):
-#      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
-#      prend ses valeurs dans un ensemble discret (into), 0 sinon """
-#      if self.object.definition.into != None :
-#          return 1
-#      else:
-#          return 0
-
-  def GetMinMax(self):
-      """ Retourne les valeurs min et max de la définition de object """
-      return self.object.get_min_max()
-
-  def GetMultiplicite(self):
-      """ A préciser.
-          Retourne la multiplicité des valeurs affectées à l'objet
-          représenté par l'item. Pour le moment retourne invariablement 1.
-      """
-      return 1
-
-  def GetIntervalle(self):
-      """ 
-           Retourne le domaine de valeur attendu par l'objet représenté 
-           par l'item.
-      """
-      return self.object.getintervalle()
-
-  def GetListeValeurs(self) :
-      """ Retourne la liste des valeurs de object """
-      valeurs=self.object.get_liste_valeurs()
-      try :
-        if "R" in self.object.definition.type:
-           clef=self.object.GetNomConcept()
-           if self.appli.dict_reels.has_key(clef):
-              if type(valeurs) == types.TupleType:
-                 valeurs_reelles=[]
-                 for val in valeurs :
-                    if self.appli.dict_reels[clef].has_key(val) : 
-                       valeurs_reelles.append(self.appli.dict_reels[clef][val])
-                    else :
-                       valeurs_reelles.append(val)
-              else :
-                 if self.appli.dict_reels[clef].has_key(valeurs):
-                    valeurs_reelles=self.appli.dict_reels[clef][valeurs]
-              valeurs=valeurs_reelles
-      except :
-        pass
-      return valeurs
-    
-  def get_liste_possible(self,listeActuelle=[]):
-      if hasattr(self.definition.validators,'into'):
-         valeurspossibles = self.definition.validators.into 
-      else:
-         valeurspossibles = self.get_definition().into
-
-      #On ne garde que les items valides
-      listevalideitem=[]
-      for item in valeurspossibles:
-          encorevalide=self.valide_item(item)
-          if encorevalide :
-             listevalideitem.append(item)
-
-      #on ne garde que les choix possibles qui passent le test de valide_liste_partielle
-      listevalideliste=[]
-      for item in listevalideitem:
-          encorevalide=self.valide_liste_partielle(item,listeActuelle)
-          if encorevalide :
-              listevalideliste.append(item)
-      return listevalideliste
-
-  def get_liste_param_possible(self):
-      liste_param=[]
-      for param in self.object.jdc.params:
-          encorevalide=self.valide_item(param.valeur)
-          if encorevalide:
-             type_param=param.valeur.__class__.__name__
-             for typ in self.definition.type:
-                 if typ=='R':
-                     liste_param.append(param)
-                 if typ=='I' and type_param=='int':
-                     liste_param.append(param)
-                 if typ=='TXM' and type_param=='str':
-                     liste_param.append(repr(param))
-      return liste_param
-
-  #--------------------------------------------------
-  #
-  # Methodes liees a la validite des valeurs saisies
-  #
-  #---------------------------------------------------
-  # valide_item
-  # valide_liste_partielle
-  # valide_liste_complete
-  # info_erreur_item
-  # info_erreur_liste
-  # IsInIntervalle
-  # isvalid
-
-  def valide_item(self,item):
-      """
-        La validation est réalisée directement par l'objet
-      """
-      return self.object.valide_item(item)
-     
-  def valide_liste_partielle(self,item,listecourante):
-      #On protege la liste en entree en la copiant
-      valeur=listecourante[:]
-      valeur.append(item)
-      return self.object.valid_valeur_partielle(valeur)
-
-  def valide_liste_complete (self,valeur):
-      return self.object.valid_valeur(valeur)
-
-  def valide_val (self,valeur):
-      return self.object.valid_val(valeur)
-
-  def info_erreur_item(self) :
-      commentaire=""
-      if self.definition.validators :
-         commentaire=self.definition.validators.info_erreur_item()
-      return commentaire
-      
-  def aide(self) :
-      commentaire=""
-      if self.definition.validators :
-         commentaire=self.definition.validators.aide()
-      return commentaire
-
-  def info_erreur_liste(self) :
-      commentaire=""
-      if self.definition.validators :
-         commentaire=self.definition.validators.info_erreur_liste()
-      return commentaire
-
-  def IsInIntervalle(self,valeur):
-      """ 
-          Retourne 1 si la valeur est dans l'intervalle permis par
-          l'objet représenté par l'item.
-      """
-      return self.valide_item(valeur)
-
-  def isvalid(self):
-    valide=self.object.isvalid()
-    return valide
-
-  #--------------------------------------------------
-  #
-  # Autres ...
-  #
-  #---------------------------------------------------
-  # SetText         a priori inutilisee --> commentee
-  # GetIconName
-  # GetText
-  # getval     a  priori inutilisee --> commentee
-  # set_valeur_co
-  # get_sd_avant_du_bon_type
-  # verif        a  priori inutilisee --> commentee
-  # delete_valeur_co
-
-  #def SetText(self, text):
-  #  try:
-  #    value = eval(text)
-  #    self.object.setval(value)
-  #  except:
-  #    pass
-
-  def GetIconName(self):
-    if self.isvalid():
-      return "ast-green-ball"
-    elif self.object.isoblig():
-      return "ast-red-ball"
-    else:
-      return "ast-yel-ball"
-
-  def GetText(self):
-    """
-    Classe SIMPTreeItem
-    Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet
-    pointé par self 
-    """
-    text= self.object.GetText()
-    return text
-    
-  #def getval(self):
-  #    return self.object.getval()
-
-  def set_valeur_co(self,nom_co):
-      """
-      Affecte au MCS pointé par self l'objet de type CO et de nom nom_co
-      """
-      ret = self.object.set_valeur_co(nom_co)
-      #print "set_valeur_co",ret
-      return ret
-      
-  def get_sd_avant_du_bon_type(self):
-      """
-      Retourne la liste des noms des SD présentes avant l'étape qui contient
-      le MCS pointé par self et du type requis par ce MCS
-      """
-      a=self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type)
-      return a
-
-  def get_sd_avant_du_bon_type_pour_type_de_base(self):
-      a=self.object.jdc.get_sd_avant_du_bon_type_pour_type_de_base(self.object.etape,"LASSD")
-      return a
-
-
-
-  #def verif(self):
-  #    pass
-
-  def delete_valeur_co(self,valeur=None):
-      """
-           Supprime la valeur du mot cle (de type CO)
-           il faut propager la destruction aux autres etapes
-      """
-      if not valeur : valeur=self.object.valeur
-      # XXX faut il vraiment appeler del_sdprod ???
-      #self.object.etape.parent.del_sdprod(valeur)
-      self.object.etape.parent.delete_concept(valeur)
-
-  #-----------------------------------------------
-  #
-  # Methodes liees au type de l objet attendu
-  #
-  #-----------------------------------------------
-  # wait_co 
-  # wait_geom
-  # wait_complex
-  # wait_reel
-  # wait_shell
-  # wait_assd
-  # GetType
-
-  def wait_co(self):
-      """
-      Méthode booléenne qui retourne 1 si l'objet pointé par self
-      attend un objet de type ASSD qui n'existe pas encore (type CO()),
-      0 sinon
-      """
-      return self.object.wait_co()
-
-  def wait_geom(self):
-      """
-      Méthode booléenne qui retourne 1 si l'objet pointé par self
-      attend un objet GEOM, 0 sinon
-      """
-      return self.object.wait_geom()
-    
-  def wait_complex(self):
-      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
-      attend un complexe, 0 sinon """
-      if 'C' in self.object.definition.type:
-          return 1
-      else:
-          return 0
-
-  def wait_reel(self):
-      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
-      attend un réel, 0 sinon """
-      if 'R' in self.object.definition.type:
-          return 1
-      else:
-          return 0
-        
-  def wait_shell(self):
-      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
-      attend un shell, 0 sinon """
-      if 'shell' in self.object.definition.type:
-          return 1
-      else:
-          return 0
-
-  def wait_assd(self):
-      """Méthode booléenne qui retourne 1 si l'objet pointé par self
-      attend un objet de type ASSD ou dérivé, 0 sinon """
-      return self.object.wait_assd()
-    
-  def wait_assd_or_type_base(self) :
-      boo=0
-      if len(self.object.definition.type) > 1 :
-         if self.wait_reel() :
-            boo = 1
-         if 'I' in self.object.definition.type :
-            boo = 1
-      return boo
-
-   
-  def GetType(self):
-      """ 
-          Retourne le type de valeur attendu par l'objet représenté par l'item.
-      """
-      return self.object.get_type()
-
-  #-----------------------------------------------------
-  #
-  # Methodes liees  a l evaluation de la valeur saisie
-  #
-  #-----------------------------------------------------
-  # eval_valeur
-  # eval_valeur_item
-  # is_CO
-  # traite_reel
-
-  def eval_valeur(self,valeur):
-      """ Lance l'interprétation de 'valeur' (chaîne de caractères) comme valeur de self :
-             - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...)
-             - retourne 'valeur' (chaîne de caractères) sinon
-      """
-      newvaleur=self.eval_val(valeur)
-      return newvaleur,1
-
-  def eval_valeur_BAK(self,valeur):
-      """ Lance l'interprétation de 'valeur' (chaîne de caractères) comme valeur
-      de l'objet pointé par self :
-        - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...)
-        - retourne 'valeur' (chaîne de caractères) sinon
-        - retourne None en cas d invalidite
-        - retourne invalide si 1 des objets du tuple l est
-      """
-      validite=1
-      if type(valeur) in (types.ListType,types.TupleType) :
-         valeurretour=[]
-         for item in valeur :
-             newvaleur,validiteitem=self.eval_valeur_item(item)
-             valeurretour.append(newvaleur)
-             if validiteitem == 0:
-                validite=0
-      else :
-         valeurretour,validite= self.eval_valeur_item(valeur)
-      if validite == 0 :
-         valeurretour = None
-      return valeurretour,validite
-
-  def eval_valeur_item(self,valeur):
-      """ Lance l'interprétation de 'valeur' qui doit ne pas etre un tuple 
-          - va retourner la valeur de retour et la validite
-            selon le type de l objet attendu
-          - traite les reels et les parametres 
-      """ 
-      #print "eval_valeur_item",valeur
-      if valeur==None or valeur == "" :
-         return None,0
-      validite=1
-      if self.wait_reel():
-             valeurinter = self.traite_reel(valeur)
-             if valeurinter != None :
-                valeurretour,validite= self.object.eval_valeur(valeurinter)
-             else:
-                valeurretour,validite= self.object.eval_valeur(valeur)
-      elif self.wait_geom():
-             valeurretour,validite = valeur,1
-      else :
-             valeurretour,validite= self.object.eval_valeur(valeur)
-      #print "eval_valeur_item",valeurretour,validite
-
-      if validite == 0:
-         if type(valeur) == types.StringType and self.object.wait_TXM():
-            essai_valeur="'" + valeur + "'"
-            valeurretour,validite= self.object.eval_valeur(essai_valeur)
-
-      if hasattr(valeurretour,'__class__'):
-         #if valeurretour.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'):
-         if valeurretour.__class__.__name__ in ('PARAMETRE',):
-            validite=1
-
-      #if self.wait_co():
-         # CCAR : il ne faut pas essayer de creer un concept
-         # il faut simplement en chercher un existant ce qui a du etre fait par self.object.eval_valeur(valeur)
-         #try:
-            #valeurretour=Accas.CO(valeur)
-         #except:
-            #valeurretour=None
-            #validite=0
-      # on est dans le cas où on a évalué et où on n'aurait pas du
-      if self.object.wait_TXM() :
-          if type(valeurretour) != types.StringType:
-             valeurretour=str(valeur)
-             validite=1
-      return valeurretour,validite
-      
-  def is_CO(self,valeur=None):
-      """
-         Indique si valeur est un concept produit de la macro
-         Cette méthode n'a de sens que pour un MCSIMP d'une MACRO
-         Si valeur vaut None on teste la valeur du mot cle
-      """
-      # Pour savoir si un concept est un nouveau concept de macro
-      # on regarde s'il est présent dans l'attribut sdprods de l'étape
-      # ou si son nom de classe est CO.
-      # Il faut faire les 2 tests car une macro non valide peut etre
-      # dans un etat pas tres catholique avec des CO pas encore types
-      # et donc pas dans sdprods (resultat d'une exception dans type_sdprod)
-      if not valeur:valeur=self.object.valeur
-      if valeur in self.object.etape.sdprods:return 1
-      if type(valeur) is not types.InstanceType:return 0
-      if valeur.__class__.__name__ == 'CO':return 1
-      return 0
-
-  def is_param(self,valeur) :
-      for param in self.jdc.params:
-          if (repr(param) == valeur):
-             return 1
-      return 0
-
-  def traite_reel(self,valeur):
-      """
-      Cette fonction a pour but de rajouter le '.' en fin de chaîne pour un réel
-      ou de détecter si on fait référence à un concept produit par DEFI_VALEUR
-      ou un EVAL ...
-      """
-      valeur = string.strip(valeur)
-      liste_reels = self.get_sd_avant_du_bon_type()
-      if valeur in liste_reels:
-          return valeur
-      if len(valeur) >= 3 :
-          if valeur[0:4] == 'EVAL' :
-              # on a trouvé un EVAL --> on retourne directement la valeur
-              return valeur
-      if string.find(valeur,'.') == -1 :
-          # aucun '.' n'a été trouvé dans valeur --> on en rajoute un à la fin
-          if (self.is_param(valeur)):
-              return valeur
-          else:
-              if string.find(valeur,'e') != -1:
-                 # Notation scientifique ?
-                 try :
-                    r=eval(valeur)
-                    return valeur
-                 except :
-                    return None
-              else :
-                 return valeur+'.'
-      else:
-          return valeur
-        
-
-import Accas
-treeitem = SIMPTreeItem
-objet = Accas.MCSIMP
-
index 91697925cb9111a7646f643c1fb95476ef81653b..f0cd647c8865eb9033a0020536d59794753b7dcf 100644 (file)
     Ce module sert pour charger les paramètres de configuration d'EFICAS
 """
 # Modules Python
-import os,sys,string,types
+import os, sys, string, types, re
 import traceback
 
 # Modules Eficas
-from widgets import showinfo,showerror,askretrycancel
-import utils
+from Editeur import utils
 
 class CONFIGbase:
 
@@ -42,6 +41,7 @@ class CONFIGbase:
   #                  class CONFIGStyle(CONFIGbase):
 
       self.appli = appli  
+      self.salome = appli.salome
       self.dRepMat={}
       if self.appli:
          self.parent=appli.top
@@ -52,16 +52,16 @@ class CONFIGbase:
       self.lecture_catalogues_standard()
       self.lecture_fichier_ini_utilisateur()
       self.init_liste_param()
-  
+
   #--------------------------------------
   def lecture_fichier_ini_standard(self):
   #--------------------------------------
   # Verifie l'existence du fichier "standard"
   # appelle la lecture de ce fichier
       if not os.path.isfile(self.fic_ini):
-          print self.fic_ini
-          showerror("Erreur","Pas de fichier de configuration" + self.fic_ini+"\n")
+          if self.appli.ihm=="TK" :
+              from widgets import showerror
+              showerror("Erreur","Pas de fichier de configuration" + self.fic_ini+"\n")
           print "Erreur à la lecture du fichier de configuration : %s" % self.fic_ini
           sys.exit(0)
       self.lecture_fichier(self.fic_ini)
@@ -73,13 +73,15 @@ class CONFIGbase:
   # les transforme en attribut de l 'objet  
   # utilisation du dictionnaire local pour récuperer style
       txt = utils.read_file(fic)
-      from styles import style
+      from InterfaceTK.styles import style
       d=locals()
       try:
          exec txt in d
       except:
          l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
-         showerror("Erreur","Une erreur s'est produite lors de la lecture du fichier : " + fic + "\n")
+         if self.appli.ihm=="TK" :
+              from widgets import showerror
+              showerror("Erreur","Une erreur s'est produite lors de la lecture du fichier : " + fic + "\n")
          print "Erreur à la lecture du fichier de configuration : %s" % fic
          sys.exit()
 
@@ -93,6 +95,15 @@ class CONFIGbase:
       for k in d['style'].__dict__.keys() :
           setattr(self,k,d['style'].__dict__[k])
 
+      if hasattr(self,"catalogues") :
+         for ligne in self.catalogues :
+            version=ligne[1]
+            codeSansPoint=re.sub("\.","",version)
+            chaine="rep_mat_"+codeSansPoint
+            if hasattr(self,chaine):
+               rep_mat=getattr(self,chaine)
+               self.dRepMat[version]=str(rep_mat)
+
   #--------------------------------------
   def lecture_fichier_ini_utilisateur(self):
   #--------------------------------------
@@ -176,7 +187,10 @@ class CONFIGbase:
                                   mode='query')
       if not result.resultat :
           if mode == 'considerer_annuler':
-             test = askretrycancel("Erreur","Données incorrectes !")
+             test=0
+             if self.appli.ihm=="TK" :
+                from widgets import showerror,askretrycancel
+                test = askretrycancel("Erreur","Données incorrectes !")
              if not test:
                  # XXX On sort d'EFICAS, je suppose
                  self.appli.exitEFICAS()
@@ -213,13 +227,17 @@ class CONFIG(CONFIGbase):
       self.texte = "EFICAS a besoin de certains renseignements pour se configurer\n"+\
               "Veuillez remplir TOUS les champs ci-dessous et appuyer sur 'Valider'\n"+\
               "Si vous annulez, EFICAS ne se lancera pas !!"
-      self.fichier="editeur.ini"
+      self.salome=appli.salome
+      self.code=appli.code
+      if self.salome == 0 :
+         self.fichier="editeur.ini"
+      else :
+         self.fichier="editeur_salome.ini"
       self.rep_ini = rep_ini
       self.fic_ini = os.path.join(self.rep_ini,self.fichier)
       self.titre = "Paramètres nécessaires à la configuration d'EFICAS"
       self.texte_ini = "Voici les paramètres que requiert Eficas"
       self.commande = self.creation_fichier_ini_si_possible
-      self.pref=""
       self.labels={"initialdir"    : "Répertoire initial pour Open/Save des fichiers",
                    "rep_travail"   : "Répertoire de travail",
                    "rep_mat"       : "Répertoire materiaux",
@@ -228,10 +246,14 @@ class CONFIG(CONFIGbase):
                    "catalogues"    : "Versions du code ",
                    "isdeveloppeur" : "Niveau de message ",
                    "path_cata_dev" : "Chemin d'accès aux catalogues développeurs"}
+
+      if self.code == "OPENTURNS" :
+         self.labels["DTDDirectory"]="Chemin d'accès au wraper"
                    
       self.types ={"initialdir":"rep", "rep_travail":"rep","rep_mat":"rep",
                    "path_doc": "rep","exec_acrobat":"file","exec_acrobat":"file",
-                   "catalogues" :"cata","isdeveloppeur":"YesNo","path_cata_dev":"rep"}
+                   "catalogues" :"cata","isdeveloppeur":"YesNo","path_cata_dev":"rep",
+                  "DTDDirectory":"rep"}
 
       self.YesNo={}
       self.YesNo['isdeveloppeur']=('Deboggage','Utilisation')
@@ -246,12 +268,46 @@ class CONFIG(CONFIGbase):
       self.catalogues= os.path.join(self.rep_ini,'..','Cata/cata.py')
       self.isdeveloppeur='NON'
       self.path_cata_dev=os.path.join(self.rep_user,'cata')
-
       CONFIGbase.__init__ (self,appli)
+      self.pref=""
+
+  #--------------------------------------
+  def save_params(self):
+  #--------------------------------------
+  # sauvegarde
+  # les nouveaux paramètres dans le fichier de configuration utilisateur
+  #
+      l_param=('exec_acrobat', 'rep_ini','catalogues','rep_travail','rep_mat','path_doc')
+      texte=""
+      for clef in l_param :
+          if hasattr(self,clef):
+             valeur=getattr(self,clef)
+             texte= texte + clef+"     = " + repr(valeur) +"\n"
+
+
+      # recuperation des repertoires materiaux
+      try :
+          for item in self.catalogues :
+              try :
+                  (code,version,cata,format,defaut)=item
+              except :
+                  (code,version,cata,format)=item
+              codeSansPoint=re.sub("\.","",version)
+              chaine="rep_mat_"+codeSansPoint
+              if hasattr(self,chaine):
+                 valeur=getattr(self,chaine)
+                 texte= texte + chaine+"       = '" + str(valeur) +"'\n"
+      except :
+             pass
+
+      f=open(self.fic_ini_utilisateur,'w+')
+      f.write(texte) 
+      f.close()
 
 
 class CONFIGStyle(CONFIGbase):
   def __init__(self,appli,rep_ini):
+      self.salome=appli.salome
       self.texte = "Pour prendre en compte les modifications \n"+\
                    "     RELANCER EFICAS"
       self.fichier="style.py"
@@ -260,7 +316,6 @@ class CONFIGStyle(CONFIGbase):
       self.titre = "Paramètres d affichage"
       self.texte_ini = "Voici les paramètres configurables :  "
       self.commande = self.creation_fichier_ini_si_possible
-      self.pref="style."
       self.labels={"background":"couleur du fonds", 
                    "foreground":"couleur de la police standard" ,
                    "standard":" police et taille standard",
@@ -295,6 +350,7 @@ class CONFIGStyle(CONFIGbase):
       self.YesNo={}
       self.l_param=[]
       CONFIGbase.__init__ (self,appli)
+      self.pref="style."
 
   def affichage_style_ini(self):
       self.affichage_fichier_ini()
diff --git a/Editeur/definition_cata.py b/Editeur/definition_cata.py
deleted file mode 100644 (file)
index 156ea48..0000000
+++ /dev/null
@@ -1,462 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import types
-
-# Modules Eficas
-import Accas
-from Noyau.N_CR import CR
-
-class CATALOGUE:
-    def __init__(self,modules_cata):
-        self.modules_cata = modules_cata # tuple de modules...
-        self.cr = CR()
-        self.state='undetermined'
-        self.entites_attributs = {}
-        self.entites_fils = []
-        self.build_entites_attributs()
-        self.build_entites_fils()
-
-    def build_entites_attributs(self):
-        pass
-        
-    def build_entites_fils(self):
-        niv_types = Accas.NIVEAU(nom="types",label="Liste des types")
-        niv_commandes = Accas.NIVEAU(nom="commandes",label="Liste des commandes")
-        self.entites_fils.append(make_commande_cata(niv_types,self))
-        self.entites_fils.append(make_commande_cata(niv_commandes,self))
-        for module_cata in self.modules_cata:
-            for e in dir(module_cata):
-                obj = getattr(module_cata,e)
-                if isCMD(obj):
-                    self.entites_fils[1].register(make_commande_cata(obj,self.entites_fils[1]))
-                elif type(obj) == types.ClassType:
-                    if issubclass(obj,Accas.ASSD):
-                        self.entites_fils[0].register(TYPE_CATA(obj))
-
-    def init_modif(self):
-        self.state = 'modified'
-        
-    def report(self):
-      """ Classe CATALOGUE
-          Methode pour generation d un rapport de validite
-      """
-      self.cr.purge()
-      self.cr.debut="DEBUT CR validation : " 
-      self.cr.fin="FIN CR validation :"
-      self.state = 'modified'
-      self.isvalid(cr='oui')
-      for fils in self.entites_fils[1].entites :
-        self.cr.add(fils.report())
-      return self.cr
-
-    def isvalid(self,cr='non'):
-        if self.state != 'unchanged':
-            valid=1
-            for fils in self.entites_fils[1].entites_fils:
-                if not fils.isvalid():
-                    valid=0
-                    break
-            self.valid = valid
-            self.state='unchanged'
-        return self.valid
-    
-def make_commande_cata(objet,pere):
-    if isinstance(objet,Accas.OPER):
-        return OPER_CATA(objet,pere,objet.nom)
-    elif isinstance(objet,Accas.PROC):
-        return PROC_CATA(objet,pere,objet.nom)
-    elif isinstance(objet,Accas.MACRO):
-        return MACRO_CATA(objet,pere,objet.nom)
-    elif isinstance(objet,Accas.FORM):
-        return MACRO_CATA(objet,pere,objet.nom)
-    elif isinstance(objet,Accas.NIVEAU):
-        return NIVEAU_CATA(objet,pere,objet.nom)
-    else:
-        print "Erreur dans make_commande_cata : on cherche à évaluer un objet non référencé ",objet
-
-def make_mc_cata(objet,pere,nom=''):
-    if isinstance(objet,Accas.BLOC):
-        return BLOC_CATA(objet,pere,nom)
-    elif isinstance(objet,Accas.FACT):
-        return FACT_CATA(objet,pere,nom)
-    elif isinstance(objet,Accas.SIMP):
-        return SIMP_CATA(objet,pere,nom)
-    else:
-        print "Erreur dans make_mc_cata : on cherche à évaluer un objet non référencé ",objet
-
-class TYPE_CATA:
-    def __init__(self,objet):
-        self.objet = objet
-        self.nom = objet.__name__
-
-    def isvalid(self,cr='non'):
-        return 1
-
-    def get_valeur_attribut(self,nom_attr):
-        if nom_attr == 'nom':return self.nom
-        return None
-   
-class OBJET_CATA:
-    attributs=[]
-    attributs_defauts={}
-    def __init__(self,objet,pere,nom):
-        self.objet = objet
-        self.nom = nom
-        self.pere = pere
-        self.cr = CR()
-        self.state='undetermined'
-        self.entites_fils = []
-        self.entites_attributs = {}
-        self.build_entites_attributs()
-        self.build_entites_fils()
-
-    def __str__(self):
-        s=''
-        s=self.__class__.__name__+' : '+self.nom
-        return s
-    
-    def build_entites_attributs(self):        
-        for attribut in self.attributs:
-            if hasattr(self.objet,attribut):
-                self.entites_attributs[attribut]=ATTR_CATA(attribut,getattr(self.objet,attribut))
-            else:
-                if self.attributs_defauts.has_key(attribut):
-                    self.entites_attributs[attribut]=ATTR_CATA(attribut,self.attributs_defauts[attribut])
-                else:
-                    self.entites_attributs[attribut]=ATTR_CATA(attribut,None)
-
-    def build_entites_fils(self):
-        for k,v in self.objet.entites.items():
-            self.entites_fils.append(make_mc_cata(v,self,nom=k))
-
-    def get_valeur_attribut(self,nom_attr):
-        if nom_attr in self.entites_attributs.keys():
-            return self.entites_attributs[nom_attr].valeur
-        elif nom_attr in self.attributs_defauts.keys():
-            return self.attributs_defauts[nom_attr]
-        elif nom_attr == 'domaine_validité':
-            if self.entites_attributs['into'].valeur != None :
-                return 'discret'
-            else:
-                return 'continu'
-
-    def isvalid(self,cr='non'):
-        if self.state =='unchanged':
-            return self.valid
-        else:
-            valid = 1
-            if hasattr(self,'valid'):
-                old_valid = self.valid
-            else:
-                old_valid = None
-            # on teste self lui-meme
-            if self.nom == '' or self.nom == None : valid=0
-            # on teste les attributs
-            for attribut in self.entites_attributs.values():
-                if not attribut.isvalid() : valid =0
-                break
-            # on teste les fils
-            for fils in self.entites_fils:
-                if not fils.isvalid(): valid = 0
-                break
-        self.valid = valid
-        self.state = 'unchanged'
-        if old_valid:
-            if old_valid != self.valid : self.init_modif_up()
-        return self.valid
-
-    def init_modif_up(self):
-        self.pere.state='modified'
-      
-    def report(self):
-        self.cr.purge()
-        self.cr.debut="Debut "+self.__class__.__name__+' : '+self.nom
-        self.cr.fin = "Fin "+self.__class__.__name__+' : '+self.nom
-        self.isvalid(cr='oui')
-        for attribut in self.entites_attributs.values():
-            self.cr.add(attribut.report())
-        for fils in self.entites_fils :
-            self.cr.add(fils.report())
-        return self.cr
-        
-    def set_valeur_attribut(self,nom_attr,valeur):
-        """
-        Affecte la valeur 'valeur' à l'attribut de nom 'nom-attr'
-        """
-        # il faudra être prudent sur les changements de nom : interdire de changer
-        # le nom d'un mot-clé qui serait utilisé dans une règle ???
-        self.entites_attributs[nom_attr].valeur = valeur
-        
-    def addentite(self,name,pos):
-        """
-        Permet d'ajouter un nouveau fils a self
-        """
-        self.init_modif()
-        if name == 'new_simp':
-            objet = Accas.SIMP(typ=('bidon',))
-        objet_cata = make_mc_cata(objet,self)
-        self.entites_fils.insert(pos,objet_cata)
-        return objet_cata
-
-    def init_modif(self):
-        self.state = 'modified'
-        if hasattr(self,'pere'):
-            self.pere.init_modif()
-
-    def verif_nom(self,cr='non'):
-        """
-        Méthode appelée par EFICAS et ACCAS
-        Booléenne : retourne 1 si l'attribut nom est valide, 0 sinon
-        """
-        if self.entites_attributs['nom'].valeur == '':
-            if cr == 'oui' : self.cr.fatal("L'objet de type %s n'est pas nommé" %self.__class__.__name__)
-            return 0
-        return 1
-    
-    def verif_defaut(self,cr='non'):
-        """
-        Méthode de vérification de validité du défaut
-        """
-        defaut = self.get_valeur_attribut('defaut')
-        if self.get_valeur_attribut('domaine_validite') == 'discret' :
-            if defaut not in self.get_valeur_attribut('into'):
-                if cr == 'oui' : self.cr.fatal("La valeur %s n'est pas autorisée" %str(defaut))
-                return 0
-            return 1
-        else:
-            if defaut == None : return 1
-            typ = self.get_valeur_attribut('type')
-            # on attend un TXM ?
-            if 'TXM' in typ :
-                if type(defaut) == types.StringType : return 1
-            val_min = self.get_valeur_attribut('val_min')
-            val_max = self.get_valeur_attribut('val_max')
-            # on attend un reel ?
-            if 'R' in typ :
-                if type(defaut) == types.StringType:
-                    try :
-                        nb = string.atof(defaut)
-                    except:
-                        nb=None
-                else:
-                    nb = defaut
-                if nb != None :
-                    test = 1
-                    if val_min != '**' : test = (nb >= val_min)
-                    if val_max != '**' : test = test*(nb <= val_max)
-                    if test : return 1
-            # on attend un entier ?
-            if 'I' in typ :
-                if type(defaut)==types.StringType:
-                    try:
-                        nb = string.atoi(defaut)
-                    except:
-                        pass
-                else:
-                    nb = defaut
-                if nb != None :
-                    test = 1
-                    if val_min != '**' : test = (nb >= val_min)
-                    if val_max != '**' : test = test*(nb <= val_max)
-                    if test : return 1
-            # si on passe par là, c'est que l'on n'a pas su évaluer defaut
-            if cr == 'oui' : self.cr.fatal("La valeur %s n'est pas une valeur permise" %str(defaut))
-            return 0
-
-    def verif_val_min(self,cr='non'):
-        """
-        Méthode de vérification de val_min.
-        Booléenne : retourne 1 si val_min est valide, 0 sinon
-        """
-        val_min = self.get_valeur_attribut('val_min')
-        if not val_min :
-            if cr == 'oui' : self.cr.fatal('val_min ne peut valoir None')
-            return 0
-        if val_min == '**': return 1
-        # val_min doit à ce stade être :
-        # - soit un entier ou un réel
-        # - soit une chaîne de caractères représentant un entier ou un réel (provient d'EFICAS)
-        if type(val_min) == types.StringType :
-            try :
-                val_min = string.atoi(val_min)
-            except:
-                try:
-                    val_min = string.atof(val_min)
-                except:
-                    if cr == 'oui' : self.cr.fatal("%s n'est ni un entier ni un réel" %str(val_min))
-                    return 0
-        # A ce stade, val_min doit être un entier ou un réel : on vérifie ...
-        if type(val_min) not in (types.IntType,types.FloatType) :
-            if cr == 'oui' : self.cr.fatal("%s n'est pas d'un type autorisé" %str(val_min))
-            return 0
-        # A ce stade valeur est un entier ou un réel : on peut comparer à val_max
-        val_max = self.get_valeur_attribut('val_max')
-        if val_max == '**' or val_min < val_max : return 1
-        # erreur : val_min est supérieur à val_max !!!
-        if cr == 'oui' : self.cr.fatal("%s n'est pas inférieur à %s" %(str(val_min),str(val_max)))
-        return 0
-
-    def verif_val_max(self,cr='non'):
-        """
-        Méthode de vérification de val_max.
-        Booléenne : retourne 1 si val_max est valide, 0 sinon
-        """
-        val_max = self.get_valeur_attribut('val_max')
-        if not val_max :
-            if cr == 'oui' : self.cr.fatal('val_max ne peut valoir None')
-            return 0
-        if val_max == '**': return 1
-        # val_max doit à ce stade être :
-        # - soit un entier ou un réel
-        # - soit une chaîne de caractères représentant un entier ou un réel (provient d'EFICAS)
-        if type(val_max) == types.StringType :
-            try :
-                val_max = string.atoi(val_max)
-            except:
-                try:
-                    val_max = string.atof(val_max)
-                except:
-                    if cr == 'oui' : self.cr.fatal("%s n'est ni un entier ni un réel" %str(val_max))
-                    return 0
-        # A ce stade, val_max doit être un entier ou un réel : on vérifie ...
-        if type(val_max) not in (types.IntType,types.FloatType) :
-            if cr == 'oui' : self.cr.fatal("%s n'est pas d'un type autorisé" %str(val_max))
-            return 0
-        # A ce stade valeur est un entier ou un réel : on peut comparer à val_max
-        val_min = self.get_valeur_attribut('val_min')
-        if val_min == '**' or val_min < val_max : return 1
-        # erreur : val_min est supérieur à val_max !!!
-        if cr == 'oui' : self.cr.fatal("%s n'est pas supérieur à %s" %(str(val_max),str(val_min)))
-        return 0
-    
-class OPER_CATA(OBJET_CATA):
-    attributs = ['ang','docu','fr','niveau','nom','op','op_init','reentrant','regles','repetable','sd_prod']
-  
-class PROC_CATA(OBJET_CATA):
-    attributs = ['ang','docu','fr','niveau','nom','op','op_init','regles','repetable']
-
-class MACRO_CATA(OBJET_CATA):
-    attributs = ['ang','docu','fr','niveau','nom','op','op_init','reentrant','regles','repetable','sd_prod']
-    
-class BLOC_CATA(OBJET_CATA):
-    attributs = ['ang','condition','docu','fr','nom','regles']
-
-class FACT_CATA(OBJET_CATA):
-    attributs=['ang','defaut','docu','fr','max','min','nom','regles','statut']
-
-class SIMP_CATA(OBJET_CATA):
-    attributs=['ang','defaut','docu','fr','homo','into','max','min','nom','position','statut','type','val_min','val_max']
-    attributs_defauts={'ang':'','defaut':None,'fr':'','homo':1,'into':None,'max':1,'min':1,'nom' : '','position':'local',
-                       'regles':None,'statut':'f','type':None,'val_min':'**','val_max':'**','docu':''}
-                
-    def build_entites_fils(self):
-        pass
-
-    def isvalid(self,cr='non'):
-        """
-        Mde appelpar l'externe (EFICAS et ACCAS).
-        Boolne : retourne 1 si l'objet est valide, 0 sinon
-        """
-        if self.state == 'unchanged':
-            return self.valid
-        else:
-            valid = 1
-            valid = valid*self.verif_nom(cr=cr)
-            valid = valid*self.verif_defaut(cr=cr)
-            valid = valid*self.verif_val_min(cr=cr)*self.verif_val_max(cr=cr)
-            if hasattr(self,'valid'):
-                old_valid = self.valid
-            else:
-                old_valid = None
-            self.valid = valid
-            self.state='unchanged'
-            if old_valid :
-                if old_valid != self.valid : self.init_modif_up()
-            return self.valid
-
-class NIVEAU_CATA(OBJET_CATA):
-  def __init__(self,objet,pere,nom):
-    self.pere = pere
-    self.nom = nom
-    self.state = 'undetermined'
-    self.cr = CR()
-    self.objet = objet
-    self.entites_fils=[]
-    self.entites_attributs = {}
-
-  def register(self,fils):
-    """ 
-        Enregistre la commande 굡pe :
-         - si editmode = 0 : on est en mode relecture d'un fichier de commandes
-         auquel cas on ajoute etape ࡬a fin de la liste self.etapes
-         - si editmode = 1 : on est en mode ajout d'굡pe depuis eficas auquel cas
-         cette mode ne fait rien, c'est addentité enregistre etape à¡¬a bonne place
-         dans self.etapes 
-    """
-    self.entites_fils.append(fils)
-
-  def unregister(self,etape):
-    self.entites_fils.remove(etape)
-
-  def isvalid(self,cr='non'):
-    """ Mode boolne qui retourne 0 si le niveau est invalide, 1 sinon """
-    if self.state == 'unchanged':
-        return self.valid
-    else:
-        valid = 1
-        if len(self.entites_fils) == 0:
-            #valid = self.Accas.valide_vide
-            valid = 1
-        else:
-            for commande in self.entites_fils :
-                if hasattr(commande,'isvalid'):
-                    if not commande.isvalid() :
-                        valid = 0
-                        break
-                else:
-                    print str(commande)," n'a pas de methode isvalid"
-        if hasattr(self,'valid'):
-            old_valid = self.valid
-        else:
-            old_valid = None
-        self.valid = valid
-        self.state='unchanged'
-        if old_valid:
-            if old_valid != self.valid : self.init_modif_up()
-        return self.valid
-            
-
-class ATTR_CATA(OBJET_CATA):
-    def __init__(self,nom,valeur=None):
-        self.nom = nom
-        self.valeur = valeur
-        self.cr = CR()
-        self.state='undetermined'
-        self.entites_attributs={}
-        self.entites_fils=()
-
-    def isvalid(self,cr='non'):
-        return 1
-
-def isCMD(cmd):
-   return isinstance(cmd,Accas.OPER) or isinstance(cmd,Accas.PROC) or isinstance(cmd,Accas.MACRO) or isinstance(cmd,Accas.FORM)
-
diff --git a/Editeur/eficas.py b/Editeur/eficas.py
deleted file mode 100644 (file)
index caf47fb..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-    Ce module contient la classe EFICAS qui est l'application
-    proprement dite. Elle est dérivée de la classe APPLI
-"""
-# Modules Python
-import string
-from Tkinter import Label
-import Pmw
-import traceback
-
-# Modules Eficas
-from widgets import showerror
-from widgets import askopenfilename
-import patches
-import appli
-from widgets import Fenetre
-
-class EFICAS(appli.APPLI):
-
-  try:
-     from prefs import appli_composants
-  except:
-     appli_composants=['readercata','bureau','browser','options']
-
-  def get_texte_infos(self):
-     texte=appli.APPLI.get_texte_infos(self)
-     texte = texte + 'Catalogue utilisé : %s\n' %  self.bureau.fic_cata
-     return texte
-
-  def exitEFICAS(self):
-     self.bureau.exitEFICAS()
-
-  def getBureau(self):
-      return self.bureau
-      
-  def browse(self,result):
-      if result == 'Browse':
-        self.ulfile = askopenfilename(parent=self.dialog.component('hull'),title="Choix fichier :")
-        self._ulfile.setentry(self.ulfile)
-      elif result == 'OK':
-        self.ulfile = self._ulfile.get()
-        # On utilise le convertisseur défini par format_fichier
-        source=self.get_source(self.ulfile)
-        if source:
-           # On a réussi à convertir le fichier self.ulfile
-           self.dialog.deactivate(result)
-           self.text=source
-        else:
-           # Une erreur a été rencontrée
-           self.text=''
-      elif result == 'Cancel':
-        self._ulfile.setentry('')
-        self.dialog.deactivate(result)
-        self.ulfile = None
-        self.text=""
-
-  def get_file(self,unite=None,fic_origine = ''):
-      """ 
-          Retourne le nom du fichier correspondant a l unite logique unite (entier)
-      """
-      if unite :
-          titre = "Choix unite %d " %unite
-      else:
-          titre = "Choix d'un fichier de poursuite"
-      self.dialog=Pmw.Dialog(self.top,
-                             title = titre,
-                             buttons = ('OK', 'Browse','Cancel'),
-                             defaultbutton='OK',
-                             command=self.browse,
-                             )
-      self.dialog.withdraw()
-      if 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
-      else:
-          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'
-      if self.test == 1: raise Exception("Erreur: "+texte)
-      w = Label(self.dialog.interior(),
-                text = texte)
-      w.pack(padx = 10, pady = 10)
-      if unite != None :
-          labeltexte = 'Fichier pour unite %d :' % unite
-      else:
-          labeltexte = 'Fichier à poursuivre :'
-      self._ulfile=Pmw.EntryField(self.dialog.interior(),
-                                  labelpos = 'w',
-                                  label_text = labeltexte,
-                                  )
-      self._ulfile.pack(fill='x', expand=1, padx=10, pady=5)
-      self._ulfile.component('entry').focus_set()
-      self.dialog.activate(geometry='centerscreenalways')
-      return self.ulfile,self.text
-
-  def get_source(self,file):
-      import convert
-      format=self.format_fichier.get()
-      # 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 à la conversion")
-            Fenetre(self,
-                    titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier",
-                    texte = str(p.cr)).wait()
-            return text
-         return text
-      else:
-         # Il n'existe pas c'est une erreur
-         self.affiche_infos("Type de fichier non reconnu")
-         showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")
-         return None
-
-  def affiche_texte(self,entete,texte):
-      """Cette methode ouvre une fenetre modale dans laquelle on affiche un texte
-      """
-      self.affiche_infos(entete)
-      f=Fenetre(self, titre=entete, texte = texte)
-      f.wait()
-
diff --git a/Editeur/eficas_go.py b/Editeur/eficas_go.py
deleted file mode 100644 (file)
index 84e8e7a..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-    Ce module permet de lancer l'application EFICAS en affichant
-    un ecran Splash pour faire patienter l'utilisateur
-"""
-# Modules Python
-import sys
-import Tkinter
-
-# Modules Eficas
-import prefs
-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
-
-import styles
-import import_code
-import splash
-import session
-
-def lance_eficas(code=None,fichier=None):
-    """
-        Lance l'appli EFICAS
-    """
-    # Analyse des arguments de la ligne de commande
-    options=session.parse(sys.argv)
-    code=options.code
-
-    root = Tkinter.Tk()
-    splash.init_splash(root,code=code,titre="Lancement d'EFICAS pour %s" %code)
-    splash._splash.configure(text="Chargement d'EFICAS en cours.\n Veuillez patienter ...")
-    import eficas
-    eficas.EFICAS(root,code=code)
-
-    root.mainloop()
-
diff --git a/Editeur/eficas_test.py b/Editeur/eficas_test.py
deleted file mode 100644 (file)
index 6ff3db5..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-    Ce module permet de lancer l'application EFICAS en affichant
-    un ecran Splash pour faire patentier l'utilisateur
-"""
-# Modules Python
-import sys
-import Tkinter
-
-# Modules Eficas
-import import_code
-import session
-
-def lance_eficas(code,fichier=None):
-    """
-        Lance l'appli EFICAS
-    """
-    options=session.parse(sys.argv)
-    root = Tkinter.Tk()
-    import eficas
-    if fichier :
-        a=eficas.EFICAS(root,code=code,fichier = fichier,test=1)
-        bureau=a.getBureau()
-    else:
-        eficas.EFICAS(root,code=code)
-
-    print bureau.JDC.report()
-    bureau.closeJDC()
-
-def duplique_fichier(code,fichier=None,root=None):
-    print code
-    print fichier
-    if root == None :
-       root = Tkinter.Tk()
-    import eficas
-    import convert
-    import generator
-    import utils
-    import string
-
-    from Editeur import session
-    if fichier != None :
-       options=session.parse(sys.argv+[fichier])
-    else :
-       options=session.parse(sys.argv)
-
-    appli=eficas.EFICAS(root,code=code,fichier = fichier,test=1)
-    format='homard'
-    if convert.plugins.has_key(format):
-       p=convert.plugins[format]()
-       p.readfile(fichier)
-       text=p.convert('exec',appli)
-       print text
-       text2=convertir(text)
-       print text2
-       cata=appli.readercata.cata
-       J=cata[0].JdC(procedure=text2,cata=cata)
-       J.analyse()
-       fileName=fichier+"_init"
-       if generator.plugins.has_key(format):
-          g=generator.plugins[format]()
-          jdc_formate=g.gener(J,format='beautifie')
-          jdc_fini = string.replace(jdc_formate,'\r\n','\n')
-          utils.save_in_file(fileName+".comm",jdc_fini,None)
-
-def convertir(texte):
-    import re
-    dict_change={"FICHIER_MED_MAILLAGE_N=":"FICHIER_MED_MAILLAGE_NP1","NOM_MED_MAILLAGE_N=":"NOM_MED_MAILLAGE_NP1"}
-    for mot in dict_change.keys():
-        if( re.search(mot,texte)):
-          indicenouveau=re.search(mot,texte).end()
-          indicefinnouveau= texte.find(",",indicenouveau)
-          avant=dict_change[mot]
-          if( re.search(avant,texte)):
-             indiceancien=re.search(avant,texte).end()+1
-             indicefinancien= texte.find(",",indiceancien)
-             valeur=texte[indiceancien:indicefinancien]
-             texte=texte[0:indicenouveau]+valeur+texte[indicefinnouveau:]
-    liste_mot_clef_None=['CRIT_RAFF_ABS','CRIT_RAFF_REL','CRIT_RAFF_PE','CRIT_DERA_ABS','CRIT_DERA_REL','CRIT_DERA_PE','NITER','NOM_MED_MAILLAGE_NP1','FICHIER_MED_MAILLAGE_NP1']
-
-    for mot in liste_mot_clef_None:
-        if( re.search(mot,texte)):
-           indice=re.search(mot,texte).end()+1
-           indicefin= texte.find(",",indice)
-           texte=texte[0:indice]+"None"+texte[indicefin:]
-    return texte
-        
diff --git a/Editeur/faq.py b/Editeur/faq.py
deleted file mode 100644 (file)
index 30764b5..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-   Ce module sert a afficher le texte du FAQ EFICAS
-   et à attendre l'acquittement par l'utilisateur
-"""
-# Modules Python
-import os
-import Pmw
-from Tkinter import END
-
-# Modules Eficas
-import prefs
-import fontes
-
-class FAQ:
-   def __init__(self,parent):
-      self.parent=parent
-      self.Dialog = Pmw.Dialog(parent,
-                               buttons=('Lu',),
-                               title="FAQs et limitations d'EFICAS",
-                               command = self.lu_FAQ)
-      txt = open(os.path.join(prefs.INSTALLDIR,'Editeur','faqs.txt'),'r').read()
-      Texte = Pmw.ScrolledText(self.Dialog.interior(),
-                               text_font=fontes.standard)
-      Texte.insert(END,txt)
-      Texte.pack(expand=1,fill='both')
-      self.Dialog.activate(geometry = 'centerscreenalways')
-
-   def lu_FAQ(self,event=None):
-      self.Dialog.destroy()
-
-def affiche(parent):
-   FAQ(parent)
diff --git a/Editeur/fenetre_mc_inconnus.py b/Editeur/fenetre_mc_inconnus.py
deleted file mode 100644 (file)
index 35b118a..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-"""
-# Modules Python
-from Tkinter import *
-import copy
-
-# Modules Eficas
-from centerwindow import centerwindow
-
-class fenetre_mc_inconnus :
-    """
-       Cette classe sert à construire la fenêtre qui apparaît dans EFICAS 
-       lorsque des mots-clés inconnus ont été trouvés dans le fichier de 
-       commandes que l'on est en train de lire
-    """
-    def __init__(self,l_mc):
-       self.l_mc = l_mc
-       self.fenetre = Toplevel()
-       self.fenetre.withdraw()
-       self.fenetre.geometry("400x400+0+0")
-       self.fenetre.title("Mots-clés inconnus dans le fichier de commandes")
-       self.init()
-       self.init_frames()
-       self.init_label()
-       self.init_liste_mc()
-       self.init_boutons()
-       centerwindow(self.fenetre)
-       self.fenetre.deiconify()
-
-    def init(self) :
-       """
-       Initialise les structures de données
-       """
-       self.new_l_mc = []
-       for mc in self.l_mc :
-           self.new_l_mc.append(copy.copy(mc))
-       self.mc_courant = None
-       self.var_quit = IntVar(0)
-       self.entry_courante = None
-               
-    def init_frames(self):
-       """
-       Création des 2 frames devant contenir le label et la liste des MC inconnus 
-       """
-       self.frame1 = Frame(self.fenetre)
-       self.frame2 = Frame(self.fenetre)
-       self.frame3 = Frame(self.fenetre)
-       self.frame1.place(relx=0,rely=0,relheight=0.2,relwidth=1)
-       self.frame2.place(relx=0,rely=0.2,relheight=0.6,relwidth=1)
-       self.frame3.place(relx=0,rely=0.8,relheight=0.2,relwidth=1)
-    
-    def init_label(self):
-       """
-       Affichage du label dans la zone concernée
-       """
-       txt = " Un ou plusieurs mots-clés inconnus ont été trouvés dans le fichier de commandes."
-       #txt = txt + "En cliquant sur leur nom, vous pourrez soit corriger l'orthographe soit supprimer ce mot-clé"
-       self.fenetre.update_idletasks()
-       Label(self.frame1,
-             text = txt,
-             wraplength = int(self.frame1.winfo_width()*0.8),
-             justify = 'center').place(relx=0.5,rely=0.5,anchor='center')   
-    
-    
-    def init_liste_mc(self):
-       """
-       Affiche les mots-clés à modifier ou supprimer  
-       """
-       i=0
-       self.widgets=[]
-       for mc in self.l_mc :
-           # mc est une liste :
-           # mc contient comme premiers arguments l'étape et éventuellement les blocs, mcfact ...
-           # et contient comme 2 derniers éléments le nom du mot-clé et sa valeur
-           path_mc = self.get_path(mc[0:-2])
-           nom_mc  = mc[-2]
-           lab=Label(self.frame2,text = path_mc)
-           lab.grid(row=i,column=1,sticky=W)
-           e = Entry(self.frame2)
-           e.grid(row=i,column=0,sticky=W)
-           e.insert(END,nom_mc)
-           #e.bind("<Button-1>",lambda event,en=e,m=mc,s=self : s.select_mc(m,en))
-           #e.bind("<Return>",lambda e,s=self : s.modifie_mc())
-           e.configure(relief='flat',state='disabled')
-           self.widgets.append((e,lab))
-           i=i+1
-
-    def init_boutons(self):
-        """
-        Construit les boutons Modifier,Supprimer et Fermer 
-        Les deux premiers sont inactifs tant qu'aucun mot-clé n'est sélectionné
-        """
-        self.b_mod = Button(self.frame3,
-                            text = "Modifier",
-                            disabledforeground = 'grey35',
-                            state='disabled',
-                            command = self.modifie_mc)
-        self.b_sup = Button(self.frame3,
-                            text = "Supprimer",
-                            disabledforeground = 'grey35',
-                            state='disabled',
-                            command = self.supprime_mc)
-        self.b_quit = Button(self.frame3,
-                            text = "Fermer",
-                            command = self.quit)
-        #self.b_mod.place(relx=0.25,rely=0.5,anchor='center')
-        #self.b_sup.place(relx=0.50,rely=0.5,anchor='center')
-        #self.b_quit.place(relx=0.75,rely=0.5,anchor='center')
-        self.b_quit.place(relx=0.50,rely=0.5,anchor='center')
-                                
-    def wait_new_list(self):
-        """
-        Cette méthode rend cette toplevel bloquante.
-        Dès que la variable var_quit est modifiée, on continue l'exécution de cette
-        méthode (et on quitte)
-        """
-        self.fenetre.wait_variable(self.var_quit)
-        self.fenetre.destroy()
-        return self.new_l_mc
-                           
-    def get_path(self,l_o):
-        """
-        Construit la chaîne de caractère contenant le chemin d'accès complet du mot-clé
-        """
-        txt = ''
-        for o in l_o :
-           txt = txt + o.nom+'/'
-        # on enlève le dernier slash en trop
-        txt = txt[0:-1]
-        return txt    
-    
-    def select_mc(self,mc,entry):
-        """
-        Enregistre le mot-clé passé en argument comme mot-clé courant
-        Active les boutons Modifier et Supprimer
-        """
-        self.desactive_entry()
-        self.mc_courant     = mc
-        self.entry_courante = entry
-        self.active_boutons()
-        self.active_entry()
-
-    def modifie_mc(self):
-        """
-        Modifie le nom du mot-clé en prenant la nouvelle valeur lue dans entry_courante
-        """
-        new_nom_mc = self.entry_courante.get()
-        index = self.l_mc.index(self.mc_courant)
-        new_mc = self.new_l_mc[index]
-        new_mc[-2] = new_nom_mc
-        objet_pere = self.mc_courant[-3]
-        
-        self.desactive_boutons()
-        self.desactive_entry()
-
-    def supprime_mc(self):
-        """
-        Supprime le mot-clé courant de la liste
-        """
-        index = self.l_mc.index(self.mc_courant)
-        self.new_l_mc[index] = None
-        e,lab=self.widgets[index]
-        e.grid_remove()
-        lab.grid_remove()
-        self.desactive_boutons()
-        self.desactive_entry()        
-        
-    def desactive_boutons(self):
-        """
-        Désactive les boutons Modifier et Supprimer
-        """
-        self.b_mod.configure(state='disabled')
-        self.b_sup.configure(state='disabled')
-                
-    def active_boutons(self):
-        """
-        Active les boutons Modifier et Supprimer
-        """
-        self.b_mod.configure(state='normal')
-        self.b_sup.configure(state='normal')
-
-    def desactive_entry(self):
-        """
-        Désactive l'entry courante si elle existe
-        """
-        if self.entry_courante :
-           self.entry_courante.configure(state='disabled',relief='flat')
-           
-    def active_entry(self):
-        """
-        Active l'entry courante si elle existe
-        """
-        if self.entry_courante :
-           self.entry_courante.configure(state='normal',relief='sunken')
-                      
-    def quit(self):
-        """
-        Permet de fermer la fenêtre
-        """
-        self.var_quit.set(1)
-
-if __name__ == '__main__':
-   fenetre_mc_inconnus(('toto','titi'))
diff --git a/Editeur/fonctionpanel.py b/Editeur/fonctionpanel.py
deleted file mode 100644 (file)
index a566158..0000000
+++ /dev/null
@@ -1,293 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import string,types,os
-from Tkinter import *
-import Pmw
-from copy import copy,deepcopy
-import traceback
-
-# Modules Eficas
-import Objecttreeitem
-import prefs
-import panels
-import images
-from widgets import ListeChoix
-from widgets import FenetreDeSelection
-from widgets import askopenfilename
-from widgets import showinfo
-
-from Noyau.N_CR import justify_text
-from utils import substract_list
-from plusieursbasepanel import PLUSIEURS_BASE_Panel
-
-
-class FONCTION_Panel(PLUSIEURS_BASE_Panel):
-  def makeValeurPage(self,page):
-      """
-      Crée la page de saisie d'une liste de valeurs à priori quelconques,
-      cad qui ne sont  pas à choisir dans une liste prédéfinie
-      """
-      genea=self.node.item.get_genealogie()
-      if "VALE" in genea:
-        self.nb_valeurs=2
-      if "VALE_C" in genea:
-        self.nb_valeurs=3
-      # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste),
-      # et la liste des valeurs déjà affectées à l'objet courant
-      bulle_aide=self.get_bulle_aide()
-      objet_mc = self.node.item.get_definition()
-      aide = self.get_aide()
-      aide = justify_text(texte=aide)
-      min,max = self.node.item.GetMinMax()
-      l_valeurs = self.node.item.GetListeValeurs()
-      l2_valeurs=self.decoupeListeValeurs(l_valeurs)
-
-      # création des frames globales
-      self.frame1 = Frame(page,relief='groove',bd=2)
-      self.frame2 = Frame(page)
-      self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85)
-      self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15)
-      self.frame_right = Frame(self.frame1)
-      self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.)
-
-      # création des frames internes
-      self.frame_valeurs = Frame(self.frame1)
-      self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95)
-      self.frame_boutons_fleches = Frame(self.frame_right)
-      self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.5)
-      self.frame_choix = Frame(self.frame_right)
-      self.frame_choix.place(relx=0.2,rely=0.2,relwidth=0.7,relheight=0.5)
-      self.frame_aide = Frame(self.frame_right)
-      self.frame_aide.place(relx=0.1,rely=0.7,relwidth=0.8,relheight=0.3)
-      self.frame_boutons = Frame(self.frame2)
-      self.frame_boutons.place(relx=0.35,rely=0.,relwidth=0.5,relheight=1.)
-      for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs,
-                 self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons):
-          fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
-          fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-
-      # création des objets dans les frames
-      liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
-                                 ("<Button-3>",self.deselectValeur),
-                                 ("<Double-Button-1>",self.afficheValeurListe))
-      self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l2_valeurs,liste_commandes = liste_commandes_valeurs,
-                                      titre="Valeur(s) actuelle(s)")
-
-      # Création de l'entry ou de la liste des SD
-      self.label = Label(self.frame_choix,text="Valeur :")
-      self.make_entry(frame = self.frame_choix,command = self.add_double_valeur_plusieurs_base)
-      self.label.place(relx=0.05,rely=0.5)
-
-      # Création d'un bouton "Importer ..." sur le panel.
-      bouton_valeurs_fichier = Button(self.frame_choix,
-                                      text="Importer ...",
-                                      command=self.select_in_file)
-      bouton_valeurs_fichier.place(relx=0.28,rely=0.7,relwidth=0.6)
-      self.ajout_valeurs = None
-
-      # boutons Ajouter et Supprimer
-      self.bouton_add = Button(self.frame_boutons_fleches,
-                          image = images.get_image('arrow_left'),
-                          command = self.add_double_valeur_plusieurs_base)
-      self.bouton_sup = Button(self.frame_boutons_fleches,
-                          image = images.get_image('arrow_right'),
-                          command = self.sup_valeur_sans_into)
-      self.bouton_add.place(relx=0.3,rely=0.35)
-      self.bouton_sup.place(relx=0.3,rely=0.65)
-      # affichage de l'aide
-      self.frame_aide.update()
-      self.aide = Label(self.frame_aide,
-                        text = aide,
-                        justify='center',
-                        anchor='center',
-                        wraplength=int(self.frame_aide.winfo_width()*0.8))
-      self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
-      self.Liste_valeurs.affiche_liste()
-      # boutons Accepter et Annuler
-      self.bouton_accepter = Button(self.frame_boutons,
-                               text='Valider',
-                               command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur_recolle(m,M))
-      self.bouton_annuler = Button(self.frame_boutons,
-                              text = 'Annuler',
-                              command = self.annule_modifs_valeur)
-      for but in (self.bouton_accepter,self.bouton_annuler):
-          but.pack(side='left',padx=4)
-
-
-  def afficheValeurListe(self,name):
-      self.display_valeur(name)
-
-  def decoupeListeValeurs(self,liste):
-      #decoupe la liste des valeurs en n ( les x puis les y)
-      nb=self.nb_valeurs
-      l_valeurs=[]
-      if (len(liste)%nb != 0):
-          message="La cardinalité n'est pas correcte, la dernière valeur est ignorée"
-          showinfo("Problème",message)
-      for i in range(len(liste)/nb) :
-          if (nb==2):
-              t=(liste[i*nb], liste[i*nb+1])
-          else:
-              t=(liste[i*nb], liste[i*nb+1], liste[i*nb+2])
-          l_valeurs.append(t)
-      return l_valeurs
-
-
-  def accepte_modifs_valeur_recolle(self,min,max):
-      l_valeurs=[]
-      l1_valeurs = self.Liste_valeurs.get_liste()
-      for val in l1_valeurs :
-          for item in val :
-             l_valeurs.append(item) 
-      self.accepte_modifs_valeur(min,max,l_valeurs)
-
-
-  def add_double_valeur_plusieurs_base(self):
-      # on verifie qu'il s agit bien d un tuple
-      # on enleve les parentheses eventuelles
-      #doublevaleur_entree,validite,commentaire=self.get_valeur_double()
-      doublevaleur_entree= self.entry.get()
-      try:
-        if doublevaleur_entree[0]=='(' :
-           doublevaleur_entree=doublevaleur_entree[1:-1]
-        if doublevaleur_entree[-1]==')' :
-           doublevaleur_entree=doublevaleur_entree[0:-2]
-        val1=doublevaleur_entree.split(',')[0] 
-        val2=doublevaleur_entree.split(',')[1] 
-        saisie=(val1,val2)
-        if (self.nb_valeurs==3):
-            val3=doublevaleur_entree.split(',')[2] 
-            saisie=(val1,val2,val3)
-        self.entry.delete(0,END)
-      except :
-        commentaire = "%s n est pas un tuple de la forme (x,y)" %`doublevaleur_entree`
-        if (self.nb_valeurs==3):
-            commentaire = "%s n est pas un tuple de la forme (x,y,z)" %`doublevaleur_entree`
-        self.parent.appli.affiche_infos(commentaire)
-        return
-
-      # et seulement d un tuple
-      try:
-        val=doublevaleur_entree.split(',')[self.nb_valeurs]
-        commentaire = "%s n est pas un tuple de la forme (x,y)" %`doublevaleur_entree`
-        if (self.nb_valeurs==3):
-            commentaire = "%s n est pas un tuple de la forme (x,y,z)" %`doublevaleur_entree`
-        self.parent.appli.affiche_infos(commentaire)
-        self.parent.appli.affiche_infos(commentaire)
-        return
-      except :
-        # c est la le cas normal
-        pass
-
-      # on verifie la validite des valeurs sont correctes
-      valeur,validite=self.node.item.eval_valeur(saisie)
-      if not validite :
-        commentaire = "impossible d'évaluer : %s " %`doublevaleur_entree`
-        self.parent.appli.affiche_infos(commentaire)
-        return
-
-      # on verifie la validite de la liste
-      liste=[]
-      l1_valeurs = self.Liste_valeurs.get_liste()
-      for val in l1_valeurs :
-          for item in val :
-             liste.append(item) 
-      validite_liste=self.node.item.valide_liste_partielle(valeur[0],liste)
-      if not validite_liste:
-        commentaire = "impossible d'ajouter %s a la liste " %`doublevaleur_entree`
-        self.parent.appli.affiche_infos(commentaire)
-        return
-      # liste a deja ete modifiee par l appel precedent a valide_liste_partielle 
-      # et contient deja valeur[0]
-      validite_liste=self.node.item.valide_liste_partielle(valeur[1],liste)
-      if not validite_liste:
-        commentaire = "impossible d'ajouter %s a la liste " %`doublevaleur_entree`
-        self.parent.appli.affiche_infos(commentaire)
-        return
-     
-      # si une valeur est selectionnee on insere apres 
-      # sinon on ajoute la valeur à la fin
-      if (self.Liste_valeurs.selection != None):
-         ligne=self.Liste_valeurs.cherche_selected_item()
-         if self.nb_valeurs==2:
-            l1_valeurs.insert(ligne,(valeur[0],valeur[1]))
-         else :
-            l1_valeurs.insert(ligne,(valeur[0],valeur[1],valeur[2]))
-      else :
-         if self.nb_valeurs==2:
-            l1_valeurs.append((valeur[0],valeur[1]))
-         else :
-            l1_valeurs.append((valeur[0],valeur[1],valeur[2]))
-      i = 0
-      while i < self.nb_valeurs : 
-         self.set_valeur_texte(saisie[i])
-         i=i+1
-      self.Liste_valeurs.put_liste(l1_valeurs)
-      self.Liste_valeurs.affiche_liste()
-
-
-  def display_valeur(self,val=None):
-      """
-      Affiche la valeur passée en argument dans l'entry de saisie.
-      Par défaut affiche la valeur du mot-clé simple
-      Doit être redéfinie pour un pb avec les parametres dans un tuple
-      """
-      if not val :
-          valeur = self.node.item.object.getval()
-      else:
-          valeur = val
-      if not valeur : return
-
-      try:
-        affiche="("
-        separe=""
-        for val in valeur:
-            affiche=affiche+separe+str(val)
-            separe=","
-        affiche=affiche+")"
-        self.entry.delete(0,END)
-        self.entry.insert(0,affiche)
-      except :
-        self.entry.delete(0,END)
-
-# Surcharge de select in file pour prendre en compte la saisie de tuple
-  def select_in_file(self):
-      """ Permet d'ouvrir un fichier choisi par l'utilisateur. """
-      nom_fichier = askopenfilename(title="Choix fichier :")
-
-      if not nom_fichier:
-          return
-
-      try:
-          f = open(nom_fichier, "rb")
-          selection_texte = f.read()
-          f.close()
-          self.add_double_valeur_plusieurs_base = FenetreDeSelection(self,
-                                                  self.node.item,
-                                                  self.parent.appli,
-                                                  titre="Sélection de valeurs",
-                                                  texte=selection_texte,
-                                                  cardinal = self.nb_valeurs)
-      except:
-          traceback.print_exc()
-          showinfo("Erreur de fichier","impossible d'ouvir le fichier "+nom_fichier)
-
diff --git a/Editeur/fontes.py b/Editeur/fontes.py
deleted file mode 100644 (file)
index 8e15892..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-standard = ("Times",10)
-standard_italique = ("Times",10,'italic')
-standard_gras = ("Times",10,'bold')
-standard_gras_souligne = ("Times",10,'bold','underline')
-
-canvas = ('times',8)
-canvas_italique = ('times',8,'italic')
-canvas_gras = ("Times",8,'bold')
-canvas_gras_italique = ("Times",10,'bold','italic')
-
-standard12 = ("Times",12)
-standard12_gras = ("Times",12,'bold')
-standard12_gras_italique = ( "times",12,'bold','italic')
-
-standardcourier10 = ("Courier",10)
-
diff --git a/Editeur/icons/ast-yellow-square.gif b/Editeur/icons/ast-yellow-square.gif
new file mode 100755 (executable)
index 0000000..5f9ec19
Binary files /dev/null and b/Editeur/icons/ast-yellow-square.gif differ
diff --git a/Editeur/icons/empty.png b/Editeur/icons/empty.png
new file mode 100644 (file)
index 0000000..ff59051
Binary files /dev/null and b/Editeur/icons/empty.png differ
diff --git a/Editeur/images.py b/Editeur/images.py
deleted file mode 100644 (file)
index 9cdfa19..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-    Ce module joue le role de cache pour les images stockées
-    dans le repertoire ICONDIR
-"""
-
-import os
-import Tkinter
-
-if __name__ == '__main__':
-   # Programme de test
-   import sys
-   import images
-   root=Tkinter.Tk()
-   frame = Tkinter.Frame(root)
-   frame.pack(expand=1,fill='both')
-
-   for name in ('About24','Save24'):
-      Tkinter.Label(frame, image=images.get_image(name)).pack(side=Tkinter.TOP)
-
-   root.mainloop()
-   sys.exit()
-
-try:
-   import prefs
-   ICONDIR=prefs.ICONDIR
-except:
-   # Par defaut on utilise le repertoire local icons
-   ICONDIR=os.path.join(os.path.abspath(os.path.dirname(__file__)),'icons')
-
-dico_images={}
-
-def get_image(name):
-    if dico_images.has_key(name):
-        return dico_images[name]
-    else : 
-        fic_image = os.path.join(ICONDIR,name)
-        if not os.path.isfile(fic_image):
-           file, ext = os.path.splitext(fic_image)
-           fic_image = file + '.gif'
-        image = Tkinter.PhotoImage(file=fic_image)
-        dico_images[name]=image
-        return image
-
-def update_cache():
-   global dico_images
-   dico_images={}
-
index 942c6b4addb9982bcdba2de5b35d1c4403a89dcb..9dec4a20d55e63df256a994154c3866deea002b1 100644 (file)
@@ -24,6 +24,7 @@
 """
 import sys
 import prefs
+
 # Ce chemin permet d'importer les modules Noyau et Validation
 # représentant le code utilisé (si fourni)
 if prefs.CODE_PATH:
diff --git a/Editeur/jdcdisplay.py b/Editeur/jdcdisplay.py
deleted file mode 100644 (file)
index c5a3eeb..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-   Ce module contient la classe JDCDISPLAY qui réalise l'affichage
-   du jeu de commandes sous la forme d'un arbre et de panneaux qui portent
-   les informations attachées au noeud de l'arbre sélectionné
-"""
-# Modules Python
-import types,sys
-import traceback
-import Tkinter
-import Pmw
-
-# Modules Eficas
-import panels
-from treeitemincanvas import TREEITEMINCANVAS
-from widgets import showinfo,showerror
-
-class CONFIG:
-   isdeveloppeur='NON'
-
-class JDCDISPLAY:
-   """
-       Cette classe ajoute à la class TREEITEMINCANVAS l'affichage des infos
-       attachées au noeud sélectionné dans un notebook
-       L'objet item associé au jdc est créé par la classe TREEITEMINCANVAS
-   """
-   def __init__(self,jdc,nom_jdc,appli=None,parent=None):
-      self.jdc=jdc
-      self.nom_jdc=nom_jdc
-      self.fichier=None
-      self.panel_courant=None
-
-      if not appli:
-         class Appli:
-            def __init__(self):
-               self.CONFIGURATION=CONFIG()
-            def affiche_infos(self,message):
-               print message
-               return
-
-            def efface_aide(self,event):
-               return
-
-            def affiche_aide(self,event,aide):
-               print aide
-               return
-
-         appli=Appli()
-      self.appli=appli
-
-      if not parent:
-         parent=Tkinter.Tk()
-         Pmw.initialise(parent)
-      self.parent=parent
-      self.node_selected = None
-      self.modified='n'
-
-      self.pane=Pmw.PanedWidget(self.parent,orient='horizontal')
-      self.pane.add('treebrowser',min=0.4,size=0.5)
-      self.pane.add('selected',min=0.4)
-      self.pane.pack(expand=1,fill='both')
-      self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'),
-                 self.appli,self.select_node,self.make_rmenu)
-
-   def make_rmenu(self,node,event):
-      if hasattr(node.item,'rmenu_specs'):
-         rmenu = Tkinter.Menu(self.pane.pane('treebrowser'), tearoff=0)
-         #node.select()
-         self.cree_menu(rmenu,node.item.rmenu_specs,node)
-         rmenu.tk_popup(event.x_root,event.y_root)
-
-   def cree_menu(self,menu,itemlist,node):
-      """
-            Ajoute les items du tuple itemlist
-            dans le menu menu
-      """
-      number_item=0
-      radio=None
-      for item in itemlist:
-         number_item=number_item + 1
-         if not item :
-            menu.add_separator()
-         else:
-            label,method=item
-            if type(method) == types.TupleType:
-                 # On a un tuple => on cree une cascade
-                 menu_cascade=Tkinter.Menu(menu)
-                 menu.add_cascade(label=label,menu=menu_cascade)
-                 self.cree_menu(menu_cascade,method,node)
-            elif method[0] == '&':
-                 # On a une chaine avec & en tete => on cree un radiobouton
-                 try:
-                    command=getattr(node.item,method[1:])
-                    menu.add_radiobutton(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n))
-                    if radio == None:radio=number_item
-                 except:pass
-            else:
-                 try:
-                    command=getattr(node.item,method)
-                    menu.add_command(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n))
-                 except:pass
-      # Si au moins un radiobouton existe on invoke le premier
-      if radio:menu.invoke(radio)
-
-   def select(self):
-      return
-
-   def unselect(self):
-      return
-
-   def select_node(self,node):
-      """
-          Cette méthode est appelée à chaque fois qu'un noeud est sélectionné
-          dans l'arbre.
-          Elle permet l'affichage du panneau correspondant au noeud sélectionné
-      """
-      if node is not self.node_selected :
-         #ATTENTION: il faut affecter l'attribut node_selected avant d'appeler 
-         # create_panel pour eviter une recursion infinie entre create_panel, 
-         # Emit, onValid, select_node
-         self.node_selected = node
-         self.create_panel(node)
-      elif self.panel_courant:
-         self.panel_courant.update_panel()
-
-   def create_panel(self,node):
-      """
-         Lance la génération du panneau contextuel de l'objet sélectionné 
-         dans l'arbre
-      """
-      if self.panel_courant:
-          # On detruit le panneau
-          self.panel_courant.destroy()
-          o=self.panel_courant
-          self.panel_courant=None
-          # Mettre à 1 pour verifier les cycles entre objets
-          # pour les panneaux
-          withCyclops=0
-          if withCyclops:
-             from Misc import Cyclops
-             z = Cyclops.CycleFinder()
-             z.register(o)
-             del o
-             z.find_cycles()
-             z.show_stats()
-             z.show_cycles()
-
-      if node is None:
-          self.panel_courant=None
-          return self.panel_courant
-
-      if node.item.isactif():
-          if hasattr(node.item,"panel"):
-              self.panel_courant=node.item.panel(self,self.pane.pane('selected'),node)
-          else:
-              raise Exception("Le noeud sélectionné n'a pas de panel associé")
-      else:
-          self.panel_courant = panels.Panel_Inactif(self,self.pane.pane('selected'),node)
-      return self.panel_courant
-
-   def init_modif(self):
-      """
-          Met l'attribut modified à 'o' : utilisé par Eficas pour savoir 
-          si un JDC doit être sauvegardé avant destruction ou non
-      """
-      self.modified = 'o'
-
-   def stop_modif(self):
-      """
-          Met l'attribut modified à 'n' : utilisé par Eficas pour savoir 
-          si un JDC doit être sauvegardé avant destruction ou non
-      """
-      self.modified = 'n'
-
-   def mainloop(self):
-      self.parent.mainloop()
-
-   def ReplaceObjectNode(self,node,new_object,nom_sd=None):
-      """
-      Cette méthode sert à remplacer l'objet pointé par node par
-      new_object.
-      Si nom_sd : on remplace un OPER et on essaie de renommer la
-      nouvelle sd par nom_sd
-      """
-      child = node.append_brother(new_object,retour='oui')
-      if child == 0:
-          self.appli.affiche_infos("Impossible de remplacer l'objet du noeud courant")
-      else:
-          self.init_modif()
-          node.delete()
-          #if nom_sd:
-              #child.item.nomme_sd(nom_sd)
-          child.select()
-          #child.update()
-
-   def doCut(self):
-      """
-      Stocke dans Eficas.noeud_a_editer le noeud à couper
-      """
-      if not self.node_selected.item.iscopiable():
-          showinfo("Copie impossible",
-                   "Cette version d'EFICAS ne permet que la copie d'objets de type 'Commande' ou mot-clé facteur")
-          return
-      self.appli.edit="couper"
-      self.appli.noeud_a_editer = self.node_selected
-
-   def doCopy(self):
-      """
-      Stocke dans Eficas.noeud_a_editer le noeud à copier
-      """
-      if not self.node_selected.item.iscopiable():
-          showinfo("Copie impossible",
-                   "La copie d'un tel objet n'est pas permise")
-          return
-      self.appli.edit="copier"
-      self.appli.noeud_a_editer = self.node_selected
-
-   def doPaste(self):
-      """
-      Lance la copie de l'objet placé dans self.appli.noeud_a_editer
-      Ne permet que la copie d'objets de type Commande ou MCF
-      """
-      try:
-         child=self.appli.noeud_a_editer.doPaste(self.node_selected)
-      except:
-         traceback.print_exc()
-         showinfo("Action de coller impossible",
-                  "L'action de coller apres un tel objet n'est pas permise")
-         return
-
-      if child == 0:
-          if self.appli.message != '':
-             showerror("Copie refusée",self.appli.message)
-             self.appli.message = ''
-          self.appli.affiche_infos("Copie refusée")
-          return
-
-      # il faut déclarer le JDCDisplay_courant modifié
-      self.init_modif()
-      # suppression éventuelle du noeud sélectionné
-      # si possible on renomme l objet comme le noeud couper
-      if self.appli.edit == "couper":
-         #nom = self.appli.noeud_a_editer.item.object.sd.nom
-         item=self.appli.noeud_a_editer.item
-         self.appli.noeud_a_editer.delete()
-         child.item.update(item)
-         #test,mess = child.item.nomme_sd(nom)
-         child.select()
-      # on rend la copie à nouveau possible en libérant le flag edit
-      self.appli.edit="copier"
-
-   def update(self):
-      """Cette methode est utilisee par le JDC associe pour 
-         signaler des modifications globales du JDC
-      """
-      self.tree.update()
-
-   def supprime(self):
-      #print "supprime",self
-      self.select_node(None)
-      self.tree.supprime()
-      self.tree=None
-      self.pane.destroy()
-
-   #def __del__(self):
-   #   print "__del__",self
diff --git a/Editeur/listeFichiers.py b/Editeur/listeFichiers.py
deleted file mode 100644 (file)
index 9a9843f..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-import string
-
-class listeFichiers :
-
-    def __init__(self,appli):
-       self.appli=appli
-       self.premiere=1
-       self.nbfich=0
-       self.rep=self.appli.CONFIGURATION.rep_user
-       self.menuFichier=self.appli.menubar.menudict['Fichier']
-       self.monFichier=self.rep+"/listefichiers"
-       self.liste_Fichiers=[] 
-       self.init_Fichier()
-       self.traite_liste()
-
-    def init_Fichier(self):
-        index=0
-        try :
-            f=open(self.monFichier)
-            while ( index < 5) :
-              ligne=f.readline()
-              if ligne != "" :
-                 l=(ligne.split("\n"))[0]
-                 self.liste_Fichiers.append(l)
-              index=index+1
-        except :
-             pass
-        try :
-            f.close()
-        except :
-             pass
-
-    def sauve_Fichier(self):
-        try :
-            if len(self.liste_Fichiers) == 0 :
-              return
-            f=open(self.monFichier,'w')
-            index=0
-            while ( index <  len(self.liste_Fichiers)):
-              ligne=self.liste_Fichiers[index]+"\n"
-              f.write(ligne)
-              index=index+1
-        except :
-             pass
-        try :
-            f.close()
-        except :
-             pass
-
-    def traite_liste(self):
-        index=0
-        for  index in range(self.nbfich):
-           self.menuFichier.delete(9)
-        self.nbfich = 0
-        index = 0
-        while( index < len(self.liste_Fichiers)) :
-            self.ajout_item(index)
-            index=index+1
-           
-    def ajout_item(self,index):
-        if self.premiere and (len(self.liste_Fichiers)!=0):
-           self.premiere=0
-           self.menuFichier.add_separator()
-        label=self.liste_Fichiers[index]
-        self.menuFichier.insert_command(8,label=label,command= lambda self=self, l=label:self.coucou (l));
-        self.nbfich=self.nbfich+1
-
-    def coucou(self,label):
-        self.appli.bureau.openJDC(file=label) 
-
-    def aOuvert(self,file):
-         if file not in self.liste_Fichiers :
-            if (len(self.liste_Fichiers) > 4) :
-               f=self.liste_Fichiers[0]
-               self.liste_Fichiers.remove(f)
-            self.liste_Fichiers.insert(len(self.liste_Fichiers),file)
-         else:
-            self.liste_Fichiers.remove(file)
-            self.liste_Fichiers.insert(len(self.liste_Fichiers),file)
-         self.traite_liste()
-         self.sauve_Fichier()
index 307abbbe208063a54456c2d8f017ea91f1ac4d70..fe54d8547b001051aadcb8b1c093d76cc4c7f358 100644 (file)
@@ -1,47 +1,28 @@
 import os
 import re
-import Tkinter
 
-# le dictionnaire sous menu est indexe parceque l'ordre des
-# recherches est important
-
-sous_menu={0:{"3D":"3D.comm"},1:{"poutre":"pou.comm"},2:{"salome":"salome.comm"},3:{"divers":"comm"}}
+sous_menus={"ASTER" : {0:{"3D":"3D.comm"},1:{"poutre":"pou.comm"},2:{"salome":"salome.comm"},3:{"divers":"comm"}},
+           "OPENTURNS" : {0:{"Anne":"Anne.comm"}}
+           }
 
 class listePatrons :
 
-    def __init__(self,appli):
-       self.appli=appli
-       rep_ini=self.appli.CONFIGURATION.rep_ini
-       if self.appli.code != "ASTER" :
-          return
-       self.rep_patrons=rep_ini+"/../Editeur/Patrons"
+    def __init__(self,code = "ASTER"):
+       repIni=os.path.dirname(os.path.abspath(__file__))
+       self.rep_patrons=repIni+"/Patrons/"+code
+       self.sous_menu=sous_menus[code]
+       self.code=code
        self.liste={}
        self.traite_liste()
-       self.ajout_menu()
-
 
     def traite_liste(self):
         for file in os.listdir(self.rep_patrons):
-            for i in range(len(sous_menu)):
-                clef=sous_menu[i].keys()[0]
-                chaine=sous_menu[i][clef]
+            for i in range(len(self.sous_menu)):
+                clef=self.sous_menu[i].keys()[0]
+                chaine=self.sous_menu[i][clef]
                 if re.search(chaine,file) :
                    if clef in self.liste.keys():
                       self.liste[clef].append(file)
                    else :
                       self.liste[clef]=[file]
                    break
-
-    def ajout_menu(self):
-        menuFichier=self.appli.menubar.menubar
-        menu_cascade=Tkinter.Menu(menuFichier,tearoff=0)
-        menuFichier.add_cascade(label="Patrons",menu=menu_cascade)
-        for ss_menu in self.liste.keys():
-           ssmenu=Tkinter.Menu(menu_cascade,tearoff=0)
-           menu_cascade.add_cascade(label=ss_menu,menu=ssmenu)
-           for fichier in self.liste[ss_menu]:
-               ssmenu.add_command(label=fichier,command= lambda self=self, l=fichier:self.ouvre(l));
-
-    def ouvre(self,label):
-        fichier=self.rep_patrons+"/"+label
-        self.appli.bureau.openJDC(file=fichier,enregistre="non") 
diff --git a/Editeur/macrodisplay.py b/Editeur/macrodisplay.py
deleted file mode 100644 (file)
index 464d59a..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-   Ce module contient la classe MacroDisplay qui realise l'affichage 
-   des sous commandes d'une macro sous forme d'arbre
-"""
-# Modules Python
-import types,sys
-import Tkinter,Pmw
-
-# Modules EFICAS
-import images
-import tooltip
-import Objecttreeitem
-import compojdc
-import treewidget
-from widgets import Fenetre
-from Ihm import CONNECTOR
-
-class MACRO2TreeItem(compojdc.JDCTreeItem):
-      pass
-
-class MacroDisplay:
-  def __init__(self,appli,macroitem,nom_jdc):
-    self.fenetre = Tkinter.Toplevel()
-    self.fenetre.configure(width = 800,height=500)
-    self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
-    self.fenetre.title("Visualisation Macro_Etape")
-    self.macroitem=macroitem
-    self.jdc=macroitem.object.jdc_aux
-    self.nom_jdc=nom_jdc
-    self.appli=appli
-    self.barre=Tkinter.Frame(self.fenetre,relief="ridge",bd=2)
-    self.barre.pack(expand=0,fill=Tkinter.X)
-    if self.macroitem.object.fichier_text is not None:
-      b=Tkinter.Button(self.barre,image=images.get_image("Zoom24"),command=self.visufile)
-      b.pack(side='left')
-      tp=tooltip.TOOLTIP(b,"View file")
-    self.mainPart=Pmw.ScrolledCanvas(self.fenetre,
-                                     hull_width=600,
-                                     hull_height=500,
-                                     borderframe=1)
-    self.canvas=self.mainPart.component('canvas')
-    Pmw.Color.changecolor(self.canvas,background='gray95')
-    self.mainPart.pack(padx=10,pady=10,fill = 'both', expand = 1)
-    self.item=MACRO2TreeItem(self.appli,nom_jdc,self.jdc)
-    self.tree = treewidget.Tree(self.appli,self.item,self.mainPart,command=None,rmenu=self.make_rmenu)
-    self.tree.draw()
-    CONNECTOR.Connect(self.jdc,"close",self.onCloseView,())
-
-  def onCloseView(self):
-    self.quit()
-
-  def visufile(self):
-    Fenetre(self.appli,titre="Source du fichier inclus",texte=self.macroitem.object.fichier_text)
-
-  def make_rmenu(self,node,event):
-      if hasattr(node.item,'rmenu_specs'):
-         rmenu = Tkinter.Menu(self.canvas, tearoff=0)
-         self.cree_menu(rmenu,node.item.rmenu_specs,node)
-         rmenu.tk_popup(event.x_root,event.y_root)
-
-  def cree_menu(self,menu,itemlist,node):
-      """
-            Ajoute les items du tuple itemlist
-            dans le menu menu
-      """
-      number_item=0
-      radio=None
-      for item in itemlist:
-         number_item=number_item + 1
-         if not item :
-            menu.add_separator()
-         else:
-            label,method=item
-            if type(method) == types.TupleType:
-                 # On a un tuple => on cree une cascade
-                 menu_cascade=Tkinter.Menu(menu)
-                 menu.add_cascade(label=label,menu=menu_cascade)
-                 self.cree_menu(menu_cascade,method,node)
-            elif method[0] == '&':
-                 # On a une chaine avec & en tete => on cree un radiobouton
-                 try:
-                    command=getattr(node.item,method[1:])
-                    menu.add_radiobutton(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n))
-                    if radio == None:radio=number_item
-                 except:pass
-            else:
-                 try:
-                    command=getattr(node.item,method)
-                    menu.add_command(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n))
-                 except:pass
-      # Si au moins un radiobouton existe on invoke le premier
-      if radio:menu.invoke(radio)
-
-  def quit(self):
-    #print "quit",self
-    self.tree.supprime()
-    self.tree=None
-    self.fenetre.destroy()
-
-  #def __del__(self):
-  #  print "__del__",self
-
-def makeMacroDisplay(appli,macroitem,nom_item):
-  return MacroDisplay(appli,macroitem,nom_item)
-
-import treeitemincanvas
-
-class TREEITEMINCANVAS(treeitemincanvas.TREEITEMINCANVAS):
-   def __init__(self,object,nom="",parent=None,appli=None,sel=None,rmenu=None):
-      #print "TREEITEMINCANVAS",object
-      self.object=object
-      self.nom=nom
-      self.appli=appli
-      self.parent=parent
-
-      self.item=MACRO2TreeItem(self.appli,self.nom,self.object)
-      self.canvas=Pmw.ScrolledCanvas(self.parent,borderframe=1,canvas_background='gray95')
-      self.canvas.pack(padx=10,pady=10,fill = 'both', expand = 1)
-      if not sel:
-         def sel(event=None):
-            return
-      self.tree=treewidget.Tree(self.appli,self.item,self.canvas,command=sel,rmenu=rmenu)
-      self.tree.draw()
-
-import jdcdisplay
-
-class MACRODISPLAY(jdcdisplay.JDCDISPLAY):
-   def __init__(self,jdc,nom_jdc,appli=None,parent=None):
-      #print "MACRODISPLAY",jdc
-      self.jdc=jdc
-      self.nom_jdc=nom_jdc
-      self.fichier=None
-      self.panel_courant=None
-      self.appli=appli
-      self.parent=parent
-      self.node_selected = None
-      self.modified='n'
-
-      self.pane=Pmw.PanedWidget(self.parent,orient='horizontal')
-      self.pane.add('treebrowser',min=0.4,size=0.5)
-      self.pane.add('selected',min=0.4)
-      self.pane.pack(expand=1,fill='both')
-      self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'),
-                 self.appli,self.select_node,self.make_rmenu)
-
diff --git a/Editeur/menubar.py b/Editeur/menubar.py
deleted file mode 100644 (file)
index b1aea08..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-"""
-from Tkinter import Menu
-
-class MENUBAR:
-   def __init__(self,appli,parent):
-      # L'attribut appli pointe vers l'objet application qui détient la menubar et les autres composants
-      self.appli=appli
-      # L'attribut parent pointe vers l'objet graphique parent de la menubar
-      self.parent=parent
-      self.menubar=Menu(self.parent)
-      self.parent.configure(menu=self.menubar)
-      self.init()
-
-   try:
-      from prefs import labels
-   except:
-      labels= ('Fichier','Edition','Jeu de commandes','Catalogue','Options','Aide','Traducteur')
-
-   def init(self):
-      self.menudict={}
-      for label in self.labels:
-         menu=Menu(self.menubar,tearoff=0)
-         self.menudict[label]=menu
-         self.menubar.add_cascade(label=label,menu=menu)
-
diff --git a/Editeur/newsimppanel.py b/Editeur/newsimppanel.py
deleted file mode 100644 (file)
index ea414a0..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import string,types,os
-from Tkinter import *
-import Pmw
-from copy import copy,deepcopy
-import traceback
-
-# Modules Eficas
-import Objecttreeitem
-import prefs
-import panels
-import images
-import composimp
-from widgets import ListeChoix
-from widgets import FenetreDeSelection
-
-from Noyau.N_CR import justify_text
-from utils import substract_list
-
-
-class newSIMPPanel(panels.OngletPanel):
-  """
-  Classe virtuelle servant de classe mère à toutes les classes Panel
-  servant à afficher et récupérer la valeur d'un mot-clé simple.
-  Le panel est différent suivant le type de la valeur attendu
-  """
-  def init(self):
-      """
-      Méthode appelée par le constructeur de OngletPanel :
-      construit le notebook à 2 onglets utilisé par tous les panels de
-      tous les mots-clés simples
-      """
-      nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
-      nb.pack(fill = 'both', expand = 1)
-      self.nb=nb
-      nb.add('Valeur', tab_text='Saisir valeur')
-      self.makeValeurPage(nb.page('Valeur'))
-      self.enlevebind()
-      self.creebind()
-      nb.setnaturalsize()
-      
-# ----------------------------------------------------------------------------------------
-#   Méthodes utilisées pour l'affectation de la valeur donnée par l'utilisateur
-#    au mot-clé courant
-# ----------------------------------------------------------------------------------------
-
-  def reset_old_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
-      """
-          Enregistre  val comme valeur de self.node.item.object SANS 
-          faire de test de validité ni ré-évaluer l'ancienne valeur
-          permet de rester avec des valeurs non entrees et de ne pas 
-          ré-évaluer des entiers par exemple
-      """
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      self.node.item.set_valeur(name)
-      self.parent.appli.affiche_infos(mess)
-
-  def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
-      """
-          Enregistre  val comme valeur de self.node.item.object  
-          en evaluant l item et en le validant 
-          Si name n'est pas renseigné, la valeur 
-      """
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      if name != None:
-          valeur = name
-          validite = 1
-      else :
-          valeurentree= self.entry.get()
-          self.entry.delete(0,END)
-          if valeurentree == '': valeurentree=None
-          valeur,validite=self.node.item.eval_valeur(valeurentree)
-          if not validite :
-                  valeur= self.entry.get()
-                  commentaire = "impossible d'évaluer : %s " %`valeurentree`
-                  self.parent.appli.affiche_infos(commentaire)
-                
-      if validite : 
-          validite,commentaire=self.node.item.valide_val(valeur)
-      if validite :
-          self.node.item.set_valeur(valeur)
-          self.parent.appli.affiche_infos(mess)
-      else :
-          self.parent.appli.affiche_infos(commentaire)
-
-# ----------------------------------------------------------------------------------------
-#   Méthodes utilisées pour la manipulation des items dans les listes de choix
-# ----------------------------------------------------------------------------------------
-  def selectValeur(self,name):
-      self.selected_valeur = name
-
-  def deselectValeur(self,name):
-      self.selectValeur = None
-
-  def sup_valeur(self,name=None):
-      """
-      Supprime la valeur selectionnée de la liste des valeurs et la rajoute
-      à la liste des choix possibles
-      """
-      if hasattr(self,'selected_valeur') :
-         if ( self.selected_valeur != None and self.selected_valeur != ''):
-            liste_valeurs = self.Liste_valeurs.get_liste()
-            liste_valeurs.remove(self.selected_valeur)
-            self.Liste_valeurs.put_liste(liste_valeurs)
-            listeActuelle=self.Liste_valeurs.get_liste()
-            liste_choix=self.node.item.get_liste_possible(listeActuelle)
-            self.Liste_choix.put_liste(liste_choix)
-            self.selected_valeur = None
-
-  def add_choix(self,name=None):
-      """
-      Ajoute le choix selectionné à la liste des valeurs et le retire
-      de la liste des choix possibles
-      """
-      
-      if hasattr(self,'selected_choix') :
-         if (self.selected_choix != None and self.selected_choix != ''):
-            min,max = self.node.item.GetMinMax()
-            liste_valeurs = self.Liste_valeurs.get_liste()
-            if len(liste_valeurs) >= max :
-                self.parent.appli.affiche_infos("La liste ne peut pas avoir plus de %d éléments" %max)
-                return
-            if (self.Liste_valeurs.selection != None):
-                ligne=self.Liste_valeurs.cherche_selected_item()
-                liste_valeurs.insert(ligne,self.selected_choix)
-            else :
-                liste_valeurs.append(self.selected_choix)
-            self.Liste_valeurs.put_liste(liste_valeurs)
-            listeActuelle=self.Liste_valeurs.get_liste()
-            liste_choix=self.node.item.get_liste_possible(listeActuelle)
-            self.Liste_choix.put_liste(liste_choix)
-            self.selected_choix = None
-
-  def selectChoix(self,name):
-      self.selected_choix = name
-
-  def deselectChoix(self,name):
-      self.selectChoix = None
-      
-  def raisecmd(self,page):
-      try:
-         self.entry.focus()
-      except:
-         pass
-
-# ----------------------------------------------------------------------------------------
-#   Méthodes utilisées pour la manipulation des items en notation scientifique
-# ----------------------------------------------------------------------------------------
-  def set_valeur_texte(self,texte_valeur) :
-      """ Sert à mettre à jour la notation scientifique"""
-      try :
-        if "R" in self.node.item.object.definition.type:
-            if texte_valeur[0] != "'":
-               clef=eval(texte_valeur)
-               if str(clef) != str(texte_valeur) :
-                  self.node.item.object.init_modif()
-                  clefobj=self.node.item.object.GetNomConcept()
-                  if not self.parent.appli.dict_reels.has_key(clefobj):
-                     self.parent.appli.dict_reels[clefobj] = {}
-                  self.parent.appli.dict_reels[clefobj][clef]=texte_valeur
-                  self.parent.appli.dict_reels[clefobj]
-                  self.node.item.object.fin_modif()
-      except:
-        pass
-
-
-  def get_valeur_texte(self,valeur) :
-     valeur_texte=""
-     if "R" in self.node.item.object.definition.type:
-        clefobj=self.node.item.object.GetNomConcept()
-        if self.parent.appli.dict_reels.has_key(clefobj):
-           if self.parent.appli.dict_reels[clefobj].has_key(valeur):
-              valeur_texte=self.parent.appli.dict_reels[clefobj][valeur]
-     return valeur_texte
diff --git a/Editeur/options.py b/Editeur/options.py
deleted file mode 100644 (file)
index 9d0da1e..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-"""
-# Modules Python
-import os,string
-
-# Modules Eficas
-from widgets import askopenfilename
-import panels
-
-# l'option affichage_commandes peut prendre les valeurs "groupes" ou "alphabetic"
-affichage_commandes="alphabetic"
-
-class OPTIONS:
-
-   menu_defs=[
-        ('Options',[
-                   ("Affichage commandes",(("alphabétique",'&affichage_alpha'),("groupes",'&affichage_grp'))),
-                   #("Couleur",(("fond",'change_fond'),("barre",'change_barre'))),
-                   # ("Catalogue développeur",'choix_cata_developpeur'),
-                   ('Paramètres Eficas','affichage_fichier_ini'),
-                   ('Paramètres Affichage','affichage_style_ini'),
-                      
-                   ]
-        )
-             ]
-
-   button_defs=[]
-
-   def __init__(self,appli,parent):
-      self.appli=appli
-      self.parent=parent
-
-
-   def affichage_grp(self):
-      global affichage_commandes
-      affichage_commandes="groupes"
-      if hasattr(panels,'panneauCommande'):
-         panel=panels.panneauCommande
-         parent=panel.parent
-         if parent != None :
-            parent.create_panel(parent.node_selected)
-            # si on a un panel avec plusieurs onglets
-            # on affiche Commande
-            try :
-              parent.panel_courant.nb.selectpage("Commande")
-            except :
-              pass
-
-   def affichage_alpha(self):
-
-      global affichage_commandes
-      affichage_commandes="alphabetic"
-      if hasattr(panels,'panneauCommande'):
-         panel=panels.panneauCommande
-         parent=panel.parent
-         if parent != None :
-            parent.create_panel(parent.node_selected)
-            # si on a un panel avec plusieurs onglets
-            # on affiche Commande
-            try :
-              parent.panel_courant.nb.selectpage("Commande")
-            except :
-              pass
-
-   def change_fond(self):
-      from tkColorChooser import askcolor
-      #nouvelle=askcolor(self.appli.background)
-      nouvelle=askcolor('grey')
-
-   def change_barre(self):
-       pass
-
-   def choix_cata_developpeur(self):
-      """ 
-          Cette méthode demande à l'utilisateur-développeur d'indiquer quel catalogue
-          il veut utiliser en remplacement du catalogue standard du code
-          NB : il faut que le développeur ait les droits d'écriture dans le répertoire où
-          se trouve le catalogue 
-      """
-      file = askopenfilename(title="Choix d'un catalogue personnel",
-                             defaultextension=".py",
-                             filetypes = ( ("Catalogue", "cata*.py"),))
-      if file :
-          self.parent.update_idletasks()
-          self.appli.reset_affichage_infos()
-          rep_fic = os.path.dirname(file)
-          nom_fic = string.split(os.path.basename(file),'.')[0]
-          rep_courant = os.getcwd()
-          os.chdir(rep_fic)
-          self.cata = __import__(nom_fic)
-          self.code = self.cata.CODE
-          os.chdir(rep_courant)
-          self.fic_cata = file
-          fic_cata_p = nom_fic+'_pickled.py'
-          self.fic_cata_p = os.path.join(rep_fic,fic_cata_p)
-          pile_erreurs = self.cata.erreurs_cata
-          if pile_erreurs.existe_message() :
-              messages = pile_erreurs.retourne_messages()
-              print messages
-          else :
-              # XXX ne doit pas fonctionner
-              self.catalo = catabrowser.CataItem(cata=self.cata)
-              self.Retrouve_Ordre_Cata('personnel')
-          pile_erreurs.efface()
-
-
-   def affichage_fichier_ini(self):
-       self.appli.CONFIGURATION.affichage_fichier_ini()
-
-
-   def affichage_style_ini(self):
-       self.appli.CONFIGStyle.affichage_style_ini()
diff --git a/Editeur/panels.py b/Editeur/panels.py
deleted file mode 100644 (file)
index 636473a..0000000
+++ /dev/null
@@ -1,592 +0,0 @@
-# -*- coding: utf-8 -*-
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-#
-#
-# ======================================================================
-import string
-import os
-from Tkinter import *
-import Pmw
-import time
-import traceback
-
-import widgets
-from widgets import ListeChoix
-from widgets import ListeChoixParGroupes
-import prefs
-import options
-
-SEPARATEUR = '-'*30
-
-
-class Panel(Frame) :
-  """
-  Classe servant de classe mère à toutes celles représentant les
-  panneaux à afficher en fonction de la nature de l'objet en cours
-  Elle est toujours dérivée.
-  """
-  def __init__(self,parent,panneau,node) :
-      # Le parent d'un panel est un objet de la classe JDCDISPLAY ou derivee
-      # ou un objet qui a les attributs : appli (de classe APPLI ou derivee),
-      # modified et la methode init_modif
-      self.parent=parent
-      self.panneau = panneau
-      self.node=node
-      Frame.__init__(self,self.panneau)
-      self.place(x=0,y=0,relheight=1,relwidth=1)
-      self.creer_boutons()
-      self.init()
-      global panneauCommande
-      panneauCommande=self
-
-  #def __del__(self):
-  #    print "__del__",self
-
-  def update_panel(self):
-      """Methode appele pour demander une mise a jour du panneau"""
-
-  def destroy(self):
-      Frame.destroy(self)
-      self.panneau=None
-      self.parent=None
-      # Because on herite de Frame
-      self.master=None
-      # On supprime explicitement les references aux objets Tk
-      self.nb=None
-      self.fr_but=None
-      self.bouton_cata=None
-      self.bouton_doc=None
-      self.bouton_com=None
-      self.bouton_sup=None
-      #self.frame_eval=None
-      self.label=None
-      self.frame_boutons=None
-      self.frame_comment=None
-      self.frame_param=None
-      # On termine la suppression de facon brutale (objets Tk et non Tk)
-      for k in self.__dict__.keys():
-         # il est plus prudent de ne pas détruire le lien sur le Node
-         # si on voulait mettre l'attribut node à None, il faudrait
-         # que tous les appels à node.parent.select() apparaissent après
-         # toutes les autres actions liées au panel (node.item.isglobal(), ...)
-         if k != 'node' : setattr(self,k,None)
-
-  def creer_boutons(self):
-      """
-      Méthode créant les boutons se trouvant dans la partie contextuelle d'EFICAS
-      (à droite sous les onglets )
-      """
-      self.fr_but = Frame(self,height=30)
-      self.fr_but.pack(side='bottom')
-      #self.fr_but.pack(side='bottom',fill='x')
-      #self.bouton_com = Button(self.fr_but, text = 'Commentariser', command = self.ajout_commentaire, width=14)
-      #self.bouton_sup = Button(self.fr_but, text = "Supprimer", command=self.supprimer, width=14)
-      #self.bouton_doc = Button(self.fr_but, text="Documentation", command=self.visu_doc, width=14)
-      #self.bouton_cata = Button(self.fr_but, text = "Catalogue", command = self.show_catalogue, width=14)
-      self.bouton_com = Button(self.fr_but, text = 'Commentariser', command = self.ajout_commentaire)
-      self.bouton_sup = Button(self.fr_but, text = "Supprimer", command=self.supprimer)
-      self.bouton_doc = Button(self.fr_but, text="Documentation", command=self.visu_doc)
-      self.bouton_cata = Button(self.fr_but, text = "Catalogue", command = self.show_catalogue)
-
-      if self.parent.appli.CONFIGURATION.isdeveloppeur == 'OUI':
-          self.bouton_sup.pack(side='left',padx=5, pady=5)
-          self.bouton_cata.pack(side='left',padx=5, pady=5)
-          self.bouton_doc.pack(side='right',padx=5, pady=5)
-          #self.bouton_sup.place(relx=0.25,rely = 0.5,relheight = 0.8,anchor='center')
-          #self.bouton_cata.place(relx=0.5,rely = 0.5,relheight = 0.8,anchor='center')
-          #self.bouton_doc.place(relx=0.75,rely = 0.5,relheight = 0.8,anchor='center')
-      else:
-          self.bouton_sup.pack(side='left',padx=5, pady=5)
-          self.bouton_doc.pack(side='right',padx=5, pady=5)
-          #self.bouton_sup.place(relx=0.3,rely = 0.5,relheight = 0.8,anchor='center')
-          #self.bouton_doc.place(relx=0.7,rely = 0.5,relheight = 0.8,anchor='center')
-
-  def show_catalogue(self):
-      try:
-          genea = self.node.item.get_genealogie()
-          self.parent.appli.browser_catalogue_objet(genea)
-      except Exception,e:
-          traceback.print_exc()
-      
-  def efface(self):
-      self.node.efface()
-
-# ------------------------------------------------------------------------
-#     Méthodes permettant d'ajouter des commentaires, des paramètres
-#                     et des objets EVAL.
-#       Ces méthodes sont utilisées par les panneaux des JDC,ETAPE,
-#                 COMMENTAIRE et PARAMETRE
-# ------------------------------------------------------------------------
-
-  def ajout_commentaire(self,ind='after'):
-      """
-      Ajoute un commentaire à l'intérieur du JDC :
-      - si ind='after'  : l'ajoute après l'objet courant
-      - si ind='before' : l'ajoute avant.
-      """
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      return self.node.append_brother("COMMENTAIRE",ind)
-    
-  def ajout_commentaire_first(self):
-      """
-      Ajoute un commentaire en début de JDC
-      """
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      return self.node.append_child("COMMENTAIRE",'first')
-
-  def ajout_parametre(self,ind='after'):
-      """
-      Ajoute un parametre à l'intérieur du JDC :
-      - si ind='after'  : l'ajoute après l'objet courant
-      - si ind='before' : l'ajoute avant.
-      """
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      return self.node.append_brother("PARAMETRE",ind)
-    
-  def ajout_parametre_first(self):
-      """
-      Ajoute un parametre en début de JDC
-      """
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      return self.node.append_child("PARAMETRE",'first')
-
-#  def ajout_parametre_eval(self,ind='after'):
-#      """
-#      Ajoute un paramètre EVAL à l'intérieur du JDC :
-#      - si ind='after'  : l'ajoute après l'objet courant
-#      - si ind='before' : l'ajoute avant.
-#      """
-#      if self.parent.modified == 'n' : self.parent.init_modif()
-#      return self.node.append_brother("PARAMETRE_EVAL",ind)
-    
-#  def ajout_parametre_eval_first(self):
-#      """
-#      Ajoute un paramètre EVAL en début de JDC
-#      """
-#      if self.parent.modified == 'n' : self.parent.init_modif()
-#      return self.node.append_child("PARAMETRE_EVAL",'first')
-    
-# ------------------------------------------------------------------------
-   
-  def visu_doc(self):
-      """ Permet d'ouvrir le fichier doc U de la commande au format pdf avec Acrobat Reader
-        - Ne fonctionne pas sous UNIX (chemin d'accès Acrobat Reader)
-        - indication du chemin d'accès aux fichiers pdf à revoir : trop statique"""
-      cle_doc = self.node.item.get_docu()
-      if cle_doc == None : return
-      cle_doc = string.replace(cle_doc,'.','')
-      cle_doc = string.replace(cle_doc,'-','')
-      commande = self.parent.appli.CONFIGURATION.exec_acrobat
-      nom_fichier = cle_doc+".pdf"
-      fichier = os.path.abspath(os.path.join(self.parent.appli.CONFIGURATION.path_doc,
-                                       nom_fichier))
-      if os.name == 'nt':
-          os.spawnv(os.P_NOWAIT,commande,(commande,fichier,))
-      elif os.name == 'posix':
-          script ="#!/usr/bin/sh \n%s %s&" %(commande,fichier)
-          pid = os.system(script)
-      
-  def supprimer(self):
-      """
-      Suppression du noeud courant
-      """
-      # On signale au parent du panel (le JDCDisplay) une modification 
-      self.parent.init_modif()
-      self.node.delete()
-      
-  def affiche(self):
-      """ Force l'affichage des fenêtres en cours """
-      self.tkraise()
-
-  def selectMC(self,name):
-      """ On retrouve le mot-clé sous le curseur pour affichage du fr """
-      cmd=self.node.item.get_definition()
-      texte_infos = ''
-      for e in cmd.entites.keys() :
-          if e == name :
-              texte_infos=getattr(cmd.entites[e],prefs.lang)
-              break
-      if texte_infos == '' : texte_infos="Pas d'infos disponibles"
-      self.parent.appli.affiche_infos(texte_infos)
-
-  def defMC(self,name):
-      """ On ajoute un mot-clé à la commande : subnode """
-      if name == SEPARATEUR:return
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      if name != "COMMENTAIRE":
-          self.node.append_child(name)
-      else :
-          self.ajout_commentaire()    
-
-  def selectCmd(self,name):
-      """ On retrouve la commande sous le curseur pour affichage du fr """
-      if name != 'COMMENTAIRE' and name != SEPARATEUR:
-          texte_infos=getattr(self.parent.jdc.get_cmd(name),prefs.lang)
-          self.parent.appli.affiche_infos(texte_infos)
-          
-  def defCmd(self,name):
-      """
-      On ajoute une commande après la commande selectionnée : after
-      ou bien on ajoute un commentaire
-      """
-      if name == SEPARATEUR:return
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      if name != "COMMENTAIRE":
-          #parent=self.node.parent
-          #new_obj = parent.item.append_child(name,self.node.item.getObject())
-          #parent.children[parent.children.index(self.node)+1].select()
-          new_node = self.node.append_brother(name,'after')
-      else :
-          new_node = self.ajout_commentaire()
-
-  def defCmdFirst(self,name):
-      """ On ajoute une commande ou un commentaire au début du fichier de commandes """
-      if name == SEPARATEUR:return
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      if name != "COMMENTAIRE":
-          #new_obj = self.node.item.append_child(name,'first')
-          #self.node.children[0].select()
-          new_node = self.node.append_child(name,'first')
-      else :
-          new_node = self.ajout_commentaire_first()
-        
-class OngletPanel(Panel) :
-  """ Cette classe est virtuelle et doit être dérivée
-      Elle contient les principales méthodes d'affichage des différents onglets"""
-
-  global panelbind
-
-  def raisecmd(self,page):
-      self.nb.page(page).focus_set()
-      if page == 'Concept':
-          try:
-              self._any.focus()
-          except:
-              pass
-      elif page == 'Commande':
-          try:
-              self.command_entry.component('entry').focus()
-          except:
-              pass
-
-  def creebind(self):
-       self.nb.bind_all("<F1>",lambda e,s=self,num=0:s.commande_up(num))
-       self.nb.bind_all("<F2>",lambda e,s=self,num=1:s.commande_up(num))
-       self.nb.bind_all("<F3>",lambda e,s=self,num=2:s.commande_up(num))
-       self.nb.bind_all("<F4>",lambda e,s=self,num=3:s.commande_up(num))
-       OngletPanel.panelbind=self.nb
-
-  def enlevebind(self):
-       if not hasattr(OngletPanel,"panelbind"):
-          return
-       if OngletPanel.panelbind == None:
-          return
-       try:
-           OngletPanel.panelbind.unbind_all("<F1>")
-           OngletPanel.panelbind.unbind_all("<F2>")
-           OngletPanel.panelbind.unbind_all("<F3>")
-           OngletPanel.panelbind.unbind_all("<F4>")
-       except:
-           pass
-       OngletPanel.panelbind = None
-
-  def commande_up(self,num):
-      #print "commande_up de panels pour ", num
-      try :
-        OngletPanel.panelbind.selectpage(num)
-        pageNew=OngletPanel.panelbind.page(num)
-        pageNew.focus_set()
-      except :
-        pass
-
-  def affiche(self):
-      page=self.nb.getcurselection()
-      self.nb.page(page).focus_set()
-      if page == 'Concept':
-          try:
-#              _any est un pointeur sur entry
-#              component est une methode de pmw 
-#              a priori, jamais ok
-              self._any.component('entry').focus_set()
-          except:
-              pass
-      self.tkraise()
-
-# ------------------------------------------------------------------------
-#     Méthodes permettant d'afficher des pages partagées par différents
-#           types d'objets (règles,mots-clés,concept,...)
-# ------------------------------------------------------------------------
-
-  def makeConceptPage(self,page):
-      """
-      Crée la page de saisie du nom du concept
-      """
-      self.label = Label(page,text='Nom du concept :')
-      self.label.place(relx=0.1,rely=0.4)
-      self._any = Entry(page,relief='sunken')
-      self._any.place(relx=0.35,rely=0.4,relwidth=0.5)
-      self._any.bind("<Return>",lambda e,s=self:s.execConcept())
-      self._any.bind("<KP_Enter>",lambda e,s=self:s.execConcept())
-      self._any.insert(0,self.node.item.GetText())
-      self.but_ok=Button(page,text = "Valider",command=self.execConcept)
-      self.but_ok.place(relx=0.35,rely=0.8, relwidth=0.35)
-      type_sd = self.node.item.get_type_sd_prod()
-      if type_sd :
-          txt = "L'opérateur courant retourne un objet de type %s" %type_sd
-          self.label = Label(page, text = txt)
-          self.label.place(relx=0.5,rely=0.55,anchor='n')
-      self._any.focus()
-      # aide associée au panneau
-      bulle_aide="""Tapez dans la zone de saisie le nom que vous voulez donner
-      au concept retounré par l'opérateur courant et pressez <Return> pour valider"""
-      page.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
-      page.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-        
-
-  def makeMoclesPage(self,page):
-      """
-      Crée la page qui affiche la liste des mots-clés que l'on peut
-      encore ajouter
-      """
-      genea =self.node.item.get_genealogie()
-      jdc = self.node.item.get_jdc()
-      liste_mc=self.node.item.get_liste_mc_ordonnee(genea,jdc.cata_ordonne_dico)
-      liste_commandes = (("<Enter>",self.selectMC),
-                         ("<Leave>",self.deselectMC),
-                         ("<Double-Button-1>",self.defMC))
-      Liste = ListeChoix(self,page,liste_mc,liste_commandes = liste_commandes,titre = "Mots-clés permis",optionReturn="oui")
-      Liste.affiche_liste()
-      # aide associée au panneau
-      bulle_aide="""Double-cliquez sur le mot-clé que vous voulez ajouter à
-      la commande en cours d'édition"""
-      Liste.MCbox.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
-      Liste.MCbox.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-      if len(liste_mc) > 0 :
-         Liste.surligne(liste_mc[0])
-      self.Liste=Liste
-
-  def makeCommentairePage(self,page):
-      label = Label(page,text = "Insérer un commentaire :")
-      label.grid(column = 0, row = 2)
-      but_avant = Button(page,text = "AVANT",command = lambda s=self :s.ajout_commentaire(ind = 'before'))
-      but_apres = Button(page,text = "APRES",command = self.ajout_commentaire)
-      but_avant.grid(column = 1,row =2)
-      but_apres.grid(column = 1,row =3)
-      
-  def makeCommandePage(self,page):
-      """
-         Cree l'onglet
-      """
-      frame1 = Frame(page,height = 20)
-      frame1.pack(side='top',fill='x')
-      label = Label(frame1,text ="La commande choisie sera ajoutée\n APRES la commande courante")
-      label.pack(side='top')
-      frame2 = Frame(page)
-      frame2.pack(side='top',fill='both',expand=1)
-      liste_commandes = (("<Enter>",self.selectCmd),
-                         ("<Leave>",self.deselectCmd),
-                         ("<Double-Button-1>",self.defCmd))
-      if options.affichage_commandes == "alphabetic":
-         liste_cmd = self.get_liste_cmd()
-         Liste = ListeChoix(self,frame2,liste_cmd,liste_commandes = liste_commandes,
-                                   filtre='oui',titre = "Commandes",optionReturn="oui")
-      else:
-         liste_commandes=liste_commandes+(("<Return>",self.defCmd),)
-         liste_groupes,dict_groupes=self.get_groups()
-         Liste = ListeChoixParGroupes(self,frame2,liste_groupes,dict_groupes,
-                                      liste_commandes = liste_commandes,
-                                      filtre='oui',titre = "Commandes",optionReturn="oui")
-      Liste.affiche_liste()
-      self.command_entry=Liste.entry
-      # aide associée au panneau
-      bulle_aide="""Double-cliquez sur la commande que vous voulez ajouter au jeu de commandes"""
-      Liste.MCbox.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
-      Liste.MCbox.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-      self.liste_command=Liste
-      global panneauCommande
-      panneauCommande=self
-
-  def makeJDCPage(self,page):
-      """
-      Crée la page correspondant à un objet de type JDC
-      """
-      liste_commandes = (("<Enter>",self.selectCmd),
-                         ("<Leave>",self.deselectCmd),
-                         ("<Double-Button-1>",self.defCmdFirst))
-      if options.affichage_commandes == "alphabetic":
-         liste_cmd = self.get_liste_cmd()
-         Liste = ListeChoix(self,page,liste_cmd,liste_commandes = liste_commandes,
-                            filtre='oui',titre = "Commandes",optionReturn="oui")
-      else:
-         liste_commandes=liste_commandes+(("<Return>",self.defCmdFirst),)
-         liste_groupes,dict_groupes=self.get_groups()
-         Liste = ListeChoixParGroupes(self,page,liste_groupes,dict_groupes,
-                                      liste_commandes = liste_commandes,
-                                      filtre='oui',titre = "Commandes",optionReturn="oui")
-      Liste.affiche_liste()
-       # aide associée au panneau
-      bulle_aide="""Double-cliquez sur la commande que vous voulez ajouter au jeu de commandes"""
-      Liste.MCbox.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
-      Liste.MCbox.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-
-  def makeReglesPage(self,page) :
-      """
-      Crée la page qui affiche la liste des règles avec celle qui ne sont
-      pas respectées en rouge
-      """
-      regles = []
-      regles = self.node.item.get_regles()
-      dictionnaire = self.node.item.get_mc_presents()
-      texte_regles = []
-      l_regles_en_defaut=[]
-      if len(regles) > 0:
-        i = 0
-        for regle in regles :
-          texte_regles.append(regle.gettext())
-          texte,test = regle.verif(dictionnaire)
-          if test == 0 : l_regles_en_defaut.append(i)
-          i = i+1
-      Liste = ListeChoix(self,page,texte_regles,liste_marques=l_regles_en_defaut,active='non',titre="Règles")
-      Liste.affiche_liste()
-      # aide associée au panneau
-      bulle_aide="""Ce panneau contient la liste des règles qui s'appliquent à l'objet
-      en cours d'édition.
-      - en noir : règles valides
-      - en rouge : règles violées"""
-      Liste.MCbox.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
-      Liste.MCbox.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-
-  def makeParamCommentPage_for_etape(self,page):
-      """
-      Crée la page qui offre le choix à l'utilisateur d'ajouter un commentaire
-      ou un paramètre, avant ou après le noeud courant dans l'arbre.
-      Cette page est destinée aux objets de niveau ETAPE cad à toutes les CMD,
-      les commentaires inter commandes et les paramètres
-      """
-      # les frame ...
-      self.frame_comment = Frame(page,bd=1,relief='raised')
-      self.frame_param   = Frame(page,bd=1,relief='raised')
-      self.frame_boutons = Frame(page,bd=1,relief='raised')
-      self.frame_comment.place(relx=0,rely=0,relwidth=1,relheight=0.40)
-      self.frame_param.place(relx=0,rely=0.40,relwidth=1,relheight=0.40)
-      self.frame_boutons.place(relx=0,rely=0.84,relwidth=1,relheight=0.16)
-      # remplissage de la frame commentaire
-      Label(self.frame_comment,text = "Insérer un commentaire :").place(relx=0.1,rely=0.5,anchor='w')
-      but_comment_avant = Button(self.frame_comment,
-                                 text = "AVANT "+self.node.item.get_nom(),
-                                 command = lambda s=self :s.ajout_commentaire(ind = 'before'))
-      but_comment_apres = Button(self.frame_comment,
-                                 text = "APRES "+self.node.item.get_nom(),
-                                 command = self.ajout_commentaire)
-      but_comment_avant.place(relx=0.45,rely=0.3,anchor='w',relwidth=0.45)
-      but_comment_apres.place(relx=0.45,rely=0.7,anchor='w',relwidth=0.45)
-      # remplissage de la frame paramètre
-      Label(self.frame_param,text = "Insérer un paramètre :").place(relx=0.1,rely=0.5,anchor='w')
-      but_param_avant = Button(self.frame_param,
-                                 text = "AVANT "+self.node.item.get_nom(),
-                                 command = lambda s=self :s.ajout_parametre(ind = 'before'))
-      but_param_apres = Button(self.frame_param,
-                                 text = "APRES "+self.node.item.get_nom(),
-                                 command = self.ajout_parametre)
-      but_param_avant.place(relx=0.45,rely=0.3,anchor='w',relwidth=0.45)
-      but_param_apres.place(relx=0.45,rely=0.7,anchor='w',relwidth=0.45)
-      # remplissage de la frame boutons
-      Button(self.frame_boutons,
-             text="Commentariser toute la commande",
-             command = self.comment_commande).place(relx=0.5,rely=0.5,anchor='center')
-    
-  def deselectMC(self,name):
-      self.parent.appli.affiche_infos('')
-    
-  def get_groups(self):
-      jdc=self.node.item.object.get_jdc_root()
-      return jdc.get_groups()
-
-  def get_liste_cmd(self):
-      #print "get_liste_cmd",self.node.item.object
-      jdc=self.node.item.object.get_jdc_root()
-      listeCmd = jdc.get_liste_cmd()
-      return listeCmd
-
-  def deselectCmd(self,name):
-      self.parent.appli.affiche_infos('')
-    
-  def execConcept(self):
-      """
-      Nomme le concept SD retourné par l'étape
-      """
-      if not hasattr(self,'valeur_choisie'):
-          nom = self._any.get()
-      else:
-          nom = self.valeur_choisie.get()
-      nom = string.strip(nom)
-      if nom == '' : return # si pas de nom, on ressort sans rien faire ...
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      test,mess = self.node.item.nomme_sd(nom)
-      #self.node.verif()
-      #self.node.racine.update()
-      self.parent.appli.affiche_infos(mess)
-  
-  def changed(self):
-      pass
-
-  def comment_commande(self):
-    """
-    Cette méthode a pour but de commentariser la commande pointée par self.node
-    """
-    # On traite par une exception le cas où l'utilisateur final cherche à désactiver
-    # (commentariser) un commentaire.
-    try :
-        pos=self.node.parent.children.index(self.node)
-        commande_comment = self.node.item.get_objet_commentarise()
-        # On signale au parent du panel (le JDCDisplay) une modification
-        self.parent.init_modif()
-        self.node.parent.children[pos].select()
-    except Exception,e:
-        traceback.print_exc()
-        widgets.showerror("TOO BAD",str(e))
-    return
-
-      
-class Panel_Inactif(Panel):
-  """
-     Cette classe sert à définir un panneau dans lequel on dit que le noeud 
-     sélectionné n'est pas actif
-  """
-  def __init__(self,parent,panneau,node) :
-      self.parent=parent
-      self.panneau = panneau
-      self.node=node
-      Frame.__init__(self,self.panneau)
-      self.place(x=0,y=0,relheight=1,relwidth=1)
-      self.creer_texte()
-
-  def creer_texte(self):
-      texte = "Le noeud sélectionné ne correspond pas à un objet actif\n"
-      texte = texte + "Seules les commandes placées entre \nDEBUT/POURSUITE et FIN sont actives"
-      longueur = int(self.panneau.winfo_width()*0.8)
-      self.label = Label(self,text=texte,wraplength=longueur,justify='center')
-      self.label.place(relx=0.5,rely=0.4,relwidth=0.8,anchor='center')
-      self.bouton_sup = Button(self,
-                               text = "Supprimer",
-                               command=self.supprimer,
-                               width=14)
-      self.bouton_sup.place(relx=0.5,rely=0.8,anchor='center')
-
-
-if __name__ == "__main__" : pass
diff --git a/Editeur/panelsSalome.py b/Editeur/panelsSalome.py
deleted file mode 100644 (file)
index 6381ba7..0000000
+++ /dev/null
@@ -1,286 +0,0 @@
-# -*- coding: utf-8 -*-
-print "Import de panelsSalome"
-
-from Tkinter import *
-from widgets import ListeChoix
-from widgets import showerror
-
-from fonctionpanel      import FONCTION_Panel
-from shellpanel         import SHELLPanel
-from plusieursintopanel import PLUSIEURS_INTO_Panel
-from plusieursassdpanel import PLUSIEURS_ASSD_Panel
-from plusieursbasepanel import PLUSIEURS_BASE_Panel
-from plusieursbasepanel import PLUSIEURS_BASE_OR_UNELISTE_Panel
-from uniquesdcopanel    import UNIQUE_SDCO_Panel
-from uniqueassdpanel    import UNIQUE_ASSD_Panel
-from uniqueintopanel    import UNIQUE_INTO_Panel
-from uniquecomppanel    import UNIQUE_COMP_Panel
-from uniquebasepanel    import UNIQUE_BASE_Panel
-from uniqueassdpanel    import UNIQUE_ASSD_Panel_Reel
-
-from Noyau.N_CR import justify_text
-
-import traceback
-import salome           # CS_pbruno à poubelliser
-import images
-
-
-
-# 2 types de commandes vont etre particularisees dans Salome
-#
-# - un cas general : 
-# Toutes les commandes possedant GROUP_NO ou GROUP_MA
-# seront surchargees d office
-# pour cela on va utiliser le dictionnaire dict_classes_salome
-# qui va permettre de changer la classe de la commande
-# ainsi si un panel en dehors de salome a pour classe PLUSIEURS_BASE_Panel
-# la classe de ce panel devient alors SALOME_PLUSIEURS_BASE_Panel
-# (pour cela voir composimp)
-
-# des commandes "autres" ne pouvant pas etre identifiées par leur nom 
-# il suffit de creer dans la classe SALOME de la commande
-# une fonction portant son nom 
-# Exemple de particularisation d un panel :
-# Supposons que l on veuille particulariser la commande
-#        - LIRE_MAILLAGE_UNITE 
-# le panel initial a pour classe UNIQUE_BASE_Panel
-# il suffit d'ajouter dans la classe derivée SALOME_UNIQUE_BASE_Panel
-# une fonction  SALOME_LIRE_MAILLAGE_UNITE
-# la classe de ce panel devient alors SALOME_UNIQUE_BASE_Panel
-# on peut surcharger les methodes nécessaires (affichage par exemple)  
-
-
-class SALOME_SHELLPanel (SHELLPanel):
-        ""
-
-class SALOME_FONCTION_Panel (FONCTION_Panel):
-        ""
-
-class SALOME_PLUSIEURS_INTO_Panel (PLUSIEURS_INTO_Panel):
-        ""
-
-class SALOME_PLUSIEURS_ASSD_Panel (PLUSIEURS_ASSD_Panel):
-        ""
-
-class SALOME_UNIQUE_INTO_Panel (UNIQUE_INTO_Panel):
-        ""
-
-class SALOME_UNIQUE_SDCO_Panel (UNIQUE_SDCO_Panel):
-        ""
-
-class SALOME_UNIQUE_ASSD_Panel (UNIQUE_ASSD_Panel):
-        ""
-
-class SALOME_UNIQUE_COMP_Panel (UNIQUE_COMP_Panel):
-        ""
-
-class SALOME_UNIQUE_ASSD_Panel_Reel (UNIQUE_ASSD_Panel_Reel):
-        ""
-
-# ------------------------------------------------------------------------------#
-# classe SALOME_PLUSIEURS_BASE_Panel
-#
-# Commandes modifiées  :  
-#        - AFFE_CHAR_MECA_DDL_IMPO_GROUP_NO
-# Methodes surchargées :  
-#        - makeValeurPage(self,page)
-#
-# ------------------------------------------------------------------------------#
-
-class SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel(PLUSIEURS_BASE_OR_UNELISTE_Panel):
-      ""        
-
-class SALOME_PLUSIEURS_BASE_Panel(PLUSIEURS_BASE_Panel):
-
-  def __init__(self,parent,panneau,node):
-      PLUSIEURS_BASE_Panel.__init__( self, parent, panneau, node )
-      #self.selected_valeur = None
-      
-  def add_valeur_plusieurs_base(self,name=None):
-      try: 
-        valeur,validite,commentaire=self.get_valeur()
-        if not valeur: # sélection dans salome        
-            strSelection = ''
-            
-            genea=self.node.item.get_genealogie()
-            kwType = None
-            for e in genea:
-                if "GROUP_NO" in e:
-                    kwType = "GROUP_NO"
-                if "GROUP_MA" in e:
-                    kwType = "GROUP_MA"            
-                
-            selection, msg = self.parent.appli.selectGroupFromSalome(kwType)
-            if selection:
-                for oneSelection in selection:
-                    strSelection +=str( oneSelection )
-                    strSelection +=','
-                            
-                strSelection = strSelection.rstrip(',')
-                self.display_valeur( strSelection )                
-                    
-        PLUSIEURS_BASE_Panel.add_valeur_plusieurs_base( self, name )
-        if msg:
-            self.parent.appli.affiche_infos(msg)
-        self.erase_valeur()
-      except:
-        print ' erreur  add_valeur_plusieurs_base' #CS_pbruno : afficher boite de dialogue ici ?          
-        
-  def makeValeurPage(self,page):
-      """
-      Crée la page de saisie d'une liste de valeurs à priori quelconques,
-      cad qui ne sont  pas à choisir dans une liste prédéfinie
-      """      
-      PLUSIEURS_BASE_Panel.makeValeurPage(self,page)
-      self.c = Button( self.frame_choix, text='Visualiser',command=self.displayInSalomeGeom )      
-      self.c.place( relx=0.3, rely=0.0,relwidth=0.55)
-      
-      
-  def displayInSalomeGeom( self ):
-      if self.selected_valeur:        
-        ok, msgError = self.parent.appli.displayShape( self.selected_valeur )
-        if not ok:
-            self.parent.appli.affiche_infos(msgError)
-      
-      
-
-
-# ------------------------------------------------------------------------------#
-# classe SALOME_UNIQUE_BASE_Panel
-#
-# Commandes modifiées  :  
-#        - LIRE_MAILLAGE_UNITE 
-# Methodes surchargées :  
-#        - makeValeurPage(self,page)
-#
-# ------------------------------------------------------------------------------#
-
-class SALOME_UNIQUE_BASE_Panel(UNIQUE_BASE_Panel):
-
-# ce dictionnaire va servir lors de la sortie d efficas
-# a creer le fichier qui sera integre au config.txt
-# pour relier une unite logique et un nom de fichier
-
-  dict_fichier_unite={}
-
-
-  def SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_N(self):
-      entrychaine=salome.sg.getAllSelected()
-      if entrychaine != '':
-          self.entry2.delete(0,END)
-          try:
-              SO = salome.myStudy.FindObjectID(entrychaine[0])
-          except:
-              boo = 0
-              SO = None
-
-          FileName=''
-          if SO != None:
-              myBuilder = salome.myStudy.NewBuilder()
-              boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeFileType")
-              if boo:
-                 val=FileAttr.Value()
-                 if (val !="FICHIERMED" and val != "FICHIER_RESU_MED"):
-                     boo=0
-                     showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
-                 else:
-                     boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeExternalFileDef")
-              if boo :
-                FileName=FileAttr.Value()
-              else:
-                 showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
-          if FileName != '' :
-              self.entry.delete(0,END)
-              self.entry2.delete(0,END)
-              self.entry.insert(0,FileName)
-              self.entry2.insert(0,FileName)
-              self.valid_valeur()
-
-
-  def SALOME_DONNEES_HOMARD_TRAITEMENT_NOM_MED_MAILLAGE_N(self):
-      EntryName=''
-      entrychaine=salome.sg.getAllSelected()
-      if entrychaine != '':
-          self.entry2.delete(0,END)
-          try:
-              SO = salome.myStudy.FindObjectID(entrychaine[0])
-          except:
-              boo = 0
-              SO = None
-
-          if SO is not None:
-             myBuilder = salome.myStudy.NewBuilder()
-             ok, AtName = myBuilder.FindAttribute(SO,"AttributeName")
-             if ok:
-                EntryName=AtName.Value()
-
-      if EntryName != '':
-          self.entry.delete(0,END)
-          self.entry2.delete(0,END)
-          self.entry.insert(0,EntryName)
-          self.entry2.insert(0,EntryName)
-          self.valid_valeur()
-
-  def SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_NP1(self):
-      self.SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_N()
-
-  def SALOME_DEFI_GROUP_CREA_GROUP_MA_GROUP_MA(self):
-      #try: 
-      if ( 1 == 1 ) :
-        selection, msg = self.parent.appli.selectGroupFromSalome()
-        if selection:
-           strSelection =str( selection )
-           UNIQUE_BASE_Panel.valid_valeur(self,strSelection)
-        if msg:
-            self.parent.appli.affiche_infos(msg)
-        self.erase_valeur()
-      #except:
-      else :
-        print ' erreur  '
-        
-
-  def redistribue_selon_simp(self):
-      genea = self.node.item.get_genealogie()
-      commande="SALOME"
-      for i in range(0,len( genea )) :
-        commande=commande+"_"+ genea[i]
-      # --------------------------------------------------------------
-      # on verifie que la methode n est pas particularise
-      # sinon on appelle SALOME_DEFI_GROUP_CREA_GROUP_MA_GROUP_MA qui
-      # sert comme methode par defaut 
-      # --------------------------------------------------------------
-      try :
-        SALOME_UNIQUE_BASE_Panel.__dict__[commande](self)
-      except :
-         SALOME_UNIQUE_BASE_Panel.SALOME_DEFI_GROUP_CREA_GROUP_MA_GROUP_MA(self)
-
-
-
-  def makeValeurPage(self,page):
-      """
-      Crée la page de saisie d'une valeur à priori quelconque,
-      cad qui ne sont  pas à choisir dans une liste prédéfinie
-      Ajout d'un bouton pour selectionner  à partir de Salome  
-      """      
-      UNIQUE_BASE_Panel.makeValeurPage(self,page)
-      self.b = Button(self.frame_valeur,text='Relier selection',command=self.redistribue_selon_simp)
-      self.b.place(relx=0.28,rely=0.4,relwidth=0.4)
-
-#---------------------------------------------------------------------------------------
-# Correspondances entre les classes eficas et les classes salome_eficas 
-#______________________________________________________________________________________
-dict_classes_salome = { SHELLPanel : SALOME_SHELLPanel, 
-                          FONCTION_Panel       : SALOME_FONCTION_Panel,
-                          PLUSIEURS_INTO_Panel : SALOME_PLUSIEURS_INTO_Panel,
-                          PLUSIEURS_ASSD_Panel : SALOME_PLUSIEURS_ASSD_Panel,
-                          PLUSIEURS_BASE_Panel : SALOME_PLUSIEURS_BASE_Panel,
-                          PLUSIEURS_BASE_OR_UNELISTE_Panel : SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel,
-                          UNIQUE_INTO_Panel :  SALOME_UNIQUE_INTO_Panel,
-                          UNIQUE_SDCO_Panel : SALOME_UNIQUE_SDCO_Panel,
-                          UNIQUE_ASSD_Panel : SALOME_UNIQUE_ASSD_Panel,
-                          UNIQUE_ASSD_Panel_Reel : SALOME_UNIQUE_ASSD_Panel_Reel,
-                          UNIQUE_COMP_Panel : SALOME_UNIQUE_COMP_Panel,
-                          UNIQUE_BASE_Panel : SALOME_UNIQUE_BASE_Panel}
-
-dict_geom_numgroupe = { }
-dict_geom_numface = { }
diff --git a/Editeur/patches.py b/Editeur/patches.py
deleted file mode 100644 (file)
index 0bd2fc4..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-
-"""
-   Ce module contient des modifications mineures du comportement
-   du noyau ou de validation
-"""
-import string
-
-if __name__ == "__main__":
-   import Noyau.N_CR
-   print Noyau.N_CR.encadre_message(motif='!',
-texte="""- Il faut au moins un mot-clé parmi : ('DEBUT', 'POURSUITE')     
-- Il faut au moins un mot-clé parmi : ('FIN',)               
-- Il faut qu'au moins un objet de la liste : ('DEBUT', 'POURSUITE') soit suivi d'au moins un objet de la liste : ('FIN',) 
-ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,yyyyyyyyyyyyyyyy
-""")
-
-
-
diff --git a/Editeur/plusieursassdpanel.py b/Editeur/plusieursassdpanel.py
deleted file mode 100644 (file)
index 88eea05..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import string,types,os
-from Tkinter import *
-import Pmw
-from copy import copy,deepcopy
-import traceback
-
-# Modules Eficas
-import Objecttreeitem
-import prefs
-import panels
-import images
-from widgets import ListeChoix
-from widgets import FenetreDeSelection
-
-from Noyau.N_CR import justify_text
-from utils import substract_list
-
-# Import des panels
-from plusieurspanel import PLUSIEURS_Panel 
-
-class PLUSIEURS_ASSD_Panel(PLUSIEURS_Panel):
-  """
-  Classe définissant le panel associé aux mots-clés qui demandent
-  à l'utilisateur de donner une liste de valeurs qui ne sont pas
-  à choisir dans une liste discrètes et qui sont de type dérivé d'ASSD
-  """
-  def makeValeurPage(self,page):
-      """
-      Génère la page de saisie de plusieurs noms de SD parmi un ensemble discret
-      de SD possibles, cad d'un type cohérent avec les types attendus par le mot-clé simple
-      """
-      # On récupère la bulle d'aide du panneau, l'objet, l'aide, min et max (cardinalité de la liste),
-      # la liste des valeurs déjà affectées à l'objet courant et la liste des SD du bon type
-      bulle_aide=self.get_bulle_aide()
-      self.ajout_valeurs=None
-      objet_mc = self.node.item.get_definition()
-      aide = self.get_aide()
-      aide = justify_text(texte=aide)
-      min,max = self.node.item.GetMinMax()
-      l_valeurs = self.node.item.GetListeValeurs()
-      l_choix=self.node.item.get_sd_avant_du_bon_type()
-      l_choix.sort()
-      # remplissage du panneau
-      self.frame_valeurs = Frame(page)
-      self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7)
-      self.frame_boutons_fleches = Frame(page)
-      self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7)
-      self.frame_choix = Frame(page)
-      self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7)
-      self.frame_boutons = Frame(page)
-      self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=0.5,relheight=0.1)
-      liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
-                                 ("<Button-3>",self.deselectValeur),
-                                 ("<Double-Button-1>",self.sup_valeur_sans_into))
-      liste_commandes_choix = (("<Button-1>",self.selectChoix),
-                               ("<Button-3>",self.deselectChoix),
-                               ("<Double-Button-1>",self.add_eval_valeur_sans_into))
-      self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
-                                      titre="Valeur(s) actuelle(s)")
-      self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,liste_commandes = liste_commandes_choix,
-                                    titre= "Valeurs possibles")
-      self.bouton_add = Button(self.frame_boutons_fleches,
-                          image = images.get_image('arrow_left'),
-                          command = self.add_eval_valeur_sans_into)
-      self.bouton_sup = Button(self.frame_boutons_fleches,
-                          image = images.get_image('arrow_right'),
-                          command = self.sup_valeur_sans_into)
-      self.bouton_accepter = Button(self.frame_boutons,
-                               text='Valider',
-                               command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
-      self.bouton_annuler = Button(self.frame_boutons,
-                              text = 'Annuler',
-                              command = self.annule_modifs_valeur)
-      self.bouton_add.place(relx=0.3,rely=0.35)
-      self.bouton_sup.place(relx=0.3,rely=0.65)
-      for but in (self.bouton_accepter,self.bouton_annuler):
-          but.pack(side='left',padx=4)
-      self.Liste_valeurs.affiche_liste()
-      if len(l_valeurs) > 0 :
-          liste_marque=l_valeurs[-1]
-          self.Liste_valeurs.surligne(liste_marque)
-      self.Liste_choix.affiche_liste()
-      for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
-          fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
-          fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-  
-  def add_eval_valeur_sans_into(self,valeurentree=None):
-      if valeurentree == None:
-         valeurentree = self.get_valeur()
-      valeur,validite=self.node.item.eval_valeur(valeurentree)
-      if not validite :
-         commentaire = "impossible d'évaluer : %s " %`valeurentree`
-         self.parent.appli.affiche_infos(commentaire)
-         return
-      self.add_valeur_sans_into(valeur)
-
-  def get_bulle_aide(self):
-      """
-      Retourne la bulle d'aide associée au panneau
-      """
-      return """Un clic sur une valeur des deux listes la sélectionne.
-      - Un clic sur la flèche gauche stocke la valeur possible sélectionnée
-      dans la liste des valeurs que vous voulez affecter au mot-clé simple
-      - Un clic sur la flèche droite déstocke la valeur du mot-clé simple
-      sélectionnée (elle apparaît alors à nouveau comme choix possible
-      dans la liste des choix à droite)
-      - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées
-      au mot-clé simple courant
-      - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple
-      avant toute modification depuis le dernier 'Valider'"""
-
-  def get_aide(self):
-      """
-      Retourne la phrase d'aide indiquant de quel type doivent être les
-      valeurs que doit entrer l'utilisateur
-      """
-      commentaire=""
-      mc = self.node.item.get_definition()
-      type = mc.type[0].__name__  
-      if len(mc.type)>1 :
-          for typ in mc.type[1:] :
-              type = type + ' ou '+typ.__name__
-      if mc.min == mc.max:
-        commentaire="Une liste de "+`mc.min`+" objets de type "+type+" est attendue"
-      else :
-        commentaire="Une liste d'objets de type "+type+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
-      aideval=self.node.item.aide()
-      commentaire=commentaire +"\n"+ aideval
-      return commentaire
-
-    
-  def sup_valeur(self,name=None):
-      """
-      Supprime la valeur selectionnée de la liste des valeurs et la rajoute
-      à la liste des choix possibles
-      """
-      liste_valeurs = self.Liste_valeurs.get_liste()
-      liste_valeurs.remove(self.selected_valeur)
-      liste_choix = self.node.item.get_definition().into
-      liste_choix = substract_list(liste_choix,liste_valeurs)
-      self.Liste_valeurs.put_liste(liste_valeurs)
-      self.Liste_choix.put_liste(liste_choix)
-      self.selected_valeur = None      
-    
-  def erase_valeur(self):
-      pass
-
-  def get_valeur(self):
-      """
-      Retourne la valeur sélectionnée dans la liste des choix
-      """
-      return self.selected_choix
-
-  def display_valeur(self,val=None):
-      """
-         Affiche la valeur passée en argument dans l'entry de saisie.
-         Par défaut affiche la valeur du mot-clé simple
-      """
-      # Il n'y a pas d'entry pour ce type de panneau
-      return
-
-    
diff --git a/Editeur/plusieursbasepanel.py b/Editeur/plusieursbasepanel.py
deleted file mode 100644 (file)
index 38831dc..0000000
+++ /dev/null
@@ -1,542 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import string,types,os
-from Tkinter import *
-import Pmw
-from copy import copy,deepcopy
-import traceback
-
-# Modules Eficas
-import Objecttreeitem
-import prefs
-import panels
-import images
-from widgets import showinfo
-from widgets import askopenfilename
-from widgets import ListeChoix
-from widgets import FenetreDeSelection
-from widgets import FenetreDeParametre
-
-from Noyau.N_CR import justify_text
-from Ihm.I_LASSD import LASSD
-from Extensions.parametre import PARAMETRE
-
-from utils import substract_list
-from plusieurspanel import PLUSIEURS_Panel
-from uniqueassdpanel import UNIQUE_ASSD_Panel
-
-import fontes
-import math
-
-class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel):
-  """
-  Classe définissant le panel associé aux mots-clés qui demandent
-  à l'utilisateur de donner une liste de valeurs qui ne sont pas
-  à choisir dans une liste discrètes et qui sont de type de base :
-  entier, réel, string,...
-  """
-  def makeValeurPage(self,page):
-      """
-      Crée la page de saisie d'une liste de valeurs à priori quelconques,
-      cad qui ne sont  pas à choisir dans une liste prédéfinie
-      """
-      #print "Methode Utilisée par Salome"
-      # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste),
-      # et la liste des valeurs déjà affectées à l'objet courant
-      bulle_aide=self.get_bulle_aide()
-      objet_mc = self.node.item.get_definition()
-      aide = self.get_aide()
-      aide = justify_text(texte=aide)
-      min,max = self.node.item.GetMinMax()
-      l_valeurs = self.node.item.GetListeValeurs()
-
-      # création des frames globales
-      self.frame1 = Frame(page,relief='groove',bd=2)
-      self.frame2 = Frame(page)
-      self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85)
-      self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15)
-      self.frame_right = Frame(self.frame1)
-      self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.)
-
-      # création des frames internes
-      self.frame_valeurs = Frame(self.frame1)
-      self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95)
-      self.frame_boutons_fleches = Frame(self.frame_right)
-      self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.5)
-      self.frame_choix = Frame(self.frame_right)
-      self.frame_choix.place(relx=0.2,rely=0.2,relwidth=0.7,relheight=0.8)
-      self.frame_aide = Frame(self.frame_right)
-      self.frame_aide.place(relx=0.1,rely=0.8,relwidth=0.8,relheight=0.2)
-      self.frame_boutons = Frame(self.frame2)
-      self.frame_boutons.place(relx=0.2,rely=0.,relwidth=1,relheight=1.)
-      for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs,
-                 self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons):
-          fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
-          fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-
-      # création des objets dans les frames
-      liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
-                                 ("<Button-3>",self.deselectValeur),
-                                 ("<Double-Button-1>",self.sup_valeur_sans_into))
-      self.Liste_valeurs=ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
-                                      titre="Valeur(s) actuelle(s)")
-
-      # Création de l'entry ou de la liste des SD
-      # PN : pour ajouter les validators
-      self.label = Label(self.frame_choix,text="Valeur :")
-      self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base)
-      self.label.place(relx=0.05,rely=0.2)
-
-      # Création d'un bouton "Importer ..." et d'un bouton "Paramatres" sur le panel.
-      bouton_valeurs_fichier = Button(self.frame_choix,
-                                      text="Importer",
-                                      command=self.select_in_file)
-      bouton_valeurs_fichier.place(relx=0.28,rely=0.4,relwidth=0.6)
-      bouton_parametres = Button(self.frame_choix, text="Parametres", command=self.affiche_parametre)
-      bouton_parametres.place(relx=0.28,rely=0.6,relwidth=0.6)
-      self.ajout_valeurs = None
-
-      # boutons Ajouter et Supprimer
-      self.bouton_add = Button(self.frame_boutons_fleches,
-                          image = images.get_image('arrow_left'),
-                          command = self.add_valeur_plusieurs_base)
-      self.bouton_sup = Button(self.frame_boutons_fleches,
-                          image = images.get_image('arrow_right'),
-                          command = self.sup_valeur_sans_into)
-      self.bouton_add.place(relx=0.3,rely=0.35)
-      self.bouton_sup.place(relx=0.3,rely=0.65)
-      # affichage de l'aide
-      self.frame_aide.update()
-      self.aide = Label(self.frame_aide,
-                        text = aide,
-                        justify='center',
-                        anchor='center',
-                              wraplength=int(self.frame_aide.winfo_width()*0.8))
-      self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
-      self.Liste_valeurs.affiche_liste()
-      if len(l_valeurs) > 0 :
-          liste_marque=l_valeurs[-1]
-          self.Liste_valeurs.surligne(liste_marque)
-          self.selectValeur(liste_marque)
-      # boutons Accepter et Annuler
-      self.bouton_accepter = Button(self.frame_boutons,
-                               text='Valider',
-                               command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
-      self.bouton_annuler = Button(self.frame_boutons,
-                              text = 'Annuler',
-                              command = self.annule_modifs_valeur)
-      self.bouton_accepter.place(relx=0.2, rely=0.2,relwidth=0.25)
-      self.bouton_annuler.place(relx=0.5, rely=0.2,relwidth=0.25)
-
-  def affiche_parametre(self) :
-      if self.node.item.get_liste_param_possible() != [ ]:
-         txtparam=""
-         for param in self.node.item.get_liste_param_possible():
-            txtparam=txtparam+repr(param)+"\n"
-         if txtparam=="":
-            showerror("Aucun parametre ","Pas de parametre de ce type")
-         else :
-            try :
-                    self.self.fenetreparam.destroy()
-            except:
-                pass
-            self.fenetreparam=FenetreDeParametre( self, self.node.item, self.parent.appli, txtparam)
-
-  def valid_valeur(self):
-      self.add_valeur_plusieurs_base()
-
-  def add_valeur_plusieurs_base(self,name=None):
-      if name != None :
-         valeur = name
-      else:
-         valeur,validite,commentaire=self.get_valeur()
-         if not validite :
-            self.parent.appli.affiche_infos(commentaire)
-            return
-
-      atraiter=[]
-      if type(valeur)  in (types.ListType,types.TupleType) :
-         indice = 0
-         while (indice < len(valeur)):
-            v=valeur[indice]
-            if self.node.item.wait_complex :
-               if (v== 'RI' or v == 'MP'):
-                  try :
-                     t=tuple([v,valeur[indice+1],valeur[indice+2]])
-                     atraiter.append(t)
-                     indice=indice+3
-                  except :
-                     validite=0
-                     commentaire = "Veuillez entrer le complexe sous forme aster ou sous forme python"
-                     self.parent.appli.affiche_infos(commentaire)
-                     return
-               else :     # ce n'est pas un tuple à la mode aster
-                  atraiter.append(v)
-                  indice = indice + 1
-            else:  # on n'attend pas un complexe
-              atraiter.append(v)
-              indice=indice+1
-      else:
-         atraiter.append(valeur)
-         
-      for valeur in atraiter :
-         encorevalide=self.node.item.valide_item(valeur)
-         if encorevalide :
-            listecourante=self.Liste_valeurs.get_liste()
-            encorevalide=self.node.item.valide_liste_partielle(valeur,listecourante)
-            if not encorevalide : encorevalide = -1
-         self.add_valeur_sans_into(valeur,encorevalide)
-    
-  def select_in_file(self):
-      """ Permet d'ouvrir un fichier choisi par l'utilisateur. """
-      nom_fichier = askopenfilename(title="Choix fichier :")
-
-      if not nom_fichier:
-          return
-
-      try:
-          f = open(nom_fichier, "rb")
-          selection_texte = f.read()
-          f.close()
-          self.ajout_valeurs = FenetreDeSelection(self, 
-                                                  self.node.item,
-                                                  self.parent.appli,
-                                                  titre="Sélection de valeurs",
-                                                  texte=selection_texte)
-      except:
-          traceback.print_exc()
-          showinfo("Erreur de fichier","impossible d'ouvir le fichier "+nom_fichier)
-          
-  def get_bulle_aide(self):
-      """
-      Retourne l'aide associée au panneau courant
-      """
-      return """Taper dans la boîte de saisie de droite la valeur que
-      vous voulez affecter au mot-clé simple.
-      - Cliquez sur la flèche gauche ou pressez <Return> pour la faire glisser
-      dans la liste des valeurs que vous voulez affecter au mot-clé simple
-      - Un clic sur une valeur de la liste la sélectionne
-      - Un clic sur la flèche droite ou un double-clic retire la valeur
-      sélectionnée de la liste
-      - Cliquez sur 'Valider' pour que la nouvelle valeur désirée soit affectée
-      au mot-clé simple
-      - Cliquez sur 'Annuler' pour annuler toutes les modifications faites
-      depuis le dernier clic sur 'Valider'"""
-
-  def get_aide(self):
-      """
-      Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
-      que saisit l'utilisateur
-      """
-      commentaire=""
-      mc = self.node.item.get_definition()
-      d_aides = { 'TXM' : 'chaînes de caractères',
-                  'R'   : 'réels',
-                  'I'   : 'entiers',
-                  'C'   : 'complexes'}
-      type = mc.type[0]
-      if not d_aides.has_key(type) : return 'Type de base inconnu'
-      if mc.min == mc.max:
-          commentaire="Une liste de "+d_aides[type]+" de longueur " + `mc.min`  + " est attendue"
-      else :
-          commentaire="Une liste de "+d_aides[type]+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
-
-      aideval=self.node.item.aide()
-      commentaire=commentaire +"\n"+aideval
-      return commentaire
-
-  def make_entry(self,frame,command,x=0.28,y=0.2):
-      self.entry = Entry(frame,relief='sunken')
-      self.entry.place(relx=0.28,rely=y,relwidth=0.6)
-      self.entry.bind("<Return>",lambda e,c=command:c())
-      self.entry.bind("<KP_Enter>",lambda e,c=command:c())
-      self.entry.focus()
-
-  def get_valeur(self):
-      """
-      Retourne la valeur saisie par l'utilisateur dans self.entry
-      """
-      commentaire = ""
-      if hasattr(self,'entry'):
-         # Traitement d'une entree unique
-         valeurentree = self.entry.get()
-         if (valeurentree == None or valeurentree ==""):
-            return None,0,""
-
-         #On tente une evaluation globale (ne fait pas de vérification de validité
-         #seulement une transformation de la chaine en objet équivalent)
-         valeur,validite=self.node.item.eval_valeur(valeurentree)
-         if valeur == valeurentree:
-             #L'evaluation n'a rien donné : on a toujours la string
-             #on découpe la string sur le séparateur , si c'est possible
-             if valeurentree.find(',') != -1:
-                 valeur=[]
-                 for v in valeurentree.split(','):
-                     vsimple,validite=self.node.item.eval_valeur(v)
-                     valeur.append(vsimple)
-
-         return valeur,validite,commentaire
-
-
-        # if (valeurentree[0] != "(") and (valeurentree.find(',') < len(valeurentree)):
-        #    valeurs=[]
-        #    for v in valeurentree.split(','):
-        #      vsimple,validite=self.node.item.eval_valeur(v)
-              # Pn If ajoute  pour le panneau "double"
-              #if isinstance(vsimple,LASSD) : 
-              #         commentaire = "impossible de mélanger reels et liste prédéfinie"
-              #  validite = 0
-              #         break 
-        #      if validite :
-        #         valeurs.append(vsimple)
-        #      else:
-        #         commentaire = "impossible d'évaluer : %s " %`valeurentree`
-        #         break
-        #    valeur=valeurs
-        # else: 
-        #    valeur,validite=self.node.item.eval_valeur(valeurentree)
-        # if not validite and commentaire == "":
-        #    commentaire = "impossible d'évaluer : %s " %`valeurentree`
-        # return valeur,validite,commentaire
-      #else:
-      #   # Traitement d'une entree de type complexe
-      #   try:
-      #      valeur= (self.typ_cplx.get(),
-      #               string.atof(self.entry1.get()),
-      #               string.atof(self.entry2.get()))
-      #      return valeur,1,""
-      #   except:
-      #      #traceback.print_exc()
-      #      return None,0,"impossible d'évaluer la valeur d'entree"
-
-  def erase_valeur(self):
-      """
-      Efface la valeur donnée par l'utilisateur dans l'entry
-      """
-      if hasattr(self,'entry'):
-         self.entry.delete(0,END)
-      else:
-         self.typ_cplx.set('RI')
-         self.entry1.delete(0,END)
-         self.entry2.delete(0,END)
-
-        
-  def display_valeur(self,val=None):
-      """
-      Affiche la valeur passée en argument dans l'entry de saisie.
-      Par défaut affiche la valeur du mot-clé simple
-      """
-      if not val :
-          valeur = self.node.item.object.getval()
-      else:
-          valeur = val
-      if not valeur : return
-
-      if hasattr(self,'entry'):
-         # Traitement d'une entree unique
-         self.entry.delete(0,END)
-         self.entry.insert(0,str(valeur))
-      else:
-         # Traitement d'une entree de type complexe
-         typ_cplx,x1,x2=valeur
-         self.entry1.delete(0,END)
-         self.entry2.delete(0,END)
-         self.typ_cplx.set(typ_cplx)
-         self.entry1.setentry(x1)
-         self.entry2.setentry(x2)
-
-class PLUSIEURS_BASE_OR_UNELISTE_Panel(PLUSIEURS_BASE_Panel,UNIQUE_ASSD_Panel):
-
-  def makeValeurPage(self,page):
-      """
-      Crée la page de saisie d'une liste de valeurs à priori quelconques,
-      cad qui ne sont  pas à choisir dans une liste prédéfinie
-      """
-      # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste),
-      # et la liste des valeurs déjà affectées à l'objet courant
-      bulle_aide=self.get_bulle_aide()
-      objet_mc = self.node.item.get_definition()
-      aide = self.get_aide()
-      aide = justify_text(texte=aide)
-      aide2 = self.get_aide2()
-      aide2 = justify_text(texte=aide2)
-      min,max = self.node.item.GetMinMax()
-      l_valeurs = self.node.item.GetListeValeurs()
-      for i in l_valeurs:
-         if isinstance(i,LASSD) :
-            affiche_entry=l_valeurs
-            l_valeurs=()
-
-      # Il faut traiter ici pour avoir le choix entre une liste
-      # deja constituee (listr8aster) ou manuelle
-
-      # création des frames globales
-      self.frame1 = Frame(page,relief='groove',bd=2)
-      self.frame2 = Frame(page)
-      self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.9)
-      self.frame2.place(relx=0.,rely=0.9,relwidth=1,relheight=0.1)
-
-      # création des frames internes dans frame1
-      self.frame_valeurs = Frame(self.frame1)
-      self.frame_valeurs.place(relx=0.02,rely=0.55,relwidth=0.35,relheight=0.45)
-      self.frame_haut = Frame(self.frame1)
-      self.frame_haut.place(relx=0.02,rely=0.02,relwidth=0.98,relheight=0.45)
-      self.frame_bas = Frame(self.frame1)
-      self.frame_bas.place(relx=0.37,rely=0.55,relwidth=0.63,relheight=0.45)
-
-      # création des frames internes dans frame_right
-      self.frame_fleches = Frame(self.frame_bas)
-      self.frame_fleches.place(relx=0.,rely=0.4,relwidth=0.2,relheight=0.5)
-      self.frame_choix = Frame(self.frame_bas)
-      self.frame_choix.place(relx=0.2,rely=0.1,relwidth=0.75,relheight=1)
-
-      # affichage de l'aide
-      self.aide = Label(self.frame_haut, text = aide, justify='center', anchor='center',)
-      self.aide.place(relx=0.72,rely=0.25,anchor='center',relwidth=1)
-      self.aide2 = Label(self.frame2, text = aide2,)
-      self.aide2.place(relx=0.4,rely=0.01,relwidth=0.6)
-
-      # Création d'un bouton "Importer ..." et d'un bouton "Parametres" sur le panel.
-      bouton_valeurs_fichier = Button(self.frame_choix,
-                                      text="Importer",
-                                      command=self.select_in_file)
-      bouton_valeurs_fichier.place(relx=0.28,rely=0.0,relwidth=0.6)
-      bouton_parametres = Button(self.frame_choix, text="Parametres", command=self.affiche_parametre)
-      bouton_parametres.place(relx=0.28,rely=0.25,relwidth=0.6)
-      self.ajout_valeurs = None
-
-
-      # Création de la liste des SD
-      liste_noms_sd = self.node.item.get_sd_avant_du_bon_type_pour_type_de_base()
-      liste_noms_sd = self.tri(liste_noms_sd)
-      self.listbox = Pmw.ScrolledListBox(self.frame_haut,
-                        items=liste_noms_sd,
-                labelpos='n',
-                #label_text="Structures de données du type\n requis parl'objet courant :",
-                label_text="Listes du type\n requis parl'objet courant :",
-                listbox_height = 6,
-                dblclickcommand=lambda s=self,c=UNIQUE_ASSD_Panel.valid_valeur : s.choose_valeur_from_list(c))
-      self.listbox.place(relx=0.00,rely=0.00,relwidth=0.4)
-
-      # On eneleve le label pour gagner de la place 
-      #self.label = Label(self.frame_choix,text="Valeur :")
-      #self.label.place(relx=0.05,rely=0.85)
-      self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base,x=0.28,y=0.55)
-      
-      # boutons Ajouter et Supprimer
-      bouton_add = Button(self.frame_fleches, image = images.get_image('arrow_left'),
-                          command = self.add_valeur_plusieurs_base)
-      bouton_sup = Button(self.frame_fleches, image = images.get_image('arrow_right'),
-                          command = self.sup_valeur_sans_into)
-      bouton_add.place(relx=0.2,rely=0.25)
-      bouton_sup.place(relx=0.2,rely=0.70)
-
-
-      # boutons Accepter et Annuler dans frame2
-      bouton_accepter = Button(self.frame2, text='Valider',
-                               command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
-      bouton_annuler = Button(self.frame2, text = 'Annuler',
-                              command = self.annule_modifs_valeur)
-      for but in (bouton_accepter,bouton_annuler):
-          but.pack(side='left',padx=5)
-
-      # création des objets dans les frames
-      liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
-                                 ("<Button-3>",self.deselectValeur),
-                                 ("<Double-Button-1>",self.sup_valeur_sans_into))
-      self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,
-                                      liste_commandes = liste_commandes_valeurs,
-                                      titre="Valeur(s) non-prédéfinies(s)",
-                                      fonte_titre=None
-                                      )
-
-      for fram in (self.frame1,self.frame2,self.frame_bas,self.frame_haut,self.frame_valeurs,
-                 self.frame_fleches,self.frame_choix):
-          fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide: s.parent.appli.affiche_aide(e,a))
-          fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-
-      self.Liste_valeurs.affiche_liste()
-      if len(l_valeurs) > 0 :
-          liste_marque=l_valeurs[-1]
-          self.Liste_valeurs.surligne(liste_marque)
-      
-  def get_aide(self):
-      """
-      Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
-      saisies par l'utilisateur
-      """
-      commentaire="Ce motclef accepte soit un nom de liste déja définie soit une liste manuelle de valeurs"
-      return commentaire
-
-  def get_aide2(self):
-      min,max = self.node.item.GetMinMax()
-      aideval=self.node.item.aide()
-      commentaire="min : " + str(min) + ", max : " + str(max)
-      aideval=commentaire + aideval
-      return aideval
-
-  def choose_valeur_from_list(self,command):
-      """
-      Affecte à valeur choisie la sélection courante dans la liste des choix proposés
-      Exécute command
-      """
-      self.Liste_valeurs.liste=[]
-      self.Liste_valeurs.affiche_liste()
-      if len(self.listbox.get()) == 0 : return
-      choix = self.listbox.getcurselection()[0]
-      d={}
-      d["valeurentree"]=choix
-      apply(command,(self,),d)
-     
-
-
-  def tri(self,liste_noms_sd):
-      a=(3+8j)
-      d_types = { 'TXM' : type('A'),
-                  'R'   : type(3.),
-                  'I'   : type(0),
-                  'C'   : type(a)}
-
-      # On enleve seulement ceux qu'on peut
-      # Sur certaines listes, il est possible qu'on ne 
-      # sache pas déterminer le type
-      listefinale=[]
-      typespossibles=self.node.item.object.definition.type
-      typecherche = None
-      for t in typespossibles:
-          if t in d_types.keys() :
-             typecherche = d_types[t]
-             break
-      for liste in liste_noms_sd:
-          valeur,validite=self.node.item.eval_valeur(liste)
-          for mc in valeur.etape.mc_liste :
-              try :
-                 if type(mc.valeur)  in (types.ListType,types.TupleType) :
-                    typeliste=type(mc.valeur[0])
-                 else :
-                    typeliste=type(mc.valeur)
-                 if type(mc.valeur[0]) == typecherche:
-                    listefinale.append(liste)
-              except:
-                 listefinale.append(liste)
-      return listefinale
-
diff --git a/Editeur/plusieursintopanel.py b/Editeur/plusieursintopanel.py
deleted file mode 100644 (file)
index 1854e86..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import string,types,os
-from Tkinter import *
-import Pmw
-from copy import copy,deepcopy
-import traceback
-
-# Modules Eficas
-import Objecttreeitem
-import prefs
-import panels
-import images
-from widgets import ListeChoix
-from widgets import FenetreDeSelection
-
-from Noyau.N_CR import justify_text
-from utils import substract_list
-
-# Import des panels
-from plusieurspanel import PLUSIEURS_Panel
-
-class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel):
-  """
-  Classe servant à définir le panneau permettant d'afficher et de saisir une
-  liste de valeurs à choisir parmi une liste discrètes de valeurs possibles
-  """
-  def makeValeurPage(self,page):
-      """
-      Génère la page de saisie de plusieurs valeurs parmi un ensemble discret
-      de possibles
-      """
-      self.ajout_valeurs = None
-      # On récupère la bulle d'aide du panneau, l'objet, min et max (cardinalité de la liste),
-      # la liste des choix et la liste des valeurs
-      aide = self.get_aide()
-      aide = justify_text(texte=aide)
-      bulle_aide=self.get_bulle_aide()
-      objet_mc = self.node.item.get_definition()
-      min,max = self.node.item.GetMinMax()
-      #l_choix=list(objet_mc.into)
-      l_valeurs = self.node.item.GetListeValeurs()
-      l_choix= self.node.item.get_liste_possible(l_valeurs)
-      # reinitialisation de l_valeurs
-      l_valeurs = self.node.item.GetListeValeurs()
-
-      # remplissage du panneau
-      self.frame_valeurs = Frame(page)
-      self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7)
-      self.frame_boutons_fleches = Frame(page)
-      self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7)
-      self.frame_choix = Frame(page)
-      self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7)
-      self.frame_boutons = Frame(page)
-      self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=1,relheight=0.1)
-      self.frame_aide = Frame(page)
-      self.frame_aide.place(relx=0.1,rely=0.75,relwidth=1,relheight=0.15)
-      liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
-                                 ("<Button-3>",self.deselectValeur),
-                                 ("<Double-Button-1>",self.sup_valeur))
-      liste_commandes_choix = (("<Button-1>",self.selectChoix),
-                               ("<Button-3>",self.deselectChoix),
-                               ("<Double-Button-1>",self.add_choix))
-      self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,
-                                      l_valeurs,liste_commandes = liste_commandes_valeurs,
-                                      titre="Valeur(s) actuelle(s)")
-      self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,
-                                    liste_commandes = liste_commandes_choix,
-                                    titre= "Valeurs possibles")
-      self.bouton_add = Button(self.frame_boutons_fleches,
-                          #text="<--",
-                          image = images.get_image('arrow_left'),
-                          command = self.add_choix)
-      self.bouton_sup = Button(self.frame_boutons_fleches,
-                          #text="-->",
-                          image = images.get_image('arrow_right'),
-                          command = self.sup_valeur)
-      self.bouton_accepter = Button(self.frame_boutons,
-                               text='Valider',
-                               command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
-      self.bouton_annuler = Button(self.frame_boutons,
-                              text = 'Annuler',
-                              command = self.annule_modifs_valeur)
-      self.bouton_add.place(relx=0.3,rely=0.35)
-      self.bouton_sup.place(relx=0.3,rely=0.65)
-      for but in (self.bouton_accepter,self.bouton_annuler):
-          but.pack(side='left',padx=3)
-      self.Liste_valeurs.affiche_liste()
-      if len(l_valeurs) > 0 :
-          liste_marque=l_valeurs[-1]
-          self.Liste_valeurs.surligne(liste_marque)
-          self.selectValeur(l_valeurs[-1])
-      self.Liste_choix.affiche_liste()
-      for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
-          fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
-          fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-      self.frame_aide.update()
-      self.aide = Label(self.frame_aide,
-                        text = aide,
-                        justify='center',
-                        anchor='center')
-                        #wraplength=int(self.frame_aide.winfo_width()*0.8))
-      self.aide.place(relx=0.3,rely=0.5,anchor='center',relwidth=1)
-
-  def get_aide(self):
-      """
-      Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
-      que saisit l'utilisateur
-      """
-      commentaire=""
-      mc = self.node.item.get_definition()
-      d_aides = { 'TXM' : 'chaînes de caractères',
-                  'R'   : 'réels',
-                  'I'   : 'entiers',
-                  'C'   : 'complexes'}
-      type = mc.type[0]
-      if not d_aides.has_key(type) : 
-         if mc.min == mc.max:
-            return str(mc.min)+" valeur(s) est(sont) attendue(s)"
-         else :
-            return "entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs"
-      if mc.min == mc.max:
-            commentaire="Une liste de "+str(mc.min)+" "+d_aides[type]+" est attendue"
-      else :
-            commentaire="Entre "+str(mc.min)+" et "+str(mc.max)+" valeurs de type  "+d_aides[type]+" sont attendues"
-      aideval=self.node.item.aide()
-      commentaire=commentaire + "\n" + aideval
-      return commentaire
-
-  def get_bulle_aide(self):
-      """
-      Retourne la bulle d'aide du panneau (affichée par clic droit)
-      """
-      return """Un clic sur une valeur des deux listes la sélectionne.
-      - Un clic sur la flèche gauche stocke la valeur possible sélectionnée
-      dans la liste des valeurs que vous voulez affecter au mot-clé simple
-      - Un clic sur la flèche droite déstocke la valeur du mot-clé simple
-      sélectionnée (elle apparaît alors à nouveau comme choix possible
-      dans la liste des choix à droite)
-      - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées
-      au mot-clé simple courant
-      - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple
-      avant toute modification depuis le dernier 'Valider'"""
-
diff --git a/Editeur/plusieurspanel.py b/Editeur/plusieurspanel.py
deleted file mode 100644 (file)
index ba64144..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import string,types,os
-from Tkinter import *
-import Pmw
-from copy import copy,deepcopy
-import traceback
-
-# Modules Eficas
-import Objecttreeitem
-import prefs
-import panels
-import images
-from widgets import ListeChoix
-from widgets import FenetreDeSelection
-
-from Noyau.N_CR import justify_text
-from utils import substract_list
-
-# Import des panels
-from  newsimppanel import newSIMPPanel
-
-
-class PLUSIEURS_Panel(newSIMPPanel):
-  """
-  Classe virtuelle servant de classe mère à toutes celles définissant
-  un panneau pour un mot-clé simple qui attend une liste de valeurs
-  """
-  def accepte_modifs_valeur(self,min,max,liste=None):
-      """
-      Méthode qui récupère la liste des valeurs donnée par l'utilisateur
-      et l'affecte au mot-clé courant.
-      le parametre None n'est pas rempli sauf par l appel a partir de fonctionpanel
-      """
-      if liste==None:
-         l1_valeurs = self.Liste_valeurs.get_liste()
-      else:
-         l1_valeurs = liste
-
-      #nettoyage de la liste
-      l_valeurs=[]
-      for  val in l1_valeurs :
-        if val != '' and val != None :
-           l_valeurs.append(val)
-    
-      longueur = len(l_valeurs)
-      if longueur < min or longueur > max :
-          self.parent.appli.affiche_infos("Valeur refusée : nombre d'éléments incorrect dans la liste")
-          return
-      if longueur > 1:
-         valeur = tuple(l_valeurs)
-      elif longueur == 1:
-         valeur = l_valeurs[0]
-      else:
-         valeur = None
-
-      self.parent.appli.affiche_infos("Valeur acceptée")
-      self.record_valeur(valeur)
-      # fermeture de la fenêtre de sélection
-      if self.ajout_valeurs:
-          self.ajout_valeurs.quit()
-          
-  def annule_modifs_valeur(self):
-      """
-      RAZ de la liste des valeurs (annule toutes les valeurs saisies par l'utilisateur)
-      """
-      self.node.select()
-      # fermeture de la fenêtre de sélection
-      if self.ajout_valeurs:
-          self.ajout_valeurs.quit()
-          
-  def add_valeur_sans_into(self,name=None,encorevalide=1):
-      """
-      Tente d'ajouter la valeur fournie (name) à la liste courante :
-        - si la valeur est acceptable, elle est ajoutée dans la liste des valeurs
-        - sinon elle est refusée
-
-      encorevalide peut prendre les valeurs suivantes :
-
-                   - valeur 1 si le validateur trouve l item et la liste correctes
-                   - valeur 0 si le validateur trouve la valeur de l item incorrecte
-                   - valeur -1 si le validateur trouve la liste incorrecte
-      """
-      valeur = name
-      commentaire="Valeur incorrecte : ajout à la liste refusé"
-      testvalide=1
-
-      # Pas de traitement des valeurs nulles ( a priori clic involontaire
-      if (valeur == None or valeur =="") :
-          commentaire = "Pas de saisie des valeurs nulles"
-          encorevalide = -2 
-          testtype=0
-      else :
-          testtype,comment = self.node.item.object.verif_type(valeur)
-          if not testtype :
-               commentaire =comment
-               encorevalide=-2
-                
-      if (encorevalide ==0) :
-         commentaire=self.node.item.info_erreur_item()
-      if (encorevalide == -1) :
-         commentaire=self.node.item.info_erreur_liste()
-         # On traite le cas ou la liste n est pas valide pour un pb de cardinalite
-         min,max = self.node.item.GetMinMax()
-         if len(self.Liste_valeurs.get_liste()) >= max : 
-            commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
-
-      if testvalide and (encorevalide == 1):
-         min,max = self.node.item.GetMinMax()
-
-         if testtype :
-            liste_valeurs = self.Liste_valeurs.get_liste()
-            if len(liste_valeurs) >= max :
-                commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
-            else :
-               if (self.Liste_valeurs.selection != None):
-                   ligne=self.Liste_valeurs.cherche_selected_item()
-                   liste_valeurs.insert(ligne,valeur)
-               else :
-                   liste_valeurs.append(valeur)
-               try :
-                  self.set_valeur_texte(str(self.entry.get()))
-               except :
-                  pass
-               self.Liste_valeurs.put_liste(liste_valeurs)
-               self.erase_valeur()
-               commentaire="Nouvelle valeur acceptée"
-         else :
-            commentaire ="Type de la valeur incorrecte"
-
-      self.parent.appli.affiche_infos(commentaire)
-
-  def sup_valeur_sans_into(self,name=None):
-      """
-      Méthode qui sert à retirer de la liste des valeurs la valeur sélectionnée
-      """
-      try:
-          self.Liste_valeurs.remove_selected_item()
-          self.display_valeur(self.selected_valeur)
-          self.selected_valeur = None      
-      except:
-          # la valeur sélectionnée n'est pas dans la liste
-          return
-
-  def display_valeur(self,val=None):
-      """
-      Affiche la valeur passée en argument dans l'entry de saisie.
-      Par défaut affiche la valeur du mot-clé simple
-      """
-      if not val :
-          #valeur = self.node.item.getval()
-          valeur = self.node.item.object.getval()
-      else:
-          valeur = val
-      self.entry.delete(0,END)
-      if not valeur : return
-      self.entry.insert(0,str(valeur))
-      
diff --git a/Editeur/readercata.py b/Editeur/readercata.py
deleted file mode 100644 (file)
index 1555f38..0000000
+++ /dev/null
@@ -1,450 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-    Ce module sert à lire un catalogue et à construire
-    un objet CataItem pour Eficas.
-    Il s'appuie sur la classe READERCATA
-"""
-# Modules Python
-import time
-import os,sys,py_compile
-import traceback
-import cPickle
-import Pmw
-
-# Modules Eficas
-import prefs
-import splash
-import fontes
-import analyse_catalogue
-from Noyau.N_CR import CR
-from widgets import showinfo,showerror
-from widgets import Fenetre
-from utils import init_rep_cata_dev
-
-#import catabrowser
-import autre_analyse_cata
-import uiinfo
-import re
-
-class READERCATA:
-
-   menu_defs=[
-              ('Catalogue',[
-                           ("Rapport de validation catalogue",'visuCRCATA'),
-                         ]
-              )
-             ]
-
-   button_defs=[]
-
-   def __init__(self,appli,parent):
-      self.appli=appli
-      self.parent=parent
-      self.code=self.appli.code
-      self.appli.format_fichier.set('python')
-      self.version_code=self.appli.version_code
-      self.fic_cata=None
-      self.OpenCata()
-      self.cataitem=None
-
-   def OpenCata(self):
-      """ 
-          Ouvre le catalogue standard du code courant, cad le catalogue présent
-          dans le répertoire Cata 
-      """
-      message1 = "Compilation des fichiers Eficas \n\n Veuillez patienter ..."
-      if self.appli.test == 0 :
-         splash._splash.configure(text = message1)
-      self.configure_barre(4)
-
-      liste_cata_possibles=[]
-      for catalogue in self.appli.CONFIGURATION.catalogues:
-          if catalogue[0] == self.code :
-             liste_cata_possibles.append(catalogue)
-
-      if len(liste_cata_possibles)==0:
-          showerror("Import du catalogue","Pas de catalogue defini pour le code %s" % self.code)
-          self.appli.quit()
-          sys.exit(1)
-
-      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.appli.format_fichier.set(cata[3])
-      elif len(liste_cata_possibles)==1:
-          self.fic_cata = liste_cata_possibles[0][2]
-          self.code = self.appli.CONFIGURATION.catalogues[0][0]
-          self.version_code = liste_cata_possibles[0][1]
-          self.appli.format_fichier.set(liste_cata_possibles[0][3])
-      else:
-          # plusieurs catalogues sont disponibles : il faut demander à l'utilisateur
-          # lequel il veut utiliser ...
-          self.ask_choix_catalogue()
-
-      if self.fic_cata == None :
-          print "Pas de catalogue pour code %s, version %s" %(self.code,self.version_code)
-          sys.exit(0)
-
-      # Determinination du repertoire materiau
-      v_codeSansPoint=self.version_code
-      v_codeSansPoint=re.sub("\.","",v_codeSansPoint)
-      chaine="rep_mat_"+v_codeSansPoint
-      if hasattr(self.appli.CONFIGURATION,chaine):
-          a=getattr(self.appli.CONFIGURATION,chaine)
-      else :
-          try :
-             a=self.appli.CONFIGURATION.dRepMat[self.version_code]
-          except :
-             print "Probleme avec le repertoire materiau"
-             a='.'
-      self.appli.CONFIGURATION.rep_mat=a 
-
-      # détermination de fic_cata_c et fic_cata_p
-      self.fic_cata_c = self.fic_cata + 'c'
-      self.fic_cata_p = os.path.splitext(self.fic_cata)[0]+'_pickled.py'
-
-      #if self.appli.test == 0 :
-      #   splash._splash.configure(text = "Debut compil cata: %d s" % time.clock())
-      # compilation éventuelle du catalogue
-      #test = self.compile_cata(self.fic_cata,self.fic_cata_c)
-      #self.update_barre()
-      #if self.appli.test == 0 :
-      #   splash._splash.configure(text = "Fin compil cata: %d s" % time.clock())
-      #if not test : showerror("Compilation catalogue","Impossible de compiler le catalogue %s" %self.fic_cata)
-
-      # import du catalogue
-      if self.appli.test == 0 :
-         splash._splash.configure(text = "Debut import_cata: %d s" % time.clock())
-      self.cata = self.import_cata(self.fic_cata)
-      self.update_barre()
-      if self.appli.test == 0 :
-         splash._splash.configure(text = "Fin import_cata: %d s" % time.clock())
-      if not self.cata : 
-          showerror("Import du catalogue","Impossible d'importer le catalogue %s" %self.fic_cata)
-          self.appli.quit()
-          sys.exit(1)
-      #
-      # analyse du catalogue (ordre des mots-clés)
-      #
-      if self.appli.test == 0 :
-         splash._splash.configure(text = "Debut Retrouve_Ordre: %d s" % time.clock())
-      # Retrouve_Ordre_Cata_Standard fait une analyse textuelle du catalogue
-      # remplacé par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation
-      # des mots clés à la création
-      #self.Retrouve_Ordre_Cata_Standard()
-      self.Retrouve_Ordre_Cata_Standard_autre()
-      self.update_barre()
-      if self.appli.test == 0 :
-         splash._splash.configure(text = "Fin Retrouve_Ordre: %d s" % time.clock())
-      #
-      # analyse des données liées à l'IHM : UIinfo
-      #
-      uiinfo.traite_UIinfo(self.cata)
-      self.update_barre()
-
-      #
-      # traitement des clefs documentaires
-      #
-      self.traite_clefs_documentaires()
-
-      # chargement et analyse des catalogues développeur (le cas échéant)
-      #
-      if self.appli.CONFIGURATION.isdeveloppeur == 'OUI' :
-          init_rep_cata_dev(self.fic_cata,self.appli.CONFIGURATION.path_cata_dev)
-          fic_cata_dev = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py')
-          if os.path.isfile(fic_cata_dev):
-              # il y a bien un catalogue développeur : il faut récupérer le module_object associé ...
-              test = self.compile_cata(fic_cata_dev,fic_cata_dev+'c')
-              if not test :
-                  showinfo("Compilation catalogue développeur",
-                           "Erreur dans la compilation du catalogue développeur")
-                  self.cata = (self.cata,)
-              else:
-                  self.cata_dev =self.import_cata(fic_cata_dev)
-                  #self.Retrouve_Ordre_Cata_Developpeur()
-                  self.Retrouve_Ordre_Cata_Developpeur_autre()
-                  self.cata = (self.cata,self.cata_dev)
-          else:
-              self.cata = (self.cata,)
-      else:
-          self.cata = (self.cata,)
-      titreSuite=" avec le catalogue " + os.path.basename(self.fic_cata)
-      titre=self.appli.titre+titreSuite
-      if self.appli.top:
-        self.appli.top.title(titre)
-      self.appli.titre=titre
-
-       
-   def import_cata(self,cata):
-      """ 
-          Réalise l'import du catalogue dont le chemin d'accès est donné par cata
-      """
-      if self.appli.test == 0 :
-         splash._splash.configure(text = "Chargement du catalogue")
-      nom_cata = os.path.splitext(os.path.basename(cata))[0]
-      rep_cata = os.path.dirname(cata)
-      sys.path[:0] = [rep_cata]
-      try :
-          o=__import__(nom_cata)
-          return o
-      except Exception,e:
-          traceback.print_exc()
-          return 0
-
-   def Retrouve_Ordre_Cata_Standard_autre(self):
-      """ 
-          Construit une structure de données dans le catalogue qui permet
-          à EFICAS de retrouver l'ordre des mots-clés dans le texte du catalogue.
-          Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui
-          contient le nom des mots clés dans le bon ordre
-      """ 
-      self.cata_ordonne_dico,self.appli.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata)
-
-   def Retrouve_Ordre_Cata_Standard(self):
-      """ 
-          Retrouve l'ordre des mots-clés dans le catalogue, cad :
-           - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer
-               l'ordre des mots-clés dans le catalogue
-           - s'il n'a pas été modifié, relie le fichier pickle 
-      """
-      time1 = os.path.getmtime(self.fic_cata)
-      try :
-          time2 = os.path.getmtime(self.fic_cata_p)
-      except:
-          time2 = 0
-      if time2 > time1 :
-          # l'objet catalogue n'a pas été modifié depuis le dernier "pickle"
-          self.Get_Ordre_Cata()
-      else :
-          # le catalogue a été modifié depuis le dernier "pickle" :
-          # il faut retrouver l'ordre du catalogue et refaire pickle
-          self.Get_Ordre_Cata(mode='cata')
-      self.appli.affiche_infos("Catalogue standard chargé")
-
-   def Retrouve_Ordre_Cata_Developpeur(self):
-      """ 
-          Retrouve l'ordre des mots-clés dans le catalogue, cad :
-          - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer
-            l'ordre des mots-clés dans le catalogue
-          - s'il n'a pas été modifié, relie le fichier pickle 
-      """
-      if self.code != 'ASTER' : return
-      fic_cata = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py')
-      message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev
-      if self.appli.test == 0 :
-         splash._splash.configure(text = message,barre='oui')
-      cata_dev_ordonne = analyse_cata.analyse_catalogue(self,self.fic_cata)
-      self.cata_dev_ordonne_cr = cata_dev_ordonne.cr
-      cata_dev_ordonne_dico = cata_dev_ordonne.entites
-      self.cata_ordonne_dico.update(cata_dev_ordonne_dico)
-      self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" )
-
-   def Retrouve_Ordre_Cata_Developpeur_autre(self):
-      """
-          Retrouve l'ordre des mots-clés dans le catalogue, cad :
-          - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer
-            l'ordre des mots-clés dans le catalogue
-          - s'il n'a pas été modifié, relie le fichier pickle
-      """
-      if self.code != 'ASTER' : return
-      message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev
-      if self.appli.test == 0 :
-         splash._splash.configure(text = message,barre='oui')
-      cata_dev_ordonne_dico,self.appli.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata)
-      self.cata_ordonne_dico.update(cata_dev_ordonne_dico)
-      self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" )
-
-   def Get_Ordre_Cata(self,mode='pickle'):
-      """ 
-          Retrouve l'ordre du catalogue :
-            - mode='pickle ': tente de relire le fichier pickle et sinon lance l'analyse du catalogue
-            - mode='cata'   : force l'analyse du catalogue directement sans relire le pickle
-      """
-      if mode == 'pickle' :
-          try:
-              f = open(self.fic_cata_p)
-              u = cPickle.Unpickler(f)
-              if self.appli.test == 0 :
-                 splash._splash.configure(text = "Analyse du catalogue")
-              self.cata_ordonne_dico = u.load()
-              f.close()
-          except :
-              # on peut ne pas arriver à relire le fichier pickle s'il a été altéré
-              # ou (le plus probable) s'il a été créé sous un autre OS
-              self.Get_Ordre_Cata(mode='cata')
-      elif mode == 'cata':
-          if self.appli.test == 0 :
-              splash._splash.configure(text = "Analyse du catalogue",barre='oui')
-          cata_ordonne = analyse_catalogue.analyse_catalogue(self,self.fic_cata)
-          self.cata_ordonne_cr = cata_ordonne.cr
-          self.cata_ordonne_dico = cata_ordonne.entites
-          splash._splash.configure(text = "Sauvegarde des informations sur le catalogue")
-          f = open(self.fic_cata_p,'w+')
-          p = cPickle.Pickler(f)
-          p.dump(self.cata_ordonne_dico)
-          f.close()
-      else :
-          raise Exception("Appel à un mode inconnu de Get_Ordre_Cata : %s" % mode)
-          return
-
-   def ask_choix_catalogue(self):
-      """
-      Ouvre une fenêtre 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 = {}
-      defaut = None
-      for catalogue in self.appli.CONFIGURATION.catalogues:
-          if catalogue[0] == self.code :
-              self.dico_catalogues[catalogue[1]] = catalogue
-              if len(catalogue) == 5 :
-                  if catalogue[4]=='defaut' : defaut = catalogue[1]
-      liste_choix = self.dico_catalogues.keys()
-      liste_choix.sort()
-      # test si plusieurs catalogues ou non
-      if len(liste_choix) == 0:
-          showerror("Aucun catalogue déclaré pour %s" %self.code)
-          self.appli.quit()
-          sys.exit(1)
-      elif len(liste_choix) == 1:
-          self.fic_cata = self.dico_catalogues[liste_choix[0]][2]
-          self.version_code = liste_choix[0]
-          return
-      # création d'une boîte de dialogue modale
-      self.fenetre_choix_cata = Pmw.Dialog(splash._splash, #avec self.parent, ne marche pas sous Windows
-                                           buttons=('OK','ANNULER'),
-                                           defaultbutton = 'OK',
-                                           title = "Choix d'une version du code %s" %self.code,
-                                           command = self.chooseCata)
-      # construction des radioboutons
-      label = `len(liste_choix)`+' versions du code %s sont disponibles\n' %self.code
-      label = label + 'Veuillez choisir celle avec laquelle vous souhaitez travailler :'
-      self.radiobutton = Pmw.RadioSelect(self.fenetre_choix_cata.interior(),
-                                         buttontype='radiobutton',
-                                         labelpos = 'w',
-                                         label_text = label,
-                                         label_font = fontes.standard,
-                                         orient='vertical')
-      for choix in liste_choix :
-          self.radiobutton.add(choix)
-      if defaut == None :
-          # aucun catalogue par défaut n'a été spécifié dans Accas/editeur.ini
-          defaut = liste_choix[0]
-      self.radiobutton.invoke(defaut)
-      self.radiobutton.pack(fill='x',padx=10,pady=10)
-      # centrage de la fenêtre
-      self.fenetre_choix_cata.activate(geometry='centerscreenalways')
-
-   def chooseCata(self,txt):
-      """ 
-          Méthode activée lorsque l'utilisateur a fait son choix et cliqué sur 'OK' ou sur 'ANNULER'
-      """
-      if txt == 'OK' :
-          version_cata = self.radiobutton.getcurselection()
-          self.fic_cata = self.dico_catalogues[version_cata][2]
-          self.version_code = version_cata
-          self.appli.format_fichier.set(self.dico_catalogues[version_cata][3])
-          self.fenetre_choix_cata.destroy()
-      else:
-          self.parent.destroy()
-
-   def compile_cata(self,cata,catac):
-      """ 
-           Teste si le catalogue a bien besoin d'être recompilé et si oui, le compile et
-           affiche un message dans le splash . Retourne 1 si la compilation s'est bien déroulée,
-           0 sinon.
-      """
-      time1 = os.path.getmtime(cata)
-      try:
-          time2 = os.path.getmtime(catac)
-      except:
-          time2 = 0
-      if time1 > time2:
-          try:
-              # le catalogue doit être recompilé avant d'être importé
-              if self.appli.test == 0 :
-                 splash._splash.configure(text="Compilation du catalogue\nCela peut prendre plusieurs secondes ...")
-              py_compile.compile(cata)
-          except:
-              return 0
-      return 1
-
-
-#--------------------------------------------------------------------------------
-# Méthodes concernant la barre de progression lors de l'analyse du catalogue
-#--------------------------------------------------------------------------------
-
-   def configure_barre(self,nbcommandes):
-      """ Configure la barre de progression en lui passant comme paramètre le
-          nombre de commandes du catalogue qui lui sert à déterminer la longueur de son incrément """
-      try:
-          if self.appli.test == 0 :
-             splash._splash.configure(barre='oui',ratio = nbcommandes)
-      except:
-          pass
-
-   def update_barre(self):
-      """ Update la position de la barre de progression : la fait progresser de son incrément """
-      try:
-          if self.appli.test == 0 :
-             splash._splash.update_barre()
-      except:
-          pass
-
-   def visuCRCATA(self):
-      """
-      Méthode permettant l'affichage du rapport de validation
-      """
-      cr = CR( debut = "Début rapport de validation du catalogue",
-               fin = "Fin rapport de validation du catalogue")
-      titre="rapport de validation du catalogue"
-      if hasattr(self,'cata_ordonne_cr') :
-          cr.add(self.cata_ordonne_cr)
-      if hasattr(self,'cata_dev_ordonne_cr') :
-          cr.add(self.cata_dev_ordonne_cr)
-      for cata in self.cata:
-          if hasattr(cata,'JdC'):
-              cr.add(cata.JdC.report())
-      texte_cr = str(cr)
-      self.visu_texte_cr = Fenetre(self.appli,titre=titre,texte=texte_cr)
-
-
-   def traite_clefs_documentaires(self):
-      try:
-        self.fic_cata_clef=os.path.splitext(self.fic_cata_c)[0]+'_clefs_docu'
-        f=open(self.fic_cata_clef)
-      except:
-        #print "Pas de fichier associé contenant des clefs documentaires"
-        return
-
-      dict_clef_docu={}
-      for l in f.readlines():
-          clef=l.split(':')[0]
-          docu=l.split(':')[1]
-          docu=docu[0:-1]
-          dict_clef_docu[clef]=docu
-      for oper in self.cata.JdC.commandes:
-           if dict_clef_docu.has_key(oper.nom):
-              oper.docu=dict_clef_docu[oper.nom]
index 421584a5a325dcc69569fcc5bb1edd2e2c6ec542..235e9a4d4b5dec848d16af9df55653582f6d4df6 100644 (file)
@@ -46,7 +46,6 @@ except:
 
 import os,traceback
 import ConfigParser
-import prefs
 import re
 
 # Les valeurs decodees par optparse sont mises dans un objet dictionnaire-like.
@@ -204,7 +203,8 @@ def print_d_env():
 
 def create_parser():
     # creation du parser des options de la ligne de commande
-    parser=optparse.OptionParser(usage="usage: %prog [options]",version="%prog 1.9")
+    import prefs
+    parser=optparse.OptionParser(usage="usage: %prog [options]",version="%prog 1.13")
 
     parser.add_option("-j","--jdc",dest="comm",type='string',
                     action="callback",callback=check_comm,
diff --git a/Editeur/shellpanel.py b/Editeur/shellpanel.py
deleted file mode 100644 (file)
index 0f92948..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import string,types,os
-from Tkinter import *
-import Pmw
-from copy import copy,deepcopy
-import traceback
-
-# Modules Eficas
-import Objecttreeitem
-#import prefs
-#import panels
-#import images
-#from widgets import ListeChoix
-#from widgets import FenetreDeSelection
-
-from Noyau.N_CR import justify_text
-from utils import substract_list
-from newsimppanel import newSIMPPanel
-
-
-class SHELLPanel(newSIMPPanel):
-  """
-  Classe Panel utilisé pour les mots-clés simples qui attendent un shell pour valeur
-  """
-
-  def makeValeurPage(self,page):
-      """ 
-      Affiche la page concernant l'objet pointé par self qui attend un shell
-      """
-      objet_mc = self.node.item.get_definition()
-      aide = self.gen_aide()
-      aide = justify_text(texte=aide)
-      self.frame = Frame(page)
-      self.frame.place(relx=0,rely=0,relwidth=1,relheight=1)
-      label_aide = Label(self.frame,text = aide)
-      label_aide.place(relx=0.5,rely=0.1,anchor='center')
-      self.text = Text(self.frame,bg='gray95')
-      self.text.place(relx=0.2,rely=0.2,relwidth=0.6,relheight=0.6)
-      but_val = Button(self.frame,text='Valider',command = self.valide_shell)
-      but_ann = Button(self.frame,text='Annuler',command = self.annule_shell)
-      but_val.place(relx=0.35,rely=0.9,anchor='center')
-      but_ann.place(relx=0.65,rely=0.9,anchor='center')
-      self.display_valeur()
-
-  def gen_aide(self):
-      """
-      Retourne une chaîne de caractères d'aide sur la valeur qu'attend l'objet
-      pointé par self
-      """
-      return "Un shell est attendu"
-    
-  def valide_shell(self,event=None):
-      """
-      Récupère la valeur saisie par l'utilisateur dans self.text
-      et la stocke dans l'objet MCSIMP courant
-      """
-      texte = self.text.get(1.0,END)
-      self.record_valeur(texte)
-
-  def annule_shell(self,event=None):
-      """
-      Annule toute saisie dans self.text
-      """
-      self.text.delete(0,END)
-
-  def display_valeur(self,val=None):
-      """
-      Affiche la valeur de l'objet pointé par self
-      """
-      if val != None :
-          valeur = val
-      else:
-          valeur = self.node.item.get_valeur()
-      if valeur == None  or valeur == '': return
-      self.text.insert(END,valeur)
-
diff --git a/Editeur/splash.py b/Editeur/splash.py
deleted file mode 100644 (file)
index 2918ddf..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-    Ce module permet de créer, mettre à jour et détruire
-    un écran Splash
-"""
-from Tkinter import *
-
-from centerwindow import centerwindow
-from Tools.foztools.foztools import Slider
-import fontes
-import images
-
-_splash=None
-
-def init_splash(*pos,**args):
-   global _splash
-   _splash=SplashScreen(*pos,**args)
-
-def fini_splash():
-   global _splash
-   _splash.quit()
-   _splash=None
-
-class SplashScreen(Toplevel):
-    """ 
-        Provides a splash screen. Usage:
-        Subclass and override 'CreateWidgets()'
-        In constructor of main window/application call
-           - S = SplashScreen(main=self)        (if caller is Toplevel)
-           - S = SplashScreen(main=self.master) (if caller is Frame)
-           - S.quit()  after you are done creating your widgets etc.
-    """
-    def __init__(self, master=None,**args):
-        Toplevel.__init__(self, master, relief='groove',
-                          borderwidth=5)
-        self.main = master
-        if self.main != None :
-            self.main.iconify()
-        self.withdraw()
-        self.frame = Frame(self)
-        self.frame.pack(expand=1,fill='both')
-        self.init(args)
-        self.geometry("300x200")
-        self.resizable(0,0)
-        centerwindow(self)
-        self.CreateWidgets()
-        self.deiconify()
-
-    def init(self,args={}):
-        self.text = StringVar()
-        self.text.set('')
-        self.text2 = StringVar()
-        self.text2.set('')
-        self.icone = 'logo_edf.gif'
-        self.barre = 'non'
-        if args == {} : return
-        if args.has_key('text'):
-            self.text.set(args['text'])
-        if args.has_key('info'):
-            self.text2.set(args['info'])
-        if args.has_key('titre'):
-            self.title(args['titre'])
-        if args.has_key('code'):
-            self.code = args['code']
-        else:
-            self.code = 'inconnu'
-        if args.has_key('icone'):
-            self.icone = args['icone']
-        if self.code == 'ASTER' :
-            self.icone = 'code_aster.gif'
-        elif self.code == 'SATURNE':
-            self.icone = 'code_saturne.gif'
-        elif self.code == 'DESCARTES':
-            self.icone = 'code_descartes.gif'
-
-    def CreateWidgets(self):
-        self.catIcon = images.get_image(self.icone)
-        self.label = Label(self.frame, image=self.catIcon)
-        self.label.pack(side=TOP)
-        self.label = Label(self.frame, textvariable=self.text,font = fontes.standard_gras)
-        self.label.pack(side=TOP,expand=1,fill='both')
-        self.label2 = Label(self.frame, textvariable=self.text2,font = fontes.standard_italique)
-        self.label2.pack(side=TOP,expand=1,fill='both')
-        self.progress = Slider(self.frame,value=0,max=100,orientation='horizontal',
-                               fillColor='#00008b',width=200,height=30,
-                               background='white',labelColor='red')
-        centerwindow(self)
-
-    def update_barre(self,event=None):
-        """ Permet de faire avancer la barre de progression """
-        try:
-            self.progress.value = self.progress.value+self.increment
-            self.progress.update()
-        except:
-            pass
-
-    def configure_barre(self):
-        """ 
-             Calcule l'incrément de progression de la barre en fonction
-             du nombre d'opérations à effectuer afin que le compteur
-             soit à 100% à la fin des opérations
-        """
-        self.increment = 100./self.ratio
-        self.progress.update()
-
-    def configure(self,**args):
-        if args.has_key('text'):
-            self.text.set(args['text'])
-        if args.has_key('info'):
-            self.text2.set(args['info'])
-        if args.has_key('titre'):
-            self.title(args['titre'])
-        if args.has_key('barre'):
-            old = self.barre
-            self.barre = args['barre']
-            if self.barre == 'oui' and old == 'non':
-                self.progress.frame.pack(in_=self.frame,side='top')
-            elif self.barre == 'non' and old == 'oui':
-                self.progress.frame.pack_forget()
-        if args.has_key('ratio'):
-            self.ratio = args['ratio']
-            self.configure_barre()
-        self.update()
-
-    def quit(self):
-        self.progress = None
-        self.destroy()
-        if self.main:
-           centerwindow(self.main,parent='sans')
-           self.main.deiconify()
-
diff --git a/Editeur/statusbar.py b/Editeur/statusbar.py
deleted file mode 100644 (file)
index e3b809b..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-"""
-# Modules Python
-import Tkinter
-import types
-
-class STATUSBAR:
-   def __init__(self,parent,police):
-      self.parent=parent
-      self.police=police
-      self.frame = Tkinter.Frame(parent,bd=1, relief=Tkinter.RAISED)
-      self.frame.pack(side=Tkinter.BOTTOM, fill=Tkinter.X)
-      self.label = Tkinter.Label (self.frame,
-                                        fg='black',
-                                        text='',
-                                        justify='left',
-                                        relief='sunken',
-                                        height=3,
-                                        bg='gray95')
-      self.label.pack(side='left',expand=1,fill='both')
-
-   def affiche_infos(self,texte):
-      if len(texte)>150 :
-          texte_infos=texte[0:150]
-      else :
-          texte_infos=texte
-      self.label.configure(text=texte_infos,font=self.police)
-
-   def reset_affichage_infos(self):
-      """ Efface tout message présent dans le panneau en bas d'EFICAS """
-      self.affiche_infos('')
-
diff --git a/Editeur/styles.py b/Editeur/styles.py
deleted file mode 100644 (file)
index dd90ee6..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- coding: utf-8 -*-
-import os
-import prefs
-import basestyle
-from basestyle import STYLE,style
-
-inistylefile=os.path.join(prefs.REPINI,"style.py")
-if os.path.isfile(inistylefile):
-   execfile(inistylefile)
-
-userstylefile=os.path.expanduser("~/Eficas_install/style.py")
-if os.path.isfile(userstylefile):
-   execfile(userstylefile)
-
-import fontes
-for attr in dir(style):
-   if attr[0]=='_':continue
-   if not hasattr(fontes,attr):continue
-   setattr(fontes,attr,getattr(style,attr))
diff --git a/Editeur/toolbar.py b/Editeur/toolbar.py
deleted file mode 100644 (file)
index 74248a0..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-"""
-# Modules Python
-import string
-from Tkinter import *
-import Pmw
-
-# Modules Eficas
-import images
-
-class TOOLBAR:
-  def __init__(self,appli,parent):
-      # parent représente l'objet graphique parent
-      self.parent=parent
-      # appli représente l'objet application parent
-      self.appli=appli
-      self.balloon = None
-      self.l_boutons_a_activer = []
-      self.barreboutons=Frame(self.parent,relief='ridge',bd=2)
-      self.barreboutons.pack(anchor='nw',expand=0,fill=X)
-      # bouton Infos à l'extrême droite de la barre des boutons
-      b = Button(self.barreboutons,
-                 image = images.get_image('About24'),
-                 command = self.view_infos)
-      b.pack(side='right')
-      texte = "Infos EFICAS"
-      b.bind("<Enter>",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t,pos='right'))
-      b.bind("<Leave>", self.efface_balloon)
-
-  def appelle_commande(self,e,b,c):
-      try :
-         c()
-      except :
-         pass
-
-  def inactive_boutons(self):
-      """
-      Inactive les boutons de la liste self.l_boutons_a_activer
-      --> cette méthode est appelée dès qu'il n'y a pas de JDC courant
-      """
-      for but in self.l_boutons_a_activer:
-          but.configure(state='disabled')
-
-  def active_boutons(self):
-      """
-      Active les boutons de la liste self.l_boutons_a_activer
-      --> cette méthode est appelée dès qu'il y a un JDC courant
-      """
-      for but in self.l_boutons_a_activer:
-          but.configure(state='normal')
-
-  def affiche_balloon(self,event,bouton,bulle,pos='left'):
-      """
-      Affiche le balloon bulle associé au bouton bouton
-      """
-      etat = bouton.cget('state')
-      if etat != 'normal' : return
-      geom = bouton.winfo_geometry()
-      l_args = string.split(geom,'+')
-      x = eval(l_args[1])+event.x+10
-      self.balloon = Label(self.parent,
-                           text = bulle,
-                           background="yellow",
-                           borderwidth=2,
-                           relief='ridge')
-      if pos == 'left':
-          self.balloon.place(in_=self.parent,x=x,y=32)
-      else:
-          self.balloon.place(in_=self.parent,x=x,y=32,anchor='ne')
-
-  def efface_balloon(self,event=None):
-      """
-      Efface le balloon courant
-      """
-      if self.balloon :
-          self.balloon.destroy()
-          self.balloon = None
-
-  def view_infos(self):
-      """
-      Permet d'afficher des infos sur la session courante d'EFICAS
-      """
-      self.fen_infos = Pmw.Dialog(self.parent,
-                                  title = 'Informations session EFICAS',
-                                  buttons = ('Fermer',),
-                                  command = self.close_infos)
-      self.fen_infos.withdraw()
-      texte_infos = self.appli.get_texte_infos()
-      Label(self.fen_infos.interior(),
-            text = texte_infos,
-            anchor='center').pack(side='top',anchor='center')
-      self.fen_infos.activate(geometry = 'centerscreenalways')
-
-  def close_infos(self,lbl):
-      """
-      Ferme la fenêtre des infos
-      """
-      self.fen_infos.destroy()
-
-  def creer_boutons_appli_composant(self,l_boutons,appli_composant):
-      for bouton in l_boutons :
-          if not bouton :
-              # on veut afficher un bouton vide (=espace entre boutons)
-              Button(self.barreboutons,
-                     image = images.get_image('Sep'),
-                     state='disabled',
-                     relief = 'flat').pack(side='left')
-              continue
-          nom_fic,commande,texte,statut = bouton
-          commande=getattr(appli_composant,commande)
-          b = Button(self.barreboutons,
-                     image = images.get_image(nom_fic),
-                     command = commande,
-                     relief='flat')
-          b.pack(side='left')
-          b.bind("<Enter>",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t))
-          b.bind("<Leave>", self.efface_balloon)
-          b.bind("<Return>", lambda e,s=self,but=b,c=commande:s.appelle_commande(e,but,c))
-          if statut != 'always':
-              self.l_boutons_a_activer.append(b)
-
-      # inactive les boutons qui doivent l'être tant qu'aucun JDC courant
-      self.inactive_boutons()
-
-
diff --git a/Editeur/tooltip.py b/Editeur/tooltip.py
deleted file mode 100644 (file)
index 18fbabb..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-    Ce module propose la classe TOOLTIP pour
-    mettre en oeuvre les bulles d'aide
-"""
-
-import Tkinter
-import types
-
-def destruct(obj):
-    # assist in breaking circular references
-    if obj is not None:
-        assert type(obj) is types.InstanceType
-        for k in obj.__dict__.keys():
-            obj.__dict__[k] = None
-            ##del obj.__dict__[k]
-
-def after(widget, ms, func, *args):
-    timer = apply(widget.after, (ms, func) + args)
-    command = widget._tclCommands[-1]
-    return (timer, command, widget)
-
-def after_cancel(t):
-    if t is not None:
-        t[2].after_cancel(t[0])
-        try:
-            t[2].deletecommand(t[1])
-        except Tkinter.TclError:
-            pass
-
-class TOOLTIP:
-    def __init__(self,widget,text=None):
-        self.widget=widget
-        self.text = text
-        self.timer = None
-        self.tooltip = None
-        self.label = None
-        self.bindings = []
-        self.bindings.append(self.widget.bind("<Enter>", self._enter))
-        self.bindings.append(self.widget.bind("<Leave>", self._leave))
-        self.bindings.append(self.widget.bind("<ButtonPress>", self._leave))
-        # user overrideable settings
-        self.time = 1000                    # milliseconds
-        self.relief = Tkinter.SOLID
-        self.justify = Tkinter.LEFT
-        self.fg = "#000000"
-        self.bg = "#ffffe0"
-        self.xoffset = 20
-        self.yoffset = 1
-
-    def setText(self, text):
-        self.text = text
-
-    def _unbind(self):
-        if self.bindings and self.widget:
-            self.widget.unbind("<Enter>", self.bindings[0])
-            self.widget.unbind("<Leave>", self.bindings[1])
-            self.widget.unbind("<ButtonPress>", self.bindings[2])
-            self.bindings = []
-
-    def destroy(self):
-        self._unbind()
-        self._leave()
-
-    def _enter(self, *event):
-        after_cancel(self.timer)
-        self.timer = after(self.widget, self.time, self._showTip)
-
-    def _leave(self, *event):
-        after_cancel(self.timer)
-        self.timer = None
-        if self.tooltip:
-            self.label.destroy()
-            destruct(self.label)
-            self.label = None
-            self.tooltip.destroy()
-            destruct(self.tooltip)
-            self.tooltip = None
-
-    def _showTip(self):
-        if self.tooltip or not self.text:
-            return
-        c = self.widget.__class__
-        if c in (Tkinter.Button,):
-            if self.widget["state"] == Tkinter.DISABLED:
-                return
-        x = self.widget.winfo_rootx()
-        y = self.widget.winfo_rooty() + self.widget.winfo_height()
-        x = x + self.xoffset
-        y = y + self.yoffset
-        self.tooltip = Tkinter.Toplevel()
-        self.tooltip.wm_iconify()
-        self.tooltip.wm_overrideredirect(1)
-        self.tooltip.wm_protocol("WM_DELETE_WINDOW", self.destroy)
-        self.label = Tkinter.Label(self.tooltip, text=self.text,
-                         relief=self.relief, justify=self.justify,
-                         fg=self.fg, bg=self.bg, bd=1, takefocus=0)
-        self.label.pack(ipadx=1, ipady=1)
-        self.tooltip.wm_geometry("%+d%+d" % (x, y))
-        self.tooltip.wm_deiconify()
-
-if __name__ == "__main__":
-   root=Tkinter.Tk()
-   label = Tkinter.Label(root, text="coucou")
-   label.pack()
-   tp=TOOLTIP(label,"texte d'aide")
-   root.mainloop()
-
diff --git a/Editeur/treeitemincanvas.py b/Editeur/treeitemincanvas.py
deleted file mode 100644 (file)
index f007f45..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-"""
-"""
-# Modules Python
-import Tkinter,Pmw
-
-# Modules Eficas
-import Objecttreeitem
-import treewidget
-
-class TREEITEMINCANVAS:
-   def __init__(self,object,nom="",parent=None,appli=None,sel=None,rmenu=None):
-      self.object=object
-      self.nom=nom
-
-      if not appli:
-         class Appli:
-            def affiche_infos(self,message):
-               pass
-         appli=Appli()
-      self.appli=appli
-
-      if not parent:
-         parent=Tkinter.Tk()
-         Pmw.initialise(parent)
-      self.parent=parent
-
-      self.item=Objecttreeitem.make_objecttreeitem(self.appli,self.nom,self.object)
-      self.canvas=Pmw.ScrolledCanvas(self.parent,borderframe=1,canvas_background='gray95')
-      self.canvas.pack(padx=10,pady=10,fill = 'both', expand = 1)
-      if not sel:
-         def sel(event=None):
-            return
-      self.tree=treewidget.Tree(self.appli,self.item,self.canvas,command=sel,rmenu=rmenu)
-      self.tree.draw()
-
-   def mainloop(self):
-      self.parent.mainloop()
-
-   def update(self):
-      """Cette methode est utilisee pour signaler une mise a jour des objets associes"""
-      self.tree.update()
-
-   def supprime(self):
-      #print "supprime",self
-      self.tree.supprime()
-      self.tree=None
-      self.canvas.destroy()
-      self.canvas=None
-
-   #def __del__(self):
-   #   print "__del__",self
-
diff --git a/Editeur/treewidget.py b/Editeur/treewidget.py
deleted file mode 100644 (file)
index c86d898..0000000
+++ /dev/null
@@ -1,945 +0,0 @@
-# -*- coding: utf-8 -*-
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-#
-#
-# ======================================================================
-import os,sys,string,re,types,traceback
-from Tkinter import *
-
-
-import fontes
-import images
-from Ihm import CONNECTOR
-
-#
-__version__="$Name:  $"
-__Id__="$Id: treewidget.py,v 1.32.2.1 2007-06-15 16:23:33 cchris Exp $"
-#
-
-Fonte_Standard = fontes.standard
-
-class Tree :
-    def __init__(self,appli,jdc_item,scrolledcanvas,command = None,rmenu=None):
-        self.item = jdc_item
-        self.scrolledcanvas = scrolledcanvas
-        self.canvas = self.scrolledcanvas.component('canvas')
-        #resolution
-        resolution= self.canvas.winfo_screenwidth()/(self.canvas.winfo_screenmmwidth()/25.4*72)
-        self.DDY=max(20,resolution*(Fonte_Standard[1]+4))
-        self.id_up=self.canvas.bind("<F11>", self.page_up)
-        self.id_down=self.canvas.bind("<F12>", self.page_down)
-        self.id_um=self.canvas.bind("<Key-Left>", self.mot_up)
-        self.id_dm=self.canvas.bind("<Key-Right>", self.mot_down)
-        self.id_s=self.canvas.bind("<1>", self.canvas_select)             
-        self.tree = self
-        self.command = command
-        self.rmenu=rmenu
-        self.appli = appli
-        self.parent = None
-        self.racine = self
-        self.node_selected = None
-        self.build_children()
-
-    def canvas_select(self,event):
-        self.canvas.focus_set()
-
-    def page_up(self,event):
-        event.widget.yview_scroll(-1, "page")
-
-    def page_down(self,event):
-        event.widget.yview_scroll(1, "page")
-   
-    def unit_up(self,event):
-        event.widget.yview_scroll(-1, "unit")
-
-    def unit_down(self,event):
-        event.widget.yview_scroll(1, "unit")              
-
-    def mot_down(self,event):
-        self.select_next(None)
-        self.canvas.focus_set()
-
-    def mot_down_force(self):
-        self.select_next(None)
-        self.canvas.focus_set()
-
-    def mot_up(self,event):
-        self.node_selected.select_mot_previous()
-        self.canvas.focus_set()
-
-    def mot_up_force(self):
-        self.node_selected.select_mot_prev()
-        self.canvas.focus_set()
-
-    def deplieReplieNode(self):
-        self.node_selected.deplieReplieNode()
-
-    def build_children(self):
-        """ Construit la liste des enfants de self """
-        self.children = []
-        child = self.item.itemNode(self,self.item,self.command,self.rmenu)
-        self.children.append(child)
-        child.state='expanded'
-
-    def draw(self):
-        """ Dessine l'arbre """
-        lasty = 8
-        x = 5
-        for child in self.children:
-            child.draw(x,lasty)
-            lasty = child.lasty + 15
-        self.children[0].select()
-        self.resizescrollregion()
-
-    def deselectall(self):
-        """ déselectionne tous les éléments de l'arbre """
-        if self.node_selected :
-            self.node_selected.deselect()
-            
-    def update(self):
-        """ Update tous les éléments de l'arbre """
-        for child in self.children:
-            child.update()
-
-    def supprime(self):
-        """ supprime tous les éléments de l'arbre """
-        #print "supprime",self
-        self.canvas.unbind("<F11>",self.id_up)
-        self.canvas.unbind("<F12>",self.id_down)
-        self.canvas.unbind("<Key-Left>",self.id_um)
-        self.canvas.unbind("<Key-Right>",self.id_dm)
-        self.canvas.unbind("<1>",self.id_s)             
-        self.tree = None
-        self.racine = None
-        self.node_selected = None
-        self.item = None
-        self.scrolledcanvas = None
-        self.canvas = None
-        self.command = None
-        self.rmenu=None
-        for child in self.children:
-            child.supprime()
-        self.children=[]
-
-    def update_valid(self) :
-        """Cette methode a pour but de mettre a jour la validite du noeud
-           et de propager la demande de mise à jour à son parent
-        """
-        pass
-
-    def resizescrollregion(self):
-        x0,y0,x1,y1=self.canvas.bbox(ALL)
-        # On ajoute une marge approximativement de la moitié du canvas
-        y1=y1+self.canvas.winfo_height()/2
-        self.canvas.configure(scrollregion = (x0,y0,x1,y1))
-
-    def select_next(self,event):
-        self.node_selected.select_next()
-        self.canvas.focus_set()
-
-    def select_previous(self,event):
-        self.node_selected.select_previous()
-
-    def see(self,items):
-        x1, y1, x2, y2=apply(self.canvas.bbox, items)
-        while x2 > self.canvas.canvasx(0)+self.canvas.winfo_width():
-            old=self.canvas.canvasx(0)
-            self.canvas.xview_scroll( 1, 'units')
-            # avoid endless loop if we can't scroll
-            if old == self.canvas.canvasx(0):
-                break
-        while y2 > self.canvas.canvasy(0)+self.canvas.winfo_height():
-            old=self.canvas.canvasy(0)
-            self.canvas.yview_scroll( 1, 'units')
-            if old == self.canvas.canvasy(0):
-                break
-        # done in this order to ensure upper-left of object is visible
-        while x1 < self.canvas.canvasx(0):
-            old=self.canvas.canvasx(0)
-            self.canvas.xview_scroll( -1, 'units')
-            if old == self.canvas.canvasx(0):
-                break
-        while y1 < self.canvas.canvasy(0):
-            old=self.canvas.canvasy(0)
-            self.canvas.yview_scroll( -1, 'units')
-            if old == self.canvas.canvasy(0):
-                break
-
-    #def __del__(self):
-    #   print "__del__",self
-
-class Node :
-    def __init__(self,parent,item,command=None,rmenu=None):
-        self.parent = parent
-        self.item = item
-        self.command = command
-        self.rmenu=rmenu
-        self.tree = self.parent.tree
-        self.appli = self.parent.appli
-        self.canvas = self.parent.canvas
-        self.init()
-        self.connect()
-
-    def init(self):
-        self.state='collapsed'
-        self.displayed = 0
-        self.selected = 0
-        self.x = self.y  =None
-        self.lasty = 0
-        self.children = None
-        self.id = []
-        if self.parent is self.tree:
-           self.racine=self
-        else:
-           self.racine = self.parent.racine
-           
-    def connect(self):
-        self.item.connect("add",self.onAdd,())
-        self.item.connect("supp",self.onSupp,())
-        self.item.connect("valid",self.onValid,())
-
-    #def __del__(self):
-    #    print "__del__",self
-
-    def force_select(self):
-        if self.selected:
-           # le noeud est selectionné. On force la reconstruction du panel associé
-           if self.command:apply(self.command,(None,))
-           self.select()
-
-    def onValid(self):
-        #print "onValid : l'item a changé de validité ",self.item,self.item.object,self.item.object.isvalid()
-        self.update_node_valid()
-        self.update_node_label()
-        self.update_node_texte()
-        if self.selected and self.command:
-           self.command(self)
-
-    def onAdd(self,objet):
-        #print "onAdd : un objet a été ajouté aux fils de l'item ",self.item.object,objet
-        self.expand_node()
-        old_nodes=self.children
-        self.update_nodes()
-        self.redraw_children(old_nodes)
-        self.force_select()
-
-    def onSupp(self,objet):
-        #print "onSupp : un objet a été supprimé des fils de l'item ",self.item.object,objet
-        self.expand_node()
-        old_nodes=self.children
-        self.update_nodes()
-        self.redraw_children(old_nodes)
-        self.force_select()
-
-    def update_nodes(self):
-        #print "update_nodes",self
-        newnodes=[]
-        inodes=iter(self.children)
-        sublist=self.item._GetSubList()
-        iliste=iter(sublist)
-
-        while(1):
-           old_item=item=None
-           for node in inodes:
-              old_item=node.item
-              if old_item in sublist:break
-              #print "item supprime",old_item
-           for item in iliste:
-              if item is old_item:break
-              #print "item ajoute",item
-              child = item.itemNode(self,item,self.command,self.rmenu)
-              newnodes.append(child)
-
-           if old_item is None and item is None:break
-           if old_item is item:
-              #print "item conserve",item
-              newnodes.append(node)
-
-        self.children=newnodes
-        self.connect()
-
-    def supprime(self):
-        #print "supprime",self
-        self.efface_node()
-        self.racine = None
-        self.command = None
-        self.rmenu=None
-        if not self.children : return
-        for child in self.children:
-            child.supprime()
-        self.children=None
-
-    def redraw_children(self,old_nodes):
-        #print "redraw_children",old_nodes
-        #print self.children
-        y = self.y + self.tree.DDY
-        x = self.x + 15
-        supp_nodes=[]
-
-        inodes=iter(old_nodes)
-        iliste=iter(self.children)
-        # on parcourt la liste des anciens noeuds (node)
-        # et la liste des nouveaux noeuds (new_node) en parallele (iterateurs)
-
-        while(1):
-           new_node=node=None
-           for node in inodes:
-              #print "ancien noeud",node
-              if node in self.children:break # ancien noeud toujours present
-              #print "noeud supprime",node,node.item.GetLabelText()[0]
-              dy=node.y-node.lasty -self.tree.DDY
-              #print "deplacer noeuds",y,dy
-              node.move_nodes(y,dy)
-              node.supprime()
-              #supp_nodes.append(node)
-
-           for new_node in iliste:
-              #print "nouveau noeud",new_node
-              if new_node in old_nodes: break # nouveau noeud deja present
-              #print "noeud ajoute",new_node,new_node.item.GetLabelText()[0]
-              y=self.draw_node(new_node,x,y)
-
-           if node is None and new_node is None : break
-
-           if node is new_node: # ancien noeud
-              #print "noeud conserve",node
-              node.update_node_label()
-              y=y+node.lasty-node.y +self.tree.DDY
-
-        self.racine.update_coords()
-        self.canvas.delete('line')
-        self.racine.trace_ligne()
-        self.tree.resizescrollregion()
-        # Mettre à 1 pour verifier les cycles entre objets node
-        #withCyclops=0
-        #if withCyclops:
-           #from Misc import Cyclops
-           #z = Cyclops.CycleFinder()
-           #print supp_nodes
-           #for o in supp_nodes:
-             #z.register(o)
-           #del supp_nodes
-           #del o
-           #z.find_cycles()
-           #z.show_stats()
-           #z.show_cycles()
-
-    def tag_move_nodes(self,y):
-        """ Marque pour deplacement tous les noeuds au dela de l'ordonnée y """
-        #print "tag_move_nodes",y
-        self.canvas.dtag(ALL,'move')
-        # on marque tous les ids au dela de y
-        x0, y0, x1, y1 = self.canvas.bbox(ALL)
-        if y > y1: # pas d'objet a deplacer
-           return
-        self.canvas.addtag_overlapping('move',x0,y,x1,y1)
-
-    def move_nodes(self,y,dy):
-        """ Déplace de l'incrément dy les noeuds au dela de l'ordonnée y """
-        #print "move_nodes",y,dy
-        self.tag_move_nodes(y)
-        # on déplace tous les items de dy
-        self.canvas.move('move',0,dy)
-
-    def draw_node(self,new_node,x,y):
-        """ Dessine le noeud new_node en x,y en deplacant les noeuds existants
-            en y et au dela
-            Retourne la position du premier des noeuds deplaces
-        """
-        #print "draw_node",new_node,x,y
-        self.tag_move_nodes(y)
-        #if new_node.item.isactif():
-           #new_node.state = 'expanded'
-        new_node.state = 'expanded'
-        new_node.draw(x,y)
-        dy=(new_node.get_nb_children()+1)*self.tree.DDY
-        #print "deplacer noeuds",y,dy
-        self.canvas.move('move',0,dy)
-        return new_node.lasty+self.tree.DDY
-
-    def build_children(self):
-        """ Construit la liste des enfants de self """
-        self.children = []
-        sublist = self.item._GetSubList()
-        if not sublist : return
-        for item in sublist :
-            child = item.itemNode(self,item,self.command,self.rmenu)
-            self.children.append(child)
-            
-    #-----------------------------------------------
-    # Méthodes de sélection/déselection d'un noeud
-    #-----------------------------------------------
-    
-    def select(self, event=None):
-        """
-        Rend le noeud courant (self) sélectionné et déselectionne
-        tous les autres
-        """
-        #print "SELECT",self
-        if not self.children : self.build_children()
-        self.tree.deselectall()
-        self.selected = 1
-        self.tree.node_selected = self
-        if self.command:apply(self.command,(self,))
-        self.highlight()
-        self.make_visible()
-
-    def deselect(self, event=None):
-        """ Déselectionne self """
-        self.selected = 0
-        if self.displayed == 1 : self.dehighlight()
-            
-    def make_visible(self):
-        """ Rend l'objet self visible cad déplace le scroll pour que self 
-            soit dans la fenêtre de visu
-        """
-        lchild=self.last_child()
-        self.tree.see((self.image_id,lchild.image_id))
-        
-    def select_next(self,ind=0):
-        """ on doit chercher à sélectionner dans l'ordre:
-            - son premier fils s'il est affiché
-            - son frère cadet s'il existe
-            - son oncle (benjamin de son père)
-            - ... appel récursif ...
-        """
-        if self.state=='expanded' and len(self.children) > ind:
-            self.children[ind].select()
-        else :
-            index = self.parent.children.index(self) + 1
-            try :
-              if isinstance(self.parent,TREE) :
-                try:
-                    self.children[ind].select()
-                except:
-                    self.children[0].select()
-            except :
-              if self.parent is self.tree:
-                pass
-              else :
-                self.parent.select_next(index)
-
-    def select_mot_prev(self):
-        index = self.parent.children.index(self) - 1
-        try :
-           if index > -1  :
-              self.parent.children[index].select()
-              if self.parent.children[index].state=="expanded":
-                 print len(self.parent.children[index].children)
-                 if len(self.parent.children[index].children)!=0 :
-                    max=len(self.parent.children[index].children) - 1
-                    self.parent.children[index].children[max].select()
-                 else :
-                    self.parent.children[index].select()
-              else :
-                 self.parent.children[index].select()
-           elif self.parent is self.tree:
-              pass
-           else :
-              self.parent.select()
-        except:
-            if self.parent is self.tree:
-               pass
-            else :
-               self.parent.select_previous()
-
-        
-    def select_mot_previous(self):
-        index = self.parent.children.index(self) - 1
-        try :
-            if index > -1  :
-               self.parent.children[index].select()
-            elif self.parent is self.tree:
-               pass
-            else :
-               self.parent.select()
-        except:
-            if self.parent is self.tree:
-               pass
-            else :
-               self.parent.select_previous()
-
-    def select_previous(self):
-        """ on doit d'abord sélectionner(dans l'ordre) :
-             - son frère aîné
-             - son père
-        """
-        index = self.parent.children.index(self) - 1
-        try :
-            self.parent.children[index].select()
-        except:
-            #self.parent.select()
-            if self.parent is self.tree:
-               pass
-            else :
-               self.parent.select_previous()
-
-    def popup(self,event=None):
-        """
-            Declenche le traitement associé au clic droit de la souris
-            sur l'icone du Node
-        """
-        if not self.rmenu:return
-        apply(self.rmenu,(self,event))
-
-    #-----------------------------------------------
-    # Méthodes de recherche d'informations
-    #-----------------------------------------------
-    def geticonimage(self,name=None):
-        """
-        Retourne l'image qui doit être associée à self
-        """
-        if not name :
-            name = self.item.GetIconName()
-        if not name or name == 'aucune' :
-            return None
-        return images.get_image(name)
-
-    def get_nb_children(self):
-        """ Retourne le nombre d'enfants affichés de self """
-        nb = 0
-        if self.state =='collapsed' :  return nb
-        for child in self.children :
-            nb = nb + 1 + child.get_nb_children()
-        return nb
-
-    def get_liste_id(self):
-        """ Retourne la liste de tous les id (filiation comprise) de self """
-        liste = self.id
-        for child in self.children:
-            liste.extend(child.get_liste_id())
-        return liste
-
-    def get_node_fils(self,name) :
-        """ Retourne le fils de self de nom name s'il existe"""
-        for child in self.children:
-            if child.item.get_nom() == name: return child
-        return None
-
-    #-----------------------------------------------
-    # Méthodes d'affichage d'un noeud
-    #-----------------------------------------------
-    def draw(self,x,y):
-        """ Permet de tracer le noeud self """
-        # le début du noeud est en x,y
-        self.x = x
-        self.y = y
-        self.lasty = y
-        self.id=[]
-        # choix de l'icone à afficher : + ou -
-        if self.item.IsExpandable():
-            if self.state == 'expanded':
-                iconname = "minusnode"
-                callback = self.collapse
-            else:
-                iconname = "plusnode"
-                callback = self.expand
-            image = self.geticonimage(name=iconname)
-            self.icone_id = self.canvas.create_image(self.x, self.y, image=image)
-            self.callback_id=self.canvas.tag_bind(self.icone_id, "<1>", callback)
-            self.id.append(self.icone_id)
-        # création de la ligne horizontale
-        self.ligne_id = self.canvas.create_line(self.x,self.y,self.x+10,self.y)
-        self.id.append(self.ligne_id)
-        self.canvas.tag_lower(self.ligne_id)
-        # affichage de l'icone (carre ,rond, ovale ...) de couleur
-        image = self.geticonimage()
-        if image != None :
-            self.image_id = self.canvas.create_image(self.x+15,self.y,image = image)
-            self.select_id2=self.canvas.tag_bind(self.image_id,"<1>",self.select)
-            self.popup_id2=self.canvas.tag_bind(self.image_id,"<3>",self.popup)
-            self.id.append(self.image_id)
-        else:
-            self.image_id = None
-        # affichage du texte : nom de l'objet (ETAPE ou MOT-CLE) et sa valeur
-        self.drawtext()
-        self.displayed = 1
-        if self.state == 'expanded' :
-            if not self.children : self.build_children()
-            if len(self.children) > 0:
-                self.drawchildren()
-                self.lasty = self.children[-1].lasty
-   
-    def drawchildren(self):
-        """ Dessine les enfants de self """
-        y = self.y + self.tree.DDY
-        x = self.x + 15
-        for child in self.children:
-            child.draw(x,y)
-            nb = child.get_nb_children()
-            y = y + self.tree.DDY*(nb+1)
-        self.trace_ligne()
-
-    def drawtext(self):
-        """ Affiche les deux zones de texte après l'icône de couleur de l'objet """
-        if self.image_id != None :
-            textx = self.x + 30
-        else:
-            textx = self.x + 15
-        texty = self.y
-        # nom,fonte et couleur de l'objet du noeud à afficher
-        labeltext,fonte,couleur = self.item.GetLabelText()
-        if labeltext    == ''   : labeltext = '   '
-        if fonte        == None : fonte = Fonte_Standard
-        if couleur      == None : couleur = 'black'
-        # création du widget label
-        self.label = Label(self.canvas,
-                           text = labeltext,
-                           fg = couleur,
-                           bg = 'gray95',
-                           font=fonte)
-        self.label_id = self.canvas.create_window(textx,texty,window=self.label,anchor='w')
-        self.id.append(self.label_id)
-        # bindings sur le widget label
-        self.select_id=self.label.bind("<1>", self.select)
-        self.popup_id=self.label.bind("<3>", self.popup)
-        self.enter_id=self.label.bind("<Enter>",self.enter)
-        self.leave_id=self.label.bind("<Leave>",self.leave)
-        # valeur de cet objet à afficher
-        x0, y0, x1, y1 = self.canvas.bbox(self.label_id)
-        textx = max(x1, 200) + 10
-        text = self.item.GetText() or " "
-        self.text = Label(self.canvas, text=text,
-                            bd=0, padx=2, pady=2,background='gray95',
-                            font=fonte)
-        if self.selected:
-            self.highlight()
-        else:
-            self.dehighlight()
-        self.text_id = self.canvas.create_window(textx, texty,anchor="w", window=self.text)
-        self.id.append(self.text_id)
-        
-    def highlight(self,event=None):
-        """ Met en surbrillance self"""
-        if hasattr(self,'label'):
-            self.label.configure(fg='white',bg='#00008b')
-        if (hasattr(self.item,'get_nom') and hasattr( self.appli, 'salome')) :
-            if self.item.get_nom() == "AFFE_CARA_ELEM":
-               self.item.rmenu_specs=[("View3D", "visu_3D")]
-               self.tree.rmenu
-              
-            
-    def dehighlight(self,event=None):
-        """ Rétablit l'affichage normal de self"""
-        if hasattr(self,'label'):
-            self.label.configure(fg='black',bg='gray95')
-
-    def enter(self,event=None):
-        """ Met en surbrillance self et affiche le fr de l'objet """
-        self.highlight()
-        fr = self.item.get_fr()
-        self.appli.affiche_infos(fr)
-        
-    def leave(self,event=None):
-        """ Rétablit l'affichage normal de self et efface le fr de l'objet """
-        if not self.selected :
-            self.dehighlight()
-        self.appli.affiche_infos('')
-
-    def collapse_children(self):
-        """ Collapse récursivement tous les descendants de self """
-        if not self.children : return
-        for child in self.children:
-            child.state='collapsed'
-            child.collapse_children()
-
-    def deplieReplieNode(self):           
-        if self.state == 'expanded':
-           self.collapse()
-        else :
-           self.expand_node()
-
-    def collapse(self,event = None):
-        """ Collapse self et descendants et retrace self """
-        nb = self.get_nb_children()
-        self.state = 'collapsed'
-        self.collapse_children()
-        self.redraw(-nb)
-        self.select()
-   
-    def expand_node(self,event = None):
-        """ Expanse self et le retrace """
-        if self.state == 'expanded':return
-        #if not self.item.isactif() : return
-        if not self.children : self.build_children()
-        self.state = 'expanded'
-        nb = self.get_nb_children()
-        self.redraw(nb)
-
-    def expand(self,event = None):
-        """ Expanse self et le retrace """
-        self.expand_node()
-        self.select()
-
-    def redraw(self,nb):
-        """ Redessine self :  nb est le décalage à introduire
-            en dessous de self pour le redessiner """
-        # nb = nombre d'items de décalage
-        self.move(self.tree.DDY*nb)
-        # on efface self et on le redessine
-        self.efface()
-        self.draw(self.x,self.y)
-        # Il n'est pas nécessaire d'appeler update
-        # il suffit d'updater les coordonnees et de retracer les lignes
-        self.racine.update_coords()
-        self.racine.trace_ligne()
-        self.update_valid()
-        self.tree.resizescrollregion()
-        
-    def update_coords(self):
-        """ Permet d'updater les coordonnes de self et de tous ses enfants"""
-        if self.displayed == 0 : return
-        if self.image_id != None :
-            coords = self.canvas.coords(self.image_id)
-            self.x = coords[0]-15
-        else:
-            coords = self.canvas.coords(self.label_id)
-            self.x = coords[0]-15
-        self.y = coords[1]
-        self.lasty = self.y
-        if self.state == 'expanded' :
-            for child in self.children:
-                if child.displayed != 0:
-                    child.update_coords()
-                    self.lasty = child.lasty
-
-    def update_icone(self):
-        """ Met à jour les icônes de tous les noeuds : teste la validité de l'objet
-        Cette méthode est très lente, trop !!"""
-        if self.image_id != None :
-            image = self.geticonimage()
-            self.canvas.itemconfig(self.image_id,image=image)
-        if self.state == 'expanded':
-            for child in self.children:
-                if child.displayed != 0:
-                    child.update_icone()
-
-    def update_label_texte(self):
-        """ Met a jour le label du noeud et celui de tous ses fils ouverts """
-        self.update_node_label()
-        if self.state == 'expanded' :
-            for child in self.children:
-                if child.displayed != 0 : child.update_label_texte()
-
-    def update_texte(self):
-        """ Met à jour les noms des SD et valeurs des mots-clés """
-        self.update_node_texte()
-        if self.state == 'expanded' :
-            for child in self.children:
-                if child.displayed != 0 : child.update_texte()
-        
-    def update_node_label(self):
-        """ Met a jour le label du noeud """
-        if self.displayed == 0 : return
-        # nom,fonte et couleur de l'objet du noeud à afficher
-        labeltext,fonte,couleur = self.item.GetLabelText()
-        if labeltext    == ''   : labeltext = '   '
-        if fonte        == None : fonte = Fonte_Standard
-        if couleur      == None : couleur = 'black'
-        self.label.configure(text=labeltext,font=fonte)
-
-    def update_node_texte(self):
-        """ Met à jour les noms des SD et valeurs des mots-clés """
-        if self.displayed == 0 : return
-        text = self.item.GetText()
-        if text == None : text = ''
-        self.text.configure(text=text)
-
-    def update_node_valid(self) :
-        """Cette methode remet a jour la validite du noeud (icone)
-           Elle appelle isvalid
-        """
-        if self.displayed == 0 : return
-        if self.image_id != None :
-            image = self.geticonimage()
-            self.canvas.itemconfig(self.image_id,image=image)
-
-    def update_valid(self) :
-        """Cette methode a pour but de mettre a jour la validite du noeud
-           et de propager la demande de mise à jour à son parent
-        """
-        self.update_node_valid()
-        self.parent.update_valid()
-
-    def update(self,event=None) :
-        """ Classe Node :
-            Cette méthode est appelée pour demander l update d un noeud 
-            d'un jeu de commandes
-            Cette demande est transmise au noeud racine (le JDC) qui update
-            tout l arbre représentant le jeu de commandes
-            Pendant cette mise à jour, on appelle la méthode isvalid qui
-            fera l update de tous les objets déclarés modifiés lors des
-            actions précédentes
-            La métode isvalid est en général appelée par l intermédiaire de
-            update_icone -> geticonimage -> GetIconName
-        """
-        #print "update",self
-        #traceback.print_stack()
-        self.racine.update_coords()
-        self.racine.trace_ligne()
-        self.racine.update_icone()
-        self.racine.update_texte()
-        self.racine.update_label_texte()
-        self.tree.resizescrollregion()
-
-    def efface_node(self):
-        if self.displayed != 0:
-           self.label.unbind("<1>", self.select_id)
-           self.label.unbind("<3>", self.popup_id)
-           self.label.unbind("<Enter>",self.enter_id)
-           self.label.unbind("<Leave>",self.leave_id)
-           self.canvas.tag_unbind(self.image_id,"<1>",self.select_id2)
-           self.canvas.tag_unbind(self.image_id,"<3>",self.popup_id2)
-           if self.item.IsExpandable():
-              self.canvas.tag_unbind(self.icone_id, "<1>", self.callback_id)
-           self.label.destroy()
-           self.text.destroy()
-
-        for id in self.id :
-            self.canvas.delete(id)
-        self.id=[]
-        self.label_id=None
-        self.text_id=None
-        self.image_id=None
-        self.icone_id=None
-        self.label=None
-        self.text=None
-        self.displayed=0
-
-    def efface(self):
-        """ Efface du canvas les id associés à self : cad les siens et ceux
-            de ses enfants """
-        self.efface_node()
-        if not self.children : return
-        for child in self.children:
-            child.efface()
-
-    def move(self,dy):
-        """ Déplace de l'incrément dy tous les id en dessous de self """
-        # il faut marquer tous les suivants de self
-        bbox1 = self.canvas.bbox(ALL)
-        self.canvas.dtag(ALL,'move')
-        self.canvas.delete('line')
-        try:
-            self.canvas.addtag_overlapping('move',bbox1[0],self.y +10,bbox1[2],bbox1[3])
-        except:
-            print "Erreur dans move :"
-            print self
-            print self.item
-            print self.item.getObject()
-            print self.item.getObject().definition.label
-            print 'y=',self.y
-            print 'dy=',dy
-        # on déplace tous les items de dy
-        self.canvas.move('move',0,dy)
-
-    def trace_ligne(self):
-        """ Dessine les lignes verticales entre frères et entre père et premier fils"""
-        if self.state=='collapsed' : return
-        if len(self.children)==0 : return
-        # on est bien dans le cas d'un noeud expansé avec enfants ...
-        # il faut rechercher l'ordonnée du dernier fils de self
-        y_end = self.children[-1].y
-        ligne = self.canvas.create_line(self.x+15,self.y,self.x+15,y_end,tags='line')
-        self.canvas.tag_lower(ligne)
-        for child in self.children :
-            try:
-                child.trace_ligne()
-            except:
-                print "Erreur dans trace_ligne :"
-                print child
-                print child.item.getObject()
-
-    def last_child(self):
-        lchild=self
-        if self.state == 'expanded' and self.children:
-           lchild= self.children[-1].last_child()
-        return lchild
-
-    #------------------------------------------------------------------
-    # Méthodes de création et destruction de noeuds
-    # Certaines de ces méthodes peuvent être appelées depuis l'externe
-    #------------------------------------------------------------------
-    def append_brother(self,name,pos='after',retour='non'):
-        """
-        Permet d'ajouter un objet frère à l'objet associé au noeud self
-        par défaut on l'ajoute immédiatement après 
-        Méthode externe
-        """
-        # on veut ajouter le frère de nom name directement avant ou après self
-        index = self.parent.children.index(self)
-        if pos == 'before':
-            index = index
-        elif pos == 'after':
-            index = index +1
-        else:
-            print str(pos)," n'est pas un index valide pour append_brother"
-            return 0
-        return self.parent.append_child(name,pos=index)
-
-    def append_child(self,name,pos=None,verif='oui',retour='non'):
-        """
-           Methode pour ajouter un objet fils à l'objet associé au noeud self.
-           On peut l'ajouter en début de liste (pos='first'), en fin (pos='last')
-           ou en position intermédiaire.
-           Si pos vaut None, on le place à la position du catalogue.
-        """
-        #print "append_child",self,self.children
-        if pos == 'first':
-            index = 0
-        elif pos == 'last':
-            index = len(self.children)
-        elif type(pos) == types.IntType :
-            # position fixee
-            index = pos
-        elif type(pos) == types.InstanceType:
-            # pos est un item. Il faut inserer name apres pos
-            index = self.item.get_index(pos) +1
-        elif type(name) == types.InstanceType:
-            index = self.item.get_index_child(name.nom)
-        else:
-            index = self.item.get_index_child(name)
-        obj=self.item.additem(name,index)
-        #print obj
-        if obj is None:obj=0
-        if obj == 0:return 0
-        #print "append_child",index,self.children
-        child=self.children[index]
-        child.select()
-        return child
-
-    def delete(self):
-        """ 
-            Méthode externe pour la destruction de l'objet associé au noeud
-            La mise à jour des noeuds est faite par onSupp sur notification
-        """
-        index = self.parent.children.index(self) - 1 
-        if index < 0 : index =0
-
-        parent=self.parent
-        ret=parent.item.suppitem(self.item)
-        if ret == 0:return
-
-        brothers=parent.children
-        if brothers:
-           toselect=brothers[index]
-        else:
-           toselect=parent
-        toselect.select()
-
diff --git a/Editeur/uniqueassdpanel.py b/Editeur/uniqueassdpanel.py
deleted file mode 100644 (file)
index bc777b7..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-# -*- coding: utf-8 -*-
-# ======================================================================
-# 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.
-#
-#
-# ======================================================================
-# Modules Python
-import string,types,os
-from Tkinter import *
-import Pmw
-from copy import copy,deepcopy
-import traceback
-
-# Modules Eficas
-import Objecttreeitem
-import prefs
-import panels
-import images
-from widgets import ListeChoix
-from widgets import FenetreDeSelection
-
-from Noyau.N_CR import justify_text
-from utils import substract_list
-
-# Import des panels
-from uniquepanel import UNIQUE_Panel
-
-
-class UNIQUE_ASSD_Panel(UNIQUE_Panel):
-  """
-  Classe servant à définir le panneau associé aux objets qui attendent une valeur unique
-  d'un type dérivé d'ASSD
-  """
-  def valid_valeur_automatique(self):
-      """
-         Réalise la validation d'un concept sans remonter dans le
-         node parent dans le cas ou il n'y a qu'un concept possible (liste de longueur 1)
-         Identique à valid_valeur moins appel de self.node.parent.select()
-         On pourrait supposer que le seul concept présent est valide et donc ne pas
-         réaliser tous les tests de vérification.
-      """
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      valeur = self.get_valeur()
-      self.erase_valeur()
-      anc_val = self.node.item.get_valeur()
-      valeur,validite=self.node.item.eval_valeur_item(valeur)
-      test = self.node.item.set_valeur(valeur)
-      if not test :
-          mess = "impossible d'évaluer : %s " %`valeur`
-          self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess)
-      elif self.node.item.isvalid() :
-          self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
-          #if self.node.item.get_position()=='global':
-              #self.node.etape.verif_all()
-          #elif self.node.item.get_position()=='global_jdc':
-              #self.node.racine.verif_all()
-          #else :
-              #self.node.parent.verif()
-          #self.node.update()
-      else :
-          cr = self.node.item.get_cr()
-          mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
-          self.reset_old_valeur(anc_val,mess=mess)
-
-  def makeValeurPage(self,page,reel="non"):
-      """
-          Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une 
-          SD de type dérivé d'ASSD
-      """
-      # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
-      # et de la liste des SD du bon type (constituant la liste des choix)
-      bulle_aide=self.get_bulle_aide()
-      aide=self.get_aide()
-      aide= justify_text(texte=aide)
-      liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
-
-      # Remplissage du panneau
-      self.valeur_choisie = StringVar()
-      self.valeur_choisie.set('')
-      min,max =  self.node.item.GetMinMax()
-      if (min == 1 and min == max and len(liste_noms_sd)==1 ):
-          if self.valeur_choisie.get() != liste_noms_sd[0]:
-            if ('R' not in self.node.item.get_type()) :
-                self.valeur_choisie.set(liste_noms_sd[0])
-                self.valid_valeur_automatique()
-         
-      self.frame_valeur = Frame(page)
-      self.frame_valeur.pack(fill='both',expand=1)
-      self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
-      self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-      self.listbox = Pmw.ScrolledListBox(self.frame_valeur,
-                                         items=liste_noms_sd,
-                                         labelpos='n',
-                                         label_text="Structures de données du type\n requis par l'objet courant :",
-                                         listbox_height = 6,
-                                         selectioncommand=self.select_valeur_from_list,
-                                         dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c))
-      self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
-      Label(self.frame_valeur,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6)
-      Label(self.frame_valeur,textvariable=self.valeur_choisie).place(relx=0.5,rely=0.6)
-      self.but_val = Button(self.frame_valeur,text = "Valider",command= self.Choisir)
-      self.but_val.place(relx=0.3,rely=0.8,relwidth=0.35)
-
-      # affichage de la valeur courante
-      self.display_valeur()
-      if self.__class__.__name__ == 'UNIQUE_ASSD_Panel_Reel' :
-        Label(self.frame_valeur,text='Valeur Réelle').place(relx=0.1,rely=0.9)
-        self.entry = Entry(self.frame_valeur,relief='sunken')
-        self.entry.place(relx=0.28,rely=0.9,relwidth=0.6)
-        self.entry.bind("<Return>",lambda e,c=self.valid_valeur_reel:c())
-        self.entry.bind("<KP_Enter>",lambda e,c=self.valid_valeur_reel:c())
-
-
-
-  def get_bulle_aide(self):
-      """
-      Retourne l'aide associée au panneau
-      """
-      return "Double-cliquez sur la structure de donnée désirée pour valoriser le mot-clé simple courant"
-
-  def get_aide(self):
-      """
-      Retourne la phrase d'aide indiquant de quel type doit être la valeur à donner par l'utilisateur
-      """
-      mc = self.node.item.get_definition()
-      try :
-              type = mc.type[0].__name__  
-      except :
-        type = str(mc.type[0])
-      if len(mc.type)>1 :
-          for typ in mc.type[1:] :
-              try :
-                l=typ.__name__
-              except:
-                l=str(typ)
-              type = type + ' ou '+l
-      commentaire="Un objet de type "+type+" est attendu"
-      aideval=self.node.item.aide()
-      commentaire=commentaire +"\n"+ aideval
-      return commentaire
-
-    
-  def select_valeur_from_list(self):
-      """
-      Affecte à valeur choisie la sélection courante dans la liste des choix proposée
-      """
-      if len(self.listbox.get()) == 0 : return
-      if len(self.listbox.getcurselection()) == 0 : return
-      choix = self.listbox.getcurselection()[0]
-      self.valeur_choisie.set(choix)
-      self.listbox.component("listbox").focus_set()
-
-  def choose_valeur_from_list(self,command):
-      """
-      Affecte à valeur choisie la sélection courante dans la liste des choix proposée
-      Exécute command
-      """
-      if len(self.listbox.get()) == 0 : return
-      if len(self.listbox.getcurselection()) == 0 : return
-      choix = self.listbox.getcurselection()[0]
-      self.valeur_choisie.set(choix)
-      apply(command,(),{})
-
-  def Choisir(self) :
-      #Appeler par le bouton Valider
-      self.choose_valeur_from_list(self.valid_valeur)
-      
-  def get_valeur(self):
-      """
-      Retourne la valeur donnée par l'utilisateur au MCS
-      """
-      return self.valeur_choisie.get()
-    
-  def display_valeur(self):
-      """
-      Affiche la valeur de l'objet pointé par self
-      """
-      valeur = self.node.item.get_valeur()
-      if valeur == None or valeur == '' : return # pas de valeur à afficher ...
-      self.valeur_choisie.set(getattr(valeur,"nom","unknown"))
-
-  def erase_valeur(self):
-      pass
-
-  def appel_make(self,page):
-      self.makeValeurPage(page,reel="oui")
-      
-class UNIQUE_ASSD_Panel_Reel(UNIQUE_ASSD_Panel):
-  def valid_valeur_reel(self):
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      anc_val = self.node.item.get_valeur()
-      valeurentree = self.entry.get()
-      self.valeur_choisie.set(valeurentree)
-      self.valid_valeur()
-
-  def display_valeur(self):
-      valeur = self.node.item.get_valeur()
-      if valeur == None or valeur == '' : return # pas de valeur à afficher ...
-      if type(valeur) == types.FloatType :
-         self.valeur_choisie.set(valeur)
-      else :
-         self.valeur_choisie.set(valeur.nom)
-
-       
-
diff --git a/Editeur/uniquebasepanel.py b/Editeur/uniquebasepanel.py
deleted file mode 100644 (file)
index 5517def..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import string,types,os
-from Tkinter import *
-from Tkinter import Widget
-import Pmw
-from copy import copy,deepcopy
-import traceback
-
-# Modules Eficas
-import Objecttreeitem
-import prefs
-import panels
-import images
-from widgets import FenetreDeParametre
-from widgets import showerror
-
-from Noyau.N_CR import justify_text
-from utils import substract_list
-
-# Import des panels
-from uniquepanel import UNIQUE_Panel
-
-
-class UNIQUE_BASE_Panel(UNIQUE_Panel):
-  """
-  Classe servant à définir le panneau associé aux mots-clés simples qui attendent
-  une valeur d'un type de base (entier, réel ou string).
-  """
-  def makeValeurPage(self,page):
-      """
-      Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type
-      de base cad entier, réel, string ou complexe
-      """
-      # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
-      # et de la liste des SD du bon type (constituant la liste des choix)
-      bulle_aide=self.get_bulle_aide()
-      aide=self.get_aide()
-      aide= justify_text(texte=aide)
-      liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
-      # Remplissage du panneau
-      self.frame_valeur = Frame(page)
-      self.frame_valeur.pack(fill='both',expand=1)
-      self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
-      self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-      self.label = Label(self.frame_valeur,text='Valeur :')
-      #self.label.place(relx=0.1,rely=0.2)
-      self.label.grid(row=0,padx=5,pady=5)
-      self.entry = Entry(self.frame_valeur,relief='sunken')
-      #self.entry.place(relx=0.28,rely=0.2,relwidth=0.6)
-      self.entry.grid(row=0,column=1,padx=5,pady=5)
-      self.entry.bind("<Return>",lambda e,c=self.valid_valeur:c())
-      self.entry.bind("<KP_Enter>",lambda e,c=self.valid_valeur:c())
-      # aide associée au panneau
-      self.frame_valeur.update()
-      self.aide = Label(self.frame_valeur, 
-                        text = aide,
-                        wraplength=int(self.frame_valeur.winfo_width()*0.8),
-                        justify='center')
-      #self.aide.place(relx=0.5,rely=0.9,anchor='n')
-      self.aide.grid(row=4,columnspan=2,padx=5,pady=5)
-      # bouton parametre
-      bouton_parametres = Button(self.frame_valeur, text="Parametres", command=self.affiche_parametre)
-      #bouton_parametres.place(relx=0.28,rely=0.5,relwidth=0.4)
-      bouton_parametres.grid(row=2,columnspan=2,padx=5,pady=5)
-      bouton_val = Button(self.frame_valeur, text="Valider", command=self.valide)
-      #bouton_val.place(relx=0.28,rely=0.6,relwidth=0.4)
-      bouton_val.grid(row=3,columnspan=2,padx=5,pady=5)
-      # affichage de la valeur du MCS
-      self.display_valeur()
-
-  def valide(self):
-      self.valid_valeur()
-
-  def affiche_parametre(self) :
-     if self.node.item.get_liste_param_possible() != [ ]:
-        txtparam=""
-        for param in self.node.item.get_liste_param_possible():
-           txtparam=txtparam+repr(param)+"\n"
-        if txtparam=="":
-           showerror("Aucun parametre ","Pas de parametre de ce type")
-        else :
-           try :
-                   self.fenetreparam.destroy()
-           except :
-                pass
-           self.fenetreparam=FenetreDeParametre( self, self.node.item, self.parent.appli, txtparam)
-
-  def destroy(self):
-      try :
-              self.fenetreparam.destroy()
-      except :
-        pass
-      Widget.destroy(self)
-
-  def get_aide(self):
-      """
-      Retourne la phrase d'aide indiquant de quel type doit être la valeur
-      du mot-clé simple fournie par l'utilisateur
-      """
-      mc = self.node.item.get_definition()
-      d_aides = { 'TXM' : "Une chaîne de caractères est attendue",
-                  'R'   : "Un réel est attendu",
-                  'I'   : "Un entier est attendu"}
-      type = mc.type[0]
-      commentaire=d_aides.get(type,"Type de base inconnu")
-      aideval=self.node.item.aide()
-      commentaire=commentaire +"\n"+ aideval
-      return commentaire
-
-  def get_bulle_aide(self):
-      """
-      Retourne la bulle d'aide associée au panneau et affichée par clic droit
-      """
-      return """Saisissez la valeur que vous voulez affecter au mot-clé simple
-      dans la zone de saisie et pressez <Return>"""
-      
-  def display_valeur(self):
-      """
-      Affiche la valeur de l'objet pointé par self
-      """
-      valeur = self.node.item.get_valeur()
-      if valeur == None or valeur == '' : # pas de valeur à afficher ...
-         self.entry.delete(0,END)
-         self.entry.focus()
-         return
-
-      valeur_texte=self.get_valeur_texte(valeur)
-      if valeur_texte != "":
-         valeur=valeur_texte
-      self.entry.delete(0,END)
-      self.entry.insert(0,valeur)
-      self.entry.focus()
-      
diff --git a/Editeur/uniquecomppanel.py b/Editeur/uniquecomppanel.py
deleted file mode 100644 (file)
index 3aa0907..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import string,types,os
-from Tkinter import *
-import Pmw
-from copy import copy,deepcopy
-import traceback
-
-# Modules Eficas
-import Objecttreeitem
-import prefs
-import panels
-import images
-from widgets import ListeChoix
-from widgets import FenetreDeSelection
-
-from Noyau.N_CR import justify_text
-from utils import substract_list
-
-# Import des panels
-from uniquepanel import UNIQUE_Panel
-
-      
-class UNIQUE_COMP_Panel(UNIQUE_Panel):
-  """
-  Classe servant à définir le panneau associé aux mots-clés simples
-  qui attendent une valeur de type complexe
-  """
-  def makeValeurPage(self,page):
-      """
-      Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type
-      de base cad entier, réel, string ou complexe
-      """
-      # Récupération de l'aide associée au panneau et de l'aide destinée à l'utilisateur
-      bulle_aide=self.get_bulle_aide()
-      aide=self.get_aide()
-      aide= justify_text(texte=aide)
-      # Remplissage du panneau
-      self.frame_valeur = Frame(page)
-      self.frame_valeur.pack(fill='both',expand=1)
-      self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
-      self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-      self.label  = Label(self.frame_valeur,text='Complexe de la forme : a+bj')
-      self.label1 = Label(self.frame_valeur,text='Imaginaire')
-      self.label2 = Label(self.frame_valeur,text='Phase')
-      self.label3 = Label(self.frame_valeur,text='OU')
-      self.label.place (relx=0.15,rely=0.1)
-      self.label1.place(relx=0.6,rely=0.50)
-      self.label2.place(relx=0.6,rely=0.57)
-      self.label3.place(relx=0.15,rely=0.4)
-      self.typ_cplx=StringVar()
-      self.typ_cplx.set('RI')
-      rb1 = Radiobutton(self.frame_valeur, text='RI  : Réel',variable=self.typ_cplx,value='RI')
-      rb2 = Radiobutton(self.frame_valeur, text='MP  : Module',variable=self.typ_cplx,value='MP')
-      rb1.place(relx=0.15,rely = 0.50)
-      rb2.place(relx=0.15,rely = 0.57)
-      self.entry1 = Pmw.EntryField(self.frame_valeur,validate='real')
-      self.entry2 = Pmw.EntryField(self.frame_valeur,validate='real')
-      self.entry3 = Pmw.EntryField(self.frame_valeur)
-      self.entry1.component('entry').bind("<Return>",lambda e,s=self:s.entry2.component('entry').focus())
-      self.entry1.component('entry').bind("<KP_Enter>",lambda e,s=self:s.entry2.component('entry').focus())
-      self.entry2.component('entry').bind("<Return>",lambda e,c=self.valid_valeur:c())
-      self.entry2.component('entry').bind("<KP_Enter>",lambda e,c=self.valid_valeur:c())
-      self.entry3.component('entry').bind("<Return>",lambda e,c=self.valid_complexe:c())
-      self.entry3.component('entry').bind("<KP_Enter>",lambda e,c=self.valid_complexe:c())
-      self.entry1.place(relx=0.15,rely = 0.65,relwidth=0.35)
-      self.entry2.place(relx=0.60,rely = 0.65,relwidth=0.35)
-      self.entry3.place(relx=0.15,rely = 0.20,relwidth=0.60)
-      self.entry1.focus()
-      self.bouton_val=Button(self.frame_valeur,text="Valider",command=self.valider,width=14)
-      self.bouton_val.place(relx=0.4,rely=0.8)
-      self.frame_valeur.update()
-      self.aide = Label(self.frame_valeur,
-                        text = aide,
-                        wraplength=int(self.frame_valeur.winfo_width()*0.8),
-                        justify='center')
-      self.aide.place(relx=0.5,rely=0.9,anchor='n')
-      # affichage de la valeur du MCS
-      self.display_valeur()
-
-  def valider(self):
-      if ((self.entry3.get() != None) and (self.entry3.get() != "" )):
-         self.erase_valeur()
-         self.valid_complexe()
-      else :
-         self.valid_valeur()
-         
-
-  def display_valeur(self):
-      """
-      Affiche la valeur de l'objet pointé par self
-      """
-      valeur = self.node.item.get_valeur()
-      if valeur == None or valeur == '' : return # pas de valeur à afficher ...
-      self.entry1.delete(0,END)
-      self.entry2.delete(0,END)
-      self.entry3.delete(0,END)
-      if type(valeur) not in (types.ListType,types.TupleType) :
-         self.display_complexe()
-      else:
-         typ_cplx,x1,x2=valeur
-         self.typ_cplx.set(typ_cplx)
-         self.entry1.setentry(x1)
-         self.entry2.setentry(x2)
-
-  def display_complexe(self):
-      valeur = self.node.item.get_valeur()
-      self.entry3.setentry(valeur)
-
-  def get_bulle_aide(self):
-      """
-      Retourne la bulle d'aide du panneau
-      """
-      return """-Choisissez votre format de saisie du complexe :
-      \t 'RI' = parties réelle et imaginaire
-      \t 'MP' = module/phase (en degrés)
-      - Saisissez ensuite dans les deux zones de saisie les deux nombres attendus"""
-
-  def get_aide(self):
-      """
-      Retourne la phrase d'aide décrivant le type de la valeur que peut prendre
-      le mot-clé simple courant
-      """
-      commentaire='Un complexe est attendu'
-      aideval=self.node.item.aide()
-      commentaire=commentaire +"\n"+ aideval
-      return commentaire
-
-  def get_valeur(self):
-      """
-      Retourne le complexe saisi par l'utilisateur
-      """
-      l=[]
-      l.append(self.typ_cplx.get())
-      try :
-         l.append(string.atof(self.entry1.get()))
-         l.append(string.atof(self.entry2.get()))
-      except :
-         return None
-      return `tuple(l)`
-
-  def erase_valeur(self):
-      """
-      Efface les entries de saisie
-      """
-      self.typ_cplx.set('RI')
-      self.entry1.delete(0,END)
-      self.entry2.delete(0,END)
-      
-  def valid_complexe(self):
-      valeurentree=self.entry3.get()
-      self.valid_valeur(valeurentree=valeurentree)
diff --git a/Editeur/uniqueintopanel.py b/Editeur/uniqueintopanel.py
deleted file mode 100644 (file)
index 6532e3f..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import string,types,os
-from Tkinter import *
-import Pmw
-from copy import copy,deepcopy
-import traceback
-
-# Modules Eficas
-import Objecttreeitem
-import prefs
-import panels
-import images
-from widgets import ListeChoix
-from widgets import FenetreDeSelection
-
-from Noyau.N_CR import justify_text
-from utils import substract_list
-
-# Import des panels
-from uniquepanel import UNIQUE_Panel
-
-class UNIQUE_INTO_Panel(UNIQUE_Panel):
-  """
-  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 makeValeurPage(self,page):
-      """
-      Génère la page de saisie d'une seule valeur parmi un ensemble
-      discret de possibles
-      """
-      # récupération de la bulle d'aide et de l'objet mc
-      bulle_aide=self.get_bulle_aide()
-      objet_mc = self.node.item.get_definition()
-      # remplissage du panel
-      self.frame_valeur = Frame(page)
-      self.frame_valeur.pack(fill='both',expand=1)
-      self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : 
-                              s.parent.appli.affiche_aide(e,a))
-      self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-      #l_choix=list(objet_mc.into)
-      #l_choix.sort()
-      l_choix=self.node.item.get_liste_possible([])
-      self.label = Label(self.frame_valeur,text='Choisir une valeur :')
-      self.label.pack(side='top')
-      self.frame = Frame(page)
-      self.frame.place(relx=0.33,rely=0.2,relwidth=0.33,relheight=0.6)
-
-
-      liste_commandes = (("<Button-1>",self.selectChoix),
-                         ("<Button-3>",self.deselectChoix),
-                         ("<Double-Button-1>",self.record_valeur))
-      self.Liste_choix = ListeChoix(self,self.frame,l_choix,
-                                    liste_commandes = liste_commandes,
-                                    titre="Valeurs possibles",optionReturn="oui")
-      self.Liste_choix.affiche_liste()
-      self.bouton_val = Button(self.frame_valeur,
-                               text = "Valider",
-                               command=self.record_valeur_ligne,
-                               width=14)
-      self.bouton_val.place(relx=0.33,rely=0.85)
-
-  def record_valeur_ligne(self):
-      valeur=self.Liste_choix.arg_selected
-      self.record_valeur(valeur)
-
-  def get_bulle_aide(self):
-      """
-      Retourne la bulle d'aide affectée au panneau courant (affichée par clic droit)
-      """
-      return """Double-cliquez sur la valeur désirée
-      pour valoriser le mot-clé simple courant"""
-
diff --git a/Editeur/uniquepanel.py b/Editeur/uniquepanel.py
deleted file mode 100644 (file)
index a622b8a..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import string,types,os
-from Tkinter import *
-import Pmw
-from copy import copy,deepcopy
-import traceback
-
-# Modules Eficas
-import Objecttreeitem
-import prefs
-import panels
-import images
-from widgets import ListeChoix
-from widgets import FenetreDeSelection
-
-from Noyau.N_CR import justify_text
-from utils import substract_list
-
-# Import des panels
-from newsimppanel import newSIMPPanel
-
-    
-class UNIQUE_Panel(newSIMPPanel):
-  """
-  Classe virtuelle servant de classe mère à toutes celles définissant un panneau
-  permettant l'affichage et la saisie d'une valeur unique pour le mot-clé simple
-  """
-
-  def erase_valeur(self):
-      """
-      Efface l'entry de saisie
-      """
-      self.entry.delete(0,END)
-
-  def get_valeur(self):
-      """
-      Retourne la valeur donnée par l'utilisateur
-      """
-      return self.entry.get()
-    
-  
-  def valid_valeur(self,valeurentree=None):
-      """
-      Teste si la valeur fournie par l'utilisateur est une valeur permise :
-      - si oui, l'enregistre
-      - si non, restaure l'ancienne valeur
-      """
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      anc_val = self.node.item.get_valeur()
-      if valeurentree== None :
-         valeurentree = self.get_valeur()
-      valeur,validite=self.node.item.eval_valeur(valeurentree)
-      if not validite :
-             commentaire = "impossible d'évaluer : %s " %`valeurentree`
-             self.display_valeur()
-             self.parent.appli.affiche_infos(commentaire)
-             return
-   
-      test = self.node.item.set_valeur(valeur)
-      if test :
-          self.set_valeur_texte(str(valeurentree))
-       
-      if not test :
-          mess = "impossible d'évaluer : %s " %`valeur`
-          self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée : "+mess)
-      elif self.node.item.isvalid() :
-          self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
-      else :
-          cr = self.node.item.get_cr()
-          mess = "Valeur du mot-clé non autorisée "+cr.get_mess_fatal()
-          self.reset_old_valeur(anc_val,mess=mess)
-
-      self.display_valeur()
diff --git a/Editeur/uniquesdcopanel.py b/Editeur/uniquesdcopanel.py
deleted file mode 100644 (file)
index 6c3f1fc..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# Modules Python
-import string,types,os
-from Tkinter import *
-import Pmw
-from copy import copy,deepcopy
-import traceback
-
-# Modules Eficas
-import Objecttreeitem
-import prefs
-import panels
-import images
-from widgets import ListeChoix
-from widgets import FenetreDeSelection
-
-from Noyau.N_CR import justify_text
-from utils import substract_list
-
-# Import des panels
-from uniqueassdpanel import UNIQUE_ASSD_Panel
-
-
-class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel):
-  """
-  Classe servant à définir le panneau correspondant à un mot-clé simple
-  qui attend une valeur unique de type dérivé d'ASSD ou non encore
-  existante (type CO(...) utilisé dans les macros uniquement)
-  """
-  def makeValeurPage(self,page):
-      """
-      Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une SD de type dérivé
-      d'ASSD
-      """
-      # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
-      # et de la liste des SD du bon type (constituant la liste des choix)
-      bulle_aide=self.get_bulle_aide()
-      aide=self.get_aide()
-      aide= justify_text(texte=aide)
-      liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
-      # Remplissage du panneau
-      self.frame_valeur = Frame(page)
-      self.frame_valeur.pack(fill='both',expand=1)
-      self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
-      self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-      # affichage de la liste des SD existantes et du bon type
-      self.listbox = Pmw.ScrolledListBox(self.frame_valeur,
-                                         items=liste_noms_sd,
-                                         labelpos='n',
-                                         label_text="Structures de données du type\n requis par l'objet courant :",
-                                         listbox_height = 6,
-                                         selectioncommand=self.select_valeur_from_list,
-                                         dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c))
-      self.listbox.component("listbox").bind("<Return>",lambda e,s=self,c=self.valid_valeur : s.choose_valeur_from_list(c))
-      if liste_noms_sd != [] :
-         self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
-         self.b_co = Pmw.OptionMenu(self.frame_valeur,labelpos='w',label_text = "Nouveau concept : ", items = ('NON','OUI'),
-                                         menubutton_width=10)
-      else :
-         self.b_co = Pmw.OptionMenu(self.frame_valeur,labelpos='w',label_text = "Nouveau concept : ", items = ('OUI',),
-                                         menubutton_width=10)
-      # affichage du bouton 'Nouveau concept'
-      self.b_co.configure(command = self.ask_new_concept)
-      if liste_noms_sd != [] :
-         self.b_co.place(relx=0.05,rely=0.6,anchor='w')
-      else :
-         self.b_co.place(relx=0.05,rely=0.3,anchor='w')
-      self.label_co = Label(self.frame_valeur,text='Nom du nouveau concept :')
-      self.entry_co = Entry(self.frame_valeur)
-      self.entry_co.bind('<Return>',self.valid_nom_concept_co)
-      self.entry_co.bind('<KP_Enter>',self.valid_nom_concept_co)
-      # affichage du label de la structure de donnée choisie
-      self.l_resu = Label(self.frame_valeur,text='Structure de donnée choisie :')
-      self.valeur_choisie = StringVar()
-      self.label_valeur = Label(self.frame_valeur,textvariable=self.valeur_choisie)
-      self.frame_valeur.update()
-      self.aide = Label(self.frame_valeur,
-                        text = aide,
-                        wraplength=int(self.frame_valeur.winfo_width()*0.8),
-                        justify='center')
-      self.aide.place(relx=0.5,rely=0.85,anchor='n')
-
-      self.but_val = Button(self.fr_but,text = "Valider",command= self.valid_nom_concept_co)
-      self.but_val.pack(side='right',padx=5, pady=5)
-
-      # affichage de la valeur courante
-      self.display_valeur()
-      if liste_noms_sd == [] :
-          self.b_co.invoke('OUI')
-      
-  def get_bulle_aide(self):
-      """
-      Retourne la bulle d'aide du panneau
-      """
-      return """Double-cliquez sur la structure de donnée désirée
-      pour valoriser le mot-clé simple courant ou cliquez sur NOUVEAU CONCEPT pour
-      entrer le nom d'un concept non encore existant"""
-
-  def valid_valeur(self):
-      """
-      Teste si la valeur fournie par l'utilisateur est une valeur permise :
-      - si oui, l'enregistre
-      - si non, restaure l'ancienne valeur
-      """
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      valeur = self.get_valeur()
-      #print "valid_valeur",valeur
-
-      self.erase_valeur()
-      anc_val = self.node.item.get_valeur()
-      test_CO=self.node.item.is_CO(anc_val)
-      #PN essai pour bug dans MACRO_PROJ_BASE 
-      valeur,validite=self.node.item.eval_valeur(valeur)
-      test = self.node.item.set_valeur(valeur)
-      if not test :
-          mess = "impossible d'évaluer : %s " %`valeur`
-          self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess)
-          return
-      #PN essai pour bug dans MACRO_PROJ_BASE 
-      #elif self.node.item.isvalid() :
-      elif validite: 
-          self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
-          if test_CO:
-             # il faut egalement propager la destruction de l'ancien concept
-             self.node.item.delete_valeur_co(valeur=anc_val)
-             # et on force le recalcul des concepts de sortie de l'etape
-             self.node.item.object.etape.get_type_produit(force=1)
-             # et le recalcul du contexte
-             self.node.item.object.etape.parent.reset_context()
-          self.node.parent.select()
-      else :
-          cr = self.node.item.get_cr()
-          mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
-          self.reset_old_valeur(anc_val,mess=mess)
-          return
-
-  def valid_nom_concept_co(self,event=None):
-      """
-      Lit le nom donné par l'utilisateur au concept de type CO qui doit être
-      la valeur du MCS courant et stocke cette valeur
-      """
-      #print "valid_nom_concept_co"
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      anc_val = self.node.item.get_valeur()
-      if anc_val != None:
-          # il faut egalement propager la destruction de l'ancien concept
-          self.node.item.delete_valeur_co(valeur=anc_val)
-          # et on force le recalcul des concepts de sortie de l'etape
-          self.node.item.object.etape.get_type_produit(force=1)
-          # et le recalcul du contexte
-          self.node.item.object.etape.parent.reset_context()
-      nom_concept = self.entry_co.get()
-      #print "valid_nom_concept_co",nom_concept
-      test,mess=self.node.item.set_valeur_co(nom_concept)
-      if not test:
-          # On n'a pas pu créer le concept
-          self.parent.appli.affiche_infos(mess)
-          return
-      elif self.node.item.isvalid() :
-          self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
-          self.node.parent.select()
-      else :
-          cr = self.node.item.get_cr()
-          mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
-          self.reset_old_valeur(anc_val,mess=mess)
-          return
-
-  def ask_new_concept(self,tag):
-      """
-      Crée une entry dans le panneau d'un MCS qui attend un concept OU un CO() afin de
-      permettre à l'utilisateur de donner le nom du nouveau concept
-      """
-      new_concept = self.b_co.getcurselection()
-      if new_concept == 'OUI':
-          self.label_co.place(relx=0.05,rely=0.7)
-          self.entry_co.place(relx=0.45,rely=0.7,relwidth=0.25)
-          self.l_resu.place_forget()
-          self.label_valeur.place_forget()
-          self.entry_co.focus()
-      elif new_concept == 'NON':
-          # On est passe de OUI à NON, on supprime la valeur
-# PN correction de bug (on passe de non a non et cela supprime la valeur)
-# ajout du if de le ligne suivane
-          if self.node.item.is_CO():
-                self.node.item.delete_valeur_co()
-                self.record_valeur(name=None,mess="Suppression CO enregistrée")
-                self.label_co.place_forget()
-                self.entry_co.place_forget()
-                self.l_resu.place(relx=0.05,rely=0.7)
-                self.label_valeur.place(relx=0.45,rely=0.7)
-          
-  def display_valeur(self):
-      """
-      Affiche la valeur de l'objet pointé par self
-      """
-      valeur = self.node.item.get_valeur()
-      #print "display_valeur",valeur
-      if valeur == None or valeur == '': 
-         self.valeur_choisie.set('')
-         return # pas de valeur à afficher ...
-      # il faut configurer le bouton si la valeur est un objet CO
-      # sinon afficher le nom du concept dans self.valeur_choisie
-      if self.node.item.is_CO():
-          #print "display_valeur.is_CO"
-          self.b_co.invoke('OUI')
-          self.entry_co.insert(0,valeur.nom)
-      else:
-          self.valeur_choisie.set(valeur.nom)
-
-  def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
-      """
-      Enregistre  val comme valeur de self.node.item.object SANS faire de test de validité
-      """
-      if self.parent.modified == 'n' : self.parent.init_modif()
-      if name != None:
-          valeur =name
-      else :
-          self.entry_co.delete(0,END)
-          valeur= self.entry_co.get()
-      self.node.item.set_valeur_co(valeur)
-      self.parent.appli.affiche_infos(mess)
-      # On met a jour le display dans le panneau
-      self.display_valeur()
-      if self.node.item.isvalid():
-          self.node.parent.select()
-
-
diff --git a/Editeur/widgets.py b/Editeur/widgets.py
deleted file mode 100644 (file)
index 11551db..0000000
+++ /dev/null
@@ -1,1387 +0,0 @@
-# -*- 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.
-#
-#
-# ======================================================================
-# ----------------------------------------------------------
-#   Cette classe sert à définir les widgets utilisés par
-#          EFICAS
-# ----------------------------------------------------------
-
-import Tkinter
-from Tkinter import *
-import Pmw
-import os,sys,re,string
-import types,fnmatch
-import traceback
-from tkFileDialog import *
-from tkMessageBox import showinfo,askyesno,showerror,askretrycancel
-
-import fontes
-import prefs
-from utils import save_in_file
-from centerwindow import centerwindow
-
-from Noyau.N_utils import repr_float
-from Accas import AsException
-
-# Surcharge de la fonction askyesno qui retourne un resultat errone en Python 2.3 avec Tk 8.4
-# et Tkinter.wantobject==1
-import tkMessageBox
-def askyesno(title=None, message=None, **options):
-    "Ask a question; return true if the answer is yes"
-    s = tkMessageBox._show(title, message, tkMessageBox.QUESTION, tkMessageBox.YESNO, **options)
-    if s == tkMessageBox.YES:return 1
-    if s == tkMessageBox.NO:return 0
-    if s:return 1
-    return 0
-
-    
-class Fenetre :
-    """ Cette classe permet de créer une fenêtre Toplevel dans laquelle
-        on peut afficher un texte et qui permet de le sauver"""
-    def __init__(self,appli,titre="",texte="",wrap=WORD,width=100,height=30):
-        self.appli=appli
-        if self.appli.test==1 : return
-        self.fenetre = Toplevel()
-        self.fenetre.withdraw()
-        #self.fenetre.configure(width = 800,height=500)
-        self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
-        self.fenetre.title("Visualisation du "+titre)
-        self.texte = string.replace(texte,'\r\n','\n')
-        self.titre = titre
-        fonte=fontes.standardcourier10
-        # définition des frames
-        self.frame_texte = Frame(self.fenetre)
-        self.frame_boutons = Frame(self.fenetre)
-        #self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.9)
-        #self.frame_boutons.place(relheight=0.1,relx=0,rely=0.9,relwidth=1.)
-        # définition de la zone texte et du scrollbar
-        self.zone_texte = Text(self.frame_texte,font=fonte,wrap=wrap,
-                               height=height,width=width)
-        self.zone_texte.bind("<Key-Prior>", self.page_up)
-        self.zone_texte.bind("<Key-Next>", self.page_down)
-        self.zone_texte.bind("<Key-Up>", self.unit_up)
-        self.zone_texte.bind("<Key-Down>", self.unit_down)
-        self.scroll_v = Scrollbar (self.frame_texte,command = self.zone_texte.yview)
-        #self.scroll_h = Scrollbar (self.frame_texte,command = self.zone_texte.xview)
-        self.scroll_v.pack(side='right',fill ='y')
-        #self.scroll_h.pack(side='bottom',fill ='x')
-        self.zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10)
-        self.zone_texte.configure(yscrollcommand=self.scroll_v.set)
-        # définition des boutons
-        self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit,
-                                default='active')
-        self.but_save = Button(self.frame_boutons,text = "Sauver",command = self.save)
-        #self.but_quit.place(relx=0.4,rely=0.5,anchor='center')
-        #self.but_save.place(relx=0.6,rely=0.5,anchor='center')
-        self.but_quit.pack(side='left',padx=25, pady=5)
-        self.but_save.pack(side='right',padx=25, pady=5)
-        self.frame_texte.pack(side='top',fill='both',expand=1)
-        self.frame_boutons.pack(side='bottom')
-        self.zone_texte.focus_set()
-        self.fenetre.bind('<Return>',self.quit) #dismiss window
-
-        # affichage du texte
-        self.affiche_texte(self.texte)
-        self.zone_texte.config(state=DISABLED)
-        centerwindow(self.fenetre)
-        self.fenetre.deiconify()
-
-    def page_up(self,event):
-        event.widget.yview_scroll(-1, "page")
-        return "break" #Pour eviter la propagation de l'evenement a la fenetre principale
-    def page_down(self,event):
-        event.widget.yview_scroll(1, "page")
-        return "break" #Pour eviter la propagation de l'evenement a la fenetre principale
-    def unit_up(self,event):
-        event.widget.yview_scroll(-1, "unit")
-        return "break" #Pour eviter la propagation de l'evenement a la fenetre principale
-    def unit_down(self,event):
-        event.widget.yview_scroll(1, "unit")
-        return "break" #Pour eviter la propagation de l'evenement a la fenetre principale
-
-    def wait(self):
-        self.fenetre.grab_set()
-        self.zone_texte.focus_set()
-        self.fenetre.wait_window(self.fenetre)
-
-    def quit(self,event=None):
-        self.fenetre.destroy()
-        return "break" #Pour eviter la propagation de l'evenement a la fenetre principale
-
-    def efface_scroll(self):
-        """ Efface le scroll lorsqu'il n'est pas nécessaire : ne marche pas"""
-        self.scroll_v.pack_forget()
-        #self.scroll_h.pack_forget()
-
-    def affiche_texte(self,texte):
-        """ Affiche le texte dans la fenêtre """
-        if texte != "" :
-            self.zone_texte.insert(END,texte)
-            try:
-                self.fenetre.update_idletasks()
-                x0,y0,x1,y1 = self.zone_texte.bbox(END)
-                if (y1-y0) < 300 : self.efface_scroll()
-            except:
-                pass
-
-    def save(self):
-        """ Permet de sauvegarder le texte dans un fichier dont on a demandé le nom
-        à l'utilisateur """
-        file = asksaveasfilename(parent=self.fenetre,defaultextension = '.comm',
-                               #initialdir = self.appli.CONFIGURATION.rep_user,
-                               initialdir = self.appli.CONFIGURATION.initialdir,
-                               title="Sauvegarde du "+self.titre)
-        if file :
-            if not save_in_file(file,self.texte,None) :
-                showerror("Sauvegarde impossible",
-                       "Impossible de sauvegarder le texte dans le fichier spécifié\n"+
-                          "Vérifiez les droits d'écriture",parent=self.fenetre)
-            else:
-                showinfo("Sauvegarde effectuée","Sauvegarde effectuée dans le fichier %s" %file,parent=self.fenetre)
-
-    def destroy(self):
-        try :
-           self.fenetre.destroy()
-        except :
-           pass
-
-class FenetreSurLigneWarning(Fenetre):
-
-    def affiche_texte(self,texte):
-        """ Affiche le texte dans la fenêtre """
-        ligne=0
-        if texte != "" :
-           texte_cr=texte.splitlines()
-           for l in texte_cr:
-                ligne=ligne+1
-                l=l+"\n"
-                self.zone_texte.insert(END,l)
-                if (l.find("WARNING") > -1) or (l.find("ERROR") > -1) : 
-                   self.zone_texte.tag_add( "Rouge", str(ligne)+".0", "end-1c" )
-                   self.zone_texte.tag_config("Rouge", foreground='red')
-           try:
-                self.fenetre.update_idletasks()
-                x0,y0,x1,y1 = self.zone_texte.bbox(END)
-                if (y1-y0) < 300 : self.efface_scroll()
-           except:
-                pass
-
-class FenetreYesNo(Fenetre):
-    def __init__(self,appli,titre="",texte="",yes="Yes",no="No"):
-        self.appli=appli
-        self.fenetre = Toplevel()
-        self.fenetre.configure(width = 800,height=500)
-        self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
-        self.fenetre.title(titre)
-        self.texte = string.replace(texte,'\r\n','\n')
-        self.titre = titre
-        fonte=fontes.standardcourier10
-        # définition des frames
-        self.frame_texte = Frame(self.fenetre)
-        self.frame_boutons = Frame(self.fenetre)
-        self.frame_boutons.place(relx=0,rely=0,    relwidth=1.,relheight=0.1)
-        self.frame_texte.place(  relx=0,rely=0.1,  relwidth=1, relheight=0.9)
-        # définition de la zone texte et du scrollbar
-        self.zone_texte = Text(self.frame_texte,font=fonte)
-        self.zone_texte.bind("<Key-Prior>", self.page_up)
-        self.zone_texte.bind("<Key-Next>", self.page_down)
-        self.zone_texte.bind("<Key-Up>", self.unit_up)
-        self.zone_texte.bind("<Key-Down>", self.unit_down)
-        self.scroll_v = Scrollbar (self.frame_texte,command = self.zone_texte.yview)
-        #self.scroll_h = Scrollbar (self.frame_texte,command = self.zone_texte.xview)
-        self.scroll_v.pack(side='right',fill ='y')
-        #self.scroll_h.pack(side='bottom',fill ='x')
-        self.zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10)
-        self.zone_texte.configure(yscrollcommand=self.scroll_v.set)
-        # définition des boutons
-        self.but_yes = Button(self.frame_boutons,text = yes,command=self.yes)
-        self.but_no = Button(self.frame_boutons,text = no,command = self.no)
-        self.but_yes.place(relx=0.4,rely=0.5,anchor='center')
-        self.but_no.place(relx=0.6,rely=0.5,anchor='center')
-        # affichage du texte
-        self.affiche_texte(self.texte)
-        centerwindow(self.fenetre)
-
-    def yes(self):
-        self.result=1
-        self.quit()
-
-    def no(self):
-        self.result=0
-        self.quit()
-
-class FenetreDeSelection(Fenetre):
-    """ Classe dérivée de Fenêtre permettant la récupération d'une zone de texte sélectionnée.
-        Cette classe est utilisée pour affecter une liste de valeurs à un mot-clé.
-    """
-    def __init__(self,panel,item,appli,titre="",texte="",cardinal=1):
-        Fenetre.__init__(self,appli,titre=titre,texte=texte)
-        self.frame_boutons.place_forget()
-        self.frame_texte.place_forget()
-        self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.8)
-        self.frame_boutons.place(relheight=0.2,relx=0,rely=0.8,relwidth=1.)
-
-        self.cardinal=cardinal
-        self.fenetre.configure(width = 320,height=400)
-        centerwindow(self.fenetre)
-        self.panel = panel
-        self.item = item
-        self.fenetre.title(titre)
-        self.but_save.configure(text="Ajouter",command=self.traite_selection)
-        # séparateur par défaut
-        self.separateur = ';'
-        # création de la zone de saisie du séparateur
-        l_separateurs_autorises = self.get_separateurs_autorises()
-        self.choix_sep = Pmw.ComboBox(self.frame_boutons,
-                                      label_text = "Séparateur :",
-                                      labelpos = 'w',
-                                      listheight = 100,
-                                      selectioncommand = self.choose_separateur,
-                                      scrolledlist_items = l_separateurs_autorises)
-        self.choix_sep.component('entry').configure(width=6)
-        self.choix_sep.place(relx=0.01,rely=0.5,anchor='w')
-        self.choix_sep.selectitem(self.separateur)
-        # Replacement
-        self.but_quit.place_forget()
-        self.but_save.place_forget()
-        self.but_all  = Button(self.frame_boutons,text = "Tout Sélectionner", command=self.tout)
-        self.but_save.place(relx=0.6,rely=0.6,anchor='center')
-        self.but_quit.place(relx=0.8,rely=0.6,anchor='center')
-        self.but_all.place(relx=0.7,rely=0.2,anchor='center')
-        self.choose_separateur('espace')
-     
-
-    def get_separateurs_autorises(self):
-        """
-        Retourne la liste des séparateurs autorisés
-        """
-        return ['espace',';',',']
-
-    def choose_separateur(self,nom_sep):
-        """
-        Affecte à self.separateur le caractère séparateur correspondant à nom_sep
-        """
-        if nom_sep == 'espace' :
-            self.separateur = ' '
-        else:
-            self.separateur = nom_sep
-        
-    def tout(self):
-        liste=[]
-        texte=self.texte.splitlines()
-        for l in texte :
-            for mot in string.split(l,self.separateur):
-               if mot != '' and mot != ' ' and mot != self.separateur :
-                  liste.append(mot)
-        self.traite_selection(liste)
-
-    def traite_selection(self,liste=None):
-        """ Cette méthode effectue tous les traitements nécessaires pour vérifier
-            et affecter la liste de valeurs à l'objet réprésenté par self.item
-        """
-        # Récupère la liste des chaines de caractères de la zone sélectionnée
-        message=""
-        if liste == None:
-           message,liste = self.recupere_liste()
-        if self.test_probleme(message,"Sélectionnez des données") == 0:
-            return
-        # Vérifie que le nombre de données est dans les limites attendues
-        message = self.verif_liste(liste)
-        if self.test_probleme(message,"Vérifiez le nombre de données") == 0:
-            return
-        # Crée une liste de valeurs du type attendu
-        message,liste_valeurs = self.creation_liste_valeurs(liste)
-        if self.test_probleme(message,"Vérifiez le type des données") == 0:
-            return
-        # Vérifie que chaque valeur est dans le domaine exigé
-        message = self.verif_valeurs(liste_valeurs)
-        if self.test_probleme(message,"Vérifiez le domaine des valeurs") == 0:
-            return
-        # Ajoute les valeurs dans la liste de valeurs du mot-clé
-        if self.cardinal != 1 :
-           nb=self.cardinal
-           l_valeurs=[]
-           # a ameliorer
-           if (len(liste_valeurs)%nb != 0):
-                message="La cardinalité n'est pas correcte"
-                self.test_probleme(message,"On attend des tuples")
-                return
-           for i in range(len(liste_valeurs)/nb) :
-               if (nb==2):
-                   t=(liste_valeurs[i*nb], liste_valeurs[i*nb+1])
-               elif (nb ==3):
-                   t=(liste_valeurs[i*nb], liste_valeurs[i*nb+1], liste_valeurs[i*nb+2])
-               else :
-                  print "probleme : prevenir la maintenance Eficas"
-                  return
-               l_valeurs.append(t)
-           liste_valeurs=l_valeurs
-        self.ajouter_valeurs(liste_valeurs)
-        self.appli.affiche_infos("Liste de valeurs acceptée")
-
-    def test_probleme(self, message, message_eficas):
-        """ Cette méthode affiche un message d'erreur si message != ''
-            et retourne 0, sinon retourne 1 sans rien afficher.
-        """
-        if message != "":
-            showinfo("Problème",message,parent=self.fenetre)
-            self.fenetre.tkraise()
-            self.appli.affiche_infos(message_eficas)
-            return 0
-        else:
-            return 1
-
-    def recupere_liste(self):
-        """ Cette méthode récupère le texte de la zone sélectionnée, construit et
-            retourne une liste avec les chaines qui se trouvent entre les séparateurs.
-            S'il n'y a pas de données selectionnées, elle retourne un message d'erreur
-            et une liste vide.
-        """
-        message = ""
-        try:
-            selection=self.fenetre.selection_get()
-        except:
-            message = "Pas de donnée sélectionnée"
-            return message,None
-        # les retours chariots doivent être interprétés comme des séparateurs
-        selection = string.replace(selection,'\n',self.separateur)
-        # on splitte la sélection suivant le caractère séparateur
-        liste_chaines = string.split(selection,self.separateur)
-        l_chaines = []
-        for chaine in liste_chaines:
-            chaine = string.strip(chaine)
-            if chaine != '' : l_chaines.append(chaine)
-        return message,l_chaines
-
-    def verif_liste(self, liste):
-        """ Cette méthode effectue des tests sur le nombre d'éléments de la liste
-            et retourne 1 si la liste est correcte, sinon 0 et le message d'erreur
-            correspondant.
-        """
-        message = ""
-        # nombre d'éléments sélectionnés
-        nombre_elements = len(liste)
-        # nombre d'éléments déja dans la liste du panel
-        nombre_in_liste = len(self.panel.Liste_valeurs.get_liste())
-        multiplicite = self.item.GetMultiplicite()
-        if (nombre_elements % multiplicite) != 0:
-            message = "Vous devez sélectionner "+str(multiplicite)+" * n données"
-            return message
-        nombre_valeurs = nombre_elements / multiplicite
-        cardinalite = self.item.GetMinMax()
-        if nombre_valeurs < cardinalite[0]:
-            message = "Vous devez sélectionner au moins "+str(cardinalite[0])+" valeurs"
-            return message
-        if cardinalite[1] != "**" and nombre_valeurs > (long(cardinalite[1])-nombre_in_liste):
-            message = "La liste ne peut avoir plus de "+str(cardinalite[1])+" valeurs"
-            return message
-
-        return message
-
-    def creation_liste_valeurs(self, liste):
-        """ Cette méthode crée et retourne une liste de valeurs du type attendu
-            par le mot-clé. La liste de valeurs est créée à partir de la liste
-            de chaines de caractères transmise.
-        """
-        type_attendu = self.item.GetType()[0]
-        if type_attendu == 'R':
-            return self.convertir(liste, f_conversion= float)
-        elif type_attendu == 'I':
-            return self.convertir(liste, f_conversion= int)
-        elif type_attendu == 'TXM':
-            return self.convertir(liste)
-        else:
-            message = "Seuls les entiers, les réels et les chaines de caractères sont convertis"
-            return message,None
-
-    def convertir(self, liste, f_conversion=None):
-        """ Cette méthode essaie de convertir les éléments de la liste avec la
-            fonction f_conversion si elle existe, et retourne la liste des
-            éléments dans le type voulu en cas de succès, sinon retourne None.
-        """
-        liste_valeurs = []
-        message = ""
-        for chaine in liste:
-            if f_conversion:
-                try:
-                    liste_valeurs.append(f_conversion(chaine))
-                except:
-                    message = "Impossible de convertir "+chaine+" dans le type attendu"
-                    return message,None
-            else:
-                liste_valeurs.append(chaine)
-        return message,liste_valeurs
-
-    def verif_valeurs(self, liste_valeurs):
-        """ Cette méthode teste la validité de tous les éléments de la liste,
-            retourne un message vide s'ils sont valides
-            ou un message non vide au premier élément non valide rencontré
-        """
-        message = ""
-        for valeur in liste_valeurs:
-            test,message = self.item.object.verif_type(valeur)
-            if test == 0: return message
-        return message
-
-    def ajouter_valeurs(self, liste_valeurs):
-        """ Cette méthode ajoute les nouvelles valeurs à la liste existante."""
-        liste = self.panel.Liste_valeurs.get_liste()
-        liste.extend(liste_valeurs)
-        self.panel.Liste_valeurs.put_liste(liste)
-
-class FenetreDeParametre(Fenetre) :
-    def __init__(self,parent,item,appli,texte):
-        self.parent=parent
-        self.appli=appli
-        self.fenetre = Toplevel()
-        self.fenetre.configure(width = 250,height=100)
-        self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
-        self.fenetre.title("Parametres")
-        self.titre = "Parametres"
-        self.texte = string.replace(texte,'\r\n','\n')
-        fonte=fontes.standardcourier10
-
-        # définition des frames
-        self.frame_texte = Frame(self.fenetre)
-        self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.7)
-        # définition de la zone texte et du scrollbar
-        self.zone_texte = Text(self.frame_texte,font=fonte)
-        self.zone_texte.bind("<Key-Prior>", self.page_up)
-        self.zone_texte.bind("<Key-Next>", self.page_down)
-        self.zone_texte.bind("<Key-Up>", self.unit_up)
-        self.zone_texte.bind("<Key-Down>", self.unit_down)
-        self.scroll_v = Scrollbar (self.frame_texte,command = self.zone_texte.yview)
-        self.scroll_v.pack(side='right',fill ='y')
-        self.zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10)
-        self.zone_texte.configure(yscrollcommand=self.scroll_v.set)
-        # affichage du texte
-        self.affiche_texte(self.texte)
-        self.zone_texte.config(state="disabled")
-
-        # définition des boutons
-        self.frame_boutons = Frame(self.fenetre)
-        self.frame_boutons.place(relheight=0.3,relx=0,rely=0.65,relwidth=1.)
-        self.label1 = Label(self.frame_boutons,text="surligner la")
-        self.label2 = Label(self.frame_boutons,text="ligne entière")
-        self.label1.place(relx=0.1,rely=0)
-        self.label2.place(relx=0.1,rely=0.5)
-        self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit)
-        self.but_save = Button(self.frame_boutons,text = "Choisir",command = self.Choisir)
-        self.but_save.place(relx=0.6,rely=0,relheight=1)
-        self.but_quit.place(relx=0.8,rely=0,relheight=1)
-
-
-    def Choisir(self):
-        try:
-            selection=self.zone_texte.selection_get()
-        except:
-            showerror("Pas de donnée sélectionnée",
-                       "Selectionner un parametre")
-        l_param = ""
-        for param in selection.splitlines():
-            nomparam=param[0:param.find("=")-1]
-            if nomparam != '' : 
-                l_param=l_param+nomparam+','
-        self.parent.entry.delete(0,Tkinter.END)
-        self.parent.entry.insert(0,l_param[0:-1])
-        self.parent.valid_valeur()
-        self.quit()
-
-class Formulaire:
-    """
-    Cette classe permet de créer une boîte Dialog dans laquelle
-    on affiche un formulaire à remplir par l'utilisateur
-    """
-    def __init__(self,fen_pere,obj_pere=None,titre="",texte="",items=(),mode='query',commande=None):
-        self.resultat=0
-        if items in ((),[]) : return
-        self.items = items
-        self.titre = titre
-        self.texte = texte
-        self.fen_pere = fen_pere
-        self.obj_pere = obj_pere
-        self.mode= mode
-        self.command = commande
-        self.display()
-
-    def display(self):
-        self.init_validateurs()
-        self.init_fenetre()
-        self.init_texte()
-        self.init_items_formulaire()
-        self.fenetre.activate(geometry='centerscreenalways')
-
-    def init_validateurs(self):
-        """
-        Crée le dictionnaire des validateurs des objets reconnus par le formulaire
-        """
-        self.d_validateurs = {}
-        self.d_validateurs['rep']  = self.repvalidator
-        self.d_validateurs['file'] = self.filevalidator
-        self.d_validateurs['cata']= self.catavalidator
-        self.d_validateurs['mot']= self.motvalidator
-        self.d_validateurs['mot2']= self.mot2validator
-        self.d_validateurs['mot3']= self.mot3validator
-        self.d_validateurs['mot4']= self.mot4validator
-        
-    def init_fenetre(self):
-        """
-        Crée la fenêtre Dialog
-        """
-        if self.mode == 'query':
-            buttons=('Valider','Annuler')
-            defaultbutton = 'Valider'
-        elif self.mode == 'display':
-            if self.command :
-                buttons=(self.command[0],'OK')
-                defaultbutton = 'OK'
-            else:
-                buttons=('OK')
-                defaultbutton = 'OK'
-        self.fenetre = Pmw.Dialog(self.fen_pere,
-                                  buttons=buttons,
-                                  defaultbutton = defaultbutton,
-                                  title = self.titre,
-                                  command = self.execute)
-        self.fenetre.withdraw()
-        
-    def init_texte(self):
-        """
-        Crée le label qui affiche le texte à l'intérieur du panneau
-        """
-        fonte=fontes.standard
-        fr_texte = Frame(self.fenetre.interior(),height=60)
-        fr_texte.pack(side='top',fill='x',expand=1)
-        Label(fr_texte,text = self.texte, font=fonte).place(relx=0.5,rely=0.5,anchor='center')
-
-    def init_items_formulaire(self):
-        """
-        Crée et affiche les items dans la boîte de dialogue
-        """
-        self.radiobut = 0
-        self.widgets = []
-        self.item_widgets = {}
-        length_maxi = 0
-        for item in self.items:
-            if len(item[0])>length_maxi : length_maxi = len(item[0])
-        window = self.fenetre.interior()
-        for item in self.items :
-            if len(item) == 4 :
-               label,nature,nom_var,defaut = item
-               chaine="Yes" 
-               chaine2="No"
-            else :
-               label,nature,nom_var,defaut,chaine,chaine2 = item
-          
-            # création de la frame
-            fr_item = Frame(window,height=40,width=700)
-            fr_item.pack(side='top',fill='x',expand=1)
-            # création du label
-            Label(fr_item,text = label).place(relx=0.05,rely=0.4)
-            if nature in ('rep','file','cata','mot','mot2','mot3','mot4'):
-                # création de l'entry
-                e_item = Entry(fr_item) 
-                e_item.place(relx=0.5,rely=0.4,relwidth=0.45)
-                self.widgets.append(e_item)
-                self.item_widgets[item] = e_item
-                if defaut : e_item.insert(0,str(defaut))
-            elif nature == 'YesNo':
-                # création de la StringVar
-                var = StringVar()
-                setattr(self,'item_'+nom_var,var)
-                var.set(defaut)
-                # création du radiobouton
-                rb1 = Radiobutton(fr_item,text=chaine,variable=var,value='OUI')
-                rb2 = Radiobutton(fr_item,text=chaine2,variable=var,value='NON')
-                rb1.place(relx=0.65,rely=0.5,anchor='center')
-                rb2.place(relx=0.80,rely=0.5,anchor='center')
-                self.widgets.append((rb1,rb2))
-                self.item_widgets[item] = var
-        # détermination de la méthode à appliquer sur les boutons
-        if self.mode == 'query':
-            function = self.active
-        elif self.mode == 'display':
-            function = self.inactive
-        else:
-            return
-        # on applique la méthode sur les boutons (activation ou désactivation)  
-        for widget in self.widgets :
-            if type(widget) == types.TupleType:
-                for widg in widget :
-                    apply(function,(widg,),{})
-            else:
-                apply(function,(widget,),{})
-
-    def active(self,widget):
-        """
-        Active le widget passé en argument
-        """
-        widget.configure(state='normal',bg='white')
-
-    def inactive(self,widget):
-        """
-        Inactive le widget passé en argument
-        """
-        if not isinstance(widget,Radiobutton) :
-            widget.configure(state='disabled',bg='gray95')
-        else :
-            widget.configure(state='disabled')
-
-# --------------------------------------------------------------------------------
-#       Validateurs des noms de répertoire, de fichiers et de catalogues
-# -------------------------------------------------------------------------------
-
-    def motvalidator(self,text):
-        text2="("+text+")"
-        return self.motlongueurvalidator(text2,1) 
-
-    def mot2validator(self,text):
-        return self.motlongueurvalidator(text,2) 
-
-    def mot3validator(self,text):
-        return self.motlongueurvalidator(text,3) 
-
-    def mot4validator(self,text):
-        return self.motlongueurvalidator(text,4) 
-
-    def motlongueurvalidator(self,text,longueur):
-        try :
-          if ((text[0] != "(") or (text[-1] != ")")) : return 0
-          if len(text.split(",")) != longueur : return 0
-          return 1
-        except :
-          return 0
-
-    def repvalidator(self,text):
-        """
-        Teste si text peut faire référence à un répertoire ou non
-        Retourne 1 si valide, 0 sinon
-        """
-        return os.path.isdir(text),'Répertoire introuvable : %s' %text
-
-    def filevalidator(self,text):
-        """
-        Teste si text peut faire référence à un fichier ou non
-        Retourne 1 si valide, 0 sinon
-        """
-        return os.path.isfile(text),'Fichier introuvable : %s' %text
-
-    def catavalidator(self,text):
-        """
-        Teste si  text est un chemin d'accès valide à un catalogue
-        Retourne 1 si valide, 0 sinon
-        """
-        return os.path.isfile(text),"Catalogue introuvable : %s" %text
-
-# --------------------------------------------------------------------------------
-#       Méthodes callbacks des boutons et de fin
-# --------------------------------------------------------------------------------
-        
-    def execute(self,txt):
-        """
-        Cette commande est activée à chaque clic sur un bouton.
-        Redirige l'action sur la bonne méthode en fonction du bouton activé
-        """
-        if txt == 'Valider':
-            self.fini()
-        elif txt in ('OK','Annuler'):
-            self.quit()
-        elif txt == 'Modifier':
-            self.resultat = apply(self.command[1],(),{})
-            self.fenetre.destroy()
-        else :
-            print "Nom de bouton inconnu"
-            self.quit()
-
-    def fini(self):
-        """
-        Commande qui termine le panneau et sauvegarde les nouvelles options
-        dans l'objet resultat (dictionnaire)
-        """
-        dico={}
-        for item,widget in self.item_widgets.items():
-            nom_var = item[2]
-            type_var = item[1]
-            valeur = widget.get()
-            if self.d_validateurs.has_key(type_var):
-                test = self.d_validateurs[type_var](valeur)
-                if not test :
-                    # une entrée n'est pas valide --> on la met en surbrillance et on quitte la méthode
-                    # sans tuer la fenêtre bien sûr
-                    widget.selection_range(0,END)
-                    return
-            dico[nom_var] = valeur
-        self.fenetre.destroy()    
-        self.resultat=dico
-        
-    def quit(self):
-        self.fenetre.destroy()
-        self.resultat=None
-        
-class ListeChoix :
-    """ Cette classe est utilisée pour afficher une liste de choix passée en paramètre
-        en passant les commandes à lancer suivant différents bindings """
-    def __init__(self,parent,page,liste,liste_commandes=[],liste_marques =[],active ='oui',filtre='non',titre='',
-                 optionReturn=None, fonte_titre=fontes.standard_gras_souligne):
-        self.parent = parent
-        self.page = page
-        self.liste = liste
-        self.dico_labels={}
-        self.dico_mots={}
-        self.nBlabel = 0
-        self.dico_place={}
-       self.dico_mots={}
-        self.selection = None
-        self.liste_commandes = liste_commandes
-        self.liste_marques = liste_marques
-        self.arg_selected=''
-        self.active = active
-        self.titre = titre
-        self.filtre = filtre
-        self.optionReturn = optionReturn
-        self.fonte_titre=fonte_titre
-        self.init()
-
-    def init(self):        
-        self.make_label_titre()
-        self.make_entry_filtre()
-        self.make_text_box()
-        try:
-            self.entry.component('entry').focus()
-        except:
-            pass
-
-    def make_label_titre(self):
-        """ Crée le label correspondant au titre """
-        if self.titre == '' : return
-        self.label = Label(self.page,
-                           text = self.titre,
-                           font = self.fonte_titre)
-        self.label.pack(side='top',pady=2)
-        
-    def make_entry_filtre(self):
-        """ Crée l'entry permettant à l'utilisateur d'entrer un filtre de sélection dans la liste """
-        if self.filtre != 'oui' : return
-        self.entry = Pmw.EntryField(self.page,labelpos='w',
-                                    label_text="Filtre :",
-                                    command=self.entry_changed)
-        self.entry.pack(side='top',pady=2)
-        
-    def make_text_box(self):
-        """ Crée la fenêtre texte dans laquelle sera affichée la liste """
-        self.MCbox = Text (self.page,relief='sunken',bg='gray95',bd=2)
-        self.MCscroll = Scrollbar (self.page,command = self.MCbox.yview)
-        self.MCscroll.pack(side='right',fill ='y',pady=2)
-        self.MCbox.pack(fill='y',expand=1,padx=2,pady=2)
-        self.MCbox.configure(yscrollcommand=self.MCscroll.set)
-
-
-    def affiche_liste(self):
-        """ Affiche la liste dans la fenêtre"""
-        liste_labels=[]
-        self.MCbox.config(state=NORMAL)
-        self.MCbox.delete(1.0,END)
-        self.nBlabel = 0
-        self.dico_place={}
-        for objet in self.liste :
-          if type(objet) == types.InstanceType or isinstance(objet,object):
-             #instance ancienne mode ou nouvelle mode
-              try:
-                  mot = objet.nom
-              except:
-                  mot = str(objet)
-          elif type(objet) in (types.StringType,types.IntType):
-              mot = objet
-          elif type(objet) == types.FloatType :
-              mot = self.parent.get_valeur_texte(objet)
-              if mot == "" :
-                 mot = str(objet)
-          elif type(objet) == types.TupleType :
-              mot="("
-              premier=1
-              for val in objet:
-                 if (not premier):
-                   mot=mot+"," 
-                 else:
-                   premier=0
-                 valtexte = self.parent.get_valeur_texte(val)
-                 if valtexte != "" :
-                    mot=mot+valtexte
-                 else:
-                    mot=mot+str(val)
-              mot=mot+")"
-          else:
-              mot=`objet`
-          label = Label(self.MCbox,
-                        text = mot,
-                        fg = 'black',bg = 'gray95',justify = 'left')
-          self.dico_labels[mot]=label
-          self.dico_place[mot]=self.nBlabel
-         self.dico_mots[label]=mot
-          self.nBlabel=self.nBlabel+1
-          liste_labels.append(label)
-          self.MCbox.window_create(END,
-                                   window=label,
-                                   stretch = 1)
-          self.MCbox.insert(END,'\n')
-          if self.optionReturn != None :
-              label.bind("<Return>",lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitemsurligne(x,l,c))
-              label.bind("<KP_Enter>",lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitemsurligne(x,l,c))
-          label.bind("<Key-Right>",lambda e,s=self,x=objet,l=label : s.selectNextItem(x,l))
-          label.bind("<Key-Down>",lambda e, s=self,x=objet,l=label : s.selectNextItem(x,l))
-          label.bind("<Key-Left>" ,lambda e,s=self,x=objet,l=label  : s.selectPrevItem(x,l))
-          label.bind("<Key-Up>" ,lambda e,s=self,x=objet,l=label  : s.selectPrevItem(x,l))
-          if self.active == 'oui':
-              label.bind(self.liste_commandes[0][0],lambda e,s=self,c=self.liste_commandes[0][1],x=objet,l=label : s.selectitem(x,l,c))
-              label.bind(self.liste_commandes[1][0],lambda e,s=self,c=self.liste_commandes[1][1],x=objet,l=label : s.deselectitem(l,x,c))
-              label.bind(self.liste_commandes[2][0],lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitem(x,l,c))
-
-        for marque in self.liste_marques:
-           try:
-              self.markitem(liste_labels[marque])
-           except:
-              pass
-
-        self.MCbox.config(state=DISABLED)
-        self.selection = None
-        self.dontselect=0
-        for event,callback in self.liste_commandes:
-            if event == "<Enter>":
-               self.selection=None,None,callback
-               break
-
-    def clear_marque(self):
-        try:
-          self.dico_labels[self.arg_selected].configure(bg='gray95',fg='black')
-          self.arg_selected = ''
-        except :
-          pass
-
-    def surligne(self,marque):
-        try :
-           self.highlightitem(self.dico_labels[marque])
-           self.arg_selected = marque
-        except:
-           pass
-
-    def chooseitemsurligne(self,mot,label,commande):
-        """ Active la méthode de choix passée en argument"""
-        try:
-           mot=self.arg_selected
-           commande(mot)
-        except AsException,e:
-           raison=str(e)
-           showerror(raison.split('\n')[0],raison)
-
-    def chooseitem(self,mot,label,commande):
-        """ Active la méthode de choix passée en argument"""
-        try:
-           commande(mot)
-        except AsException,e:
-           raison=str(e)
-           showerror(raison.split('\n')[0],raison)
-
-    def afficheMot(self,mot):
-        """ Pour contourner le bug sur l index 
-            on commence par la methode dite normale     
-            puis par la methode de contournement     
-            puis rien du tout 
-        """
-        try:
-             labelsuivant=self.dico_labels[mot]
-             index = self.MCbox.index(labelsuivant)
-             self.MCbox.see(index)
-        except :
-             posmot=self.dico_place[mot]
-             totale=self.nBlabel + 0.0
-             self.MCbox.yview_moveto(posmot/totale)
-
-    def selectNextItem(self,mot,label):
-        index=self.liste.index(mot)
-        indexsuivant=index+1
-        if indexsuivant > len(self.liste) -1:
-           indexsuivant=0
-        motsuivant=self.liste[indexsuivant]
-        labelsuivant=self.dico_labels[motsuivant]
-        self.afficheMot(motsuivant)
-        self.selectthis(motsuivant,labelsuivant,self.selection[2],)
-        self.dontselect=1
-           
-    def selectPrevItem(self,mot,label):
-        index=self.liste.index(mot)
-        indexprec=index-1
-        motprec=self.liste[indexprec]
-        labelprec=self.dico_labels[motprec]
-        self.afficheMot(motprec)
-        self.selectthis(motprec,labelprec,self.selection[2],)
-        self.dontselect=1
-        
-    def selectthis(self,mot,label,commande) :
-        self.clear_marque()
-        if self.selection != None :
-            self.deselectitem(self.selection[1],self.selection[0],self.selection[2],)
-        self.highlightitem(label)
-        self.selection = (mot,label,commande)
-        self.arg_selected = mot
-        if commande : commande(mot)
-
-    def selectitem(self,mot,label,commande) :
-        """ Met l'item sélectionné (représenté par son label) en surbrillance
-            et lance la commande associée au double-clic"""
-        if self.dontselect:
-           self.dontselect=0
-           return
-        self.selectthis(mot,label,commande)
-
-    def highlightitem(self,label) :
-        """ Met l'item représenté par son label en surbrillance """
-        label.focus_set()
-        label.configure(bg='#00008b',fg='white')
-        
-    def markitem(self,label):
-        """ Met l'item (représenté par son label) en rouge """
-        label.configure(bg='gray95',fg='red')
-        
-    def deselectitem(self,label,mot='',commande=None) :
-        """ Remet l'item (représenté par son label) en noir"""
-        if label:label.configure(bg='gray95',fg='black')
-        self.arg_selected = ''
-        if commande and mot : commande(mot)
-
-    def cherche_selected_item(self):
-        try :
-           index=self.MCbox.index(self.selection[1])
-           lign,col=map(int,string.split(index,'.'))
-        except :
-          label=self.dico_labels[self.arg_selected]
-           mot=self.dico_mots[label] 
-           lign=self.dico_place[mot]+1
-        return lign
-
-    def remove_selected_item(self):
-        try :
-           index=self.MCbox.index(self.selection[1])
-           lign,col=map(int,string.split(index,'.'))
-        except :
-          label=self.dico_labels[self.arg_selected]
-           mot=self.dico_mots[label] 
-           lign=self.dico_place[mot]+1
-        del self.liste[lign-1]
-        self.affiche_liste()
-
-    def entry_changed(self,event=None):
-        """ Cette méthode est invoquée chaque fois que l'utilisateur modifie le contenu
-        de l'entry et frappe <Return>"""
-        if self.arg_selected != '' : self.deselectitem(self.dico_labels[self.arg_selected])
-        filtre = self.entry.get()+"*"
-        FILTRE = string.upper(filtre)
-        self.dontselect=0
-        for arg in self.liste :
-            if fnmatch.fnmatch(arg,filtre) or fnmatch.fnmatch(arg,FILTRE) :
-                label=self.dico_labels[arg]
-                self.afficheMot(arg)
-                self.selectitem(arg,label,self.selection[2])
-                break
-
-        #try :
-          #self.dico_labels[self.arg_selected].focus_set()
-        #except :
-          #pass
-
-
-    # PN attention à la gestion des paramétres
-    # cela retourne H = 1 , et ni H, ni 1
-    #            print repr(val)
-    #            print val.__class__.__name__
-    def get_liste(self):
-        l=[]
-        for val in self.liste:
-#            try:
-#                v = eval(val)
-#                    l.append(v)
-#            except:
-                l.append(val)
-        return l
-    
-    def put_liste(self,liste):
-        self.liste = liste
-        self.affiche_liste()
-
-class Affichage :
-  """ Cette classe permet d'afficher au lancement d'EFICAS le message
-      d'attente et la barre de progression"""
-  def __init__(self,master,message,barre ='oui'):
-      from Tools.foztools.foztools import Slider
-      fonte=fontes.standard12_gras
-      self.master=master
-      self.frame = Frame(self.master)
-      self.frame.pack(expand=1,fill='both')
-      self.mess = Label(self.frame,text=message,justify='center',
-                        bd=2,relief='groove',font=fonte)
-      self.mess.pack(in_ = self.frame,side='top',expand=1,fill='both')
-      self.progress = Slider(self.frame,value=0,max=100,orientation='horizontal',
-                             fillColor='#00008b',width=200,height=30,
-                             background='white',labelColor='red')
-      if barre == 'oui':
-          self.progress.frame.pack(in_=self.frame,side='top')
-      self.master.update()
-      if barre == 'oui':
-          self.progress.frame.after(1000,self.update)
-
-  def configure(self,**options):
-      if options.has_key('message'):
-          self.mess.configure(text=options['message'])
-      if options.has_key('barre'):
-          if options['barre'] == 'oui' :
-              self.progress.frame.pack(in_=self.frame,side='top')
-          elif options['barre'] == 'non' :
-              self.progress.frame.pack_forget()
-      self.master.update_idletasks()
-      
-  def quit(self):
-      self.frame.destroy()
-      self.master.update()
-
-  def update(self,event=None):
-      """ Permet de faire avancer la barre de progression """
-      try :
-          bar=self.progress
-          bar.value = bar.value+self.increment
-          bar.update()
-          self.master.after(100,self.update)
-      except:
-          pass
-
-  def configure_barre(self,nb):
-      """ Calcule l'incrément de progression de la barre en fonction
-          du nombre d'opérations à effectuer afin que le compteur
-          soit à 100% à la fin des opérations"""
-      self.increment = 100./nb
-      self.progress.update()
-
-class Ask_Format_Fichier :
-    """
-    Cette classe permet de créer une fenêtre Toplevel dans laquelle
-    on propose le choix du format de fichier de commandes à ouvrir
-    """
-    def __init__(self,appli):
-        self.fenetre = Toplevel()
-        self.fenetre.configure(width = 250,height=150)
-        self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
-        self.fenetre.title("Choix du format du fichier de commandes")
-        # définition des frames
-        self.frame_texte = Frame(self.fenetre)
-        self.frame_radioboutons = Frame(self.fenetre)
-        self.frame_bouton_ok = Frame(self.fenetre)
-        self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.3)
-        self.frame_radioboutons.place(relheight=0.5,relx=0,rely=0.3,relwidth=1.)
-        self.frame_bouton_ok.place(relheight=0.2,relx=0,rely=0.8,relwidth=1.)
-        # définition de la zone texte et du scrollbar
-        zone_texte = Label(self.frame_texte,text = "Format du fichier à ouvrir :")
-        zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10)
-        # définition des radioboutons
-        Radiobutton(self.frame_radioboutons,text='Format Aster (Code_Aster --> v5)',
-                    variable=appli.format_fichier,value='Aster').pack(anchor='n')
-        Radiobutton(self.frame_radioboutons,text='Format Python (Code_Aster v6-->)',
-                    variable=appli.format_fichier,value='Python').pack(anchor='n')
-        # création du bouton OK
-        Button(self.frame_bouton_ok,text='OK',command=self.quit).pack(anchor='n')
-        # centrage de la fenêtre
-        centerwindow(self.fenetre)
-
-    def quit(self):
-        self.fenetre.destroy()
-
-class BARRE_K2000(Toplevel):
-    def __init__(self,master=None,text = ""):
-        Toplevel.__init__(self,master,relief='groove')
-        self.master.iconify()
-        self.geometry("250x100+0+0")
-        self.protocol("WM_DELETE_WINDOW",self.quit)
-        # frame principale dans self (= Toplevel)
-        self.frame = Frame(self)
-        self.frame.place(relwidth=1,relheight=1)
-        # frame contenant le texte à afficher 
-        self.frame_text = Frame(self.frame)
-        self.frame_text.place(relwidth=1,relheight=0.75,rely=0)
-        # frame contenant le canvas de la barre
-        self.frame_canv = Frame(self.frame)
-        self.frame_canv.place(relwidth=1,relheight=0.25,rely=0.75)
-        # canvas dans lequel sera affichée la barre K2000
-        self.canvas = Canvas(self.frame_canv)
-        self.canvas.place(relx=0.5,rely=0.5,relheight=0.8,relwidth=0.8,anchor='center')
-        # on affiche le texte et la barre
-        self.build_text(text)
-        self.build_batons()
-        #self.overrideredirect(1)
-        # on active la barre ...
-        self.master.after(1000,self.launch)
-        # on centre la fenêtre
-        centerwindow(self)
-        self.focus()
-
-    def build_text(self,text):
-        """
-        Affichage de text dans frame_text
-        """
-        self.texte_var = StringVar()
-        self.texte_var.set(text)
-        Label(self.frame_text,textvariable=self.texte_var).place(relx=0.5,rely=0.5,anchor='center')
-        
-    def build_batons(self):
-        """
-        Construit la suite de bâtons dans le canvas
-        """
-        self.l_batons=[]
-        self.black = -1
-        self.sens = 'D'
-        self.quit = 0
-        for i in range(0,40):
-            id = self.canvas.create_rectangle(i*5,0,(i+1)*5,20,fill='gray90',outline='')
-            self.l_batons.append(id)
-
-    def launch(self):
-        """
-        Active la barre K2000 en affichant les bâtons avec des couleurs en dégradé
-        """
-        if self.quit == 1 :
-            self.destroy()
-            self.master.deiconify()
-            return
-        if self.sens == 'D':
-            self.black = self.black+1
-            l_bat = self.l_batons[0:self.black+1]
-            l_bat.reverse()
-        elif self.sens == 'G':
-            self.black = self.black-1
-            l_bat = self.l_batons[self.black:]
-        i=0
-        for bat in l_bat :
-            num_color = 5+i*10
-            if num_color < 10 : color = 'black'
-            elif num_color > 90 : color = 'white'
-            else: color = 'gray'+`num_color`
-            self.canvas.itemconfigure(bat,fill=color)
-            i=i+1
-        if self.black == len(self.l_batons) :
-            self.sens = 'G'
-        if self.black == 0 and self.sens == 'G':self.sens = 'D'
-        self.after(80,self.launch)
-
-    def update_text(self,new_text):
-        """
-        Remplace le texte affiché par new_text
-        """
-        self.texte_var.set(new_text)
-        
-    def quit(self):
-        self.quit = 1        
-
-class ListeChoixParGroupes(ListeChoix) :
-    """ 
-        Cette classe est utilisée pour afficher une liste de commandes classées par
-        groupes. L'utilisateur peut réaliser des actions de selection
-        qui déclenchent des actions spécifiées par les bindings contenus dans liste_commandes
-        Exemple de binding:
-           liste_commandes = (("<Enter>",self.selectCmd),
-                              ("<Leave>",self.deselectCmd),
-                              ("<Double-Button-1>",self.defCmd))
-        Il s'agit d'une liste de doublets dont le premier element est un evenement et le 
-        deuxieme un callback a appeler sur l'evenement en question.
-
-    """
-    def __init__(self,parent,page,liste_groupes,dict_groupes,liste_commandes=[],liste_marques =[],
-                      active ='oui',filtre='non',titre='',optionReturn=None,fonte_titre=fontes.standard_gras_souligne):
-        self.parent = parent
-        self.page = page
-        self.liste_groupes = liste_groupes
-        self.dict_groupes = dict_groupes
-        self.dico_labels={}
-        self.selection = None
-        self.liste_commandes = liste_commandes
-        self.liste_marques = liste_marques
-        self.arg_selected=''
-        self.active = active
-        self.titre = titre
-        self.filtre = filtre
-        self.optionReturn = optionReturn
-        self.fonte_titre=fonte_titre
-        self.init()
-
-    def affiche_liste(self):
-        """ Affiche la liste dans la fenêtre"""
-        liste_labels=[]
-       self.dico_mots={}
-        self.MCbox.config(state=NORMAL)
-        self.MCbox.delete(1.0,END)
-        for grp in self.liste_groupes:
-           # On itère sur les groupes
-           if grp == "CACHE":continue
-           liste_commandes=self.dict_groupes[grp]
-           text="GROUPE<<<<<<<< "+grp+" "
-           text=text+">"*max(0,30-len(text))
-           label = Label(self.MCbox,
-                        text = text,
-                        fg = 'black',bg = 'gray95',justify = 'left')
-           # On stocke la relation entre le nom de la commande et le label
-           self.dico_labels[grp]=label
-           liste_labels.append(label)
-           self.MCbox.window_create(END,
-                                   window=label,
-                                   stretch = 1)
-           self.MCbox.insert(END,'\n')
-           for cmd in liste_commandes:
-              label = Label(self.MCbox,
-                        text = cmd,
-                        fg = 'black',bg = 'gray95',justify = 'left')
-              # On stocke la relation entre le nom de la commande et le label
-              self.dico_labels[cmd]=label
-             self.dico_mots[label]=cmd
-              self.MCbox.window_create(END,
-                                   window=label,
-                                   stretch = 1)
-              self.MCbox.insert(END,'\n')
-
-              def null(*tp,**args): return
-
-              if self.active == 'oui':
-                  # Traitement par defaut des evenements
-                  label.bind("<Enter>",lambda e,s=self,c=null,x=cmd,l=label: s.selectitem(x,l,c))
-                  label.bind("<Leave>",lambda e,s=self,c=null,x=cmd,l=label: s.deselectitem(l,x,c))
-                  label.bind("<Double-Button-1>",lambda e,s=self,c=null,x=cmd,l=label: s.chooseitem(x,l,c))
-                  label.bind("<Return>",lambda e,s=self,c=null,x=cmd,l=label: s.chooseitem(x,l,c))
-                  label.bind("<KP_Enter>",lambda e,s=self,c=null,x=cmd,l=label: s.chooseitem(x,l,c))
-                  label.bind("<Key-Right>",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectNextItem(x,l,c,gr,x))
-                  label.bind("<Key-Down>",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectNextItem(x,l,c,gr,x))
-                  label.bind("<Key-Left>",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectPrevItem(x,l,c,gr,x))
-                  label.bind("<Key-Up>",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectPrevItem(x,l,c,gr,x))
-
-                  # Si des callbacks sont definis on les utilise
-                  for event,callback in self.liste_commandes:
-                      if event == "<Enter>":
-                         label.bind("<Enter>",lambda e,s=self,c=callback,x=cmd,l=label: s.selectitem(x,l,c))
-                      elif event == "<Leave>":
-                         label.bind("<Leave>",lambda e,s=self,c=callback,x=cmd,l=label: s.deselectitem(l,x,c))
-                      elif event == "<Double-Button-1>":
-                         label.bind("<Double-Button-1>",lambda e,s=self,c=callback,x=cmd,l=label: s.chooseitem(x,l,c))
-                      elif event == "<Return>":
-                         label.bind("<Return>",lambda e,s=self,c=callback,x=cmd,l=label: s.chooseitem(x,l,c))
-                      elif event == "<KP_Enter>":
-                         label.bind("<KP_Enter>",lambda e,s=self,c=callback,x=cmd,l=label: s.chooseitem(x,l,c))
-                      elif event == "<Key-Right>":
-                         label.bind("<Key-Right>",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectNextItem(x,l,c,gr,x))
-                      elif event == "<Key-Down>":
-                         label.bind("<Key-Down>",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectNextItem(x,l,c,gr,x))
-                      elif event == "<Key-Left>":
-                         label.bind("<Key-Left>",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectPrevItem(x,l,c,gr,x))
-                      elif event == "<Key-Up>":
-                         label.bind("<Key-Up>",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectPrevItem(x,l,c,gr,x))
-                      else:
-                         label.bind(event,lambda e,s=self,c=callback,x=cmd,l=label: c())
-
-        for marque in self.liste_marques:
-           try:
-              self.markitem(liste_labels[marque])
-           except:
-              pass
-
-        self.MCbox.config(state=DISABLED)
-        self.selection = None
-        self.dontselect=0
-        for event,callback in self.liste_commandes:
-            if event == "<Enter>":
-               self.selection=None,None,callback
-               break
-
-    def selectPrevItem(self,mot,label,callback,group,cmd):
-        g=self.liste_groupes.index(group)
-        liste_commandes=self.dict_groupes[group]
-        c=liste_commandes.index(cmd)
-        if c > 0:
-           co=liste_commandes[c-1]
-        else:
-           # debut de liste. On passe au groupe precedent
-           if g > 0:
-              gr=self.liste_groupes[g-1]
-              co=self.dict_groupes[gr][-1]
-           else:
-              # debut des groupes. On ne fait rien
-              return
-        # On a trouve l'item precedent
-        labelsuivant=self.dico_labels[co]
-        index = self.MCbox.index(labelsuivant)
-        self.MCbox.see(index)
-        self.selectthis(co,labelsuivant,self.selection[2],)
-        self.dontselect=1
-
-    def selectNextItem(self,mot,label,callback,group,cmd):
-        g=self.liste_groupes.index(group)
-        liste_commandes=self.dict_groupes[group]
-        c=liste_commandes.index(cmd)
-        try:
-           co=liste_commandes[c+1]
-        except:
-           # fin de liste. On passe au groupe suivant
-           try:
-              gr=self.liste_groupes[g+1]
-              co=self.dict_groupes[gr][0]
-           except:
-              # fin des groupes. On ne fait rien
-              return
-        # On a trouve l'item suivant
-        labelsuivant=self.dico_labels[co]
-        index = self.MCbox.index(labelsuivant)
-        self.MCbox.see(index)
-        self.selectthis(co,labelsuivant,self.selection[2],)
-        self.dontselect=1
-
-    def entry_changed(self,event=None):
-        """ 
-            Cette méthode est invoquée chaque fois que l'utilisateur modifie le contenu
-            de l'entry et frappe <Return>
-        """
-        if self.arg_selected != '' : self.deselectitem(self.dico_labels[self.arg_selected])
-
-        filtre = self.entry.get()+"*"
-        FILTRE = string.upper(filtre)
-        #
-        # On cherche d'abord dans les noms de groupe
-        # puis dans les noms de commande groupe par groupe
-        #
-        for grp in self.liste_groupes:
-            if fnmatch.fnmatch(grp,filtre) or fnmatch.fnmatch(grp,FILTRE) :
-                cmd=self.dict_groupes[grp][0]
-                label=self.dico_labels[cmd]
-                index = self.MCbox.index(label)
-                self.MCbox.see(index)
-                self.selectitem(cmd,label,self.selection[2])
-                # On a trouve un groupe on arrete la recherche
-                return
-
-        for grp in self.liste_groupes:
-           for cmd in self.dict_groupes[grp] :
-              if fnmatch.fnmatch(cmd,filtre) or fnmatch.fnmatch(cmd,FILTRE) :
-                 label=self.dico_labels[cmd]
-                 index = self.MCbox.index(label)
-                 self.MCbox.see(index)
-                 self.selectitem(cmd,label,self.selection[2])
-                 # On a trouve une commande  on arrete la recherche
-                 return
-
index 3d3239cdc71aced7650be7c37bda4b747c9315a0..21d9e374e4373af17dd730be2d6ba32377019da2 100644 (file)
@@ -5,7 +5,7 @@
 """
 
 import sys
-sys.path[:0]=['../..','../../Editeur','../../..']
+sys.path[:0]=['../..','../../..']
 
 from Accas import *
 #from Cata.cata import *
index 89f6464bccf0c3358ca1fca1c1f6ad497fb3df95..e91e3e1bacf20700c7aa2ec209d97831025585e5 100644 (file)
@@ -38,17 +38,39 @@ class Formula:
     def __mul__(self, other): return Binop('*', self, other)
     def __rmul__(self, other): return Binop('*', other, self)
     def __div__(self, other): return Binop('/', self, other)
-    def __truediv__(self, other): return Binop('/', self, other)
     def __rdiv__(self, other): return Binop('/', other, self)
+    def __truediv__(self, other): return Binop('/', self, other)
+    def __rtruediv__(self, other): return Binop('/', other, self)
+    def __floordiv__(self, other): return Binop('//', self, other)
+    def __rfloordiv__(self, other): return Binop('//', other, self)
     def __pow__(self, other): return Binop('**', self, other)
     def __rpow__(self, other): return Binop('**', other, self)
     def __getitem__(self,i):return Binop('[]',self,i)
+    def __cmp__( self, other ): return self.eval().__cmp__(other)
+    def __eq__(  self, other ): return self.eval() == other
+    def __ne__(  self, other ): return self.eval() != other
+    def __lt__(  self, other ): return self.eval() < other
+    def __le__(  self, other ): return self.eval() <= other
+    def __gt__(  self, other ): return self.eval() > other
+    def __ge__(  self, other ): return self.eval() >= other
+    def __hash__(self):return id(self)
+
+def _div(a,b):
+  if isinstance(a,(int,long)) and isinstance(b,(int,long)):
+    if a%b:
+      return a/b
+    else:
+      return a//b
+  else:
+    return a/b
+
 
 class Binop(Formula):
     opmap = { '+': lambda a, b: a + b,
               '*': lambda a, b: a * b,
               '-': lambda a, b: a - b,
-              '/': lambda a, b: a / b,
+              '/': _div,
+              '//': lambda a, b: a // b,
               '**': lambda a, b: a ** b,
               '[]': lambda a, b: a[b] ,
             }
index 540254437bae05344bf05b85b6a2c936622a5d41..58ceefa2f4f128493252edb4e0ea0be1d1aa3f12 100644 (file)
@@ -36,6 +36,7 @@ from Noyau.N_CR import CR
 from Noyau import N_OBJECT
 from Ihm import I_OBJECT
 from param2 import *
+from Ihm import CONNECTOR
 
 class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
   """
@@ -214,6 +215,8 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
         self.jdc.append_param(self)
     except:
         pass
+    CONNECTOR.Emit(self,"add",None)
+    CONNECTOR.Emit(self,"valid")
 
   def inactive(self):
     """
@@ -223,6 +226,8 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
     self.actif = 0
     self.jdc.del_param(self)
     self.jdc.delete_concept_after_etape(self,self)
+    CONNECTOR.Emit(self,"supp",None)
+    CONNECTOR.Emit(self,"valid")
 
   def isactif(self):
     """
index d228980c69dcb4137098bf35c5323f898ba7a26e..ef1c509945e2b02a29bdedbef33fcb1d236fb976 100644 (file)
@@ -110,21 +110,6 @@ class FORM_ETAPE(MACRO_ETAPE):
         test = 1
         arguments = arguments[1:-1] # on enlève les parenthèses ouvrante et fermante
         l_arguments = string.split(arguments,',')
-        #for argument in l_arguments:
-        #    argument = string.strip(argument)
-        #    try:
-        #        nom=argument
-        #        typ,nom = string.split(argument,':')
-        #        #pas de vérification sur le nom de l'argument
-        #        #vérification du type de l'argument
-        #        typ = string.strip(typ)
-        #        if typ not in self.l_types_autorises :
-        #            test = 0
-        #            erreur = erreur + "Le type "+typ+" n'est pas un type permis pour "+nom+'\n'
-        #    except:
-        #        # l'argument ne respecte pas la syntaxe : typ_arg : nom_arg
-        #        test = 0
-        #        erreur = erreur+"Syntaxe argument non valide : "+argument+'\n'
         return test,erreur
 
     def verif_corps(self,corps=None,arguments=None):
@@ -279,7 +264,7 @@ class FORM_ETAPE(MACRO_ETAPE):
         self.build_mc()
         self.mc_liste=[]
         if len(formule) < 4 :
-           return O
+           return 0
         arguments=formule[3]
         if arguments[0] == '(' :
            arguments=arguments[1:]
@@ -287,17 +272,18 @@ class FORM_ETAPE(MACRO_ETAPE):
            arguments=arguments[:-1]
         self.arguments=tuple(arguments.split(','))
 
-        i=1
+        mocles={"NOM_PARA":self.arguments}
+        if formule[1] == "REEL":
+          mocles["VALE"]=formule[2]
+        if formule[1] == "COMPLEXE":
+          mocles["VALE_C"]=formule[2]
+
         for k,v in self.definition.entites.items():
+            if not mocles.has_key(k):continue
             child=self.definition.entites[k](None,nom=k,parent=self)
-            new_valeur=formule[i+1]
-            if i+1 == 3 :
-               child.valeur = self.arguments
-            else :
-               child.valeur = new_valeur
+            child.valeur=mocles[k]
             child.state = 'modified'
             self.mc_liste.append(child)
-            i=i+1
            
         self.corps = formule[2]
         self.type_retourne = formule[1]
index 11379dd87de61cf53dd79e79df21becee445233d..70b26efd4644ef14101b29355bc6c79b7fce7101 100644 (file)
@@ -140,6 +140,7 @@ class JDC(I_OBJECT.OBJECT):
         objet.nom = "_comm_"+`ind`
         if pos == None : pos = 0
         self.etapes.insert(pos,objet)
+        self.reset_context()
         self.editmode=0
         self.active_etapes()
         CONNECTOR.Emit(self,"add",objet)
@@ -152,8 +153,8 @@ class JDC(I_OBJECT.OBJECT):
         objet = parametre.PARAMETRE(nom=nom_param)
         if pos == None : pos = 0
         self.etapes.insert(pos,objet)
-        self.editmode=0
         self.reset_context()
+        self.editmode=0
         self.active_etapes()
         CONNECTOR.Emit(self,"add",objet)
         self.fin_modif()
@@ -165,8 +166,8 @@ class JDC(I_OBJECT.OBJECT):
         objet = parametre_eval.PARAMETRE_EVAL(nom=nom_param)
         if pos == None : pos = 0
         self.etapes.insert(pos,objet)
-        self.editmode=0
         self.reset_context()
+        self.editmode=0
         self.active_etapes()
         CONNECTOR.Emit(self,"add",objet)
         self.fin_modif()
@@ -189,13 +190,13 @@ class JDC(I_OBJECT.OBJECT):
             objet.parent.dict_niveaux[objet.nom_niveau_definition].register(objet)
             objet.niveau = objet.parent.dict_niveaux[objet.nom_niveau_definition]
         self.etapes.insert(pos,objet)
+        self.reset_context()
         # il faut vérifier que les concepts utilisés par objet existent bien
         # à ce niveau d'arborescence
         objet.verif_existence_sd()
         objet.update_mc_global()
-        self.active_etapes()
         self.editmode=0
-        self.reset_context()
+        self.active_etapes()
         CONNECTOR.Emit(self,"add",objet)
         self.fin_modif()
         return objet
@@ -211,8 +212,8 @@ class JDC(I_OBJECT.OBJECT):
           if pos == None : pos = 0
           self.etapes.insert(pos,e)
           self.reset_current_step()
-          self.editmode=0
           self.reset_context()
+          self.editmode=0
           self.active_etapes()
           CONNECTOR.Emit(self,"add",e)
           self.fin_modif()
@@ -568,6 +569,11 @@ class JDC(I_OBJECT.OBJECT):
       #print "reset_context",self,self.nom
       self.current_context={}
       self.index_etape_courante=0
+      ind={}
+      for i,etape in enumerate(self.etapes):
+        ind[etape]=i
+      self.index_etapes=ind
+
    #   for etape in self.etapes:
    #       etape.reset_context()
 
@@ -752,6 +758,7 @@ class JDC(I_OBJECT.OBJECT):
       """
       if not self.editmode:
          self.etapes.append(etape)
+         self.index_etapes[etape] = len(self.etapes) - 1
       else:
          pass
       return self.g_register(etape)
index 0ab72b583753e58d6496af33982bc80a45bd0de5..7e58aa0382e47413e2ccb7055ebe1d43bc0f1501 100644 (file)
@@ -110,7 +110,10 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
        self.text_converted=0
        self.text_error=""
        if self.nom != "INCLUDE_MATERIAU":
-          format=self.jdc.appli.format_fichier.get()
+          if self.parent.appli.ihm == "QT" :
+              format=self.jdc.appli.format_fichier
+          else :
+              format=self.jdc.appli.format_fichier.get()
           if convert.plugins.has_key(format):
               # Le convertisseur existe on l'utilise
               p=convert.plugins[format]()
@@ -767,7 +770,6 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
       #print "make_include",unite
       # On supprime l'attribut unite qui bloque l'evaluation du source de l'INCLUDE
       # car on ne s'appuie pas sur lui dans EFICAS mais sur l'attribut fichier_ini
-      del self.unite
       # Si unite n'a pas de valeur, l'etape est forcement invalide. On peut retourner None
       if not unite : return
 
diff --git a/InterfaceQT/__init__.py b/InterfaceQT/__init__.py
new file mode 100644 (file)
index 0000000..21d22fb
--- /dev/null
@@ -0,0 +1,24 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce package contient les fonctionnalités  nécessaires
+    pour l'éditeur graphique QT
+"""
diff --git a/InterfaceQT/browser.py b/InterfaceQT/browser.py
new file mode 100644 (file)
index 0000000..e149adc
--- /dev/null
@@ -0,0 +1,510 @@
+# -*- coding: utf-8 -*-
+import os,sys,string,re,types,traceback
+
+from qt import *
+import utilIcons
+
+
+class JDCTree( QListView ):
+    def __init__( self, jdc_item, parent = None ):        
+        QListView.__init__( self, parent )
+        
+        self.item     = jdc_item
+        self.tree     = self        
+        self.editor   = parent
+        self.racine   = self
+        self.node_selected = None
+        self.children      = self.build_children()        
+        
+        self.setCaption(self.trUtf8('Browser'))
+        self.setRootIsDecorated(1)
+        self.setSorting(-1)
+        self.addColumn(self.trUtf8('Commande'))
+        self.addColumn(self.trUtf8('Concept/Valeur'))
+                
+        self.setMinimumSize(QSize(400,500))
+        self.connect(self,SIGNAL('contextMenuRequested(QListViewItem *, const QPoint &, int)'),
+                     self.handleContextMenu)
+
+        #self.connect(self, SIGNAL("onItem ( QListViewItem * ) "), self.handleOnItem)
+        self.connect(self, SIGNAL("clicked ( QListViewItem * ) "), self.handleOnItem)
+        self.connect(self, SIGNAL('mouseButtonPressed(int, QListViewItem*, const QPoint&, int)'),
+                     self.handleNommeItem)
+        
+        
+    def handleContextMenu(self,itm,coord,col):
+        """
+        Private slot to show the context menu of the listview.
+        
+        @param itm the selected listview item (QListViewItem)
+        @param coord the position of the mouse pointer (QPoint)
+        @param col the column of the mouse pointer (int)
+        """
+        try:
+            if itm.menu:
+                itm.menu.popup(coord)            
+        except:
+            pass
+            
+    def handleNommeItem(self,bouton,itm,coord,col):
+        """
+        PN --> a finir eventuellement pour nommer
+        le concept dans l arbre
+        """
+        try :
+            if itm :
+               panel=itm.getPanel()
+               if panel.node.item.object.get_type_produit() != None :
+                  pass
+        except:
+            pass
+
+    def handleOnItem(self,  item ):
+        try :
+           fr = item.item.get_fr()
+           if self.editor:
+              self.editor.affiche_infos(fr)
+        except:
+            pass
+        
+    def build_children(self):
+        """ Construit la liste des enfants de self """
+        children = []
+        child = self.item.itemNode(self,self.item)
+        children.append(child)
+        child.state='expanded'
+        return children
+        
+    def supprime(self):
+        """ supprime tous les elements de l'arbre """
+        raise RuntimeError, 'Not implemented'
+        self.tree = None
+        self.racine = None
+        self.node_selected = None
+        self.item = None
+        self.scrolledcanvas = None
+        for child in self.children:
+            child.supprime()
+        self.children=[]
+                
+    def showEvent(self, event):
+        """ QT : pour afficher le 1er niveau d'arborescence de l''arbre"""        
+        self.children[0].select()
+        
+    def update(self):
+        """ Update tous les elements de l'arbre """
+        for child in self.children:
+            child.update()
+            
+# type de noeud
+COMMENT     = "COMMENTAIRE"
+PARAMETERS  = "PARAMETRE"
+
+        
+class JDCNode(QListViewItem):
+    def __init__( self, parent, item, after=None, bold=0):
+        """
+        Constructor
+        
+        @param parent parent Browser or BrowserNode
+        @param text text to be displayed by this node (string or QString)
+        @param after sibling this node is positioned after
+        @param bold flag indicating a highlighted font
+        """        
+        self.item   = item
+        self.parent = parent
+        self.tree   = self.parent.tree
+        self.editor = self.parent.tree.editor
+        self.bold   = bold
+                        
+        name  = self.tree.trUtf8(  str( item.GetLabelText()[0] ) )
+        value = self.tree.trUtf8(  str( item.GetText() ) )
+        
+        if after is None:        
+            QListViewItem.__init__(self,parent)            
+            self.setText(0, name )
+            self.setText(1, value )            
+        else:
+            QListViewItem.__init__(self,parent, after)
+            self.setText(0, name )
+            self.setText(1, value)
+            
+        p = utilIcons.getPixmap(item.GetIconName() + ".gif")
+        self.setPixmap(0,p)
+        self.setExpandable(item.IsExpandable())
+                
+        self.connect()    
+        self.init()        
+        self.createPopUpMenu()
+        
+        
+    def paintCell(self, p, cg, column, width, alignment):
+        """
+        Overwritten class to set a different text color, if bold is true.
+        
+        @param p the painter (QPainter)
+        @param cg the color group (QColorGroup)
+        @param column the column (int)
+        @param width width of the cell (int)
+        @param alignment alignment of the cell (int)
+        """
+        _cg = QColorGroup(cg)
+        c = _cg.text()
+        
+        if self.bold and column == 0:
+            _cg.setColor(QColorGroup.Text, Qt.red)
+            
+        QListViewItem.paintCell(self, p, _cg, column, width, alignment)
+        
+        _cg.setColor(QColorGroup.Text, c)
+        
+        
+    def setOpen(self, o):
+        """
+        Public slot to set/reset the open state.
+        
+        @param o flag indicating the open state
+        """        
+        if o:        
+            if not self.children :                
+                self.build_children()
+            self.selected = 1
+            self.tree.node_selected = self            
+        else:
+            
+            for child in self.children:
+                self.takeItem(child)
+                del child
+            self.children = []
+        QListViewItem.setOpen(self,o)
+       self.tree.setSelected(self,o)
+    
+     
+    #----------------------------------------------------------
+    #   interface a implementer par les noeuds derives (debut)
+    #----------------------------------------------------------
+    def getPanel(self):
+        print self.__class__
+        return None
+        
+    def createPopUpMenu(self):
+        pass 
+        
+    #----------------------------------------------------
+    #   interface a implementer par les noeuds derives (fin)
+    #----------------------------------------------------
+    
+    def init(self): #CS_pbruno toclean
+        self.state='collapsed'
+        self.displayed = 0
+        self.selected = 0
+        self.x = self.y  =None
+        self.lasty = 0
+        self.children = []
+        self.id = []
+        if self.parent is self.tree:
+           self.racine=self
+        else:
+           self.racine = self.parent.racine
+                      
+    def connect(self):
+        self.item.connect("add",self.onAdd,())
+        self.item.connect("supp",self.onSupp,())
+        self.item.connect("valid",self.onValid,())
+
+           
+    def commentIt(self):
+        """
+        Cette methode a pour but de commentariser la commande pointee par self
+        """
+        # On traite par une exception le cas ou l'utilisateur final cherche a désactiver
+        # (commentariser) un commentaire.
+        try :
+            pos=self.parent.children.index(self)
+            commande_comment = self.item.get_objet_commentarise()
+            # On signale au parent du panel (le JDCDisplay) une modification
+            self.editor.init_modif()
+            self.parent.children[pos].select()
+        except Exception,e:
+            traceback.print_exc()
+            QMessageBox.critical( self.parent, "TOO BAD",str(e))
+        return
+        
+    def unCommentIt(self):
+        """
+        Realise la decommentarisation de self
+        """
+        try :
+            pos=self.parent.children.index(self)
+            commande,nom = self.item.uncomment()
+            self.editor.init_modif()
+            self.parent.children[pos].select()
+        except Exception,e:
+            QMessageBox.critical( self.editor, "Erreur !",str(e))
+            return        
+        
+    def addComment( self, after=True ):
+        """
+        Ajoute un commentaire a l'interieur du JDC :
+        """
+        self.editor.init_modif()        
+        if after:
+            pos = 'after'
+        else:
+            pos = 'before'
+        return self.append_brother( COMMENT, pos )
+                
+    def addParameters( self, after=True ):
+        """
+        Ajoute un parametre a l'interieur du JDC :
+        """
+        self.editor.init_modif()
+        if after:
+            pos = 'after'
+        else:
+            pos = 'before'
+        return self.append_brother( PARAMETERS, pos )
+    
+    
+    
+    def select( self ):
+        """
+        Rend le noeud courant (self) selectionne et deselectionne
+        tous les autres
+        """        
+        self.setOpen( True )    
+                               
+    #------------------------------------------------------------------
+    # 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'):
+        """
+        Permet d'ajouter un objet frere a l'objet associe au noeud self
+        par defaut on l'ajoute immediatement apres 
+        Methode externe
+        """
+        # on veut ajouter le frere de nom name directement avant ou apres self
+##       print "*********** append_brother ", self.item.GetLabelText()
+        index = self.parent.children.index(self)
+        if pos == 'before':
+            index = index
+        elif pos == 'after':
+            index = index +1
+        else:
+            print str(pos)," n'est pas un index valide pour append_brother"
+            return 0
+        return self.parent.append_child(name,pos=index)
+
+    def append_child(self,name,pos=None,verif='oui',retour='non'):
+        """
+           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')
+           ou en position intermediaire.
+           Si pos vaut None, on le place a la position du catalogue.
+        """
+##        print "************** append_child ",self.item.GetLabelText()
+        if pos == 'first':
+            index = 0
+        elif pos == 'last':
+            index = len(self.children)
+        elif type(pos) == types.IntType :
+            # position fixee
+            index = pos
+        elif type(pos) == types.InstanceType:
+            # pos est un item. Il faut inserer name apres pos
+            index = self.item.get_index(pos) +1
+        elif type(name) == types.InstanceType:
+            index = self.item.get_index_child(name.nom)
+        else:
+            index = self.item.get_index_child(name)
+        obj=self.item.additem(name,index) #CS_pbruno emet le signal 'add'
+        #print obj
+        if obj is None:obj=0
+        if obj == 0:return 0
+        #print "append_child",index,self.children
+        child=self.children[index]
+        child.select()
+        return child
+
+    def delete(self):
+        """ 
+            Methode externe pour la destruction de l'objet associe au noeud
+            La mise a jour des noeuds est faite par onSupp sur notification
+        """
+        self.editor.init_modif()
+        index = self.parent.children.index(self) - 1 
+        if index < 0 : index =0
+
+        parent=self.parent
+        ret=parent.item.suppitem(self.item)
+        if ret == 0:return
+
+        brothers=parent.children
+        if brothers:
+           toselect=brothers[index]
+        else:
+           toselect=parent
+        toselect.select()
+        
+    #------------------------------------------------------------------
+    def onValid(self):        
+        self.update_node_valid()
+        self.update_node_label()
+        self.update_node_texte()
+        
+
+    def onAdd(self,objet):        
+        #print "NODE onAdd : un objet a ete ajoute aux fils de l'item ",self.item.GetLabelText()
+        old_nodes=self.children
+        self.update_nodes()
+        #self.select()
+
+    def onSupp(self,objet):
+        #print "NODE onSupp : un objet a ete supprime des fils de l'item ",self.item.object,objet
+        old_nodes=self.children
+        self.update_nodes()
+        #self.select()
+        
+    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()
+        p = utilIcons.getPixmap(self.item.GetIconName() + ".gif")
+        self.setPixmap(0,p)
+
+    def update_node_label(self): #CS_pbruno todo
+        """ Met a jour le label du noeud """
+        #print "NODE update_node_label", self.item.GetLabelText()
+        labeltext,fonte,couleur = self.item.GetLabelText()
+        self.setText(0, labeltext)        
+    
+    def update_node_texte(self):
+        """ Met a jour les noms des SD et valeurs des mots-cles """
+        #print "NODE update_node_texte", self.item.GetLabelText()
+        value = self.item.GetText()
+        self.setText(1, value)
+
+    def update_nodes(self):
+        #print "NODE update_nodes ", self.item.GetLabelText()
+        self.setOpen( False )
+        self.setOpen( True )
+        #self.select()
+            
+    def update_texte(self):
+        """ Met a jour les noms des SD et valeurs des mots-cles """
+        #print "NODE update_texte", self.item.GetLabelText()
+        self.update_node_texte()
+        if self.state == 'expanded' :
+            for child in self.children:
+                if child.displayed != 0 : 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()
+        #PN a reverifier SVP parent
+        self.update_node_valid()
+        try :
+          self.parent.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
+        """
+        parent=self.parent
+        #child = parent.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):
+        """
+           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
+
+
+        
+    
+if __name__=='__main__':
+    from qt import *
+    
+
+    sys.path[:0]=['..','../Aster','../Aster/Cata' ]
+
+    app = QApplication(sys.argv)
+        
+    fn      = 'azAster.comm'
+    jdcName =  os.path.basename(fn)
+    f=open(fn,'r')
+    text=f.read()
+    f.close()
+    print 'text',text
+
+    from autre_analyse_cata import analyse_catalogue
+    from Cata import cataSTA8
+    cata=cataSTA8
+    fic_cata="../../Aster/Cata/cataSTA8/cata.py"
+    cata_ordonne ,list_simp_reel = analyse_catalogue(cata)
+    
+    
+    
+    j=cata.JdC( procedure=text, cata=cata, nom=jdcName,
+                            cata_ord_dico=cata_ordonne )
+                            
+    j.compile()
+    if not j.cr.estvide():
+        print j.cr
+        sys.exit()
+    
+    j.exec_compile()
+    if not j.cr.estvide():
+        print j.cr
+        sys.exit()
+                            
+    from Editeur import comploader
+    comploader.charger_composants(QT)    
+    from Editeur import Objecttreeitem
+    jdc_item=Objecttreeitem.make_objecttreeitem( app, "nom", j)
+                
+    if jdc_item:                        
+        tree = JDCTree( jdc_item, None )                
+    
+    app.setMainWidget(tree)    
+    app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
+    tree.show()
+            
+    res = app.exec_loop()
+    sys.exit(res)
+    
+    
diff --git a/InterfaceQT/compobase.py b/InterfaceQT/compobase.py
new file mode 100644 (file)
index 0000000..a287b7d
--- /dev/null
@@ -0,0 +1,3 @@
+from Editeur import Objecttreeitem
+treeitem = Objecttreeitem.ObjectTreeItem
+objet = None
diff --git a/InterfaceQT/compobloc.py b/InterfaceQT/compobloc.py
new file mode 100644 (file)
index 0000000..7c8b844
--- /dev/null
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+
+from qt import *
+from Editeur     import Objecttreeitem
+
+import compofact
+import browser
+
+
+class Node(browser.JDCNode):
+    def getPanel(self):
+        """        
+        """    
+        from monMCFactPanel import MonMCFactPanel
+        return MonMCFactPanel(self,parent=self.editor)
+
+
+class BLOCTreeItem(compofact.FACTTreeItem):
+  itemNode=Node
+
+  def get_objet(self,name) :
+      for v in self.object.mc_liste:
+          if v.nom == name : return v
+      return None
+    
+  def iscopiable(self):
+    return 0
+
+
+import Accas
+treeitem = BLOCTreeItem
+objet = Accas.MCBLOC   
diff --git a/InterfaceQT/compocomm.py b/InterfaceQT/compocomm.py
new file mode 100644 (file)
index 0000000..0656c95
--- /dev/null
@@ -0,0 +1,108 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import string
+from qt import *
+
+from Editeur     import Objecttreeitem
+import browser
+import typeNode
+
+
+class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel):
+    def getPanel( self ):
+        """
+        """
+        from monCommentairePanel import MonCommentairePanel
+        return MonCommentairePanel(self,parent=self.editor)
+
+    def createPopUpMenu(self):
+        typeNode.PopUpMenuNodePartiel.createPopUpMenu(self)
+        if hasattr(self.item,'uncomment'):
+           self.menu.insertItem( qApp.translate('Browser','Decommenter'), self.unCommentIt )
+
+    def update_node_label(self) :
+        """
+        """
+        debComm=self.item.GetText()
+        self.setText(1,debComm)
+
+    
+class COMMTreeItem(Objecttreeitem.ObjectTreeItem):
+    itemNode=Node    
+
+    def init(self):
+      self.setfunction = self.set_valeur
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icône associée au noeud qui porte self,
+      dépendant de la validité de l'objet
+      NB : un commentaire est toujours valide ...
+      """
+      return "ast-white-percent"
+
+    def GetLabelText(self):
+        """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+        """
+        return 'commentaire'   #CS_pbruno,Fonte_Commentaire,None
+
+    def get_valeur(self):
+      """
+      Retourne la valeur de l'objet Commentaire cad son texte
+      """
+      return self.object.get_valeur() or ''
+    
+    def GetText(self):
+        texte = self.object.valeur
+        texte = string.split(texte,'\n')[0]
+        if len(texte) < 25 :
+            return texte
+        else :
+            return texte[0:24]
+
+    def set_valeur(self,valeur):
+      """
+      Afecte valeur à l'objet COMMENTAIRE
+      """
+      self.object.set_valeur(valeur)
+      
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      """
+      return []
+
+
+    def get_objet_commentarise(self):
+       """
+           La méthode get_objet_commentarise() de la classe compocomm.COMMTreeItem
+           surcharge la méthode get_objet_commentarise de la classe Objecttreeitem.ObjectTreeItem
+           elle a pour but d'empecher l'utilisateur final de commentariser un commentaire.
+       """
+       raise Exception( 'Impossible de commentariser un commentaire' )
+  
+import Extensions
+treeitem =COMMTreeItem
+objet = Extensions.commentaire.COMMENTAIRE    
diff --git a/InterfaceQT/compocommandecomm.py b/InterfaceQT/compocommandecomm.py
new file mode 100644 (file)
index 0000000..153f2b7
--- /dev/null
@@ -0,0 +1,94 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+import traceback
+import string
+
+from Editeur import Objecttreeitem
+import compocomm
+
+class COMMANDE_COMMTreeItem(Objecttreeitem.ObjectTreeItem):
+    itemNode=compocomm.Node
+
+    def init(self):
+      self.setfunction = self.set_valeur
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icône associée au noeud qui porte self,
+      dépendant de la validité de l'objet
+      NB : une commande commentarisée est toujours valide ...
+      """
+      if self.isvalid():
+          return "ast-green-percent"
+      else:
+          return "ast-red-percent"
+
+    def GetLabelText(self):
+        """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+        """
+        return 'commentaire'
+
+    def get_valeur(self):
+      """
+      Retourne la valeur de la commande commentarisée cad son texte
+      """
+      return self.object.get_valeur() or ''
+    
+    def GetText(self):
+        texte = self.object.valeur
+        texte = string.split(texte,'\n')[0]
+        if len(texte) < 25 :
+            return texte
+        else :
+            return texte[0:24]
+
+    def set_valeur(self,valeur):
+      """
+      Afefcte valeur à l'objet commande commentarisée
+      """
+      self.object.set_valeur(valeur)
+      
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      """
+      return []
+
+    def uncomment(self):
+      """
+      Demande à l'objet commande commentarisée de se décommentariser.
+      Si l'opération s'effectue correctement, retourne l'objet commande
+      et éventuellement le nom de la sd produite, sinon lève une exception
+      """
+      try:
+        commande,nom = self.object.uncomment()
+        #self.parent.children[pos].select()
+      except Exception,e:
+        traceback.print_exc()
+        raise e
+      return commande,nom
+  
+import Accas
+treeitem =COMMANDE_COMMTreeItem
+objet = Accas.COMMANDE_COMM    
diff --git a/InterfaceQT/compoerror.py b/InterfaceQT/compoerror.py
new file mode 100644 (file)
index 0000000..2f1821d
--- /dev/null
@@ -0,0 +1,38 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+from Tkinter import Label,Button
+
+#Modules Eficas
+from Noyau.N_OBJECT import ErrorObj
+from Editeur import Objecttreeitem
+from desError import DError
+
+class ERRORTreeItem(Objecttreeitem.AtomicObjectTreeItem):
+
+    panel = DError
+    def GetIconName(self):
+        return "ast-red-ball"
+
+
+treeitem =ERRORTreeItem
+objet = ErrorObj
+
diff --git a/InterfaceQT/compofact.py b/InterfaceQT/compofact.py
new file mode 100644 (file)
index 0000000..7739e04
--- /dev/null
@@ -0,0 +1,136 @@
+# -*- 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.
+#
+#
+# ======================================================================
+
+from qt import *
+from Editeur     import Objecttreeitem
+import browser
+
+
+class Node(browser.JDCNode):
+    def getPanel(self):
+        """
+        """
+        from monMCFactPanel import MonMCFactPanel
+        return MonMCFactPanel(self,parent=self.editor)
+        
+    def doPaste(self,node_selected):
+        objetACopier = self.item.get_copie_objet()
+        child=node_selected.doPasteMCF(objetACopier)
+        return child
+
+    def doPasteMCF(self,objetACopier):
+        child = self.parent.append_child(objetACopier,
+                                              pos=self.item,
+                                              retour='oui')
+        return child
+
+
+class FACTTreeItem(Objecttreeitem.ObjectTreeItem):
+  itemNode=Node
+  
+  def IsExpandable(self):
+    return 1
+
+  def GetText(self):
+      return  ''
+
+  def GetLabelText(self):
+      """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+      """
+      # None --> fonte et couleur par défaut
+      return self.object.getlabeltext(),None,None
+
+  def isvalid(self):
+    return self.object.isvalid()
+
+  def iscopiable(self):
+    return 1
+
+  def GetIconName(self):
+    if self.object.isvalid():
+      return "ast-green-los"
+    elif self.object.isoblig():
+      return "ast-red-los"
+    else:
+      return "ast-yel-los"
+
+  def keys(self):
+    keys=self.object.mc_dict.keys()
+    return keys
+
+  def GetSubList(self):
+      """
+         Reactualise la liste des items fils stockes dans self.sublist
+      """
+      liste=self.object.mc_liste
+      sublist=[None]*len(liste)
+      # suppression des items lies aux objets disparus
+      for item in self.sublist:
+         old_obj=item.getObject()
+         if old_obj in liste:
+            pos=liste.index(old_obj)
+            sublist[pos]=item
+         else:
+            pass # objets supprimes ignores
+      # ajout des items lies aux nouveaux objets
+      pos=0
+      for obj in liste:
+         if sublist[pos] is None:
+            # nouvel objet : on cree un nouvel item
+            def setfunction(value, object=obj):
+                object.setval(value)
+            item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
+            sublist[pos]=item
+         pos=pos+1
+
+      self.sublist=sublist
+      return self.sublist
+
+  def additem(self,name,pos):
+    objet = self.object.addentite(name,pos)
+    return objet
+
+  def suppitem(self,item) :
+      """ 
+         Cette methode a pour fonction de supprimer l'item passee en argument
+         des fils de l'item FACT qui est son pere
+           - item = item du MOCLE a supprimer du MOCLE pere
+           - item.getObject() = MCSIMP ou MCBLOC 
+      """
+      itemobject=item.getObject()
+      if itemobject.isoblig() :
+         self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
+         return 0
+
+      if self.object.suppentite(itemobject):
+         message = "Mot-clé " + itemobject.nom + " supprimé"
+         self.appli.affiche_infos(message)
+         return 1
+      else:
+         self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
+         return 0
+
+import Accas
+objet = Accas.MCFACT
+treeitem = FACTTreeItem
diff --git a/InterfaceQT/compoformule.py b/InterfaceQT/compoformule.py
new file mode 100644 (file)
index 0000000..02dcdc0
--- /dev/null
@@ -0,0 +1,180 @@
+# -*- coding: utf-8 -*-
+
+"""
+Ce module contient les classes permettant de définir les objets graphiques
+représentant un objet de type FORMULE, cad le panneau et l'item de l'arbre
+d'EFICAS
+"""
+
+import string
+from qt import *
+import compooper
+import browser
+import typeNode
+
+
+class FormuleNode(browser.JDCNode,typeNode.PopUpMenuNode):
+        
+    def getPanel(self):
+      
+      from monFormulePanel import MonFormulePanel
+      return MonFormulePanel(self,parent=self.editor)
+        
+   
+    def createPopUpMenu(self):
+      typeNode.PopUpMenuNode.createPopUpMenu(self)
+
+            
+class FORMULETreeItem(compooper.EtapeTreeItem):
+    """
+    Classe servant a définir l'item porté par le noeud de l'arbre d'EFICAS
+    qui représente la FORMULE
+    """
+    itemNode=FormuleNode
+
+    def init(self):
+      self.setfunction = self.set_valeur
+
+# ---------------------------------------------------------------------------
+#                   API de FORMULE pour l'arbre 
+# ---------------------------------------------------------------------------
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      On considére que FORMULE n'a pas de fils
+      --> modification par rapport a MACRO classique
+      """
+      # dans EFICAS on ne souhaite pas afficher les mots-clés fils de FORMULE
+      # de façon traditionnelle
+      return []
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icone à afficher dans l'arbre
+      Ce nom dépend de la validité de l'objet
+      """
+      if self.object.isactif():
+        self.object.state="modified"
+        if self.object.isvalid():
+          return "ast-green-square"
+        else:
+          return "ast-red-square"
+      else:
+        return "ast-white-text"
+
+    def GetLabelText(self):
+      """ Retourne 3 valeurs :
+      - le texte a afficher dans le noeud représentant l'item
+      - la fonte dans laquelle afficher ce texte
+      - la couleur du texte
+      """
+      if self.object.isactif():
+        # None --> fonte et couleur par défaut
+        return self.labeltext,None,None
+      else:
+        return self.labeltext,None,None
+        #return self.labeltext,fontes.standard_italique,None
+    
+# ---------------------------------------------------------------------------
+#       Méthodes permettant la modification et la lecture des attributs
+#       du paramètre = API graphique de la FORMULE pour Panel et EFICAS
+# ---------------------------------------------------------------------------
+
+    def get_nom(self):
+      """
+      Retourne le nom de la FORMULE
+      """
+      return self.object.get_nom()
+
+    def get_type(self):
+      """
+      Retourne le type de la valeur retournée par la FORMULE
+      """
+      return self.object.type_retourne
+
+    def get_args(self):
+      """
+      Retourne les arguments de la FORMULE
+      """
+      args=""
+      for mot in self.object.mc_liste:
+          if mot.nom == 'NOM_PARA':
+             args=mot.valeur
+             break
+      if args :
+          if args[0] == "(" and args[-1] ==")":
+             args=args[1:-1]
+          # transforme en tuple si ce n est pas déja le casa
+          try :
+             args=string.split(args,',')
+          except :
+             pass
+      return args
+
+    def get_corps(self):
+      """
+      Retourne le corps de la FORMULE
+      """
+      corps=""
+      for mot in self.object.mc_liste:
+          if mot.nom == 'VALE':
+             corps=mot.valeur
+             break
+      return corps
+
+
+    def get_liste_types_autorises(self):
+      """
+         Retourne la liste des types autorises pour les valeurs de sortie 
+         d'une FORMULE
+      """
+      return self.object.l_types_autorises
+
+    def save_formule(self,new_nom,new_typ,new_arg,new_exp):
+      """
+      Vérifie si (new_nom,new_typ,new_arg,new_exp) définit bien une FORMULE 
+      licite :
+          - si oui, stocke ces paramètres comme nouveaux paramètres de la 
+            FORMULE courante et retourne 1
+          - si non, laisse les paramètres anciens de la FORMULE inchangés et 
+            retourne 0
+      """
+      test,erreur = self.object.verif_formule_python(formule=(new_nom,new_typ,new_arg,
+                                                       new_exp))
+      if test :
+          # la formule est bien correcte : on sauve les nouveaux paramètres
+          test=self.object.update_formule_python(formule=(new_nom,new_typ,new_exp,new_arg))
+      return test,erreur
+
+# ---------------------------------------------------------------------------
+#          Accès aux méthodes de vérification de l'objet FORM_ETAPE
+# ---------------------------------------------------------------------------
+
+    def verif_nom(self,nom):
+        """
+        Lance la vérification du nom passé en argument
+        """
+        return self.object.verif_nom(nom)
+
+    def verif_arguments(self,arguments):
+        """
+        Lance la vérification des arguments passés en argument
+        """
+        return self.object.verif_arguments('('+arguments+')')
+
+    def verif_formule(self,formule):
+        """
+        Lance la vérification de FORMULE passée en argument
+        """
+        return self.object.verif_formule(formule=formule)
+
+
+    def verif_formule_python(self,formule):
+        """
+        Lance la vérification de FORMULE passée en argument
+        """
+        return self.object.verif_formule_python(formule=formule)
+
+import Accas
+treeitem =FORMULETreeItem
+objet = Accas.FORM_ETAPE
diff --git a/InterfaceQT/compojdc.py b/InterfaceQT/compojdc.py
new file mode 100644 (file)
index 0000000..1cd4908
--- /dev/null
@@ -0,0 +1,116 @@
+# -*- coding: utf-8 -*-
+
+from qt import *
+from Editeur import Objecttreeitem
+import browser
+
+
+class Node(browser.JDCNode):
+    def getPanel(self):
+        """
+        """
+        from monRacinePanel import MonRacinePanel
+        return MonRacinePanel(self,parent=self.editor)
+
+    def doPasteCommande(self,objet_a_copier):
+        """
+          Réalise la copie de l'objet passé en argument qui est nécessairement
+          une commande
+        """
+        child = self.append_child(objet_a_copier,pos='first',retour='oui')
+        return child
+
+
+class JDCTreeItem(Objecttreeitem.ObjectTreeItem):
+  itemNode=Node
+  
+  def IsExpandable(self):
+    return 1
+
+  def GetText(self):
+      return  "    "
+
+  def GetLabelText(self):
+      # None --> fonte et couleur par défaut
+      return self.object.nom,None,None
+
+  def get_jdc(self):
+    """
+    Retourne l'objet pointé par self
+    """
+    return self.object
+  
+  def GetIconName(self):
+    if self.object.isvalid():
+      return "ast-green-square"
+    else:
+      return "ast-red-square"
+
+  def keys(self):
+      if self.object.etapes_niveaux != []:
+          return range(len(self.object.etapes_niveaux))
+      else:
+          return range(len(self.object.etapes))
+
+  def additem(self,name,pos):
+      cmd = self._object.addentite(name,pos)
+      return cmd
+
+  def suppitem(self,item) :
+    # item             = item de l'ETAPE à supprimer du JDC
+    # item.getObject() = ETAPE ou COMMENTAIRE
+    # self.object      = JDC
+
+    itemobject=item.getObject()
+    if self.object.suppentite(itemobject):
+       if itemobject.nature == "COMMENTAIRE" :
+          message = "Commentaire supprimé"
+       else :
+          message = "Commande " + itemobject.nom + " supprimée"
+       self.appli.affiche_infos(message)
+       return 1
+    else:
+       self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet")
+       return 0
+
+  def GetSubList(self):
+    """
+       Retourne la liste des items fils de l'item jdc.
+       Cette liste est conservee et mise a jour a chaque appel
+    """
+    if self.object.etapes_niveaux != []:
+        liste = self.object.etapes_niveaux
+    else:
+        liste = self.object.etapes
+    sublist=[None]*len(liste)
+    # suppression des items lies aux objets disparus
+    for item in self.sublist:
+       old_obj=item.getObject()
+       if old_obj in liste:
+          pos=liste.index(old_obj)
+          sublist[pos]=item
+       else:
+          pass # objets supprimes ignores
+    # ajout des items lies aux nouveaux objets
+    pos=0
+    for obj in liste:
+       if sublist[pos] is None:
+          # nouvel objet : on cree un nouvel item
+          item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj)
+          sublist[pos]=item
+       pos=pos+1
+
+    self.sublist=sublist
+    return self.sublist
+
+  def get_l_noms_etapes(self):
+      """ Retourne la liste des noms des étapes de self.object"""
+      return self.object.get_l_noms_etapes()
+
+  def get_liste_cmd(self):
+      listeCmd = self.object.niveau.definition.get_liste_cmd()
+      return listeCmd
+
+import Accas
+treeitem =JDCTreeItem
+objet = Accas.JDC    
diff --git a/InterfaceQT/compomacro.py b/InterfaceQT/compomacro.py
new file mode 100644 (file)
index 0000000..74e2f59
--- /dev/null
@@ -0,0 +1,154 @@
+# -*- coding: utf-8 -*-
+
+# Modules Python
+import os,sys,string
+import types
+import traceback
+from qt import *
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import compooper
+import browser
+import typeNode
+
+
+class MACRONode(browser.JDCNode,typeNode.PopUpMenuNode):         
+    def getPanel(self):
+      from   monMacroPanel import MonMacroPanel
+      return MonMacroPanel (self,parent=self.editor )
+    
+    def createPopUpMenu(self):
+      typeNode.PopUpMenuNode.createPopUpMenu(self)
+        
+    
+class MACROTreeItem(compooper.EtapeTreeItem):
+#  """ Cette classe hérite d'une grande partie des comportements
+#      de la classe compooper.EtapeTreeItem
+#  """
+    itemNode=MACRONode
+
+# ------------------------------------
+#  Classes necessaires à INCLUDE
+# ------------------------------------
+
+class INCLUDETreeItemBase(MACROTreeItem):
+
+    def __init__(self,appli, labeltext, object, setfunction):    
+       MACROTreeItem.__init__(self,appli, labeltext, object, setfunction)
+
+    def iscopiable(self):
+       return 0
+
+
+class INCLUDENode(browser.JDCNode,typeNode.PopUpMenuNode):    
+    def getPanel(self):
+      from   monIncludePanel import MonIncludePanel
+      return MonIncludePanel (self,parent=self.editor )
+
+    def createPopUpMenu(self):
+      typeNode.PopUpMenuNode.createPopUpMenu(self)
+      self.menu.insertItem( qApp.translate('Browser','Edit'), self.makeEdit )
+      
+    def makeEdit(self):    #,appli,node
+        if self.item.object.text_converted == 0:
+                # Le texte du fichier inclus n'a pas pu etre converti par le module convert
+                msg="Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n"
+                msg=msg+self.item.object.text_error
+                return
+    
+        if not hasattr(self.item.object,"jdc_aux") or self.item.object.jdc_aux is None:
+               #L'include n'est pas initialise
+               self.item.object.build_include(None,"")
+    
+        # On cree un nouvel onglet dans le bureau
+        self.editor.vm.displayJDC( self.item.object.jdc_aux , self.item.object.jdc_aux.nom )
+     
+
+class INCLUDETreeItem(INCLUDETreeItemBase):
+    itemNode=INCLUDENode
+    
+
+# ------------------------------------
+#  Classes necessaires à POURSUITE
+# ------------------------------------
+    
+class POURSUITENode(browser.JDCNode, typeNode.PopUpMenuNode):    
+    def getPanel(self):
+      from   monPoursuitePanel import MonPoursuitePanel
+      return MonPoursuitePanel (self,parent=self.editor )
+
+    def createPopUpMenu(self):
+      typeNode.PopUpMenuNode.createPopUpMenu(self)
+      self.menu.insertItem( qApp.translate('Browser','Edit'), self.makeEdit )
+
+    def makeEdit(self):    #,appli,node
+        if self.item.object.text_converted == 0:
+                msg="Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n"
+                msg=msg+self.item.object.text_error
+                return
+    
+        if not hasattr(self.item.object,"jdc_aux") or self.item.object.jdc_aux is None:
+            text="""DEBUT()
+                    FIN()"""
+            self.object.build_poursuite(None,text)
+    
+        # On cree un nouvel onglet dans le bureau
+        self.editor.vm.displayJDC( self.item.object.jdc_aux , self.item.object.jdc_aux.nom)
+    
+class POURSUITETreeItem(INCLUDETreeItemBase):
+  itemNode=POURSUITENode
+
+
+# ----------------------------------------
+#  Classes necessaires à INCLUDE MATERIAU
+# ----------------------------------------
+    
+
+class MATERIAUNode(MACRONode):
+
+    def getPanel(self):
+      from   monMacroPanel import MonMacroPanel
+      return MonMacroPanel (self,parent=self.editor )
+
+    def createPopUpMenu(self):
+      typeNode.PopUpMenuNode.createPopUpMenu(self)
+      self.menu.insertItem( qApp.translate('Browser','View'), self.makeView )
+
+    def makeView(self) :
+      if hasattr(self.item.object,'fichier_ini') and self.item.object.fichier_ini==None:
+         QMessageBox.information( self, "Include vide","L'include doit etre correctement initialisé pour etre visualisé")
+         return
+      f = open(self.item.object.fichier_ini, "rb")
+      texte = f.read()
+      f.close()
+      from desVisu import DVisu
+      monVisu=DVisu(parent=self.editor,fl=Qt.WType_Dialog)
+      monVisu.TB.setText(texte)
+      monVisu.show()
+
+class INCLUDE_MATERIAUTreeItem(INCLUDETreeItemBase):
+    itemNode=MATERIAUNode
+
+# ------------------------------------
+# TreeItem
+# ------------------------------------
+    
+
+def treeitem(appli, labeltext, object, setfunction=None):
+   """ Factory qui retourne l'item adapte au type de macro : 
+       INCLUDE, POURSUITE, MACRO
+   """
+   if object.nom == "INCLUDE_MATERIAU":
+      return INCLUDE_MATERIAUTreeItem(appli, labeltext, object, setfunction)
+   elif object.nom == "INCLUDE":
+      return INCLUDETreeItem(appli, labeltext, object, setfunction)
+   elif object.nom == "POURSUITE":
+      return POURSUITETreeItem(appli, labeltext, object, setfunction)
+   else:
+      return MACROTreeItem(appli, labeltext, object, setfunction)
+
+import Accas
+objet=Accas.MACRO_ETAPE
+    
+
diff --git a/InterfaceQT/compomclist.py b/InterfaceQT/compomclist.py
new file mode 100644 (file)
index 0000000..65bdad0
--- /dev/null
@@ -0,0 +1,205 @@
+# -*- coding: utf-8 -*-
+
+import types
+import traceback
+
+from qt import *
+
+import compofact
+import browser
+from Editeur     import Objecttreeitem
+from Noyau.N_OBJECT import ErrorObj
+#import compoerror
+
+
+class Node(browser.JDCNode):
+    def getPanel(self):
+        """        
+        """    
+        if self.item.isMCList() :
+           if self.item.ajout_possible():
+              from monMCListAjoutPanel import MonMCListAjoutPanel
+              return MonMCListAjoutPanel(self,parent=self.editor)
+           else :
+              print "MCList"
+        elif self.item.isMCFact() :
+           from monMCFactPanel import MonMCFactPanel
+           return MonMCFactPanel(self,parent=self.editor)
+        else :
+           print "MCList"
+
+    def doPaste(self,node_selected):
+        objet_a_copier = self.item.get_copie_objet()
+        child=node_selected.doPasteMCF(objet_a_copier)
+        #print "doPaste",child
+        return child
+
+    def doPasteMCF(self,objet_a_copier):
+        child=None
+        # le noeud courant est une MCList
+        if self.item.isMCList() :
+          child = self.append_child(objet_a_copier,pos='first',retour='oui')
+
+        # le noeud courant est un MCFACT
+        elif self.item.isMCFact() :
+          # le noeud selectionne est un MCFACT dans une MCList
+          if self.parent.item.isMCList():
+             child = self.parent.append_child(objet_a_copier,
+                                              pos=self.item,
+                                              retour='oui')
+
+          # le noeud MCFACT selectionne n'est pas dans une MCList
+          else:
+             child = self.parent.append_child(objet_a_copier,retour='oui')
+
+        else:
+          QMessageBox.information( self, "Copie impossible",
+                   "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")          
+          self.editor.affiche_infos("Copie refusée")
+
+        return child
+
+class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
+    """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
+        du noyau Accas instances de la classe MCLIST.
+        Elle adapte ces objets pour leur permettre d'etre intégrés en tant que
+        noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
+        Cette classe délègue les appels de méthode et les accès
+        aux attributs à l'objet du noyau soit manuellement soit 
+        automatiquement (voir classe Delegate et attribut object).
+    """
+    itemNode=Node
+
+    def init(self):
+        # Si l'objet Accas (MCList) a moins d'un mot cle facteur
+        # on utilise directement ce mot cle facteur comme delegue
+        self.updateDelegate()
+
+    def updateDelegate(self):
+        if len(self._object) > 1:
+           self.setdelegate(self._object)
+        else:
+           self.setdelegate(self._object.data[0])
+
+    def panel(self,jdcdisplay,pane,node):
+        """ Retourne une instance de l'objet panneau associe a l'item (self)
+            Si la liste ne contient qu'un mot clé facteur, on utilise le panneau
+            FACTPanel.
+            Si la liste est plus longue on utilise le panneau MCLISTPanel.
+        """
+        if len(self._object) > 1:
+           return MCLISTPanel(jdcdisplay,pane,node)
+        elif isinstance(self._object.data[0],ErrorObj):
+           return compoerror.ERRORPanel(jdcdisplay,pane,node)
+        else:
+           return compofact.FACTPanel(jdcdisplay,pane,node)
+
+    def IsExpandable(self):
+        if len(self._object) > 1:
+           return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
+        else:
+           return compofact.FACTTreeItem.IsExpandable(self)
+
+    def GetSubList(self):
+        self.updateDelegate()
+        if len(self._object) <= 1:
+           self._object.data[0].alt_parent=self._object
+           return compofact.FACTTreeItem.GetSubList(self)
+
+        liste=self._object.data
+        sublist=[None]*len(liste)
+        # suppression des items lies aux objets disparus
+        for item in self.sublist:
+           old_obj=item.getObject()
+           if old_obj in liste:
+              pos=liste.index(old_obj)
+              sublist[pos]=item
+           else:
+              pass # objets supprimes ignores
+        # ajout des items lies aux nouveaux objets
+        pos=0
+        for obj in liste:
+           if sublist[pos] is None:
+              # nouvel objet : on cree un nouvel item
+              def setfunction(value, object=obj):
+                  object=value
+              item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
+              sublist[pos]=item
+              #Attention : on ajoute une information supplementaire pour l'actualisation de 
+              # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
+              # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
+              # informations de validite. alt_parent permet de remedier a ce defaut.
+              obj.alt_parent=self._object
+           pos=pos+1
+
+        self.sublist=sublist
+        return self.sublist
+
+    def GetIconName(self):
+        if self._object.isvalid():
+            return "ast-green-los"
+        elif self._object.isoblig():
+            return "ast-red-los"
+        else:
+            return "ast-yel-los"
+
+    def get_docu(self):
+        """ Retourne la clef de doc de l'objet pointé par self """
+        return self.object.get_docu()    
+
+    def iscopiable(self):
+        if len(self._object) > 1:
+           return Objecttreeitem.SequenceTreeItem.iscopiable(self)
+        else:
+           return compofact.FACTTreeItem.iscopiable(self)
+
+    def isMCFact(self):
+        """
+        Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
+        """
+        return len(self._object) <= 1
+
+    def isMCList(self):
+        """
+        Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
+        """
+        return len(self._object) > 1
+        
+    def get_copie_objet(self):
+        return self._object.data[0].copy()
+
+    def additem(self,obj,pos):
+        #print "compomclist.additem",obj,pos
+        if len(self._object) <= 1:
+           return compofact.FACTTreeItem.additem(self,obj,pos)
+
+        o= self.object.addentite(obj,pos)
+        return o
+
+    def suppitem(self,item):
+        """
+        Retire un objet MCFACT de la MCList (self.object) 
+        """
+        #print "compomclist.suppitem",item
+        obj=item.getObject()
+        if len(self._object) <= 1:
+           return compofact.FACTTreeItem.suppitem(self,item)
+
+        if self.object.suppentite(obj):
+           if len(self._object) == 1: self.updateDelegate()     
+           message = "Mot-clef " + obj.nom + " supprimé"
+           self.appli.affiche_infos(message)
+           return 1
+        else:
+           self.appli.affiche_infos('Impossible de supprimer ce mot-clef')
+           return 0
+
+            
+import Accas
+objet = Accas.MCList    
+
+def treeitem(appli,labeltext,object,setfunction):
+  """ Factory qui produit un objet treeitem adapte a un objet 
+      Accas.MCList (attribut objet de ce module)
+  """
+  return MCListTreeItem(appli,labeltext,object,setfunction)
diff --git a/InterfaceQT/componiveau.py b/InterfaceQT/componiveau.py
new file mode 100644 (file)
index 0000000..866d585
--- /dev/null
@@ -0,0 +1,94 @@
+# -*- coding: utf-8 -*-
+
+from qt import *
+from Editeur     import Objecttreeitem
+from Extensions  import commentaire 
+import browser
+
+class Node(browser.JDCNode):
+      pass
+
+class NIVEAUTreeItem(Objecttreeitem.ObjectTreeItem):
+  itemNode=Node
+
+  def isactif(self):
+      return self.object.isactif()
+    
+  def IsExpandable(self):
+      return 1
+    
+  def GetLabelText(self):
+      """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+      """
+      if self.isactif():
+          fonte = Fonte_Niveau
+      else :
+          fonte = Fonte_Niveau_inactif
+      return self.labeltext,fonte,'#00008b'
+    
+  def GetIconName(self):
+      if self.isactif():
+          if self.object.isvalid():
+              return "ast-green-text"
+          else:
+              return "ast-red-text"
+      else:
+          return "ast-white-text"
+  
+  def keys(self):
+      if self.object.etapes_niveaux != []:
+          return range(len(self.object.etapes_niveaux))
+      else:
+          return range(len(self.object.etapes))
+
+  def GetSubList(self):
+    sublist=[]
+    for key in self.keys():
+      if self.object.etapes_niveaux != []:
+          liste = self.object.etapes_niveaux
+      else:
+          liste = self.object.etapes
+      try:
+        value = liste[key]
+      except KeyError:
+        continue
+      def setfunction(value, key=key, object=liste):
+        object[key] = value
+      item =self.make_objecttreeitem(self.appli,value.ident() + " : ", value, setfunction)
+      sublist.append(item)
+    return sublist
+
+  def additem(self,name,pos):
+      if isinstance(name,Objecttreeitem.TreeItem) :
+          cmd=self.object.addentite(name.getObject(),pos)
+      else :
+          cmd = self.object.addentite(name,pos)
+      item = self.make_objecttreeitem(self.appli,cmd.nom + " : ", cmd)
+      return item
+
+  def suppitem(self,item) :
+    # item = item de l'ETAPE à supprimer du JDC
+    # item.getObject() = ETAPE ou COMMENTAIRE
+    # self.object = JDC
+    itemobject=item.getObject()
+    if self.object.suppentite(itemobject):
+       if isinstance(item.object,commentaire.COMMENTAIRE):
+          message = "Commentaire supprimé"
+       else :
+          message = "Commande " + itemobject.nom + " supprimée"
+       self.appli.affiche_infos(message)
+       return 1
+    else:
+       self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet")
+       return 0
+
+  def GetText(self):
+      return ''
+
+    
+import Accas
+treeitem = NIVEAUTreeItem
+objet = Accas.ETAPE_NIVEAU    
diff --git a/InterfaceQT/componuplet.py b/InterfaceQT/componuplet.py
new file mode 100644 (file)
index 0000000..649ce0e
--- /dev/null
@@ -0,0 +1,85 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import types
+from repr import Repr
+from copy import copy,deepcopy
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+
+myrepr = Repr()
+myrepr.maxstring = 100
+myrepr.maxother = 100
+
+# Si Expandable vaut 1 les éléments du nuplet apparaissent dans l'arbre
+# Si Expandable vaut 0 les éléments n'apparaissent pas
+Expandable=1
+
+
+import browser
+from qt import *
+
+class Node(browser.JDCNode): pass
+##    def getPanel(self):
+##        """        
+##        """    
+##        return NUPLETPanel( self, self.editor )
+    
+
+class NUPLETTreeItem(Objecttreeitem.ObjectTreeItem):
+##  panel=NUPLETPanel
+  itemNode=Node
+
+  def IsExpandable(self):
+    return Expandable
+
+  def GetText(self):
+      return  ''
+
+  def isvalid(self):
+    return self.object.isvalid()
+
+  def GetIconName(self):
+    if self.object.isvalid():
+      return "ast-green-los"
+    elif self.object.isoblig():
+      return "ast-red-los"
+    else:
+      return "ast-yel-los"
+
+  def GetSubList(self):
+    if not Expandable:return []
+    sublist=[]
+    for obj in self.object.mc_liste:
+      item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, None)    
+      sublist.append(item)
+    return sublist
+
+  def additem(self,name,pos):
+    raise "NUPLET"
+
+  def suppitem(self,item) :
+    raise "NUPLET"
+
+import Accas
+treeitem=NUPLETTreeItem
+objet=Accas.MCNUPLET
diff --git a/InterfaceQT/compooper.py b/InterfaceQT/compooper.py
new file mode 100644 (file)
index 0000000..9112f96
--- /dev/null
@@ -0,0 +1,260 @@
+# -*- coding: utf-8 -*-
+
+import traceback
+import string
+
+from qt import *
+
+from Editeur     import Objecttreeitem
+import browser
+import typeNode
+
+class Node(browser.JDCNode, typeNode.PopUpMenuNode):
+    def getPanel( self ):
+        """
+        """
+        from monCommandePanel import MonCommandePanel
+        return MonCommandePanel(self,parent=self.editor)
+
+    def createPopUpMenu(self):
+        typeNode.PopUpMenuNode.createPopUpMenu(self)
+        if ("AFFE_CARA_ELEM" in self.item.get_genealogie()) and self.editor.salome: 
+           self.menu.insertItem( 'View3D', self.view3D )
+
+    def doPaste(self,node_selected):
+        """
+            Déclenche la copie de l'objet item avec pour cible
+            l'objet passé en argument : node_selected
+        """
+        objet_a_copier = self.item.get_copie_objet()
+        child=node_selected.doPasteCommande(objet_a_copier)
+        return child
+
+    def doPasteCommande(self,objet_a_copier):
+        """
+          Réalise la copie de l'objet passé en argument qui est nécessairement
+          une commande
+        """
+        parent=self.parent
+        #child = parent.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):
+        """
+           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
+
+    def view3D(self) :
+        from Editeur import TroisDPal
+        troisD=TroisDPal.TroisDPilote(self.item,self.editor.parent.appliEficas)
+        troisD.envoievisu()
+
+
+class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
+  """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
+      Accas. Elle leur permet d'etre affichés comme des noeuds
+      d'un arbre graphique.
+      Cette classe a entre autres deux attributs importants :
+        - _object qui est un pointeur vers l'objet du noyau
+        - object qui pointe vers l'objet auquel sont délégués les
+          appels de méthode et les acces aux attributs
+      Dans le cas d'une ETAPE, _object et object pointent vers le 
+      meme objet.
+  """
+  itemNode=Node
+  
+  def IsExpandable(self):
+      return 1
+
+  def GetIconName(self):
+      """
+      Retourne le nom de l'icone a afficher dans l'arbre
+      Ce nom dépend de la validité de l'objet
+      """
+      if not self.object.isactif():
+         return "ast-white-square"
+      elif self.object.isvalid():
+         return "ast-green-square"
+      else:
+         valid=self.valid_child()
+         valid=valid * self.valid_regles("non")
+         if self.reste_val != {}:
+            valid=0
+         if valid==0  :
+            return "ast-red-square"
+         else :
+            try :
+            # on traite ici le cas d include materiau
+            #  print self.object.definition.nom 
+              if  self.object.fichier_ini != self.object.nom_mater :
+                  return "ast-red-square"
+            except :
+              pass
+            return "ast-yellow-square"
+
+  def GetLabelText(self):
+      """ Retourne 3 valeurs :
+      - le texte a afficher dans le noeud représentant l'item
+      - la fonte dans laquelle afficher ce texte
+      - la couleur du texte
+      """
+      if self.object.isactif():
+        # None --> fonte et couleur par défaut
+        return self.labeltext,None,None
+      else:
+        return self.labeltext, None, None #CS_pbruno todo
+      
+  def get_objet(self,name) :
+      for v in self.object.mc_liste:
+          if v.nom == name : return v
+      return None
+      
+  def get_type_sd_prod(self):
+      """
+         Retourne le nom du type du concept résultat de l'étape
+      """
+      sd_prod=self.object.get_type_produit()
+      if sd_prod:
+         return sd_prod.__name__
+      else:
+         return ""
+
+  def additem(self,name,pos):      
+      mcent = self._object.addentite(name,pos)
+      return mcent
+      
+
+  def suppitem(self,item) :
+      # item : item du MOCLE de l'ETAPE a supprimer
+      # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList 
+      itemobject=item.getObject()
+      if itemobject.isoblig() :
+          self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
+          return 0
+      if self.object.suppentite(itemobject):
+          message = "Mot-clé " + itemobject.nom + " supprimé"
+          self.appli.affiche_infos(message)
+          return 1
+      else :
+          self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
+          return 0
+
+  def GetText(self):
+      try:
+          return self.object.get_sdname()
+      except:
+          return ''
+
+  def keys(self):
+      keys=self.object.mc_dict.keys()
+      return keys
+
+  def GetSubList(self):
+      """
+         Reactualise la liste des items fils stockes dans self.sublist
+      """
+      if self.isactif():
+         liste=self.object.mc_liste
+      else:
+         liste=[]
+
+      sublist=[None]*len(liste)
+      # suppression des items lies aux objets disparus
+      for item in self.sublist:
+         old_obj=item.getObject()
+         if old_obj in liste:
+            pos=liste.index(old_obj)
+            sublist[pos]=item
+         else:
+            pass # objets supprimes ignores
+
+      # ajout des items lies aux nouveaux objets
+      pos=0
+      for obj in liste:
+         if sublist[pos] is None:
+            # nouvel objet : on cree un nouvel item
+            def setfunction(value, object=obj):
+                object.setval(value)
+            item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
+            sublist[pos]=item
+         pos=pos+1
+
+      self.sublist=sublist
+      return self.sublist
+
+  def isvalid(self):
+      return self.object.isvalid()
+
+  def iscopiable(self):
+      """
+      Retourne 1 si l'objet est copiable, 0 sinon
+      """
+      return 1
+
+  def update(self,item):
+      if item.sd and item.sd.nom:
+         self.nomme_sd(item.sd.nom)
+
+  def nomme_sd(self,nom):
+      """ Lance la méthode de nommage de la SD """
+      oldnom=""
+      if self.object.sd != None :
+         oldnom=self.object.sd.nom
+      test,mess= self.object.nomme_sd(nom)
+      if test:self.object.parent.reset_context()
+      if (test and self.appli.dict_reels.has_key(oldnom) ):
+              self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom]
+      return test,mess
+
+  def is_reentrant(self):
+      return self.object.is_reentrant()
+    
+  def get_noms_sd_oper_reentrant(self):
+      return self.object.get_noms_sd_oper_reentrant()
+
+  def get_objet_commentarise(self):
+      """
+          Cette méthode retourne un objet commentarisé
+          représentatif de self.object
+      """
+      # Format de fichier utilisé
+      format=self.appli.format_fichier
+      return self.object.get_objet_commentarise(format)
+
+  def get_objet_commentarise_BAK(self):
+      """
+          Cette méthode retourne un objet commentarisé
+          représentatif de self.object
+      """
+      import generator,string,Accas
+      # Format de fichier utilisé
+      format=self.appli.format_fichier
+      g=generator.plugins[format]()
+      texte_commande = g.gener(self.object,format='beautifie')
+      # Il faut enlever la premiere ligne vide de texte_commande que 
+      # rajoute le generator
+      rebut,texte_commande = string.split(texte_commande,'\n',1)
+      # on construit l'objet COMMANDE_COMM repésentatif de self mais non 
+      # enregistré dans le jdc
+      commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
+                                             parent=self.object.parent)
+      commande_comment.niveau = self.object.niveau
+      commande_comment.jdc = commande_comment.parent = self.object.jdc
+
+      pos=self.object.parent.etapes.index(self.object)
+      parent=self.object.parent
+      self.object.parent.suppentite(self.object)
+      parent.addentite(commande_comment,pos)
+
+      return commande_comment
+
+
+import Accas
+treeitem = EtapeTreeItem
+objet = Accas.ETAPE    
+
diff --git a/InterfaceQT/compoparam.py b/InterfaceQT/compoparam.py
new file mode 100644 (file)
index 0000000..4c3fb26
--- /dev/null
@@ -0,0 +1,123 @@
+# -*- coding: utf-8 -*-
+"""
+   Ce module contient les classes permettant de définir les objets graphiques
+   représentant un objet de type PARAMETRE, cad le panneau et l'item de l'arbre
+   d'EFICAS
+"""
+
+# import modules Python
+import string
+from qt import *
+
+# import modules EFICAS
+from Editeur     import Objecttreeitem
+import browser
+import typeNode
+
+
+class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel): 
+    def getPanel(self):
+        """        
+        """    
+        from monParamPanel  import MonParamPanel
+        return MonParamPanel(self, parent=self.editor )
+
+    def createPopUpMenu(self):
+        typeNode.PopUpMenuNodePartiel.createPopUpMenu(self)
+
+
+
+class PARAMTreeItem(Objecttreeitem.ObjectTreeItem):
+    """
+    Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
+    qui représente le PARAMETRE
+    """
+    itemNode=Node
+
+    def init(self):      
+      self.setfunction = self.set_valeur
+
+# ---------------------------------------------------------------------------
+#                   API du PARAMETRE pour l'arbre 
+# ---------------------------------------------------------------------------
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icone associée au noeud qui porte self,
+      dépendant de la validité de l'objet
+      NB : un PARAMETRE est toujours valide ...
+      """
+      if self.isactif():
+          if self.isvalid():
+              return "ast-green-square"
+          else:
+              return "ast-red-square"
+      else:
+          return "ast-white-square"
+
+    def GetLabelText(self):
+        """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+        """
+        return 'PARAMETRE',None,None 
+
+    def GetText(self):
+      """
+      Retourne le texte à afficher aprês le nom de la commande (ici apres 'paramêtre')
+      Ce texte est tronqué à 25 caractêres
+      """
+      texte=self.object.nom+"="+str(self.object.valeur)
+      texte = string.split(texte,'\n')[0]
+      if len(texte) < 25 :
+          return texte
+      else :
+          return texte[0:24]+'...'
+
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      """
+      return []
+    
+# ---------------------------------------------------------------------------
+#       Méthodes permettant la modification et la lecture des attributs
+#       du paramêtre = API graphique du PARAMETRE pour Panel et EFICAS
+# ---------------------------------------------------------------------------
+
+    def get_valeur(self):
+      """
+      Retourne la valeur de l'objet PARAMETRE cad son texte
+      """
+      if self.object.valeur is None: return ''
+      else: return self.object.valeur 
+
+    def get_nom(self):
+      """
+      Retourne le nom du paramêtre
+      """
+      return self.object.nom
+
+    def set_valeur(self,new_valeur):
+      """
+      Affecte valeur à l'objet PARAMETRE
+      """
+      self.object.set_valeur(new_valeur)
+
+    def set_nom(self,new_nom):
+      """
+      Renomme le paramêtre
+      """
+      self.object.set_nom(new_nom)
+      #self.object.set_attribut('nom',new_nom)
+
+    def get_fr(self):
+      """
+      Retourne le fr associé au paramêtre, cad la bulle d'aide pour EFICAS
+      """
+      return "Définition d'un paramêtre"
+    
+import Extensions.parametre
+treeitem =PARAMTreeItem
+objet = Extensions.parametre.PARAMETRE
diff --git a/InterfaceQT/compoparameval.py b/InterfaceQT/compoparameval.py
new file mode 100644 (file)
index 0000000..09a54c6
--- /dev/null
@@ -0,0 +1,153 @@
+# -*- coding: utf-8 -*-
+
+"""
+Ce module contient les classes permettant de définir les objets graphiques
+représentant un objet de type PARAMETRE_EVAL, cad le panneau et l'item de l'arbre
+d'EFICAS
+"""
+
+# import modules Python
+import string
+
+# import modules EFICAS
+
+from Editeur import Objecttreeitem
+
+
+import browser
+from qt import *
+
+class Node(browser.JDCNode): pass
+##    def getPanel(self):
+##        """        
+##        """    
+##        return PARAM_EVALPanel( self, self.editor )
+
+
+class PARAM_EVALTreeItem(Objecttreeitem.ObjectTreeItem):
+    """
+    Classe servant a définir l'item porté par le noeud de l'arbre d'EFICAS
+    qui représente le PARAMETRE
+    """
+    itemNode=Node
+##    panel = PARAM_EVALPanel
+
+    def init(self):
+      self.setfunction = self.set_valeur
+
+# ---------------------------------------------------------------------------
+#                   API du PARAMETRE pour l'arbre 
+# ---------------------------------------------------------------------------
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icone associée au noeud qui porte self,
+      dépendant de la validité de l'objet
+      NB : un PARAMETRE est toujours valide ...
+      """
+      if self.isactif():
+          if self.isvalid():
+              return "ast-green-square"
+          else:
+              return "ast-red-square"
+      else:
+          return "ast-white-square"
+
+    def GetLabelText(self):
+        """ Retourne 3 valeurs :
+        - le texte a afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+        """
+        return 'EVAL',Fonte_PARAMETRE,None
+
+    def GetText(self):
+      """
+      Retourne le texte a afficher apres le nom de la commande (ici apres 'parametre')
+      Ce texte est tronqué a 25 caracteres
+      """
+      texte = repr(self.object)
+      texte = string.split(texte,'\n')[0]
+      if len(texte) < 25 :
+          return texte
+      else :
+          return texte[0:24]+'...'
+
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      """
+      return []
+    
+# ---------------------------------------------------------------------------
+#       Méthodes permettant la modification et la lecture des attributs
+#       du parametre = API graphique du PARAMETRE pour Panel et EFICAS
+# ---------------------------------------------------------------------------
+
+    def isvalid(self):
+      """
+      Indique si l'objet pointé par self est valide
+      """
+      return self.object.isvalid()
+    
+    def get_valeur(self):
+      """
+      Retourne une chaine représentant la valeur de l'objet PARAMETRE
+      cad de l'objet class_eval.EVAL
+      """
+      return self.object.get_valeur() or ''
+
+    def get_nom(self):
+      """
+      Retourne le nom du parametre
+      """
+      return self.object.get_nom()
+
+    def set_valeur(self,new_valeur):
+      """
+      Affecte new_valeur a l'objet PARAMETRE_EVAL
+      """
+      # on construit le texte de la nouvelle valeur
+      new_valeur = 'EVAL("""'+new_valeur+'""")'
+      # on affecte la nouvelle valeur a self.object
+      self.object.set_valeur(new_valeur)
+
+    def set_nom(self,new_nom):
+      """
+      Renomme le parametre
+      """
+      self.object.set_nom(new_nom)
+
+    def get_fr(self):
+      """
+      Retourne le fr associé au parametre, cad la bulle d'aide pour EFICAS
+      """
+      return "Définition d'un parametre de type EVAL"
+
+    def verif_nom(self,nom):
+      """
+      Lance la vérification de validité du nom passé en argument
+      """
+      return self.object.verif_nom(nom = nom)
+
+    def verif_eval(self,valeur):
+      """
+      Lance la vérification de validité de l'expression EVAL passée en argument
+      """
+      return self.object.verif_eval(exp_eval = valeur)
+
+    def save_parametre_eval(self,new_nom,new_val):
+      """
+      Vérifie si (new_nom,new_val) définit bien un EVAL licite :
+          - si oui, stocke ces parametres comme nouveaux parametres de l'EVAL courant et retourne 1
+          - si non, laisse les parametres anciens de EVAL inchangés et retourne 0
+      """
+      test,erreur = self.object.verif_parametre_eval(param=(new_nom,new_val))
+      if test :
+          # la formule est bien correcte : on sauve les nouveaux parametres
+          self.object.update(param=(new_nom,new_val))
+      return test,erreur
+      
+import Extensions.parametre_eval
+treeitem =PARAM_EVALTreeItem
+objet = Extensions.parametre_eval.PARAMETRE_EVAL
diff --git a/InterfaceQT/compoproc.py b/InterfaceQT/compoproc.py
new file mode 100644 (file)
index 0000000..ffbfdf0
--- /dev/null
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+from Editeur     import Objecttreeitem
+import compooper
+import browser
+import typeNode
+
+from qt import *
+
+class Node(browser.JDCNode,typeNode.PopUpMenuNode):
+    def getPanel(self):
+        from monMacroPanel import MonMacroPanel
+        return MonMacroPanel(self,parent=self.editor)
+
+    def createPopUpMenu(self):
+        typeNode.PopUpMenuNode.createPopUpMenu(self)
+
+
+class ProcEtapeTreeItem(compooper.EtapeTreeItem):
+    itemNode=Node
+  
+import Accas
+treeitem = ProcEtapeTreeItem
+objet = Accas.PROC_ETAPE    
+
diff --git a/InterfaceQT/composimp.py b/InterfaceQT/composimp.py
new file mode 100644 (file)
index 0000000..3e636ef
--- /dev/null
@@ -0,0 +1,605 @@
+# -*- coding: utf-8 -*-
+# Modules Python
+import string,types,os
+
+from copy import copy,deepcopy
+import traceback
+from qt import *
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import browser
+from Noyau.N_CR   import justify_text
+    
+import prefs
+
+class Node(browser.JDCNode):    
+    def getPanel(self):
+        """        
+        """
+        klass = None 
+        
+        # Attention l ordre des if est important        
+        if self.item.wait_shell():
+            # l'objet attend un shell
+            # a priori jamais
+            print "Pb : Panneau Shell attendu"
+            print "Pb : Prevenir la maintenance"
+            klass = None #CS_pbruno todo
+            return None
+
+        # l'objet prend sa (ses) valeur(s) dans un ensemble discret de valeurs
+        if self.item.has_into():
+            if self.item.is_list() :
+                from monPlusieursIntoPanel import MonPlusieursIntoPanel
+                klass = MonPlusieursIntoPanel
+            else:
+                from monUniqueIntoPanel import MonUniqueIntoPanel
+                klass = MonUniqueIntoPanel
+
+        # l'objet prend une ou des valeurs a priori quelconques
+        else:
+            # on attend une liste de valeurs 
+            if self.item.is_list() :
+                # on attend une liste de SD
+                if self.item.wait_assd():
+                    from monPlusieursASSDPanel import MonPlusieursASSDPanel 
+                    klass = MonPlusieursASSDPanel
+                else:
+                    # on attend une liste de valeurs de types debase (entiers, réels,...)
+                    from monPlusieursBasePanel import MonPlusieursBasePanel 
+                    klass = MonPlusieursBasePanel
+            # on n'attend qu'une seule valeur 
+            else:
+                # on attend une SD ou un objet de la classe CO (qui n'existe pas encore)
+                if self.item.wait_co():
+                    if len(self.item.get_sd_avant_du_bon_type()) != 0 :
+                       from monUniqueSDCOIntoPanel import MonUniqueSDCOIntoPanel
+                       klass = MonUniqueSDCOIntoPanel
+                    else :
+                       from monUniqueSDCOPanel import MonUniqueSDCOPanel
+                       klass = MonUniqueSDCOPanel
+
+                # on attend une SD
+                elif self.item.wait_assd():
+                    if 'R' in self.item.GetType():
+                        from monUniqueASSDPanel import MonUniqueASSDReelPanel
+                        klass = MonUniqueASSDReelPanel
+                    else :
+                        from monUniqueASSDPanel import MonUniqueASSDPanel
+                        klass = MonUniqueASSDPanel
+
+                # on attend une valeur d'un type de base (entier,reel,...)
+                else:
+                        # on attend un complexe
+                     if self.item.wait_complex():
+                        from monUniqueCompPanel import MonUniqueCompPanel
+                        klass = MonUniqueCompPanel
+                     else:
+                        # on attend un entier, un réel ou une string
+                        from monUniqueBasePanel import MonUniqueBasePanel
+                        klass = MonUniqueBasePanel
+                        
+        # cas particulier des fonctions
+        genea = self.item.get_genealogie()
+        if "VALE" in genea or "VALE_C" in genea:
+            if "DEFI_FONCTION" in genea :
+                from monFonctionPanel import MonFonctionPanel
+                klass = MonFonctionPanel
+
+        if not klass:
+            return None
+        return klass( self, self.editor )
+        
+        
+    
+class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
+  itemNode=Node
+
+  def init(self) :
+      self.expandable = 0
+  
+
+  #-----------------------------------------------
+  #
+  # Methodes liees aux informations sur le Panel
+  # ou au mot-clef simple
+  #
+  #-----------------------------------------------
+  # is_list
+  # get_into                a priori inutile --> commentee
+  # has_into
+  # wait_into                a priori inutile --> commentee
+  # GetMinMax
+  # GetMultiplicite
+  # GetIntervalle
+  # GetListeValeurs
+  # get_liste_possible
+
+  def is_list(self):
+      """
+          Cette méthode indique si le mot cle simple attend une liste (valeur de retour 1)
+          ou s'il n'en attend pas (valeur de retour 0)
+
+          Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
+          Dans le cas sans validateur, l'information est donnée par l'attribut max
+          de la definition du mot cle.
+          Dans le cas avec validateur, il faut combiner l'information précédente avec
+          celle issue de l'appel de la méthode is_list sur le validateur.On utilisera
+          l'operateur ET pour effectuer cette combinaison (AndVal).
+      """
+      is_a_list=0
+      min,max = self.GetMinMax()
+      assert (min <= max)
+      if max > 1 :
+                is_a_list=1
+      # Dans le cas avec validateurs, pour que le mot cle soit considéré
+      # comme acceptant une liste, il faut que max soit supérieur a 1
+      # ET que la méthode is_list du validateur retourne 1. Dans les autres cas
+      # on retournera 0 (n'attend pas de liste)
+      if self.definition.validators :
+         is_a_list= self.definition.validators.is_list() * is_a_list
+      return is_a_list 
+
+  #def get_into(self,liste_courante=None):
+  #    """
+  #        Cette méthode retourne la liste de choix proposée par le mot cle. Si le mot cle ne propose
+  #        pas de liste de choix, la méthode retourne None.
+  #        L'argument d'entrée liste_courante, s'il est différent de None, donne la liste des choix déja
+  #        effectués par l'utilisateur. Dans ce cas, la méthode get_into doit calculer la liste des choix
+  #        en en tenant compte.
+  #        Cette méthode part du principe que la relation entre into du mot clé et les validateurs est
+  #        une relation de type ET (AndVal).
+  #    """
+  #    if not self.object.definition.validators :
+  #       return self.object.definition.into
+  #    else:
+  #       return self.object.definition.validators.get_into(liste_courante,self.definition.into)
+
+  def has_into(self):
+      """
+          Cette méthode indique si le mot cle simple propose un choix (valeur de retour 1)
+          ou s'il n'en propose pas (valeur de retour 0)
+
+          Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
+          Dans le cas sans validateur, l'information est donnée par l'attribut into
+          de la definition du mot cle.
+          Dans le cas avec validateurs, pour que le mot cle soit considéré
+          comme proposant un choix, il faut que into soit présent OU
+          que la méthode has_into du validateur retourne 1. Dans les autres cas
+          on retournera 0 (ne propose pas de choix)
+      """
+      has_an_into=0
+      if self.definition.into:
+               has_an_into=1
+      elif self.definition.validators :
+         has_an_into= self.definition.validators.has_into()
+      return has_an_into
+
+
+  def GetMinMax(self):
+      """ Retourne les valeurs min et max de la définition de object """
+      return self.object.get_min_max()
+
+  def GetMultiplicite(self):
+      """ A préciser.
+          Retourne la multiplicité des valeurs affectées a l'objet
+          représenté par l'item. Pour le moment retourne invariablement 1.
+      """
+      return 1
+
+  def GetIntervalle(self):
+      """ 
+           Retourne le domaine de valeur attendu par l'objet représenté 
+           par l'item.
+      """
+      return self.object.getintervalle()
+
+  def GetListeValeurs(self) :
+      """ Retourne la liste des valeurs de object """
+      valeurs=self.object.get_liste_valeurs()
+      try :
+        if "R" in self.object.definition.type:
+           clef=self.object.GetNomConcept()
+           if self.appli.dict_reels.has_key(clef):
+              if type(valeurs) == types.TupleType:
+                 valeurs_reelles=[]
+                 for val in valeurs :
+                    if self.appli.dict_reels[clef].has_key(val) : 
+                       valeurs_reelles.append(self.appli.dict_reels[clef][val])
+                    else :
+                       valeurs_reelles.append(val)
+              else :
+                 if self.appli.dict_reels[clef].has_key(valeurs):
+                    valeurs_reelles=self.appli.dict_reels[clef][valeurs]
+              valeurs=valeurs_reelles
+      except :
+        pass
+      return valeurs
+    
+  def get_liste_possible(self,listeActuelle=[]):
+      if hasattr(self.definition.validators,'into'):
+         valeurspossibles = self.definition.validators.into 
+      else:
+         valeurspossibles = self.get_definition().into
+
+      #On ne garde que les items valides
+      listevalideitem=[]
+      if type(valeurspossibles) in (types.ListType,types.TupleType) :
+         pass
+      else :
+         valeurspossibles=(valeurspossibles,)
+      for item in valeurspossibles:
+          encorevalide=self.valide_item(item)
+          if encorevalide :
+             listevalideitem.append(item)
+
+      #on ne garde que les choix possibles qui passent le test de valide_liste_partielle
+      listevalideliste=[]
+      for item in listevalideitem:
+          encorevalide=self.valide_liste_partielle(item,listeActuelle)
+          if encorevalide :
+              listevalideliste.append(item)
+      return listevalideliste
+
+  def get_liste_param_possible(self):
+      liste_param=[]
+      for param in self.object.jdc.params:
+          encorevalide=self.valide_item(param.valeur)
+          if encorevalide:
+             type_param=param.valeur.__class__.__name__
+             for typ in self.definition.type:
+                 if typ=='R':
+                     liste_param.append(param)
+                 if typ=='I' and type_param=='int':
+                     liste_param.append(param)
+                 if typ=='TXM' and type_param=='str':
+                     liste_param.append(repr(param))
+                 if ('grma' in repr(typ)) and type_param=='str':
+                     liste_param.append(param.nom)
+      return liste_param
+
+  #--------------------------------------------------
+  #
+  # Methodes liees a la validite des valeurs saisies
+  #
+  #---------------------------------------------------
+  # valide_item
+  # valide_liste_partielle
+  # valide_liste_complete
+  # info_erreur_item
+  # info_erreur_liste
+  # IsInIntervalle
+  # isvalid
+
+  def valide_item(self,item):
+      """
+        La validation est réalisée directement par l'objet
+      """
+      return self.object.valide_item(item)
+     
+  def valide_liste_partielle(self,item,listecourante):
+      #On protege la liste en entree en la copiant
+      valeur=listecourante[:]
+      valeur.append(item)
+      return self.object.valid_valeur_partielle(valeur)
+
+  def valide_liste_complete (self,valeur):
+      return self.object.valid_valeur(valeur)
+
+  def valide_val (self,valeur):
+      return self.object.valid_val(valeur)
+
+  def info_erreur_item(self) :
+      commentaire=""
+      if self.definition.validators :
+         commentaire=self.definition.validators.info_erreur_item()
+      return commentaire
+      
+  def aide(self) :
+      commentaire=""
+      if self.definition.validators :
+         commentaire=self.definition.validators.aide()
+      return commentaire
+
+  def info_erreur_liste(self) :
+      commentaire=""
+      if self.definition.validators :
+         commentaire=self.definition.validators.info_erreur_liste()
+      return commentaire
+
+  def IsInIntervalle(self,valeur):
+      """ 
+          Retourne 1 si la valeur est dans l'intervalle permis par
+          l'objet représenté par l'item.
+      """
+      return self.valide_item(valeur)
+
+  def isvalid(self):
+    valide=self.object.isvalid()
+    return valide
+
+  #--------------------------------------------------
+  #
+  # Autres ...
+  #
+  #---------------------------------------------------
+  # GetIconName
+  # GetText
+  # set_valeur_co
+  # get_sd_avant_du_bon_type
+  # delete_valeur_co
+
+
+  def GetIconName(self):
+    if self.isvalid():
+      return "ast-green-ball"
+    elif self.object.isoblig():
+      return "ast-red-ball"
+    else:
+      return "ast-yel-ball"
+
+  def GetText(self):
+    """
+    Classe SIMPTreeItem
+    Retourne le texte a afficher dans l'arbre représentant la valeur de l'objet
+    pointé par self 
+    """
+    text= self.object.GetText()
+    if text == None : text=""
+    return text
+    
+
+  def set_valeur_co(self,nom_co):
+      """
+      Affecte au MCS pointé par self l'objet de type CO et de nom nom_co
+      """
+      ret = self.object.set_valeur_co(nom_co)
+      #print "set_valeur_co",ret
+      return ret
+      
+  def get_sd_avant_du_bon_type(self):
+      """
+      Retourne la liste des noms des SD présentes avant l'étape qui contient
+      le MCS pointé par self et du type requis par ce MCS
+      """
+      a=self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type)
+      return a
+
+  def get_sd_avant_du_bon_type_pour_type_de_base(self):
+      a=self.object.jdc.get_sd_avant_du_bon_type_pour_type_de_base(self.object.etape,"LASSD")
+      return a
+
+
+
+
+  def delete_valeur_co(self,valeur=None):
+      """
+           Supprime la valeur du mot cle (de type CO)
+           il faut propager la destruction aux autres etapes
+      """
+      if not valeur : valeur=self.object.valeur
+      # XXX faut il vraiment appeler del_sdprod ???
+      #self.object.etape.parent.del_sdprod(valeur)
+      self.object.etape.parent.delete_concept(valeur)
+
+  #-----------------------------------------------
+  #
+  # Methodes liees au type de l objet attendu
+  #
+  #-----------------------------------------------
+  # wait_co 
+  # wait_geom
+  # wait_complex
+  # wait_reel
+  # wait_shell
+  # wait_assd
+  # GetType
+
+  def wait_co(self):
+      """
+      Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un objet de type ASSD qui n'existe pas encore (type CO()),
+      0 sinon
+      """
+      return self.object.wait_co()
+
+  def wait_geom(self):
+      """
+      Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un objet GEOM, 0 sinon
+      """
+      return self.object.wait_geom()
+    
+  def wait_complex(self):
+      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un complexe, 0 sinon """
+      if 'C' in self.object.definition.type:
+          return 1
+      else:
+          return 0
+
+  def wait_reel(self):
+      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un réel, 0 sinon """
+      if 'R' in self.object.definition.type:
+          return 1
+      else:
+          return 0
+        
+  def wait_shell(self):
+      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un shell, 0 sinon """
+      if 'shell' in self.object.definition.type:
+          return 1
+      else:
+          return 0
+
+  def wait_assd(self):
+      """Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un objet de type ASSD ou dérivé, 0 sinon """
+      return self.object.wait_assd()
+    
+  def wait_assd_or_type_base(self) :
+      boo=0
+      if len(self.object.definition.type) > 1 :
+         if self.wait_reel() :
+            boo = 1
+         if 'I' in self.object.definition.type :
+            boo = 1
+      return boo
+
+   
+  def GetType(self):
+      """ 
+          Retourne le type de valeur attendu par l'objet représenté par l'item.
+      """
+      return self.object.get_type()
+
+  #-----------------------------------------------------
+  #
+  # Methodes liees  a l evaluation de la valeur saisie
+  #
+  #-----------------------------------------------------
+  # eval_valeur
+  # eval_valeur_item
+  # is_CO
+  # traite_reel
+
+  def eval_valeur(self,valeur):
+      """ Lance l'interprétation de 'valeur' (chaine de caractéres) comme valeur de self :
+             - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...)
+             - retourne 'valeur' (chaine de caractéres) sinon
+      """
+      newvaleur=self.eval_val(valeur)
+      return newvaleur,1
+
+  def eval_valeur_BAK(self,valeur):
+      """ Lance l'interprétation de 'valeur' (chaine de caractéres) comme valeur
+      de l'objet pointé par self :
+        - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...)
+        - retourne 'valeur' (chaine de caractéres) sinon
+        - retourne None en cas d invalidite
+        - retourne invalide si 1 des objets du tuple l est
+      """
+      validite=1
+      if type(valeur) in (types.ListType,types.TupleType) :
+         valeurretour=[]
+         for item in valeur :
+             newvaleur,validiteitem=self.eval_valeur_item(item)
+             valeurretour.append(newvaleur)
+             if validiteitem == 0:
+                validite=0
+      else :
+         valeurretour,validite= self.eval_valeur_item(valeur)
+      if validite == 0 :
+         valeurretour = None
+      return valeurretour,validite
+
+  def eval_valeur_item(self,valeur):
+      """ Lance l'interprétation de 'valeur' qui doit ne pas etre un tuple 
+          - va retourner la valeur de retour et la validite
+            selon le type de l objet attendu
+          - traite les reels et les parametres 
+      """ 
+      #print "eval_valeur_item",valeur
+      if valeur==None or valeur == "" :
+         return None,0
+      validite=1
+      if self.wait_reel():
+             valeurinter = self.traite_reel(valeur)
+             if valeurinter != None :
+                valeurretour,validite= self.object.eval_valeur(valeurinter)
+             else:
+                valeurretour,validite= self.object.eval_valeur(valeur)
+      elif self.wait_geom():
+             valeurretour,validite = valeur,1
+      else :
+             valeurretour,validite= self.object.eval_valeur(valeur)
+      #print "eval_valeur_item",valeurretour,validite
+
+      if validite == 0:
+         if type(valeur) == types.StringType and self.object.wait_TXM():
+            essai_valeur="'" + valeur + "'"
+            valeurretour,validite= self.object.eval_valeur(essai_valeur)
+
+      if hasattr(valeurretour,'__class__'):
+         #if valeurretour.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'):
+         if valeurretour.__class__.__name__ in ('PARAMETRE',):
+            validite=1
+
+      #if self.wait_co():
+         # CCAR : il ne faut pas essayer de creer un concept
+         # il faut simplement en chercher un existant ce qui a du etre fait par self.object.eval_valeur(valeur)
+         #try:
+            #valeurretour=Accas.CO(valeur)
+         #except:
+            #valeurretour=None
+            #validite=0
+      # on est dans le cas ou on a évalué et ou on n'aurait pas du
+      if self.object.wait_TXM() :
+          if type(valeurretour) != types.StringType:
+             valeurretour=str(valeur)
+             validite=1
+      return valeurretour,validite
+      
+  def is_CO(self,valeur=None):
+      """
+         Indique si valeur est un concept produit de la macro
+         Cette méthode n'a de sens que pour un MCSIMP d'une MACRO
+         Si valeur vaut None on teste la valeur du mot cle
+      """
+      # Pour savoir si un concept est un nouveau concept de macro
+      # on regarde s'il est présent dans l'attribut sdprods de l'étape
+      # ou si son nom de classe est CO.
+      # Il faut faire les 2 tests car une macro non valide peut etre
+      # dans un etat pas tres catholique avec des CO pas encore types
+      # et donc pas dans sdprods (resultat d'une exception dans type_sdprod)
+      if not valeur:valeur=self.object.valeur
+      if valeur in self.object.etape.sdprods:return 1
+      if type(valeur) is not types.InstanceType:return 0
+      if valeur.__class__.__name__ == 'CO':return 1
+      return 0
+
+  def is_param(self,valeur) :
+      for param in self.jdc.params:
+          if (repr(param) == valeur):
+             return 1
+      return 0
+
+  def traite_reel(self,valeur):
+      """
+      Cette fonction a pour but de rajouter le '.' en fin de chaine pour un réel
+      ou de détecter si on fait référence a un concept produit par DEFI_VALEUR
+      ou un EVAL ...
+      """
+      valeur = string.strip(valeur)
+      liste_reels = self.get_sd_avant_du_bon_type()
+      if valeur in liste_reels:
+          return valeur
+      if len(valeur) >= 3 :
+          if valeur[0:4] == 'EVAL' :
+              # on a trouvé un EVAL --> on retourne directement la valeur
+              return valeur
+      if string.find(valeur,'.') == -1 :
+          # aucun '.' n'a été trouvé dans valeur --> on en rajoute un a la fin
+          if (self.is_param(valeur)):
+              return valeur
+          else:
+              if string.find(valeur,'e') != -1:
+                 # Notation scientifique ?
+                 try :
+                    r=eval(valeur)
+                    return valeur
+                 except :
+                    return None
+              else :
+                 return valeur+'.'
+      else:
+          return valeur
+        
+
+import Accas
+treeitem = SIMPTreeItem
+objet = Accas.MCSIMP
+
diff --git a/InterfaceQT/editor.py b/InterfaceQT/editor.py
new file mode 100644 (file)
index 0000000..3e28230
--- /dev/null
@@ -0,0 +1,740 @@
+#i -*- coding: iso-8859-1 -*-
+
+# Modules Python
+import types,sys,os
+import traceback
+from qt import *
+
+# Modules Eficas
+
+import convert,generator
+from Editeur     import session
+from Editeur     import comploader
+from Editeur     import Objecttreeitem
+import panelsQT
+import browser
+import readercata
+
+import prefs
+import qtCommun
+
+VERSION_EFICAS  = "EFICAS v1.14"
+
+
+# -------------------------- #
+#                            #
+class JDCEditor(QSplitter):
+#                            #
+# -------------------------- #
+    """
+       Editeur de jdc
+    """        
+
+    def __init__(self,fn = None, jdc = None ,parent=None, editor = None, units = None, include=0):          
+    #-------------------------------------------------------------------------------------------#
+
+        QSplitter.__init__(self, parent,'')
+        
+        VERSION_CODE    = session.d_env.cata
+        self.salome=0
+       self.parent         = parent
+        if parent != None :
+           self.salome         = self.parent.salome
+        self.appliEficas = self.parent.appliEficas
+        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.jdc_openturn_xml=""
+       self.jdc_openturn_std=""
+        self.ihm="QT"
+        
+        from Editeur import configuration
+        self.CONFIGURATION = self.appliEficas.CONFIGURATION
+        self.CONFIGStyle = self.appliEficas.CONFIGStyle
+        self.test=0
+        self.sb = None
+        if hasattr(qApp.mainWidget(),"statusBar"):
+            self.sb = qApp.mainWidget().statusBar()
+      
+        self.vm             = parent    #viewManager
+        self.fileName       = fn
+        self.fileInfo       = None
+        self.lastModified   = 0
+        self.jdc            = jdc
+        
+        self.fichier=None
+        self.panel_courant=None    
+        self.node_selected = None
+        self.modified   = False
+        self.isReadOnly = False
+        
+        if not hasattr( readercata, 'reader' ) :
+            readercata.reader = readercata.READERCATA( self, self )
+        self.readercata = readercata.reader
+        
+        #------- construction du jdc --------------
+
+        jdc_item = None
+                        
+        nouveau=0
+        if self.fileName is not None:        #  fichier jdc fourni
+            self.fileInfo = QFileInfo(self.fileName)
+            self.fileInfo.setCaching(0)
+            if editor is None:
+                self.jdc = self.readFile(self.fileName)
+                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 :
+                   self.jdc = self._newJDC(units=units)
+                else :
+                   self.jdc = self._newJDCInclude(units=units)
+                nouveau=1
+        
+        if self.jdc:            
+            self.jdc.appli = self
+            txt_exception  = None
+            if not jdc:
+                self.jdc.analyse()            
+                txt_exception = self.jdc.cr.get_mess_exception()            
+            if txt_exception:
+                self.jdc = None
+                qApp.restoreOverrideCursor()
+                self.affiche_infos("Erreur fatale au chargement de %s" %fn)                
+                QMessageBox.critical( self, "Erreur fatale au chargement d'un fichier", txt_exception)                
+            else:
+                comploader.charger_composants("QT")
+                jdc_item=Objecttreeitem.make_objecttreeitem( self, "nom", self.jdc )
+
+                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._updateReadOnly(1)
+        
+        # Set the editors size if it is too big for the parent.
+        if parent is not None:
+            req = self.size()
+            bnd = req.boundedTo(parent.size())
+        
+            if bnd.width() < req.width() or bnd.height() < req.height():
+                self.resize(bnd)
+        
+        self.panel = QWidget(self)        
+        #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.fileName is None:
+            return
+        readOnly = not QFileInfo(self.fileName).isWritable() and 1 or 0
+        if not bForce and (readOnly == self.isReadOnly):
+            return
+        cap = self.fileName
+        if readOnly:
+            cap = "%s (ro)" % unicode(cap)
+        self.isReadOnly = readOnly
+        self.setCaption(cap)
+        self.emit(PYSIGNAL('captionChanged'), (cap, self))
+        
+    #--------------------------------#
+    def _newJDC( self ,units = None):        
+    #--------------------------------#
+        """
+        Initialise un nouveau JDC vierge
+        """
+        CONTEXT.unset_current_step()        
+        jdc=self.readercata.cata[0].JdC( procedure="",
+                                         appli=self,
+                                         cata=self.readercata.cata,
+                                         cata_ord_dico=self.readercata.cata_ordonne_dico,
+                                         rep_mat=self.CONFIGURATION.rep_mat
+                                        )                         
+        if units is not None:
+           jdc.recorded_units=units
+           jdc.old_recorded_units=units
+        jdc.analyse()        
+        return jdc
+        
+    #--------------------------------#
+    def _newJDCInclude( self ,units = None):        
+    #--------------------------------#
+        """
+        Initialise un nouveau JDC vierge
+        """
+        import Extensions.jdc_include
+        JdC_aux=Extensions.jdc_include.JdC_include
+        CONTEXT.unset_current_step()        
+
+        jaux=self.readercata.cata[0].JdC( procedure="",
+                               appli=self,
+                               cata=self.readercata.cata,
+                               cata_ord_dico=self.readercata.cata_ordonne_dico,
+                               rep_mat=self.CONFIGURATION.rep_mat,
+                              )
+        jaux.analyse()
+
+        J=JdC_aux( procedure="",
+                   appli=self,
+                   cata=self.readercata.cata,
+                   cata_ord_dico=self.readercata.cata_ordonne_dico,
+                   jdc_pere=jaux,
+                   rep_mat=self.CONFIGURATION.rep_mat,
+                   )
+        J.analyse()
+        if units is not None:
+           J.recorded_units=units
+           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):
+    #-----------------------#
+        """
+        Public slot to read the text from a file.
+        
+        @param fn filename to read from (string or QString)
+        """        
+        fn = unicode(fn)        
+            
+        qApp.setOverrideCursor(Qt.waitCursor)
+                        
+        # ------------------------------------------------------------------------------------
+        #                         charge le JDC
+        # ------------------------------------------------------------------------------------      
+        
+        jdcName=os.path.basename(fn)
+        # Il faut convertir le contenu du fichier en fonction du format
+        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)
+             if not p.cr.estvide():                 
+                self.affiche_infos("Erreur à la conversion")
+        
+        CONTEXT.unset_current_step()
+        ##   os.chdir(self.initialdir)
+        jdc=self.readercata.cata[0].JdC(procedure=text,
+                                    appli=self,
+                                    cata=self.readercata.cata,
+                                    cata_ord_dico=self.readercata.cata_ordonne_dico,
+                                    nom=jdcName,
+                                    rep_mat=self.CONFIGURATION.rep_mat
+                                   )
+        # ----------------------------------------------------
+        #      charge le JDC fin
+        # ----------------------------------------------------
+        self.modified = False
+                        
+        qApp.restoreOverrideCursor()        
+        if self.fileInfo!= None : 
+           self.lastModified = self.fileInfo.lastModified()
+        else :
+           self.lastModified = 1
+        return jdc
+        
+    #----------------------------------------------#
+    def _viewText(self, txt, caption = "FILE_VIEWER"):    
+    #----------------------------------------------#
+        w = qtCommun.ViewText( self.parent )
+        w.setCaption( caption )
+        w.setText(txt)
+        w.show()
+        
+    #-----------------------#
+    def viewJdcSource(self):        
+    #-----------------------#
+        format = self.format_fichier
+        f=open(self.fileName,'r')
+        texteSource=f.read()
+        f.close()
+        self._viewText(texteSource, "JDC_SOURCE")
+                
+    #-----------------------#
+    def viewJdcPy(self):        
+    #-----------------------#
+        format = self.format_fichier
+        strSource = str( self.get_text_JDC(format) )       
+        self._viewText(strSource, "JDC_RESULTAT")
+                
+    #-----------------------#
+    def viewJdcRapport(self):
+    #-----------------------#
+        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.fileName = unicode(fn)
+        self.setCaption(self.fileName)
+        
+        if self.fileInfo is None:
+            self.fileInfo = QFileInfo(self.fileName)
+            self.fileInfo.setCaching(0)
+        
+        self.lastModified = self.fileInfo.lastModified()
+        self.vm.setEditorName(self, self.fileName)
+        self._updateReadOnly(1)        
+
+    #-----------------------#
+    def handleNewView(self):
+    #-----------------------#
+        """
+        Private slot to create a new view to an open document.
+        """
+        self.vm.newEditorView(self.fileName, 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.salome :
+          if not hasattr(self.appliEficas,'MessageLabel') :
+              self.appliEficas.leLayout=QDockWindow(self.appliEficas)
+             self.appliEficas.MessageLabel = QLabel(self.appliEficas.leLayout,"MessageLabel")
+             self.appliEficas.MessageLabel.setAlignment(Qt.AlignBottom)
+              self.appliEficas.leLayout.setWidget(self.appliEficas.MessageLabel)
+              self.appliEficas.moveDockWindow(self.appliEficas.leLayout,Qt.DockBottom)
+          self.appliEficas.MessageLabel.setText(message)
+          self.appliEficas.MessageLabel.show()
+          self.appliEficas.leLayout.show()
+        if self.sb:
+           self.sb.message(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()
+            #print self.panel.__class__
+        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 
+          si un JDC doit etre sauvegarde avant destruction ou non
+      """
+      self.modified = True
+      self.emit(PYSIGNAL('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.parent.edit="couper"
+      self.parent.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.parent.edit="copier"
+      self.parent.noeud_a_editer = self.node_selected
+    
+    #-------------------#
+    def paste(self):
+    #-------------------#
+      """
+      Lance la copie de l'objet place dans self.parent.noeud_a_editer
+      Ne permet que la copie d'objets de type Commande ou MCF
+      """
+      try:
+         child=self.parent.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.parent.edit == "couper":
+         #nom = self.parent.noeud_a_editer.item.object.sd.nom
+         item=self.parent.noeud_a_editer.item
+         self.parent.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.parent.edit="copier"
+          
+    #---------------------#
+    def getFileName(self):
+    #---------------------#
+      return self.fileName
+      
+    #---------------------------#
+    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) :
+    #------------------------------------ 
+       base=fn[:fn.rfind(".")]
+       fileXML=base + '.xml'
+       fileSTD=base + '_std.py'
+        self.writeFile(fileXML,self.jdc_openturn_xml)
+        self.writeFile(fileSTD,self.jdc_openturn_std)
+
+
+    #-----------------------------#
+    def get_text_JDC(self,format):
+    #-----------------------------#
+      if generator.plugins.has_key(format):
+         # Le generateur existe on l'utilise
+         g=generator.plugins[format]()
+         jdc_formate=g.gener(self.jdc,format='beautifie')
+        if format == "openturns" :
+           self.jdc_openturn_xml=g.getOpenturnsXML()
+           self.jdc_openturn_std=g.getOpenturnsSTD()
+         if not g.cr.estvide():            
+            self.affiche_infos("Erreur à la generation")
+            QMessageBox.critical( self, "Erreur a la generation","EFICAS ne sait pas convertir ce JDC")
+            return
+         else:
+            return jdc_formate
+      else:         
+         # Il n'existe pas c'est une erreur
+         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.fileName is None:
+            if path is None and self.fileName is not None:
+                path = os.path.dirname(unicode(self.fileName))
+            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.fileName
+        
+        if self.writeFile(fn):
+            self.fileName = fn
+            self.modified  = False                        
+            self.setCaption(self.fileName)                
+            if self.fileInfo is None or saveas:
+                self.fileInfo = QFileInfo(self.fileName)
+                self.fileInfo.setCaching(0)
+                self.emit(PYSIGNAL('editorRenamed'), (self.fileName,))
+            self.lastModified = self.fileInfo.lastModified()
+            if newName is not None:
+                self.vm.addToRecentList(newName)
+            self.emit(PYSIGNAL('editorSaved'), (self.fileName,))
+            self.stop_modif()            
+           if self.code == "OPENTURNS" :
+              self.writeFilesOpenturns(fn)
+            if self.salome : 
+               self.parent.appli.addJdcInSalome( self.fileName)
+               if self.code == 'ASTER':
+                  self.parent.appli.createOrUpdateMesh(self)
+               #PN ; TODO
+
+
+            return (1, self.fileName)
+        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
+
+    #CS_pbruno note: fait implicitement des trucs ces imports (grr)
+    import styles
+    import import_code
+    import session
+
+    # Analyse des arguments de la ligne de commande
+    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)
+    
diff --git a/InterfaceQT/eficas_go.py b/InterfaceQT/eficas_go.py
new file mode 100644 (file)
index 0000000..daaf8bf
--- /dev/null
@@ -0,0 +1,61 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce module permet de lancer l'application EFICAS en affichant
+    un ecran Splash pour faire patienter l'utilisateur
+"""
+# Modules Python
+import sys
+from qt import *
+
+# Modules Eficas
+import prefs
+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
+
+from Editeur import import_code
+from Editeur import session
+
+def lance_eficas(code=None,fichier=None):
+    """
+        Lance l'appli EFICAS
+    """
+    # Analyse des arguments de la ligne de commande
+    if code !=None : prefs.code=code
+    import qtEficas
+    options=session.parse(sys.argv)
+    code=options.code
+
+    app = QApplication(sys.argv)
+    mw = qtEficas.Appli(code=code)
+    app.setMainWidget(mw)
+    app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
+    mw.show()
+    mw.ouvreFichiers()
+    res = app.exec_loop()
+    sys.exit(res)
+
+
diff --git a/InterfaceQT/gereTraduction.py b/InterfaceQT/gereTraduction.py
new file mode 100644 (file)
index 0000000..8756200
--- /dev/null
@@ -0,0 +1,51 @@
+from qt import *
+import os
+
+
+def traduction(directPath,editor,version):
+    if version == "V7V8" : 
+       from Traducteur import traduitV7V8 
+       suffixe="v8.comm"
+    if version == "V8V9" : 
+       from Traducteur import traduitV8V9 
+       suffixe="v9.comm"
+    fn = QFileDialog.getOpenFileName( QString(directPath) , "")
+
+    FichieraTraduire=str(fn)
+    if (FichieraTraduire == "" or FichieraTraduire == () ) : return
+    i=FichieraTraduire.rfind(".")
+    Feuille=FichieraTraduire[0:i]
+    FichierTraduit=Feuille+suffixe
+
+    i=Feuille.rfind("/")
+    directLog=Feuille[0:i]
+    log=directLog+"/convert.log"
+    os.system("rm -rf "+log)
+    os.system("rm -rf "+FichierTraduit)
+
+    qApp.setOverrideCursor(QCursor(Qt.WaitCursor))
+    if version == "V7V8" : traduitV7V8.traduc(FichieraTraduire,FichierTraduit,log)
+    if version == "V8V9" : traduitV8V9.traduc(FichieraTraduire,FichierTraduit,log)
+    qApp.setOverrideCursor(QCursor(Qt.ArrowCursor))
+
+    Entete="Fichier Traduit : "+FichierTraduit +"\n\n"
+    if  os.stat(log)[6] != 0L :
+        f=open(log)
+        texte= f.read()
+        f.close()
+    else :
+       texte = Entete  
+       commande="diff "+FichieraTraduire+" "+FichierTraduit+" >/dev/null"
+       try :
+         if os.system(commande) == 0 :
+            texte = texte + "Pas de difference entre le fichier origine et le fichier traduit"
+       except :
+         pass
+
+    from desVisu import DVisu
+    titre = "conversion de "+ FichieraTraduire
+    monVisu=DVisu(parent=editor,fl=Qt.WType_Dialog)
+    monVisu.setCaption(titre)
+    monVisu.TB.setText(texte)
+    monVisu.show()
+
diff --git a/InterfaceQT/monChoixCata.py b/InterfaceQT/monChoixCata.py
new file mode 100644 (file)
index 0000000..f21aaa1
--- /dev/null
@@ -0,0 +1,57 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desChoixCata import DChoixCata
+from qt import *
+
+
+# Import des panels
+
+class MonChoixCata(DChoixCata):
+  """
+  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, parent = None,name = None,fl = 0):
+      DChoixCata.__init__(self,parent,name,fl)
+      self.listeCata=listeCata
+      self.readercata=readercata
+      for cata in self.listeCata :
+               self.CBChoixCata.insertItem(cata,0)
+      lab  = QString(repr(len(listeCata)))
+      lab += QString(" versions du catalogue sont disponibles")
+      self.TLNb.setText(lab)
+      self.readercata.version_cata=self.CBChoixCata.currentText()
+
+  def BSupPressed(self):
+      QTPanel.BSupPressed(self)
+
+  def CataChoisi(self):
+      self.readercata.version_cata=self.CBChoixCata.currentText()
+
+  def BOkPressed(self):
+      QDialog.accept(self)
+
+  def BCancelPressed(self):
+      QDialog.reject(self)
diff --git a/InterfaceQT/monCommandePanel.py b/InterfaceQT/monCommandePanel.py
new file mode 100644 (file)
index 0000000..16962da
--- /dev/null
@@ -0,0 +1,72 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desCommande import DComm
+from qtCommun    import QTPanel
+from qtCommun    import QTPanelTBW1
+from qtCommun    import QTPanelTBW2
+from qtCommun    import QTPanelTBW3
+from qt          import *
+
+
+# Import des panels
+
+class MonCommandePanel(DComm,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):
+        DComm.__init__(self,parent,name,fl)
+        QTPanel.__init__(self,node,parent)
+        QTPanelTBW1.__init__(self,node,parent)
+        QTPanelTBW2.__init__(self,node,parent)
+        QTPanelTBW3.__init__(self,node,parent)
+
+  def BSupPressed(self):
+      QTPanel.BSupPressed(self)
+
+  def BOkPressed(self):
+      QTPanel.BOkPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(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/InterfaceQT/monCommentairePanel.py b/InterfaceQT/monCommentairePanel.py
new file mode 100644 (file)
index 0000000..4a983a4
--- /dev/null
@@ -0,0 +1,78 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+
+from qt import *
+
+from desCommentaire import DComment
+from qtCommun      import QTPanel
+from qtCommun      import QTPanelTBW2
+
+import prefs
+
+# Import des panels
+
+class MonCommentairePanel(DComment,QTPanelTBW2,QTPanel):
+  """
+  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):
+        DComment.__init__(self,parent,name,fl)
+        QTPanel.__init__(self,node,parent)
+        QTPanelTBW2.__init__(self,node,parent)
+        self.RemplitPanel()
+
+  def RemplitPanel(self):
+        texte=self.node.item.get_valeur()
+        self.textCommentaire.setText(texte)
+
+  def TexteCommentaireEntre(self):
+        texte=self.textCommentaire.text().latin1()
+        self.editor.init_modif()
+        self.node.item.set_valeur(texte)
+        self.node.onValid()
+
+  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 BNextPressed(self) :
+      QTPanelTBW2.BNextPressed(self)
+
+  def BOkPressed(self):
+      QTPanel.BOkPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
diff --git a/InterfaceQT/monFonctionPanel.py b/InterfaceQT/monFonctionPanel.py
new file mode 100644 (file)
index 0000000..b69d381
--- /dev/null
@@ -0,0 +1,141 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from qt import * 
+
+# Modules Eficas
+from qtSaisie      import SaisieValeur
+from monPlusieursBasePanel import MonPlusieursBasePanel
+
+# Import des panels
+
+class MonFonctionPanel(MonPlusieursBasePanel):
+  """
+  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):
+        self.node=node
+        self.SetNbValeurs()
+        MonPlusieursBasePanel.__init__(self,node,parent,name,fl)
+
+  def SetNbValeurs(self):
+        genea=self.node.item.get_genealogie()
+        if "VALE" in genea:
+            self.nbValeurs=2
+        if "VALE_C" in genea:
+            self.nbValeurs=3
+
+
+  def DecoupeListeValeurs(self,liste):
+        #decoupe la liste des valeurs en n ( les x puis les y)
+        l_valeurs=[]
+        if (len(liste)% self.nbValeurs != 0):
+            message="La cardinalité n'est pas correcte, la dernière valeur est ignorée"
+            #self.Commentaire.setText(QString(commentaire)) 
+            self.editor.affiche_infos(commentaire)
+        for i in range(len(liste)/ self.nbValeurs) :
+            if (self.nbValeurs==2):
+              t=(liste[i*self.nbValeurs], liste[i*self.nbValeurs+1])
+            else:
+              t=(liste[i*self.nbValeurs], liste[i*self.nbValeurs+1], liste[i*self.nbValeurs+2])
+            l_valeurs.append(t)
+        return l_valeurs
+
+  def BuildLBValeurs(self):
+        self.LBValeurs.clear()
+        listeValeurs=self.node.item.GetListeValeurs()
+        for valeur in self.DecoupeListeValeurs(listeValeurs):
+            self.LBValeurs.insertItem(str(valeur))
+
+  def  Ajout1Valeur(self,liste=[]):
+        # Pour être appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur)
+        if liste == [] :
+           liste,validite=SaisieValeur.TraiteLEValeur(self)
+        else :
+           validite=1
+        if validite == 0 : return
+        if liste ==[]    : return
+
+        if len(liste) != self.nbValeurs :
+            commentaire  = QString(str(liste)) 
+            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
+        indexListe=index*self.nbValeurs
+        if index == 0 : 
+           index = -1
+           indexListe=len(self.listeValeursCourantes)
+        listeVal=[]
+        for valeur in self.listeValeursCourantes :
+                listeVal.append(valeur)
+        validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal)
+        self.Commentaire.setText(comm2)
+        if not validite :
+                self.editor.affiche_infos(comm)
+        else:
+           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)
+               index=index+1
+           self.listeValeursCourantes=l1+listeRetour+l3
+
+
+  def AjoutNValeur(self,liste) :
+        if len(liste)%self.nbValeurs != 0 :
+           texte="Nombre de valeur incorrecte"
+           #self.Commentaire.setText(texte)
+           self.editor.affiche_infos(texte)
+           return
+        listeDecoupee=self.DecoupeListeValeurs(liste)
+        for vals in listeDecoupee :
+            self.Ajout1Valeur(vals)
+           
+
+  def Sup1Valeur(self):
+        index=self.LBValeurs.currentItem()
+        self.LBValeurs.removeItem(self.LBValeurs.currentItem())
+        listeVal=[]
+        i=0
+        for valeur in self.listeValeursCourantes :
+                if self.nbValeurs == 2 :
+                   if (i != index*2 and i != index*2+1 ) : listeVal.append(valeur)
+                elif self.nbValeurs == 3 :
+                   if (i != index*3 and i != index*3+1 and i != index*3 +2) : listeVal.append(valeur)
+                else :
+                   print "aiiiiiiiiiiiiiiiiiieeee"
+                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/InterfaceQT/monFormulePanel.py b/InterfaceQT/monFormulePanel.py
new file mode 100644 (file)
index 0000000..e691082
--- /dev/null
@@ -0,0 +1,147 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desFormule import DFormule
+from qtCommun import QTPanel
+from qtCommun import QTPanelTBW2
+from qt import *
+
+
+# Import des panels
+
+class MonFormulePanel(DFormule,QTPanelTBW2):
+  """
+  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):
+        DFormule.__init__(self,parent,name,fl)
+        QTPanel.__init__(self,node,parent)
+        QTPanelTBW2.__init__(self,node,parent)
+        self.LENomFormule.setText(node.item.get_nom())
+        self.LECorpsFormule.setText(node.item.get_corps())
+        texte_args=""
+        if node.item.get_args() != None :
+            for i in node.item.get_args() :
+                if texte_args != "" :
+                   texte_args = texte_args +","
+                texte_args=texte_args + i
+        self.LENomsArgs.setText(texte_args)
+
+        
+        self.parent=parent
+
+  def BSupPressed(self):
+      QTPanel.BSupPressed(self)
+
+  def BOkPressed(self):
+      QTPanel.BOkPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(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 NomFormuleSaisi(self):
+      nomFormule = self.LENomFormule.text().latin1()
+      if nomFormule == '' : return
+      test,erreur = self.node.item.verif_nom(nomFormule)
+      if test :
+         commentaire=nomFormule+" est un nom valide pour une FORMULE"
+      else :
+         commentaire=nomFormule+" n'est pas un nom valide pour une FORMULE"
+      self.editor.affiche_infos(commentaire) 
+
+  def argsSaisis(self):
+      arguments = self.LENomsArgs.text().latin1()
+      if arguments == '' : return
+
+      test,erreur = self.node.item.verif_arguments(arguments)
+      if test:
+         commentaire="Argument(s) valide(s) pour une FORMULE"
+      else:
+         commentaire="Argument(s) invalide(s) pour une FORMULE"
+      self.editor.affiche_infos(commentaire) 
+
+  def FormuleSaisie(self):
+      nomFormule = self.LENomFormule.text().latin1()
+      arguments  = self.LENomsArgs.text().latin1()
+      expression = self.LECorpsFormule.text().latin1()
+      if expression == '' : return
+      test,erreur = self.node.item.verif_formule_python((nomFormule,"REEL",arguments,expression))
+
+      if test:
+         commentaire="Corps de FORMULE valide"
+      else:
+         commentaire="Corps de FORMULE invalide"
+      self.editor.affiche_infos(commentaire) 
+
+
+  def BOkPressedFormule(self):
+      if self.parent.modified == 'n' : self.parent.init_modif()
+
+      nomFormule = self.LENomFormule.text().latin1()
+      test,erreur = self.node.item.verif_nom(nomFormule)
+      if not test :
+         self.editor.affiche_infos(erreur)
+         return
+
+      arguments  = self.LENomsArgs.text().latin1()
+      test,erreur = self.node.item.verif_arguments(arguments)
+      if not test :
+         self.editor.affiche_infos(erreur)
+         return
+
+      expression = self.LECorpsFormule.text().latin1()
+      test,erreur = self.node.item.verif_formule_python((nomFormule,"REEL",arguments,expression))
+      if not test :
+         self.editor.affiche_infos(erreur)
+         return
+
+      test=self.node.item.object.update_formule_python(formule=(nomFormule,"REEL",arguments,expression))
+      test,erreur = self.node.item.save_formule(nomFormule,"REEL",arguments,expression)
+      if test :
+         #self.node.update_texte()
+         #self.node.update_label()
+         #self.node.update_node()
+         self.node.onValid()
+         self.node.update_valid()
+         commentaire = "Formule modifiée"
+      else:
+         commentaire ="Formule incorrecte : " + erreur 
+      self.editor.init_modif()
+      self.editor.affiche_infos(commentaire)
diff --git a/InterfaceQT/monIncludePanel.py b/InterfaceQT/monIncludePanel.py
new file mode 100644 (file)
index 0000000..b2e925b
--- /dev/null
@@ -0,0 +1,154 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+import os,traceback,sys
+from qt import *
+from desMacro import DMacro
+
+from monMacroPanel import MonMacroPanel
+import convert
+
+
+# Import des panels
+
+class MonIncludePanel(MonMacroPanel):
+  """
+  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)
+        #Version TK ??
+        #if not hasattr(self.node.item.object,'fichier_ini'):
+        if not hasattr(self.node.item.object,'fichier_unite'):
+           self.ajoutPageBad()
+        else:
+           self.ajoutPageOk()
+
+  def ajoutPageOk(self):
+        self.TabPage = QWidget(self.TWChoix,"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,"TabPage")
+       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)
+
+
+  def BBrowsePressed(self):
+      self.node.makeEdit()
+
+  def BOkIncPressed (self):
+      self.LENomFichReturnPressed()
+
+  def LENomFichReturnPressed(self):
+        nomFichier=str(self.LENomFichier.text())
+        if not os.path.isfile(nomFichier) :
+           commentaire = "Fichier introuvable"
+           self.Commentaire.setText(QString(commentaire))
+           self.editor.affiche_infos(commentaire)
+           return
+
+        text=self.convert_file(nomFichier)
+
+        # Si probleme a la lecture-conversion on arrete le traitement
+        if not text:
+           return
+
+        try :
+           self.node.item.object.change_fichier_init(nomFichier,text)
+           commentaire = "Fichier modifie  : " + self.node.item.get_nom()
+           self.Commentaire.setText(QString(commentaire))
+           self.editor.affiche_infos(commentaire)
+        except: 
+           l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
+           QMessageBox.critical( self, "Erreur fatale au chargement du fichier Include", l[0])
+           commentaire = "Fichier invalide" 
+           self.Commentaire.setText(QString(commentaire))
+           self.editor.affiche_infos(commentaire)
+           return
+
+
+  def convert_file(self,file):
+       """
+         Methode pour convertir le fichier file dans le format courant
+       """
+       format=self.editor.format_fichier
+       text=None
+       if convert.plugins.has_key(format):
+          # Le convertisseur existe on l'utilise
+          p=convert.plugins[format]()
+          p.readfile(file)
+          text=p.convert('execnoparseur')
+       else :
+            commentaire = "Impossible de lire le fichier : Format inconnu"
+            self.Commentaire.setText(QString(commentaire))
+            self.editor.affiche_infos(commentaire)
+       return text
+
+
+  def BChangeFilePressed(self):
+      userDir=os.path.expanduser("~/Eficas_install/")
+      fn = QFileDialog.getOpenFileName(userDir,
+                        self.trUtf8('All Files (*);;''JDC Files (*.comm);;'), self.editor)
+
+      if fn.isNull():
+         return
+
+      fn = os.path.abspath((unicode(fn)))
+      self.LENomFichier.setText(fn)
+      self.LENomFichReturnPressed()
diff --git a/InterfaceQT/monListeParamPanel.py b/InterfaceQT/monListeParamPanel.py
new file mode 100644 (file)
index 0000000..68c4bad
--- /dev/null
@@ -0,0 +1,48 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desListeParam import DLisParam
+from qt import *
+
+# Import des panels
+
+class MonListeParamPanel(DLisParam):
+  """
+  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,liste,parent,name = None,fl = 0):
+        self.panel=parent
+        DLisParam.__init__(self,parent,name,Qt.WType_Dialog)
+        self.liste=liste
+        self.initVal()
+
+  def initVal(self):
+        self.LBParam.clear()
+        for param in self.liste :
+            self.LBParam.insertItem(QString(repr(param)))
+
+  def LBParamItemPressed(self):
+        i=self.LBParam.index(self.LBParam.selectedItem())
+        self.panel.Ajout1Valeur(self.liste[i])
diff --git a/InterfaceQT/monMCFactPanel.py b/InterfaceQT/monMCFactPanel.py
new file mode 100644 (file)
index 0000000..fc80693
--- /dev/null
@@ -0,0 +1,51 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desMCFact import DMCFact
+from qtCommun import QTPanel
+from qtCommun import QTPanelTBW1
+from qt import *
+
+
+# Import des panels
+
+class MonMCFactPanel(DMCFact,QTPanelTBW1):
+  """
+  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):
+        DMCFact.__init__(self,parent,name,fl)
+        QTPanel.__init__(self,node,parent)
+        QTPanelTBW1.__init__(self,node,parent)
+
+  def BSupPressed(self):
+      QTPanel.BSupPressed(self)
+
+  def BOkPressed(self):
+      QTPanel.BOkPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
diff --git a/InterfaceQT/monMCListAjoutPanel.py b/InterfaceQT/monMCListAjoutPanel.py
new file mode 100644 (file)
index 0000000..8cb0eb3
--- /dev/null
@@ -0,0 +1,52 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desMCListAjout import DMCListAjout
+from qtCommun import QTPanel
+from qt import *
+
+
+# Import des panels
+
+class MonMCListAjoutPanel(DMCListAjout,QTPanel):
+  """
+  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):
+        DMCListAjout.__init__(self,parent,name,fl)
+        QTPanel.__init__(self,node,parent)
+        monMCFact=self.node.item.get_nom()
+        self.MCFacteur.setText(QString(monMCFact))
+        self.MCFacteur.setAlignment(Qt.AlignHCenter)
+
+  def BSupPressed(self):
+      QTPanel.BSupPressed(self)
+
+  def BAjoutClicked(self):
+        self.node.parent.append_child(self.node.item.get_nom())
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
diff --git a/InterfaceQT/monMacroPanel.py b/InterfaceQT/monMacroPanel.py
new file mode 100644 (file)
index 0000000..bb2d803
--- /dev/null
@@ -0,0 +1,76 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desMacro import DMacro
+from qtCommun import QTPanel
+from qtCommun import QTPanelTBW1
+from qtCommun import QTPanelTBW2
+from qtCommun import QTPanelTBW3
+from qt import *
+
+
+# Import des panels
+
+class MonMacroPanel(DMacro,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):
+        DMacro.__init__(self,parent,name,fl)
+        QTPanel.__init__(self,node,parent)
+        QTPanelTBW2.__init__(self,node,parent)
+        QTPanelTBW1.__init__(self,node,parent)
+        if self.node.item.object.get_type_produit() != None :
+           QTPanelTBW3.__init__(self,node,parent)
+        else :
+           self.TWChoix.removePage(self.TWChoix.page(2))
+           
+  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/InterfaceQT/monOptionsEditeur.py b/InterfaceQT/monOptionsEditeur.py
new file mode 100644 (file)
index 0000000..89c4510
--- /dev/null
@@ -0,0 +1,145 @@
+# -*- coding: utf-8 -*-
+
+from OptionsEditeur import desOptions
+from qt import *
+import os, re
+
+class Options(desOptions):
+   def __init__(self,parent = None,name = None,modal = 0,fl = 0,configuration=None):
+       desOptions.__init__(self,parent,name,modal,fl)
+       self.configuration=configuration
+       self.viewMan=parent
+       self.dVersion={}
+       self.dRepMat={}
+       self.dRepCat={}
+       self.initAll()
+  
+
+   def initAll(self):
+       self.CBVersions.clear()
+       for item in self.configuration.catalogues :
+           try :
+              (code,version,cata,format,defaut)=item
+           except :
+              (code,version,cata,format)=item
+           self.dVersion[version]=(item)
+           self.dRepCat[version]=str(cata)
+           self.CBVersions.insertItem(QString(version),0)
+
+           codeSansPoint=re.sub("\.","",version)
+           chaine="rep_mat_"+codeSansPoint
+           if hasattr(self.configuration,chaine):
+              rep_mat=getattr(self.configuration,chaine)
+              self.dRepMat[version]=str(rep_mat)
+           else :
+              self.dRepMat[version]=""
+       self.LERepMat.setText(self.dRepMat[version])
+       self.LERepCata.setText(self.dRepCat[version])
+       if hasattr(self.configuration,"path_doc"):
+          self.LERepDoc.setText(self.configuration.path_doc)
+
+        
+   def VersionChoisie(self):
+       version=str(self.CBVersions.currentText())
+       if self.dRepMat.has_key(version):
+          self.LERepMat.setText(self.dRepMat[version])
+       if self.dRepCat.has_key(version):
+          self.LERepCata.setText(self.dRepCat[version])
+
+   def BokClicked(self):
+       version=str(self.CBVersions.currentText())
+       if self.LERepCata.text() == "" :
+          QMessageBox.critical( self, "Champ non rempli","Le champs Catalogue  doit etre rempli" )
+          return
+
+       self.dRepMat[version]=self.LERepMat.text()
+       if str(self.dRepMat[version] != "") != "" :
+          codeSansPoint=re.sub("\.","",version)
+          chaine="rep_mat_"+codeSansPoint
+          setattr(self.configuration,chaine,self.dRepMat[version])
+
+       self.dRepCat[version]=str(self.LERepCata.text())
+       if version in self.dVersion.keys():
+          item=list(self.dVersion[version])
+          item[2]=self.dRepCat[version]
+          self.dVersion[version]=tuple(item)
+       else :
+          self.dVersion[version]=('ASTER',version,self.dRepCat[version],'python')
+          
+       lItem=[]
+       for version in self.dVersion.keys() :
+          lItem.append(self.dVersion[version])
+       self.configuration.catalogues=lItem
+       self.configuration.save_params()
+
+   def AjoutVersion(self):
+       version=self.LEVersionAjout.text()
+       if str(version) == "" : return
+       self.CBVersions.insertItem(version,0)
+       self.LERepMat.setText("")
+       self.LERepCata.setText("")
+       self.LEVersionAjout.setText("")
+
+   def SupVersion(self):
+       version=str(self.LEVersionSup.text())
+       if version == "" : return
+       i =0
+       while i < self.CBVersions.count() :
+           if  self.CBVersions.text(i) == version :
+               self.CBVersions.removeItem(i)
+               break
+           i=i+1
+       try :
+          del self.dVersion[version]
+          del self.dRepMat[version]
+          del self.dRepCat[version]
+       except :
+          self.LEVersionSup.setText("")
+          return
+       codeSansPoint=re.sub("\.","",version)
+       chaine="rep_mat_"+codeSansPoint
+       if hasattr(self.configuration,chaine):
+          delattr(self.configuration,chaine)
+       self.LEVersionSup.setText("")
+
+       lItem=[]
+       for version in self.dVersion.keys() :
+           lItem.append(self.dVersion[version])
+       self.LERepMat.setText("")
+       self.LERepCata.setText("")
+       self.configuration.catalogues=lItem
+       self.configuration.save_params()
+       self.CBVersions.setCurrentItem(0)
+       self.VersionChoisie()
+
+
+   def BdefautChecked(self):
+       res = QMessageBox.warning(
+                 None,
+                 self.trUtf8("Restauration des parametres par defaut "),
+                 self.trUtf8("Votre fichier editeur sera ecrase."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+       self.Bdefaut.setState(QButton.Off)
+       if res == 1 : return 
+
+       appli=self.configuration.appli
+       rep_ini=self.configuration.rep_ini
+       fic_ini_util=self.configuration.fic_ini_utilisateur
+       old_fic_ini_util=fic_ini_util+"_old"
+       commande="mv "+fic_ini_util+" "+old_fic_ini_util
+       os.system(commande)
+       from Editeur import configuration
+       configNew=configuration.CONFIG(appli,rep_ini)
+       self.configuration=configNew
+       appli.CONFIGURATION=configNew
+       self.configuration.save_params()
+       self.dVersion={}
+       self.dRepMat={}
+       self.dRepCat={}
+       self.initAll()
+
+   def ChangePathDoc(self):
+       self.configuration.path_doc=str(self.LERepDoc.text())
+       self.configuration.save_params()
+
diff --git a/InterfaceQT/monOptionsPdf.py b/InterfaceQT/monOptionsPdf.py
new file mode 100644 (file)
index 0000000..a7c81d2
--- /dev/null
@@ -0,0 +1,22 @@
+from OptionsPdf import desPdf
+
+class OptionPdf(desPdf):
+   def __init__(self,parent = None,name = None,modal = 0,fl = 0,configuration=None):
+       desPdf.__init__(self,parent,name,modal,fl)
+       self.configuration=configuration
+       self.initVal()
+
+   def initVal(self):
+       if hasattr(self.configuration,'exec_acrobat'):
+          self.LERepPdf.setText(self.configuration.exec_acrobat)
+       else :
+          self.LERepPdf.clear()
+   
+   def LeRepPdfPressed(self):
+       nouveau=str(self.LERepPdf.text())
+       self.configuration.exec_acrobat=nouveau
+       self.configuration.save_params()
+
+   def BokClicked(self):
+       self.LeRepPdfPressed()
+       self.close()
diff --git a/InterfaceQT/monParamPanel.py b/InterfaceQT/monParamPanel.py
new file mode 100644 (file)
index 0000000..84472fc
--- /dev/null
@@ -0,0 +1,138 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os,re
+
+# Modules Eficas
+import prefs 
+
+from qt import *
+
+from desParam import DParam
+from qtCommun import QTPanel
+from qtCommun import QTPanelTBW2
+
+# Import des panels
+
+class MonParamPanel(DParam,QTPanelTBW2,QTPanel):
+  """
+  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):
+        DParam.__init__(self,parent,name,fl)
+        QTPanel.__init__(self,node,parent)
+        QTPanelTBW2.__init__(self,node,parent)
+        self.InitLEs()
+
+  def InitLEs(self):
+        nom=self.node.item.get_nom()
+        self.lineEditNom.setText(nom)
+        valeur=self.node.item.get_valeur()
+        if valeur != None:
+           #str=QString("").setNum(valeur)
+           self.lineEditVal.setText(str(valeur))
+        else :
+           self.lineEditVal.clear()
+
+  def BOkParamPressed(self):
+        val=self.LEValeurPressed() 
+        nom=self.LENomPressed()
+        if not nom :
+           commentaire="Entrer un nom de parametre"
+           self.Commentaire.setText(QString(commentaire))
+           self.editor.affiche_infos(commentaire)
+           return
+        self.node.item.set_nom(nom)
+        self.node.item.set_valeur(val)
+        self.node.update_texte()
+        self.node.update_valid()
+        self.editor.init_modif()
+        self.InitLEs()
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def LEValeurPressed(self):
+        self.Commentaire.setText(QString(""))
+        commentaire="Valeur incorrecte"
+        qtVal=self.lineEditVal.text()
+        boul=2
+        try :
+            val,boul=QString.toInt(qtVal)
+        except :
+            pass
+        if boul == 0 :
+            try :
+                val,boul=QString.toDouble(qtVal)
+            except :
+                pass
+        if boul == 0 :
+            try :
+                val=str(qtVal)
+                boul=1
+            except :
+                pass
+        if boul: commentaire="Valeur correcte"
+        self.Commentaire.setText(QString(commentaire))
+        valString=str(self.lineEditVal.text())
+        return valString
+
+  def LENomPressed(self):
+        self.Commentaire.setText(QString(""))
+        qtNom=self.lineEditNom.text()
+        nom=str(qtNom)
+        numDebutPattern=re.compile('[a-zA-Z]')
+        if numDebutPattern.match(nom) :
+           return nom
+        else :
+           commentaire="Les noms de parametre doivent commencer par une lettre"
+           self.Commentaire.setText(QString(commentaire))
+           self.editor.affiche_infos(commentaire)
+           return None
+
+  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 AppelleBuildLBRegles(self):
+      listeRegles=self.node.item.get_regles()
+      listeNomsEtapes = self.node.item.get_l_noms_etapes()
+      self.BuildLBRegles(listeRegles,listeNomsEtapes)
+
+  def BNextPressed(self) :
+      QTPanelTBW2.BNextPressed(self)
+
+  def BOkPressed(self):
+      QTPanel.BOkPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
diff --git a/InterfaceQT/monPlusieursASSDPanel.py b/InterfaceQT/monPlusieursASSDPanel.py
new file mode 100644 (file)
index 0000000..5cc6b30
--- /dev/null
@@ -0,0 +1,118 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+import prefs 
+
+from qt import *
+from monPlusieursIntoPanel import MonPlusieursIntoPanel
+from desPlusieursInto      import DPlusInto
+from qtCommun              import QTPanel
+from politiquesValidation  import PolitiquePlusieurs
+# Import des panels
+
+class MonPlusieursASSDPanel(MonPlusieursIntoPanel):
+  """
+  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):
+        QTPanel.__init__(self,node,parent)
+        DPlusInto.__init__(self,parent,name,fl)
+
+        self.listeValeursCourantes=self.node.item.GetListeValeurs()
+        self.InitValeursCourantes()
+        self.DisplayListBoxCourantes()
+        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 )
+
+  def DisplayListBoxPossibles(self):
+        listeNomsSD = self.node.item.get_sd_avant_du_bon_type()
+        self.listBoxVal.clear()
+        for aSD in listeNomsSD:
+            self.listBoxVal.insertItem( aSD)
+        if len(listeNomsSD) == 1 :
+            self.listBoxVal.setSelected(0,1)
+
+  def DisplayListBoxCourantes(self):
+        self.LBValeurs.clear()
+        for aSD in self.listNomsValeurs :
+            self.LBValeurs.insertItem( aSD)
+
+  def InitValeursCourantes(self):
+        self.listNomsValeurs=[]
+        for i in self.listeValeursCourantes :
+              self.listNomsValeurs.append(i.get_name())
+
+  def BOkPourListePressed(self):
+        if self.listeValeursCourantes == [] :
+          self.editor.affiche_infos("Pas de Validation d un groupe vide")
+           return
+        self.node.item.set_valeur(self.listeValeursCourantes)
+       self.editor.affiche_infos("Valeur Acceptée")
+       pass
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def Sup1Valeur(self):
+        index=self.LBValeurs.currentItem()
+        self.LBValeurs.removeItem(self.LBValeurs.currentItem())
+        listeVal=[]
+        i=0
+        for valeur in self.listeValeursCourantes :
+                if i != index : listeVal.append(valeur)
+                i = i+1
+        self.listeValeursCourantes=listeVal
+        self.InitValeursCourantes()
+        self.DisplayListBoxCourantes()
+        self.DisplayListBoxPossibles()
+          
+  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
+        listeVal=[]
+        for valeur in self.listeValeursCourantes :
+                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 :
+               self.editor.affiche_infos(comm)
+        else:
+           l1=self.listeValeursCourantes[:index]
+           l3=self.listeValeursCourantes[index:]
+           for valeur in listeRetour:
+               self.LBValeurs.insertItem(QString(str(valeur)),index)
+               index=index+1
+           self.listeValeursCourantes=l1+listeRetour+l3
+           self.InitValeursCourantes()
+           self.DisplayListBoxCourantes()
+           self.DisplayListBoxPossibles()
diff --git a/InterfaceQT/monPlusieursBasePanel.py b/InterfaceQT/monPlusieursBasePanel.py
new file mode 100644 (file)
index 0000000..0907cbe
--- /dev/null
@@ -0,0 +1,176 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+import prefs
+
+from qt import *
+
+from desPlusieursBase import DPlusBase
+from qtCommun      import QTPanel
+from qtSaisie      import SaisieValeur
+from politiquesValidation import PolitiquePlusieurs
+
+# Import des panels
+
+class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur):
+  """
+  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):
+        QTPanel.__init__(self,node,parent)
+        DPlusBase.__init__(self,parent,name,fl)
+        self.politique=PolitiquePlusieurs(node,parent)
+        self.BuildLBValeurs()
+        self.listeValeursCourantes=self.node.item.GetListeValeurs()
+        self.InitCommentaire()
+        self.detruitBouton()
+
+  def detruitBouton(self):
+        mc = self.node.item.get_definition()
+        type = mc.type[0]
+        print 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()
+
+  def ViewDoc(self):
+        QTPanel.ViewDoc(self)
+
+  def BuildLBValeurs(self):
+       # redefinit en raison de l heritage par monFonctionPanel
+        SaisieValeur.BuildLBValeurs(self)
+
+  def BOkPourListePressed(self):
+        if self.listeValeursCourantes == [] :
+           self.editor.affiche_infos("Pas de validation d un groupe vide")
+           return
+        self.node.item.set_valeur(self.listeValeursCourantes)
+       self.editor.affiche_infos("Valeur Acceptée")
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def BParametresPressed(self):
+        QTPanel.BParametresPressed(self)
+
+  def LEValeurPressed(self):
+        self.Ajout1Valeur()
+
+  def Sup1Valeur(self):
+        index=self.LBValeurs.currentItem()
+        self.LEValeur.setText(self.LBValeurs.currentText())
+        self.LBValeurs.removeItem(self.LBValeurs.currentItem())
+        listeVal=[]
+        i=0
+        for valeur in self.listeValeursCourantes :
+                if i != index : listeVal.append(valeur)
+                i = i+1
+        self.listeValeursCourantes=listeVal
+          
+
+  def Ajout1Valeur(self,valeur=None):
+        liste,validite=SaisieValeur.TraiteLEValeur(self,valeur)
+        if validite == 0 : return
+        if liste ==[]    : return
+
+        index=self.LBValeurs.currentItem() + 1
+        listeVal=[]
+        for valeur in self.listeValeursCourantes :
+                listeVal.append(valeur)
+        validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) 
+       self.Commentaire.setText(comm2)
+        if not validite :
+               self.editor.affiche_infos(comm)
+        else:
+           self.LEValeur.setText(QString(""))
+           l1=self.listeValeursCourantes[:index]
+           l3=self.listeValeursCourantes[index:]
+           for valeur in listeRetour:
+               self.LBValeurs.insertItem(QString(str(valeur)),index)
+               index=index+1
+           self.listeValeursCourantes=l1+listeRetour+l3
+
+  def BImportPressed(self):
+        init=QString( self.editor.CONFIGURATION.rep_user)
+        fn = QFileDialog.getOpenFileName(init, self.trUtf8('All Files (*)',))
+        if fn == None : return
+        if fn == "" : return
+        from monSelectVal import MonSelectVal
+        MonSelectVal(file=fn,parent=self).show()
+
+  def InitCommentaire(self):
+        commentaire=""
+        mc = self.node.item.get_definition()
+        d_aides = { 'TXM' : 'chaînes de caractères',
+                  'R'   : 'réels',
+                  'I'   : 'entiers',
+                  'C'   : 'complexes'}
+        type = mc.type[0]
+        if not d_aides.has_key(type) :
+           if mc.min == mc.max:
+               commentaire="Entrez "+str(mc.min)+" valeurs "
+           else :
+               commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs "
+        else :
+           if mc.min == mc.max:
+               commentaire="Entrez "+str(mc.min)+" "+d_aides[type]
+           else :
+               commentaire="Entrez entre "+str(mc.min)+" et  "+str(mc.max) +" " + d_aides[type]
+        aideval=self.node.item.aide()
+        commentaire=commentaire + "\n" + aideval
+        self.Commentaire.setText(QString(commentaire))
+
+  def BSalomePressed(self):
+
+        genea=self.node.item.get_genealogie()
+        kwType = None
+        for e in genea:
+            if "GROUP_NO" in e: kwType = "GROUP_NO"
+            if "GROUP_MA" in e: kwType = "GROUP_MA"
+
+        #print "BkwType",kwType
+        #print "editor", self.editor
+        selection, commentaire = self.editor.parent.appliEficas.selectGroupFromSalome(kwType,editor=self.editor)
+        if commentaire !="" :
+            self.Commentaire.setText(QString(commentaire))
+        monTexte=""
+        if selection == [] : return
+        for geomElt in selection: 
+            monTexte=geomElt+","
+        monTexte= monTexte[0:-1]
+        self.LEValeur.setText(QString(monTexte))
+
+  def BView2DPressed(self):
+        valeur=self.LEValeur.text()
+        if valeur == QString("") :
+           valeur=self.LBValeurs.currentText()
+        if valeur == QString("") : return
+        valeur = str(valeur)
+        if valeur :
+           ok, msgError = self.editor.parent.appliEficas.displayShape(valeur)
+           if not ok:
+              self.editor.parent.appli.affiche_infos(msgError)
+
diff --git a/InterfaceQT/monPlusieursIntoPanel.py b/InterfaceQT/monPlusieursIntoPanel.py
new file mode 100644 (file)
index 0000000..80fa423
--- /dev/null
@@ -0,0 +1,119 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+import prefs 
+
+from qt import *
+
+from desPlusieursInto import DPlusInto
+from qtCommun      import QTPanel
+from qtSaisie      import SaisieValeur
+from politiquesValidation import PolitiquePlusieurs
+
+# Import des panels
+
+class MonPlusieursIntoPanel(DPlusInto,QTPanel,SaisieValeur):
+  """
+  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):
+        QTPanel.__init__(self,node,parent)
+        DPlusInto.__init__(self,parent,name,fl)
+        self.politique=PolitiquePlusieurs(node,parent)
+        SaisieValeur.BuildLBValeurs(self)
+        self.listeValeursCourantes=self.node.item.GetListeValeurs()
+        SaisieValeur.RemplitPanel(self,self.listeValeursCourantes)
+        QObject.connect(self.listBoxVal, SIGNAL("doubleClicked(QListBoxItem*)" ), self.Ajout1Valeur )
+        self.InitCommentaire()
+
+  def BOkPourListePressed(self):
+        if self.listeValeursCourantes == [] :
+           self.editor.affiche_infos("Pas de validation d un groupe vide")
+           return
+        self.node.item.set_valeur(self.listeValeursCourantes)
+       self.editor.affiche_infos("Valeur Acceptée")
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
+  def Sup1Valeur(self):
+        index=self.LBValeurs.currentItem()
+        self.LBValeurs.removeItem(self.LBValeurs.currentItem())
+        listeVal=[]
+        i=0
+        for valeur in self.listeValeursCourantes :
+                if i != index : 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
+        listeVal=[]
+        for valeur in self.listeValeursCourantes :
+                listeVal.append(valeur)
+        validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) 
+       self.Commentaire.setText(comm2)
+        if not validite :
+               self.editor.affiche_infos(comm)
+        else:
+           l1=self.listeValeursCourantes[:index]
+           l3=self.listeValeursCourantes[index:]
+           for valeur in listeRetour:
+               self.LBValeurs.insertItem(QString(str(valeur)),index)
+               index=index+1
+           self.listeValeursCourantes=l1+listeRetour+l3
+        SaisieValeur.RemplitPanel(self,self.listeValeursCourantes)
+
+  def InitCommentaire(self):
+        commentaire=""
+        mc = self.node.item.get_definition()
+        d_aides = { 'TXM' : 'chaînes de caractères',
+                  'R'   : 'réels',
+                  'I'   : 'entiers',
+                  'C'   : 'complexes'}
+        type = mc.type[0]
+        if not d_aides.has_key(type) :
+           if mc.min == mc.max:
+               commentaire="Entrez "+str(mc.min)+" valeurs "
+           else :
+               commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs "
+        else :
+           if mc.min == mc.max:
+               commentaire="Entrez "+str(mc.min)+" "+d_aides[type]
+           else :
+               commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max)+" "+d_aides[type]
+        aideval=self.node.item.aide()
+        commentaire=commentaire + "\n" + aideval
+        self.Commentaire.setText(QString(commentaire))
+
diff --git a/InterfaceQT/monPoursuitePanel.py b/InterfaceQT/monPoursuitePanel.py
new file mode 100644 (file)
index 0000000..3ba31b2
--- /dev/null
@@ -0,0 +1,115 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+import os,traceback,sys
+from qt import *
+from desMacro import DMacro
+
+from monMacroPanel import MonMacroPanel
+import convert
+
+
+# Import des panels
+
+class MonPoursuitePanel(MonMacroPanel):
+  """
+  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)
+        #Version TK ??
+        self.ajoutPageOk()
+
+  def ajoutPageOk(self) :
+        self.TabPage = QWidget(self.TWChoix,"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 POURSUITE requiert un nom de Fichier :</font>"))
+        self.BBrowse.setText(self._DMacro__tr("Edit"))
+        self.TWChoix.changeTab(self.TabPage,self._DMacro__tr("Fichier Poursuite"))
+        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.connect(self.BBrowse,SIGNAL("clicked()"),self.BBrowsePressed)
+        self.connect(self.LENomFichier,SIGNAL("returnPressed()"),self.LENomFichReturnPressed)
+
+
+  def BBrowsePressed(self):
+      self.node.makeEdit()
+
+  def BOkIncPressed (self):
+      self.LENomFichReturnPressed()
+
+  def LENomFichReturnPressed(self):
+        nomFichier=str(self.LENomFichier.text())
+        if not os.path.isfile(nomFichier) :
+           commentaire = "Fichier introuvable"
+           self.Commentaire.setText(QString(commentaire))
+           self.editor.affiche_infos(commentaire)
+           return
+
+        text=self.convert_file(nomFichier)
+
+        # Si probleme a la lecture-conversion on arrete le traitement
+        if not text:
+           return
+
+        try :
+           self.node.item.object.change_fichier_init(nomFichier,text)
+           commentaire = "Fichier modifie  : " + self.node.item.get_nom()
+           self.Commentaire.setText(QString(commentaire))
+        except: 
+           l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
+           QMessageBox.critical( self, "Erreur fatale au chargement du fichier Include", l[0])
+           commentaire = "Fichier invalide" 
+           self.Commentaire.setText(QString(commentaire))
+           self.editor.affiche_infos(commentaire)
+           return
+
+
+  def convert_file(self,file):
+       """
+         Methode pour convertir le fichier file dans le format courant
+       """
+       format=self.editor.format_fichier
+       text=None
+       if convert.plugins.has_key(format):
+          # Le convertisseur existe on l'utilise
+          p=convert.plugins[format]()
+          p.readfile(file)
+          text=p.convert('execnoparseur')
+       else :
+            commentaire = "Impossible de lire le fichier : Format inconnu"
+            self.Commentaire.setText(QString(commentaire))
+            self.editor.affiche_infos(commentaire)
+       return text
+
diff --git a/InterfaceQT/monRacinePanel.py b/InterfaceQT/monRacinePanel.py
new file mode 100644 (file)
index 0000000..bf8f3a8
--- /dev/null
@@ -0,0 +1,79 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desRacine import DRac
+from qtCommun  import QTPanel
+from qtCommun  import QTPanelTBW2
+from qtCommun  import itemColore
+from qt import *
+
+
+# Import des panels
+
+class MonRacinePanel(DRac,QTPanelTBW2):
+  """
+  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):
+        DRac.__init__(self,parent,name,fl)
+        QTPanel.__init__(self,node,parent)
+        QTPanelTBW2.__init__(self,node,parent,racine=1)
+
+  def BSupPressed(self):
+      QTPanel.BSupPressed(self)
+
+  def BOkPressed(self):
+      self.DefCmd()
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(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 AppelleBuildLBRegles(self):
+      listeRegles=self.node.item.get_regles()
+      listeNomsEtapes = self.node.item.get_l_noms_etapes()
+      self.BuildLBRegles(listeRegles,listeNomsEtapes)
+
+  def DefCmd(self):
+      if self.LBNouvCommande.selectedItem()== None : return
+      name=str(self.LBNouvCommande.selectedItem().text())
+      if name==QString(" "): return
+      if name.find("GROUPE :")==0 : return
+      self.editor.init_modif()
+      new_node = self.node.append_child(name,'first')
diff --git a/InterfaceQT/monSelectVal.py b/InterfaceQT/monSelectVal.py
new file mode 100644 (file)
index 0000000..c3c6414
--- /dev/null
@@ -0,0 +1,84 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desSelectVal import DSelVal
+from qt import *
+
+# Import des panels
+
+class MonSelectVal(DSelVal):
+  """
+  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,file,parent,name = None,fl = 0):
+        self.FonctPanel=parent
+        DSelVal.__init__(self,parent,name,Qt.WType_Dialog)
+        self.dictSepar={}
+        self.separateur=" "
+        self.texte=" "
+        self.textTraite=""
+        self.file=str(file)
+        self.readVal()
+        self.initVal()
+
+  def readVal(self):
+        f = open(self.file, "rb")
+        self.texte = f.read()
+        f.close()
+
+  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 BImportSelPressed(self):
+        text=str(self.TBtext.selectedText())
+        self.textTraite=text
+        self.Traitement()
+        
+  def BImportToutPressed(self):
+        self.textTraite=self.texte
+        self.Traitement()
+
+  def Traitement(self):
+        import string
+        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)
+        liste=[]
+        for val in liste1 :
+            val=str(val)
+            try :
+              val=eval(val,{})
+            except :
+              pass
+            liste.append(val)
+        self.FonctPanel.AjoutNValeur(liste) 
diff --git a/InterfaceQT/monUniqueASSDPanel.py b/InterfaceQT/monUniqueASSDPanel.py
new file mode 100644 (file)
index 0000000..a2280be
--- /dev/null
@@ -0,0 +1,75 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+import prefs 
+
+from qt import *
+
+from desUniqueASSD import DUnASSD
+from qtCommun      import QTPanel
+from qtSaisie      import SaisieValeur
+from politiquesValidation import PolitiqueUnique
+
+# Import des panels
+
+class MonUniqueASSDPanel(DUnASSD,QTPanel,SaisieValeur):
+  """
+  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):
+        self.editor=parent
+        QTPanel.__init__(self,node,parent)
+        DUnASSD.__init__(self,parent,name,fl)
+        self.politique=PolitiqueUnique(node,parent)
+        self.InitListBoxASSD()
+        self.InitCommentaire()
+
+  def BOkPressed(self):
+        self.ClicASSD()
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
+  def InitCommentaire(self): 
+      mc = self.node.item.get_definition()
+      try :
+          type = mc.type[0].__name__
+      except :
+          type = str(mc.type[0])
+      if len(mc.type)>1 :
+          for typ in mc.type[1:] :
+            try :
+                l=typ.__name__
+            except:
+                l=str(typ)
+            type = type + ' ou '+l
+      commentaire="Un objet de type "+type+" est attendu"
+      aideval=self.node.item.aide()
+      commentaire=commentaire +"\n"+ aideval
+      self.Commentaire.setText(QString(commentaire))
diff --git a/InterfaceQT/monUniqueBasePanel.py b/InterfaceQT/monUniqueBasePanel.py
new file mode 100644 (file)
index 0000000..435e559
--- /dev/null
@@ -0,0 +1,125 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+import prefs 
+
+from qt import *
+
+from desUniqueBase import DUnBase
+from qtCommun      import QTPanel
+from qtSaisie      import SaisieValeur
+from politiquesValidation import PolitiqueUnique
+
+# Import des panels
+
+class MonUniqueBasePanel(DUnBase,QTPanel,SaisieValeur):
+  """
+  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):
+        self.editor=parent
+        QTPanel.__init__(self,node,parent)
+        DUnBase.__init__(self,parent,name,fl)
+        self.politique=PolitiqueUnique(node,parent)
+        self.InitLineEditVal()
+        self.InitCommentaire()
+        self.detruitBouton()
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
+  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) :
+        if not(('grma' in repr(type)) or ('grno' in repr(type))) or not(self.editor.salome) :
+           self.BSalome.close()
+           self.BView2D.close()
+
+  def InitLineEditVal(self):
+        valeur=self.node.item.get_valeur()
+        valeurTexte=self.politique.GetValeurTexte(valeur)
+        if valeurTexte != None:
+           try :
+               str=QString("").setNum(valeurTexte)
+           except :
+               str=QString(valeurTexte)
+           self.lineEditVal.setText(str)
+
+
+  def InitCommentaire(self):
+      mc = self.node.item.get_definition()
+      d_aides = { 'TXM' : "Une chaîne de caractères est attendue",
+                  'R'   : "Un réel est attendu",
+                  'I'   : "Un entier est attendu"}
+      type = mc.type[0]
+      commentaire=d_aides.get(type,"Type de base inconnu")
+      aideval=self.node.item.aide()
+      commentaire=commentaire +"\n"+ aideval
+      self.Commentaire.setText(QString(commentaire))
+
+  def BOk2Pressed(self):
+        SaisieValeur.BOk2Pressed(self)
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def LEValeurPressed(self):
+        SaisieValeur.LEValeurPressed(self)
+
+  def BParametresPressed(self):
+        QTPanel.BParametresPressed(self)
+
+  def Ajout1Valeur(self,valeur):
+        SaisieValeur.LEValeurPressed(self,valeur)
+
+  def BSalomePressed(self):
+        genea=self.node.item.get_genealogie()
+        kwType = None
+        for e in genea:
+            if "GROUP_NO" in e: kwType = "GROUP_NO"
+            if "GROUP_MA" in e: kwType = "GROUP_MA"
+
+        selection, commentaire = self.editor.parent.appliEficas.selectGroupFromSalome(kwType,editor=self.editor)
+        if commentaire !="" :
+            self.Commentaire.setText(QString(commentaire))
+        monTexte=""
+        if selection == [] : return
+        for geomElt in selection:
+            monTexte=geomElt+","
+        monTexte= monTexte[0:-1]
+        self.LEValeur.setText(QString(monTexte))
+
+  def BView2DPressed(self):
+        valeur=self.LEValeur.text()
+        if valeur == QString("") : return
+        valeur = str(valeur)
+        if valeur :
+           ok, msgError = self.editor.parent.appliEficas.displayShape(valeur)
+           if not ok:
+              self.editor.parent.appli.affiche_infos(msgError)
+
diff --git a/InterfaceQT/monUniqueCompPanel.py b/InterfaceQT/monUniqueCompPanel.py
new file mode 100644 (file)
index 0000000..46a8533
--- /dev/null
@@ -0,0 +1,163 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os,re
+
+# Modules Eficas
+import prefs 
+
+from qt import *
+
+from desUniqueComp import DUnComp
+from qtCommun      import QTPanel
+from politiquesValidation import PolitiqueUnique
+
+# Import des panels
+
+#class MonUniqueCompPanel(DUnComp,QTPanel,SaisieValeur):
+class MonUniqueCompPanel(DUnComp,QTPanel,PolitiqueUnique):
+  """
+  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):
+        QTPanel.__init__(self,node,parent)
+        DUnComp.__init__(self,parent,name,fl)
+        self.politique=PolitiqueUnique(node,parent)
+        self.InitLinesVal()
+        self.InitCommentaire()
+
+  def InitLinesVal(self):
+        valeur=self.node.item.get_valeur()
+        if valeur == None or valeur == '' : return
+        if type(valeur) not in (types.ListType,types.TupleType) :
+           self.LEcomp.setText(str(valeur))
+        else :
+           typ_cplx,x1,x2=valeur
+           self.LEReel.setText(str(x1))
+           self.LEImag.setText(str(x2))
+           if typ_cplx == "RI" :
+              self.buttonGroup1.setButton(1)
+           else :
+              self.buttonGroup1.setButton(0)
+      
+
+  def LEcompRPressed(self) :
+        self.LEReel.clear()
+        self.LEImag.clear()
+        commentaire="expression valide"
+        valeur = str(self.LEcomp.text())
+        d={}
+        try :
+          v=eval(valeur,d)
+        except :
+          commentaire="expression invalide"
+          self.editor.affiche_infos(commentaire)
+          return
+        try :
+          i=v.imag
+        except :
+          commentaire="expression n est pas de la forme a+bj"
+        self.editor.affiche_infos(commentaire)
+          
+  def LEReelRPressed(self):
+        self.LEcomp.clear()
+        commentaire="expression valide"
+        valeur = str(self.LEReel.text())
+        try :
+          a=string.atof(valeur)
+        except :
+          commentaire="expression invalide"
+        self.editor.affiche_infos(commentaire)
+
+  def LEImagRPressed(self):
+        self.LEcomp.clear()
+        commentaire="expression valide"
+        valeur = str(self.LEImag.text())
+        try :
+          a=string.atof(valeur)
+        except :
+          commentaire="expression invalide"
+        self.editor.affiche_infos(commentaire)
+
+  def BOkPressed(self):
+        if self.LEcomp.text()== "" : 
+           valeur = self.getValeurAster()
+        else :
+           if self.LEReel.text() != "" or self.LEImag.text() != "" :
+              commentaire="entrer une seule valeur SVP"
+              self.editor.affiche_infos(commentaire)
+              return
+           valeur=  self.getValeurComp()
+        self.politique.RecordValeur(valeur)
+
+  def getValeurAster(self):
+      """
+      Retourne le complexe saisi par l'utilisateur
+      """
+      l=[]
+      if  (self.buttonGroup1.selectedId() == 1 ) :
+         l.append("MP")
+      elif (self.buttonGroup1.selectedId() == 0) :
+         l.append("RI")
+      else :
+         commentaire="saisir le type de complexe"
+         self.editor.affiche_infos(commentaire)
+         return None
+      try :
+         l.append(string.atof(str(self.LEReel.text())))
+         l.append(string.atof(str(self.LEImag.text())))
+      except :
+         return None
+      return `tuple(l)`
+
+  def getValeurComp(self):
+        commentaire="expression valide"
+        valeur = str(self.LEcomp.text())
+        d={}
+        try :
+          v=eval(valeur,d)
+        except :
+          commentaire="expression invalide"
+          self.editor.affiche_infos(commentaire)
+          return None
+        try :
+          i=v.imag
+        except :
+          commentaire="expression n est pas de la forme a+bj"
+          self.editor.affiche_infos(commentaire)
+          return None
+        return v
+
+  def InitCommentaire(self):
+        commentaire='Un complexe est attendu'
+        aideval=self.node.item.aide()
+        commentaire=commentaire +"\n"+ aideval
+        self.Commentaire.setText(QString(commentaire))
+
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
diff --git a/InterfaceQT/monUniqueIntoPanel.py b/InterfaceQT/monUniqueIntoPanel.py
new file mode 100644 (file)
index 0000000..568410e
--- /dev/null
@@ -0,0 +1,60 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+import prefs 
+
+from qt import *
+
+from desUniqueInto        import DUnIn
+from qtCommun             import QTPanel
+from qtSaisie             import SaisieValeur
+from politiquesValidation import PolitiqueUnique
+
+# Import des panels
+
+class MonUniqueIntoPanel(DUnIn,QTPanel,SaisieValeur):
+  """
+  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):
+        QTPanel.__init__(self,node,parent)
+        DUnIn.__init__(self,parent,name,fl)
+        SaisieValeur.RemplitPanel(self)
+        self.politique=PolitiqueUnique(node,parent)
+        QObject.connect(self.listBoxVal, SIGNAL("doubleClicked(QListBoxItem*)" ), self.ClicValeur )
+
+  def ClicValeur(self):
+        SaisieValeur.ClicValeur(self)
+
+  def BOkPressed(self):
+        SaisieValeur.BOkPressed(self)
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
diff --git a/InterfaceQT/monUniqueSDCOIntoPanel.py b/InterfaceQT/monUniqueSDCOIntoPanel.py
new file mode 100644 (file)
index 0000000..0a54315
--- /dev/null
@@ -0,0 +1,97 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+import prefs 
+
+from qt import *
+
+from desUniqueSDCOInto    import DUnSDCOInto
+from qtCommun             import QTPanel
+from qtSaisie             import SaisieSDCO
+from politiquesValidation import PolitiqueUnique
+
+# Import des panels
+
+class MonUniqueSDCOIntoPanel(DUnSDCOInto,QTPanel,SaisieSDCO):
+  """
+  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):
+        QTPanel.__init__(self,node,parent)
+        DUnSDCOInto.__init__(self,parent,name,fl)
+        self.initLBSDCO()
+
+  def initLBSDCO(self):
+        listeNomsSDCO = self.node.item.get_sd_avant_du_bon_type()
+        for aSDCO in listeNomsSDCO:
+            self.LBSDCO.insertItem( aSDCO)
+        valeur = self.node.item.get_valeur()
+        if valeur  != "" and valeur != None :
+           self.LESDCO.setText(QString(valeur.nom))
+
+
+  def LBSDCOReturnPressed(self):
+        """
+         Teste si la valeur fournie par l'utilisateur est une valeur permise :
+          - si oui, l'enregistre
+          - si non, restaure l'ancienne valeur
+        """
+        nomConcept=str(self.LBSDCO.currentText())
+        self.LESDCO.clear()
+        self.editor.init_modif()
+        anc_val = self.node.item.get_valeur()
+        test_CO=self.node.item.is_CO(anc_val)
+
+        valeur,validite=self.node.item.eval_valeur(nomConcept)
+        test = self.node.item.set_valeur(valeur)
+        if not test :
+          commentaire = "impossible d'évaluer : %s " %`valeur`
+        elif validite:
+          commentaire = "Valeur du mot-clé enregistrée"
+          if test_CO:
+             # il faut egalement propager la destruction de l'ancien concept
+             self.node.item.delete_valeur_co(valeur=anc_val)
+             self.node.item.object.etape.get_type_produit(force=1)
+             self.node.item.object.etape.parent.reset_context()
+        else :
+          commentaire = self.node.item.get_cr()
+          self.reset_old_valeur(anc_val,mess=mess)
+          self.editor.affiche_infos(commentaire)
+        self.Commentaire.setText(commentaire)
+
+  def LESDCOReturnPressed(self) :
+        self.LBSDCO.clearSelection()
+        SaisieSDCO.LESDCOReturnPressed(self)
+
+  def BOkPressed(self):
+        self.LESDCOReturnPressed()
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
diff --git a/InterfaceQT/monUniqueSDCOPanel.py b/InterfaceQT/monUniqueSDCOPanel.py
new file mode 100644 (file)
index 0000000..f2247ed
--- /dev/null
@@ -0,0 +1,67 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+import prefs 
+
+from qt import *
+
+from desUniqueSDCO        import DUnSDCO
+from qtCommun             import QTPanel
+from qtSaisie             import SaisieSDCO
+
+# Import des panels
+
+class MonUniqueSDCOPanel(DUnSDCO,QTPanel,SaisieSDCO):
+  """
+  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):
+        QTPanel.__init__(self,node,parent)
+        DUnSDCO.__init__(self,parent,name,fl)
+        valeur = self.node.item.get_valeur()
+        if valeur  != "" and valeur != None :
+           self.LESDCO.setText(QString(valeur.nom))
+
+  def BOkPressed(self):
+        SaisieSDCO.LESDCOReturnPressed(self)
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def BOuiPressed(self):
+        self.Commentaire.setText("Aucun Objet de ce type n'est defini")
+        self.rbOui.setChecked(1)
+
+  def LESDCOReturnPressed(self):
+        """
+           Lit le nom donné par l'utilisateur au concept de type CO qui doit être
+           la valeur du MCS courant et stocke cette valeur
+        """
+        SaisieSDCO.LESDCOReturnPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
diff --git a/InterfaceQT/panelsQT.py b/InterfaceQT/panelsQT.py
new file mode 100644 (file)
index 0000000..cc2125f
--- /dev/null
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+import string
+import os
+
+import traceback
+
+from qt import *
+from qtCommun import QTPanel
+from desInactif import DInactif
+
+
+SEPARATEUR = '-'*30
+
+      
+class PanelInactif( QTPanel, DInactif ):   
+    def __init__(self,node,parent=None ):
+        DInactif.__init__(self,parent)
+        QTPanel.__init__(self,node,parent)
+                
+        
+class NoPanel( QWidget ):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+        self.textLabel = QLabel(self)
+        self.textLabel.setText(QString("PANNEAU A IMPLEMENTER"))
+        self.textLabel.setGeometry(QRect(130,150,219,17))
+        self.resize(QSize(600,480).expandedTo(self.minimumSizeHint()))
+        
diff --git a/InterfaceQT/politiquesValidation.py b/InterfaceQT/politiquesValidation.py
new file mode 100644 (file)
index 0000000..539f611
--- /dev/null
@@ -0,0 +1,162 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import types
+
+from qt import *
+
+
+#------------------
+class Validation  :
+#------------------
+  def __init__(self,node,parent) :
+         self.node=node
+         self.parent=parent
+
+  def TesteUneValeur(self,valeurentree):
+         valeur,validite=self.node.item.eval_valeur(valeurentree)
+         if not validite :
+                  commentaire = "impossible d'évaluer : %s " %`valeurentree`
+                  return valeur,validite,commentaire
+
+         testtype,commentaire = self.node.item.object.verif_type(valeur)
+         if not testtype :
+                  return valeur,0,commentaire
+
+         valide=self.node.item.valide_item(valeur)
+         if type(valide) == types.TupleType:
+                 validite,commentaire=valide
+         else :
+                 validite=valide
+                 commentaire=" "
+
+         if not validite :
+                  commentaire = "impossible d'évaluer : %s " %`valeurentree`
+         return valeur, validite, commentaire
+
+# ----------------------------------------------------------------------------------------
+#   Méthodes utilisées pour la manipulation des items en notation scientifique
+#   a mettre au point
+# ----------------------------------------------------------------------------------------
+  def SetValeurTexte(self,texteValeur) :
+         try :
+                  if "R" in self.node.item.object.definition.type:
+                     if texteValeur[0] != "'":
+                        clef=eval(texteValeur)
+                        if str(clef) != str(texteValeur) :
+                           self.node.item.object.init_modif()
+                           clefobj=self.node.item.object.GetNomConcept()
+                           if not self.parent.dict_reels.has_key(clefobj):
+                              self.parent.dict_reels[clefobj] = {}
+                           self.parent.dict_reels[clefobj][clef]=texteValeur
+                           self.parent.dict_reels[clefobj]
+                           self.node.item.object.fin_modif()
+         except:
+            pass
+
+  def GetValeurTexte(self,valeur) :
+         valeurTexte=valeur
+         if "R" in self.node.item.object.definition.type:
+                  clefobj=self.node.item.object.GetNomConcept()
+                  if self.parent.dict_reels.has_key(clefobj):
+                     if self.parent.dict_reels[clefobj].has_key(valeur):
+                        valeurTexte=self.parent.dict_reels[clefobj][valeur]
+         return valeurTexte
+
+#------------------------------------
+class PolitiqueUnique(Validation) :
+#------------------------------------
+  """
+  classe servant pour les entrees ne demandant qu un mot clef
+  """
+  def __init__(self,node,parent):
+        Validation.__init__(self,node,parent)
+
+  def RecordValeur(self,valeurentree):
+         if self.parent.modified == 'n' : self.parent.init_modif()
+         ancienne_val = self.node.item.get_valeur()
+         valeur,validite,commentaire =self.TesteUneValeur(valeurentree)
+         if validite :
+            validite=self.node.item.set_valeur(valeur)
+            if self.node.item.isvalid():
+                  commentaire = "Valeur du mot-clé enregistrée"
+                  self.SetValeurTexte(str(valeurentree))
+            else:
+                  cr = self.node.item.get_cr()
+                  commentaire =  "Valeur du mot-clé non autorisée "+cr.get_mess_fatal()
+                  self.node.item.set_valeur(ancienne_val)
+         return validite, commentaire 
+
+#------------------------
+class PolitiquePlusieurs:
+#------------------------
+  """
+  classe servant pour les entrees ne demandant qu un mot clef
+  """
+  def __init__(self,node,parent) :
+         self.node=node
+         self.parent=parent
+
+
+  def AjoutValeurs(self,listevaleur,index,listecourante):
+         listeRetour=[]
+         commentaire="Nouvelle valeur acceptée"
+         commentaire2=""
+         valide=1
+         if listevaleur==None: return
+         if listevaleur=="": return
+         if not( type(listevaleur)  in (types.ListType,types.TupleType)) :
+            listevaleur=tuple(listevaleur)
+         for valeur in listevaleur :
+             # On teste le type de la valeur
+             valide=self.node.item.valide_item(valeur)
+             if not valide :
+                #print self.__class__
+                #if not testtype :
+                try :
+                   valeur,valide=self.node.item.eval_valeur(valeur)
+                   valide,commentaire = self.node.item.object.verif_type(valeur)
+                except :
+                   #return testtype,commentaire,"",listeRetour
+                   pass
+             if not valide:
+                commentaire="Valeur "+str(valeur)+ " incorrecte : ajout à la liste refusé"
+                commentaire2=self.node.item.info_erreur_item()
+                return valide,commentaire,commentaire2,listeRetour
+
+             # On valide la liste obtenue
+             encorevalide=self.node.item.valide_liste_partielle(valeur,listecourante)
+             if not encorevalide :
+                commentaire2=self.node.item.info_erreur_liste()
+                # On traite le cas ou la liste n est pas valide pour un pb de cardinalite
+                min,max = self.node.item.GetMinMax()
+                if len(listecourante) + 1 >= max :
+                   commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
+                   return valide,commentaire,commentaire2,listeRetour
+                if len(listecourante) + 1 > min :
+                   return valide,commentaire,commentaire2,listeRetour
+             # On ajoute la valeur testee a la liste courante et a la liste acceptee
+             listecourante.insert(index,valeur)
+             index=index+1
+             listeRetour.append(valeur)
+
+         return valide,commentaire,commentaire2,listeRetour
diff --git a/InterfaceQT/prefsQT.py b/InterfaceQT/prefsQT.py
new file mode 100644 (file)
index 0000000..ef1aa89
--- /dev/null
@@ -0,0 +1,25 @@
+# -*- 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.
+#
+#
+# ======================================================================
+
+lang='fr'
+
diff --git a/InterfaceQT/qtCommun.py b/InterfaceQT/qtCommun.py
new file mode 100644 (file)
index 0000000..e89ffc2
--- /dev/null
@@ -0,0 +1,349 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+import traceback
+
+from qt import *
+import prefsQT
+
+# Import des panels
+
+# ---------- #
+class QTPanel:
+# ---------- #
+  """
+  Classe contenant les méthodes Qt communes a tous les panneaux droits
+  Tous les panneaux Mon...Panel héritent de cette classe
+  Gére plus précisement :
+     - l affichage de la doc
+     - le bouton Suppression (BSupPressed)
+     - la mutualisation de l affichage des regles
+  """
+  def __init__(self,node, parent = None):
+        self.editor    = parent
+        self.node      = node
+        
+  def BSupPressed(self):
+        self.editor.init_modif()
+        self.node.delete()
+        
+  def ViewDoc(self) :
+      cle_doc = self.node.item.get_docu()
+      if cle_doc == None :
+         QMessageBox.information( self.editor, "Documentation Vide", \
+                                  "Aucune documentation Aster n'est associée à ce noeud")
+         return
+      cle_doc = string.replace(cle_doc,'.','')
+      cle_doc = string.replace(cle_doc,'-','')
+      commande = self.editor.appliEficas.CONFIGURATION.exec_acrobat
+      try :
+         f=open(commande,"rb")
+      except :
+         texte="impossible de trouver la commande  " + commande
+         QMessageBox.information( self.editor, "Lecteur PDF", texte)
+         return
+      nom_fichier = cle_doc+".pdf"
+      fichier = os.path.abspath(os.path.join(self.editor.CONFIGURATION.path_doc,
+                                       nom_fichier))
+      try :
+         f=open(fichier,"rb")
+      except :
+         texte="impossible d'ouvrir " + fichier
+         QMessageBox.information( self.editor, "Documentation Vide", texte)
+         return
+      if os.name == 'nt':
+          os.spawnv(os.P_NOWAIT,commande,(commande,fichier,))
+      elif os.name == 'posix':
+          script ="#!/usr/bin/sh \n%s %s&" %(commande,fichier)
+          pid = os.system(script)
+
+  def BOkPressed(self):
+        """ Impossible d utiliser les vrais labels avec designer ?? """
+        label=self.TWChoix.tabLabel(self.TWChoix.currentPage())
+        if label==QString("Nouvelle Commande"):
+           self.DefCmd()
+        if label==QString("Nommer Concept"):
+           self.LENomConceptReturnPressed()
+        if label==QString("Ajouter Mot-Clef"):
+           self.DefMC()
+        if label==QString("Définition Formule"):
+           self.BOkPressedFormule()
+        if label==QString("Valeur Parametre"):
+           self.BOkParamPressed()
+        if label==QString("Fichier Include"):
+           self.BOkIncPressed()
+        if label==QString("Commentaire"):
+           self.TexteCommentaireEntre()
+
+  def BParametresPressed(self):
+        liste=self.node.item.get_liste_param_possible()
+        from monListeParamPanel import MonListeParamPanel
+        MonListeParamPanel(liste=liste,parent=self).show()
+       
+  def AppelleBuildLBRegles(self):
+        listeRegles     = self.node.item.get_regles()
+        listeNomsEtapes = self.node.item.get_mc_presents()
+        self.BuildLBRegles(listeRegles,listeNomsEtapes)
+
+
+  def BuildLBRegles(self,listeRegles,listeNomsEtapes):
+        if len(listeRegles) > 0:
+           for regle in listeRegles :
+              texteRegle=regle.gettext()
+              texteMauvais,test = regle.verif(listeNomsEtapes)
+              for ligne in texteRegle.split("\n") :
+                 if ligne == "" :
+                    self.LBRegles.insertItem(ligne)
+                    continue
+                 if ligne[0]=="\t" :
+                    ligne="     "+ligne[1:]
+                 if test :
+                    self.LBRegles.insertItem(ligne)
+                 else :
+                    self.LBRegles.insertItem(itemColore(ligne))
+
+
+# ----------------------- #
+class QTPanelTBW1(QTPanel):
+# ----------------------- #
+  """
+  Classe contenant les méthodes nécessaires a l onglet "Ajouter Mot-Clef"  
+  hérite de QTPanel  # Attention n appelle pas le __init__
+  Gére plus précisement :
+  """
+  def __init__(self,node, parent = None):
+        self.editor    = parent
+        self.node      = node
+        self.BuildLBMCPermis()
+        self.AppelleBuildLBRegles()
+
+  def BuildLBMCPermis(self):
+        self.LBMCPermis.clear()
+        try :
+           QObject.disconnect(self.LBMCPermis,SIGNAL("doubleClicked(QListBoxItem*)"),self.DefMC)
+        except :
+           # normal pour la première fois qu on passe
+           # peut-etre inutile selon le connect ??
+           pass
+        QObject.connect(self.LBMCPermis,SIGNAL("doubleClicked(QListBoxItem*)"),self.DefMC)
+
+        jdc = self.node.item.get_jdc()
+        genea =self.node.item.get_genealogie()
+        liste_mc=self.node.item.get_liste_mc_ordonnee(genea,jdc.cata_ordonne_dico)
+        for aMc in liste_mc:
+           self.LBMCPermis.insertItem( aMc)
+
+
+  def DefMC(self):
+        """ On ajoute un mot-clé à  la commande : subnode """
+        if self.LBMCPermis.selectedItem() == None : return
+        name=str(self.LBMCPermis.selectedItem().text())
+        self.editor.init_modif()
+        self.node.append_child(name)
+
+# ---------------------------- #
+class QTPanelTBW2(QTPanel):
+# ---------------------------- #
+  """
+  Classe contenant les méthodes nécessaires a l onglet "Nouvelle Commande"  
+  hérite de QTPanel  # Attention n appelle pas le __init__
+  Gére plus précisement :
+  """
+
+  def __init__(self,node, parent = None, racine = 0):
+        self.editor    = parent
+        self.node      = node
+        self.BuildLBNouvCommande()
+        if racine == 1 : self.AppelleBuildLBRegles()
+
+      
+  def BuildLBNouvCommande(self):
+        self.LBNouvCommande.clear()
+        try :
+           QObject.disconnect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.DefCmd)
+        except :
+           # normal pour la première fois qu on passe
+           # peut-etre inutile selon le connect ??
+           pass
+
+        jdc=self.node.item.object.get_jdc_root()
+        if self.RBalpha.isOn():
+           listeCmd = jdc.get_liste_cmd()
+           for aCmd in listeCmd:
+              self.LBNouvCommande.insertItem( aCmd )
+        else :
+           listeGroupes,dictGroupes=jdc.get_groups()
+           for grp in listeGroupes:
+              if grp == "CACHE":continue
+              listeCmd=dictGroupes[grp]
+              texte="GROUPE : "+grp
+              self.LBNouvCommande.insertItem( texte )
+              self.LBNouvCommande.insertItem( " " )
+              for aCmd in listeCmd:
+                 self.LBNouvCommande.insertItem( aCmd)
+              self.LBNouvCommande.insertItem( " " )
+        QObject.connect( self.LBNouvCommande, SIGNAL("doubleClicked(QListBoxItem*)"),self.DefCmd )
+        QObject.connect( self.LBNouvCommande, SIGNAL("returnPressed(QListBoxItem*)"),self.DefCmd )
+
+  def DefCmd(self):
+        if (self.editor.focusWidget())!=self.LBNouvCommande :
+            return 
+        if self.LBNouvCommande.selectedItem()== 0 : return
+        if self.LBNouvCommande.selectedItem()== None : return
+        name=str(self.LBNouvCommande.selectedItem().text())
+        if name==QString(" "):
+          return
+        if name.find("GROUPE :")==0 :
+          return
+        self.editor.init_modif()
+        new_node = self.node.append_brother(name,'after')
+
+
+  def LEFiltreTextChanged(self):
+        MonItem=self.LBNouvCommande.findItem(self.LEFiltre.text().upper(),Qt.Contains)
+       if MonItem != None :
+          self.LBNouvCommande.setCurrentItem(MonItem)
+          self.LBNouvCommande.setSelected(MonItem,1)
+        try :
+           QObject.disconnect(self.LBNouvCommande,SIGNAL("returnPressed(QListBoxItem*)"),self.DefCmd)
+        except :
+           pass
+
+  def LEfiltreReturnPressed(self):
+        self.DefCmd()
+
+  def BNextPressed(self):
+        MonItem=self.LBNouvCommande.findItem(self.LEFiltre.text().upper(),Qt.Contains)
+        if MonItem != None :
+           self.LBNouvCommande.setCurrentItem(self.LBNouvCommande.currentItem()+1)
+           self.LEFiltreTextChanged()
+
+  def LBNouvCommandeClicked(self):
+        name=str(self.LBNouvCommande.currentText())
+
+
+# ---------------------------- #
+class QTPanelTBW3(QTPanel):
+# ---------------------------- #
+
+  """
+  Classe contenant les méthodes nécessaires a l onglet "Nommer Concept"  
+  si non réentrant
+  hérite de QTPanel                   # Attention n appelle pas le __init__
+  Gére plus précisement :
+  """
+
+  def __init__(self,node, parent = None):
+        self.editor    = parent
+        self.node      = node
+        type_sd = self.node.item.get_type_sd_prod()
+        nomConcept = self.node.item.GetText()
+        self.typeConcept.setText(type_sd)
+        self.LENomConcept.setText("")
+        self.LENomConcept.setText(nomConcept)
+        
+
+
+  def LENomConceptReturnPressed(self):
+        """
+        Nomme le concept SD retourne par l'etape
+        """
+        nom = str(self.LENomConcept.text())
+        nom = string.strip(nom)
+
+        if nom == '' : return                  # si pas de nom, on ressort sans rien faire
+
+        self.editor.init_modif()
+        test,mess = self.node.item.nomme_sd(nom)
+        self.editor.affiche_infos(mess)
+
+# ----------------------- #
+class ViewText(QDialog):
+# ----------------------- #
+    """
+    Classe permettant la visualisation de texte
+    """
+    def __init__(self,parent = None,name = None,modal = 0,fl = 0):
+        QDialog.__init__(self,parent,name,modal,fl)
+        
+        l1 = QVBoxLayout(self,11,6,)
+        self.view = QTextEdit(self)
+        self.view.setReadOnly(True)
+
+        l2 = QHBoxLayout(None,0,6)
+        Horizontal_Spacing2 = QSpacerItem(220,20,QSizePolicy.Expanding,QSizePolicy.Minimum)                
+        bclose= QPushButton(self)
+        bclose.setText(self.trUtf8( "Fermer"))
+        bsave= QPushButton(self)
+        bsave.setText(self.trUtf8( "Sauver"))
+        l2.addItem(Horizontal_Spacing2)
+        l2.addWidget(bsave)
+        l2.addWidget(bclose)
+                
+        l1.addWidget(self.view)        
+        l1.addLayout(l2)
+
+        self.resize( QSize(600,507).expandedTo(self.minimumSizeHint()) )
+        self.connect( bclose,SIGNAL("clicked()"), self, SLOT("close()") )
+        self.connect( bsave,SIGNAL("clicked()"), self.saveFile )
+        
+    def setText(self, txt ):    
+        self.view.setText(txt)
+        
+    def saveFile(self):
+        #recuperation du nom du fichier
+        fn = QFileDialog.getSaveFileName(None,
+                self.trUtf8("All Files (*)"), self, None,
+                self.trUtf8("Save File"), '', 0)                
+        if not fn.isNull():                
+           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
+           fn = unicode(QDir.convertSeparators(fn))                
+        else:
+           return
+
+        #ecriture du fichier
+        try:
+           f = open(fn, 'wb')
+           f.write(str(self.view.text()))
+           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
+
+
+#-------------------------------
+class itemColore(QListBoxText):
+#-------------------------------
+    def paint(self,p):
+        p.setPen(Qt.red)
+        QListBoxText.paint(self,p);
diff --git a/InterfaceQT/qtEficas.py b/InterfaceQT/qtEficas.py
new file mode 100644 (file)
index 0000000..0e537d8
--- /dev/null
@@ -0,0 +1,295 @@
+# -*- coding: iso-8859-1 -*-
+
+import os, sys
+REPINI=os.path.dirname(os.path.abspath(__file__))
+INSTALLDIR=os.path.join(REPINI,'..')
+sys.path.append(INSTALLDIR)
+sys.path.append(INSTALLDIR+"/Ui")
+sys.path.append(INSTALLDIR+"/InterfaceQT")
+
+from qt import *
+from myMain import Eficas
+from viewManager import MyTabview
+
+from Editeur import configuration
+from Editeur import session
+
+import utilIcons
+utilIcons.initializeMimeSourceFactory()
+
+
+class Appli(Eficas):    
+    """
+    Class implementing the main user interface.
+    """
+    def __init__(self,code="ASTER",salome=0,parent=None):
+        """
+        Constructor
+        
+        @param loc locale to be used by the UI (string)
+        @param splash reference to the splashscreen (UI.SplashScreen.SplashScreen)
+        """
+        self.ihm="QT"
+        self.code=code
+        self.salome=salome
+        Eficas.__init__(self,parent,fl=Qt.WType_Dialog)
+        #Eficas.__init__(self,parent)
+
+        if code == "ASTER" : 
+           from Aster import prefs
+           import sys
+           sys.path.append(INSTALLDIR+"/Aster")
+       else :
+          import prefs 
+           #try :
+           if 1 :
+             apply(Appli.__dict__[code],(self,))
+           #except :
+           else:
+             pass
+        if hasattr(prefs,'encoding'):
+           import sys
+           reload(sys)
+           sys.setdefaultencoding(prefs.encoding)
+           del sys.setdefaultencoding
+
+        self.top=self
+        self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
+        self.CONFIGStyle = configuration.make_config_style(self,prefs.REPINI)
+
+        self.viewmanager = MyTabview(self, self) #MyTabview, MyWorkspace, Listspace
+        self.setCentralWidget(self.viewmanager)
+
+        self.recentMenu = QPopupMenu(self.Fichier)
+        self.Fichier.insertItem(self.trUtf8('&Recents'), self.recentMenu,99,8)
+        self.connect(self.recentMenu,SIGNAL('aboutToShow()'),self.handleShowRecentMenu)
+        self.connect(self,PYSIGNAL('preferencesChanged'),
+                     self.viewmanager.handlePreferencesChanged)
+        
+        self.connect(self.viewmanager,PYSIGNAL('lastEditorClosed'),
+                     self.handleLastEditorClosed)
+                     
+        self.connect(self.viewmanager,PYSIGNAL('editorOpened'),
+                     self.handleEditorOpened)
+                             
+        # Initialise the instance variables.
+        self.currentProg = None
+        self.isProg = 0
+        self.utEditorOpen = 0
+        self.utProjectOpen = 0
+        
+        self.inDragDrop = 0
+        self.setAcceptDrops(1)
+        self.ficPatrons={}
+        self.initPatrons()
+        self.monAssistant=QAssistantClient(QString(""), self.viewmanager)
+        
+        if self.salome :
+           from Editeur import session
+           self.ouvreFichiers()
+        
+    def OPENTURNS(self) :
+        self.MenuBar.removeItem(5)
+        self.MenuBar.removeItem(6)
+        self.MenuBar.removeItem(7)
+
+
+    def ouvreFichiers(self) :
+    # Ouverture des fichiers de commandes donnes sur la ligne de commande
+        cwd=os.getcwd()
+        self.dir=cwd
+        for study in session.d_env.studies:
+            os.chdir(cwd)
+            d=session.get_unit(study,self)
+            #print study["comm"]
+            self.viewmanager.handleOpen(fn=study["comm"],units=d)
+
+        
+    def initPatrons(self) :
+    # Mise à jour du menu des fichiers recemment ouverts
+        from Editeur import listePatrons
+        self.listePatrons = listePatrons.listePatrons(self.code)
+        idx = 0
+        for nomSsMenu in self.listePatrons.liste.keys():
+            ssmenu = QPopupMenu(self.Patrons)
+            self.Patrons.insertItem(nomSsMenu, ssmenu)
+            for fichier in self.listePatrons.liste[nomSsMenu]:
+               id = ssmenu.insertItem(fichier, self.handleOpenPatrons)
+               self.ficPatrons[idx]=fichier
+               self.Patrons.setItemParameter(id,idx)
+               idx=idx+1
+
+    def traductionV7V8(self):
+        from gereTraduction import traduction
+        traduction(self.CONFIGURATION.rep_user,self.viewmanager,"V7V8")
+
+    def traductionV8V9(self):
+        from gereTraduction import traduction
+        traduction(self.CONFIGURATION.rep_user,self.viewmanager,"V8V9")
+
+    def version(self) :
+        from desVisu import DVisu
+        titre = "version "
+        monVisu=DVisu(parent=self.viewmanager,fl=Qt.WType_Dialog)
+        monVisu.setCaption(titre)
+        monVisu.TB.setText("Eficas V1.14")
+        monVisu.adjustSize()
+        monVisu.show()
+
+    def aidePPal(self) :
+        maD=INSTALLDIR+"/AIDE/fichiers"
+        docsPath = QDir(maD).absPath()
+        self.monAssistant.showPage( QString("%1/index.html").arg(docsPath) )
+
+    def optionEditeur(self) :
+        from monOptionsEditeur import Options
+        monOption=Options(parent=self.viewmanager,fl=Qt.WType_Dialog,configuration=self.CONFIGURATION)
+        monOption.show()
+        
+    def optionPdf(self) :
+        from monOptionsPdf import OptionPdf
+        monOption=OptionPdf(parent=self.viewmanager,fl=Qt.WType_Dialog,configuration=self.CONFIGURATION)
+        monOption.show()
+        
+    def handleShowRecentMenu(self):
+        """
+        Private method to set up recent files menu.
+        """
+        idx = 0
+        self.recentMenu.clear()
+        
+        for rp in self.viewmanager.recent:
+            id = self.recentMenu.insertItem('&%d. %s' % (idx+1, unicode(rp)),
+                                            self.handleOpenRecent)
+            self.recentMenu.setItemParameter(id,idx)
+            
+            idx = idx + 1
+            
+        self.recentMenu.insertSeparator()
+        self.recentMenu.insertItem(self.trUtf8('&Clear'), self.handleClearRecent)
+        
+    def handleOpenPatrons(self, idx):
+        fichier=REPINI+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
+        self.viewmanager.handleOpen(fn=fichier, patron = 1)
+
+
+    def handleOpenRecent(self, idx):
+        """
+        Private method to open a file from the list of rencently opened files.
+        
+        @param idx index of the selected entry (int)
+        """        
+        self.viewmanager.handleOpen(unicode(self.viewmanager.recent[idx]))
+        
+    def handleClearRecent(self):
+        """
+        Private method to clear the recent files menu.
+        """
+        self.viewmanager.recent = QStringList()
+
+        
+    def handleLastEditorClosed(self):
+        """
+        Public slot to handle the lastEditorClosed signal.
+        """
+        pass # CS_pbruno todo griser les parties k'il faut
+        
+    def handleEditorOpened(self, fn):
+        """
+        Public slot to handle the editorOpened signal.
+        
+        @param fn filename of the opened editor (string)
+        """
+        pass # CS_pbruno todo degriser les parties k'il faut
+        
+        
+    def fileNew(self):        
+        self.viewmanager.newEditor()        
+        
+    def fileOpen(self, prog=None):
+        self.viewmanager.handleOpen(prog)        
+        
+    def fileNewView(self):
+        self.viewmanager.handleNewView()
+        
+    def fileSave(self):
+        self.viewmanager.saveCurrentEditor()
+        
+    def fileSaveAs(self):
+        self.viewmanager.saveAsCurrentEditor()
+        
+    def fileClose(self):
+        self.viewmanager.handleClose()
+        
+    def fileCloseAll(self):
+        self.viewmanager.handleCloseAll()
+        
+    def fileExit(self):
+        # On peut sortir sur Abort
+        if self.viewmanager.handleCloseAll() ==0 : 
+           return
+        if self.salome :
+           self.close()
+        else :
+           qApp.closeAllWindows()
+        
+    def editCopy(self):
+        self.viewmanager.handleEditCopy()
+      
+    def editCut(self):
+        self.viewmanager.handleEditCut()
+    
+    def editPaste(self):
+        self.viewmanager.handleEditPaste()
+        
+    def jdcFichierSource(self):
+        self.viewmanager.handleViewJdcFichierSource()
+        
+    def jdcRapport(self):
+        self.viewmanager.handleViewJdcRapport()
+        
+    def visuJdcPy(self):
+        self.viewmanager.handlevisuJdcPy()
+
+    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)
+
+    def NewInclude(self):
+        self.viewmanager.newIncludeEditor()
+
+if __name__=='__main__':
+
+    # Modules Eficas
+    sys.path.append(INSTALLDIR+"/Aster")
+    from Aster import prefs
+    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
+
+    from Editeur import import_code
+    from Editeur import session
+
+    # Analyse des arguments de la ligne de commande
+    options=session.parse(sys.argv)
+    code=options.code
+
+    app = QApplication(sys.argv)    
+    mw = Appli()
+    app.setMainWidget(mw)
+    app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
+    mw.ouvreFichiers()
+    mw.show()
+            
+    res = app.exec_loop()
+    sys.exit(res)
diff --git a/InterfaceQT/qtSaisie.py b/InterfaceQT/qtSaisie.py
new file mode 100644 (file)
index 0000000..7c3c86e
--- /dev/null
@@ -0,0 +1,185 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from qt import *
+
+# Import des panels
+
+class SaisieValeur:
+  """
+  Classe contenant les méthodes communes aux  panels
+  permettant de choisir des valeurs 
+  """
+  def __init__(self):
+        pass
+
+  def InitListBoxASSD(self):
+       listeNomsSD = self.node.item.get_sd_avant_du_bon_type()
+       for aSD in listeNomsSD:
+            self.listBoxASSD.insertItem( aSD)
+            QObject.connect(self.listBoxASSD, SIGNAL("doubleClicked(QListBoxItem*)" ), self.ClicASSD )
+       min,max =  self.node.item.GetMinMax()
+       l= self.node.item.GetListeValeurs()
+       
+       if (min == 1 and min == max and len(listeNomsSD)==1 and (l==[] or l==None)):
+            if ('R' not in self.node.item.get_type()) :
+               self.listBoxASSD.setCurrentItem(0)
+
+
+  def BuildLBValeurs(self):
+        self.LBValeurs.clear()
+        listeValeurs=self.node.item.GetListeValeurs()
+        for valeur in listeValeurs:
+            self.LBValeurs.insertItem(str(valeur))
+        if listeValeurs != None and listeValeurs != [] :
+            self.LBValeurs.setCurrentItem(len(listeValeurs) - 1)
+       
+
+  def RemplitPanel(self,listeDejaLa=[]):
+        self.listBoxVal.clear()
+        lChoix=self.node.item.get_liste_possible(listeDejaLa)
+        for valeur in lChoix :
+            self.listBoxVal.insertItem( str(valeur) ) 
+        if len(lChoix) == 1 :
+            self.listBoxVal.setSelected(0,1)
+
+  def ClicASSD(self):
+         if self.listBoxASSD.selectedItem()== None : return
+         valeurQstring=self.listBoxASSD.selectedItem().text()
+         commentaire = QString("Valeur selectionnée : ") 
+         commentaire.append(valeurQstring)
+         self.Commentaire.setText(commentaire)
+         valeur=valeurQstring.latin1()
+         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()
+         validite,commentaire=self.politique.RecordValeur(valeur)
+         #self.Commentaire.setText(QString(commentaire))
+         self.editor.affiche_infos(commentaire)
+
+  def BOkPressed(self):
+         if self.listBoxVal.selectedItem()==None :
+            commentaire = "Pas de valeur selectionnée" 
+            self.Commentaire.setText(QString(commentaire))
+         else :
+            self.ClicValeur()       
+
+  def BOk2Pressed(self):
+         if str(self.lineEditVal.text())== "" :
+            commentaire = "Pas de valeur entrée " 
+            self.Commentaire.setText(QString(commentaire))
+         else :
+            self.LEValeurPressed()       
+
+  def LEValeurPressed(self,valeur=None):
+         if valeur == None :
+            nouvelleValeur=str(self.lineEditVal.text())
+         else :
+            self.lineEditVal.setText(QString(valeur.nom))
+            nouvelleValeur=valeur
+         validite,commentaire=self.politique.RecordValeur(nouvelleValeur)
+         if commentaire != "" :
+            #self.Commentaire.setText(QString(commentaire))
+            self.editor.affiche_infos(commentaire)
+
+
+  def TraiteLEValeur(self,valeurTraitee=None) :
+        # lit la chaine entree dans le line edit
+        # et la tranforme en chaine de valeurs
+        # a traiter. renvoie eventuellement des complexes
+        listeValeurs=[]
+        if valeurTraitee == None :
+           valeurBrute=str(self.LEValeur.text())
+        else :
+           valeurBrute=valeurTraitee
+        if valeurBrute == str("") : return 1, listeValeurs
+        try :
+           valeur=eval(valeurBrute,{})        
+        except :
+           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 (v== 'RI' or v == 'MP'):
+                    try :
+                       t=tuple([v,valeur[indice+1],valeur[indice+2]])
+                       listeValeurs.append(t)
+                       indice=indice+3
+                    except :
+                       commentaire = "Veuillez entrer le complexe sous forme aster ou sous forme python"
+                       self.editor.affiche_infos(commentaire)
+                       return listeValeurs,0
+                       
+
+                 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
+        elif type(valeur) == types.StringType:
+             listeValeurs=valeur.split(',')
+        else:
+          listeValeurs.append(valeur)
+
+        return listeValeurs,1
+
+
+class SaisieSDCO :
+  def __init__(self):
+        pass
+
+  def LESDCOReturnPressed(self):
+        """
+           Lit le nom donné par l'utilisateur au concept de type CO qui doit être
+           la valeur du MCS courant et stocke cette valeur
+        """
+        self.editor.init_modif()
+        anc_val = self.node.item.get_valeur()
+        if anc_val != None:
+          # il faut egalement propager la destruction de l'ancien concept
+          self.node.item.delete_valeur_co(valeur=anc_val)
+          # et on force le recalcul des concepts de sortie de l'etape
+          self.node.item.object.etape.get_type_produit(force=1)
+          # et le recalcul du contexte
+          self.node.item.object.etape.parent.reset_context()
+        nomConcept = str(self.LESDCO.text())
+        if nomConcept == "" : return
+
+        test,commentaire=self.node.item.set_valeur_co(nomConcept)
+        if test:
+           commentaire="Valeur du mot-clé enregistree"
+           self.node.update_node_valid()
+        else :
+           cr = self.node.item.get_cr()
+           commentaire = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
+           self.node.item.set_valeur_co(anc_val)
+        self.Commentaire.setText(QString(commentaire))
diff --git a/InterfaceQT/readercata.py b/InterfaceQT/readercata.py
new file mode 100644 (file)
index 0000000..1f2dac8
--- /dev/null
@@ -0,0 +1,413 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce module sert a lire un catalogue et a construire
+    un objet CataItem pour Eficas.
+    Il s'appuie sur la classe READERCATA
+"""
+# Modules Python
+import time
+import os,sys,py_compile
+import traceback
+import cPickle
+import re
+
+# Modules Eficas
+import prefs
+from Noyau.N_CR import CR
+from Editeur.utils  import init_rep_cata_dev
+
+from Editeur    import analyse_catalogue
+from Editeur    import autre_analyse_cata
+from Editeur    import uiinfo
+from monChoixCata import MonChoixCata
+
+from qt import *
+
+version="14"
+
+class READERCATA:
+
+   def __init__(self,appli,parent):
+      self.appli=appli      
+      self.parent=parent
+      self.code=self.appli.code
+      self.appli.format_fichier='python'
+      self.version_code=self.appli.version_code
+      self.version_cata=None
+      self.fic_cata=None
+      self.OpenCata()
+      self.cataitem=None
+
+   def OpenCata(self):
+      """ 
+          Ouvre le catalogue standard du code courant, cad le catalogue présent
+          dans le répertoire Cata 
+      """
+      message1 = "Compilation des fichiers Eficas \n\n Veuillez patienter ..."
+      self.configure_barre(4)
+
+      liste_cata_possibles=[]
+      for catalogue in self.appli.CONFIGURATION.catalogues:
+          if catalogue[0] == self.code :
+             liste_cata_possibles.append(catalogue)
+
+      if len(liste_cata_possibles)==0:          
+          QMessageBox.critical( self.parent, "Import du catalogue","Pas de catalogue defini pour le code %s" % self.code)
+          self.appli.parent.ui.close()
+          sys.exit(1)
+
+      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.appli.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.appli.format_fichier=liste_cata_possibles[0][3] 
+          lab=QString("Eficas V1.") 
+          lab+=QString(version) 
+          lab+=QString(" pour ")
+          lab+=QString(self.code) 
+          lab+=QString(" avec le catalogue ")
+          lab+=self.version_code
+          try :
+          # souci pour les includes
+              self.appli.parent.ui.setCaption(lab)
+          except :
+              pass
+          #qApp.mainWidget().setCaption(lab)
+      else:
+          # plusieurs catalogues sont disponibles : il faut demander a l'utilisateur
+          # lequel il veut utiliser ...
+          self.ask_choix_catalogue()
+
+      if self.fic_cata == None :
+          print "Pas de catalogue pour code %s, version %s" %(self.code,self.version_code)
+          sys.exit(0)
+
+      self.determineMater()
+
+
+      # détermination de fic_cata_c et fic_cata_p
+      self.fic_cata_c = self.fic_cata + 'c'
+      self.fic_cata_p = os.path.splitext(self.fic_cata)[0]+'_pickled.py'
+
+      # import du catalogue
+      self.cata = self.import_cata(self.fic_cata)
+      self.update_barre()
+      if not self.cata :          
+          QMessageBox.critical( self.parent, "Import du catalogue","Impossible d'importer le catalogue %s" %self.fic_cata)
+         self.appli.parent.ui.close()
+          sys.exit(1)
+      #
+      # analyse du catalogue (ordre des mots-clés)
+      #
+      # Retrouve_Ordre_Cata_Standard fait une analyse textuelle du catalogue
+      # remplacé par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation
+      # des mots clés a la création
+      self.Retrouve_Ordre_Cata_Standard_autre()
+      self.update_barre()
+
+      #
+      # analyse des données liées a  l'IHM : UIinfo
+      #
+      uiinfo.traite_UIinfo(self.cata)
+      self.update_barre()
+
+      #
+      # traitement des clefs documentaires
+      #
+      self.traite_clefs_documentaires()
+
+      # chargement et analyse des catalogues développeur (le cas échéant)
+      #
+      if self.appli.CONFIGURATION.isdeveloppeur == 'OUI' :
+          init_rep_cata_dev(self.fic_cata,self.appli.CONFIGURATION.path_cata_dev)
+          fic_cata_dev = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py')
+          if os.path.isfile(fic_cata_dev):
+              # il y a bien un catalogue développeur : il faut récupérer le module_object associé ...
+              test = self.compile_cata(fic_cata_dev,fic_cata_dev+'c')
+              if not test :
+                  showinfo("Compilation catalogue développeur",
+                           "Erreur dans la compilation du catalogue développeur")
+                  self.cata = (self.cata,)
+              else:
+                  self.cata_dev =self.import_cata(fic_cata_dev)
+                  #self.Retrouve_Ordre_Cata_Developpeur()
+                  self.Retrouve_Ordre_Cata_Developpeur_autre()
+                  self.cata = (self.cata,self.cata_dev)
+          else:
+              self.cata = (self.cata,)
+      else:
+          self.cata = (self.cata,)
+      titreSuite=" avec le catalogue " + os.path.basename(self.fic_cata)
+      titre=self.appli.titre+titreSuite
+      if self.appli.top:
+        self.appli.top.title(titre)
+      self.appli.titre=titre
+
+   def determineMater(self) :
+      # Determinination du repertoire materiau
+      v_codeSansPoint=self.version_code
+      v_codeSansPoint=re.sub("\.","",v_codeSansPoint)
+      chaine="rep_mat_"+v_codeSansPoint
+      if hasattr(self.appli.CONFIGURATION,chaine):
+          a=getattr(self.appli.CONFIGURATION,chaine)
+      else :
+          try :
+             a=self.appli.CONFIGURATION.dRepMat[self.version_code]
+          except :
+             if self.code == "ASTER" :
+                print "Probleme avec le repertoire materiau"
+             a='.'
+      self.appli.CONFIGURATION.rep_mat=a
+
+   def import_cata(self,cata):
+      """ 
+          Réalise l'import du catalogue dont le chemin d'acca¨s est donné par cata
+      """
+      nom_cata = os.path.splitext(os.path.basename(cata))[0]
+      rep_cata = os.path.dirname(cata)
+      sys.path[:0] = [rep_cata]
+      try :
+          o=__import__(nom_cata)
+          return o
+      except Exception,e:
+          traceback.print_exc()
+          return 0
+
+   def Retrouve_Ordre_Cata_Standard_autre(self):
+      """ 
+          Construit une structure de données dans le catalogue qui permet
+          a  EFICAS de retrouver l'ordre des mots-clés dans le texte du catalogue.
+          Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui
+          contient le nom des mots clés dans le bon ordre
+      """ 
+      self.cata_ordonne_dico,self.appli.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata)
+
+   def Retrouve_Ordre_Cata_Standard(self):
+      """ 
+          Retrouve l'ordre des mots-clés dans le catalogue, cad :
+           - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer
+               l'ordre des mots-clés dans le catalogue
+           - s'il n'a pas été modifié, relie le fichier pickle 
+      """
+      time1 = os.path.getmtime(self.fic_cata)
+      try :
+          time2 = os.path.getmtime(self.fic_cata_p)
+      except:
+          time2 = 0
+      if time2 > time1 :
+          # l'objet catalogue n'a pas été modifié depuis le dernier "pickle"
+          self.Get_Ordre_Cata()
+      else :
+          # le catalogue a été modifié depuis le dernier "pickle" :
+          # il faut retrouver l'ordre du catalogue et refaire pickle
+          self.Get_Ordre_Cata(mode='cata')
+      self.appli.affiche_infos("Catalogue standard chargé")
+
+   def Retrouve_Ordre_Cata_Developpeur(self):
+      """ 
+          Retrouve l'ordre des mots-clés dans le catalogue, cad :
+          - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer
+            l'ordre des mots-clés dans le catalogue
+          - s'il n'a pas été modifié, relie le fichier pickle 
+      """
+      if self.code != 'ASTER' : return
+      fic_cata = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py')
+      message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev
+      cata_dev_ordonne = analyse_cata.analyse_catalogue(self,self.fic_cata)
+      self.cata_dev_ordonne_cr = cata_dev_ordonne.cr
+      cata_dev_ordonne_dico = cata_dev_ordonne.entites
+      self.cata_ordonne_dico.update(cata_dev_ordonne_dico)
+      self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" )
+
+   def Retrouve_Ordre_Cata_Developpeur_autre(self):
+      """
+          Retrouve l'ordre des mots-clés dans le catalogue, cad :
+          - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer
+            l'ordre des mots-clés dans le catalogue
+          - s'il n'a pas été modifié, relie le fichier pickle
+      """
+      if self.code != 'ASTER' : return
+      message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev
+      cata_dev_ordonne_dico,self.appli.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata)
+      self.cata_ordonne_dico.update(cata_dev_ordonne_dico)
+      self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" )
+
+   def Get_Ordre_Cata(self,mode='pickle'):
+      """ 
+          Retrouve l'ordre du catalogue :
+            - mode='pickle ': tente de relire le fichier pickle et sinon lance l'analyse du catalogue
+            - mode='cata'   : force l'analyse du catalogue directement sans relire le pickle
+      """
+      if mode == 'pickle' :
+          try:
+              f = open(self.fic_cata_p)
+              u = cPickle.Unpickler(f)
+              self.cata_ordonne_dico = u.load()
+              f.close()
+          except :
+              # on peut ne pas arriver a  relire le fichier pickle s'il a été altéré
+              # ou (le plus probable) s'il a été créé sous un autre OS
+              self.Get_Ordre_Cata(mode='cata')
+      elif mode == 'cata':
+          cata_ordonne = analyse_catalogue.analyse_catalogue(self,self.fic_cata)
+          self.cata_ordonne_cr = cata_ordonne.cr
+          self.cata_ordonne_dico = cata_ordonne.entites
+          f = open(self.fic_cata_p,'w+')
+          p = cPickle.Pickler(f)
+          p.dump(self.cata_ordonne_dico)
+          f.close()
+      else :
+          raise Exception("Appel a  un mode inconnu de Get_Ordre_Cata : %s" % mode)
+          return
+
+   def ask_choix_catalogue(self):
+      """
+      Ouvre une fenetre de sélection du catalogue dans le cas oa¹ plusieurs
+      ont été définis dans Accas/editeur.ini
+      """      
+      # construction du dictionnaire et de la liste des catalogues
+      self.dico_catalogues = {}
+      defaut = None
+      for catalogue in self.appli.CONFIGURATION.catalogues:
+          if catalogue[0] == self.code :
+              self.dico_catalogues[catalogue[1]] = catalogue
+              if len(catalogue) == 5 :
+                  if catalogue[4]=='defaut' : defaut = catalogue[1]
+      liste_choix = self.dico_catalogues.keys()
+      liste_choix.sort()
+
+      lab=QString("Eficas V1.") 
+      lab+=QString(version) 
+      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.parent, "", "Aucun catalogue déclaré pour %s" %self.code)
+         self.appli.parent.ui.close()
+          sys.exit(1)
+          
+      # création d'une boite de dialogue modale
+      widgetChoix=MonChoixCata(liste_choix,self, self.parent, "", True )
+      ret=widgetChoix.exec_loop()
+      
+      lab=QString("Eficas V1.") 
+      lab+=QString(version) 
+      lab+=QString(" pour ")
+      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]
+          self.version_code = self.version_cata
+          self.appli.format_fichier = self.dico_catalogues[self.version_cata][3]
+          lab+=self.version_cata
+          self.appli.parent.ui.setCaption(lab)
+          #qApp.mainWidget().setCaption(lab)
+      else :
+          sys.exit(0)
+
+
+   def compile_cata(self,cata,catac):
+      """ 
+           Teste si le catalogue a bien besoin d'etre recompilé et si oui, le compile et
+           affiche un message dans le splash . Retourne 1 si la compilation s'est bien déroulée,
+           0 sinon.
+      """
+      time1 = os.path.getmtime(cata)
+      try:
+          time2 = os.path.getmtime(catac)
+      except:
+          time2 = 0
+      if time1 > time2:
+          try:
+              # le catalogue doit etre recompilé avant d'etre importé
+              if self.appli.test == 0 :
+                 splash._splash.configure(text="Compilation du catalogue\nCela peut prendre plusieurs secondes ...")
+              py_compile.compile(cata)
+          except:
+              return 0
+      return 1
+
+
+#--------------------------------------------------------------------------------
+# Méthodes concernant la barre de progression lors de l'analyse du catalogue
+#--------------------------------------------------------------------------------
+
+   def configure_barre(self,nbcommandes):
+      """ Configure la barre de progression en lui passant comme parama¨tre le
+          nombre de commandes du catalogue qui lui sert a  déterminer la longueur de son incrément """
+      try:
+          if self.appli.test == 0 :
+             splash._splash.configure(barre='oui',ratio = nbcommandes)
+      except:
+          pass
+
+   def update_barre(self):
+      """ Update la position de la barre de progression : la fait progresser de son incrément """
+      try:
+          if self.appli.test == 0 :
+             splash._splash.update_barre()
+      except:
+          pass
+
+   def visuCRCATA(self):
+      """
+      Méthode permettant l'affichage du rapport de validation
+      """
+      cr = CR( debut = "Début rapport de validation du catalogue",
+               fin = "Fin rapport de validation du catalogue")
+      titre="rapport de validation du catalogue"
+      if hasattr(self,'cata_ordonne_cr') :
+          cr.add(self.cata_ordonne_cr)
+      if hasattr(self,'cata_dev_ordonne_cr') :
+          cr.add(self.cata_dev_ordonne_cr)
+      for cata in self.cata:
+          if hasattr(cata,'JdC'):
+              cr.add(cata.JdC.report())
+      texte_cr = str(cr)
+      self.visu_texte_cr = Fenetre(self.appli,titre=titre,texte=texte_cr)
+
+
+   def traite_clefs_documentaires(self):
+      try:
+        self.fic_cata_clef=os.path.splitext(self.fic_cata_c)[0]+'_clefs_docu'
+        f=open(self.fic_cata_clef)
+      except:
+        #print "Pas de fichier associé contenant des clefs documentaires"
+        return
+
+      dict_clef_docu={}
+      for l in f.readlines():
+          clef=l.split(':')[0]
+          docu=l.split(':')[1]
+          docu=docu[0:-1]
+          dict_clef_docu[clef]=docu
+      for oper in self.cata.JdC.commandes:
+           if dict_clef_docu.has_key(oper.nom):
+              oper.docu=dict_clef_docu[oper.nom]
diff --git a/InterfaceQT/typeNode.py b/InterfaceQT/typeNode.py
new file mode 100644 (file)
index 0000000..53d3f54
--- /dev/null
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+from qt import *
+
+#---------------------------#
+class PopUpMenuNodePartiel :
+#---------------------------#
+    def createPopUpMenu(self):
+        #menu
+        self.menu = QPopupMenu(self.tree)
+
+        #ss-menu Comment:
+        self.commentMenu = QPopupMenu( self.menu )
+        self.menu.insertItem( qApp.translate('Browser','Commentaire'), self.commentMenu ) 
+        self.commentMenu.insertItem( 'après', self.addCommentAfter )
+        self.commentMenu.insertItem( 'avant', self.addCommentBefore )
+
+        #ss-menu Parameters:
+        self.parametersMenu = QPopupMenu( self.menu )
+        self.parametersMenu.insertItem( 'après', self.addParametersAfter )
+        self.parametersMenu.insertItem( 'avant', self.addParametersBefore )
+
+        #items du menu
+        self.menu.insertItem( qApp.translate('Browser','Supprimer'), self.delete )
+        self.menu.insertItem( qApp.translate('Browser','Parametres'), self.parametersMenu )
+
+    
+    def addCommentAfter(self):
+        """
+        """
+        self.addComment()
+
+    def addCommentBefore(self):
+        """
+        """
+        self.addComment(False)
+
+    def addParametersAfter(self):
+        """
+        """
+        self.addParameters()
+
+    def addParametersBefore(self):
+        """
+        """
+        self.addParameters(False)
+
+
+#-----------------------------------------#
+class PopUpMenuNode(PopUpMenuNodePartiel) :
+#-----------------------------------------#
+    def createPopUpMenu(self):
+        PopUpMenuNodePartiel.createPopUpMenu(self)
+        self.commentMenu.insertItem( 'ce noeud', self.commentIt )
diff --git a/InterfaceQT/utilIcons.py b/InterfaceQT/utilIcons.py
new file mode 100644 (file)
index 0000000..d52fbc5
--- /dev/null
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+
+from qt import QPixmap
+import os
+
+class PixmapCache:
+    """
+    Class implementing a pixmap cache for icons.
+    """
+    def __init__(self):
+        """
+        Constructor
+        """
+        self.pixmapCache = {}
+
+    def getPixmap(self, key):
+        """
+        Public method to retrieve a pixmap.
+        
+        @param key name of the wanted pixmap (string)
+        @return the requested pixmap (QPixmap)
+        """
+        try:
+            return self.pixmapCache[key]
+        except KeyError:
+            self.pixmapCache[key] = QPixmap.fromMimeSource(key)
+            return self.pixmapCache[key]
+            
+pixCache = PixmapCache()
+
+def getPixmap(key, cache = pixCache):
+    """
+    Module function to retrieve a pixmap.
+    
+    @param key name of the wanted pixmap (string)
+    @return the requested pixmap (QPixmap)
+    """
+    return cache.getPixmap(key)
+    
+    
+
+from qt import QMimeSourceFactory
+
+def initializeMimeSourceFactory():
+    """
+    Function to initialize the default mime source factory.
+    
+    """
+    defaultFactory = QMimeSourceFactory.defaultFactory()
+    repini=os.path.dirname(os.path.abspath(__file__))
+    defaultFactory.addFilePath(repini+"/../Editeur/icons") #CS_pbruno todo (config)
+    
diff --git a/InterfaceQT/viewManager.py b/InterfaceQT/viewManager.py
new file mode 100644 (file)
index 0000000..c4542f1
--- /dev/null
@@ -0,0 +1,2550 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import os
+from InterfaceQT import utilIcons 
+from qt import *
+
+
+##fonctions utilitaires
+def normabspath(path):
+    """
+    Function returning a normalized, absolute path.
+    
+    @param path file path (string)
+    @return absolute, normalized path (string)
+    """
+    return os.path.abspath(path)
+    
+    
+def samepath(f1, f2):
+    """
+    Function to compare two paths.
+    
+    @param f1 first path for the compare (string)
+    @param f2 second path for the compare (string)
+    @return flag indicating whether the two paths represent the
+        same path on disk.
+    """
+    if f1 is None or f2 is None:
+        return 0
+        
+    if normcasepath(f1) == normcasepath(f2):
+        return 1
+        
+    return 0
+
+def normcasepath(path):
+    """
+    Function returning a path, that is normalized with respect to its case and references.
+    
+    @param path file path (string)
+    @return case normalized path (string)
+    """
+    return os.path.normcase(os.path.normpath(path))    
+    
+
+
+
+class ViewManager:
+    """
+    Base class inherited by all specific viewmanager classes.
+    
+    It defines the interface to be implemented by specific
+    viewmanager classes and all common methods.
+    
+    @signal lastEditorClosed emitted after the last editor window was closed
+    @signal editorOpened(string) emitted after an editor window was opened
+    @signal editorSaved(string) emitted after an editor window was saved
+    @signal checkActions(editor) emitted when some actions should be checked
+            for their status
+    @signal cursorChanged(editor) emitted after the cursor position of the active
+            window has changed
+    @signal breakpointToggled(editor) emitted when a breakpoint is toggled.
+    @signal bookmarkToggled(editor) emitted when a bookmark is toggled.
+    """
+    def __init__(self, ui ):
+        """
+        Constructor
+        
+        @param ui reference to the main user interface
+        @param dbs reference to the debug server object
+        """
+        # initialize the instance variables
+        self.ui = ui
+        self.appliEficas = ui
+        self.editors = []
+        self.doubles = {}
+        self.currentEditor = None
+        self.untitledCount = 0
+        self.srHistory = {"search" : QStringList(), "replace" : QStringList()}
+        self.editorsCheckFocusIn = 1
+        self.recent =  QStringList()      
+                
+        
+        # initialize the central store for api information (used by
+        # autocompletion and calltips)
+        self.apis = {}
+        self.initFileFilters()
+        
+        
+    def initFileFilters(self):
+        """
+        Private method to initialize the lists of supported filename filters.
+        """
+        self.fileFiltersString = self.trUtf8(\
+            'Python Files (*.py);;'
+            'Aster Files (*.com*);;'
+            'Pyrex Files (*.pyx);;'
+            'Quixote Template Files (*.ptl);;'
+            'IDL Files (*.idl);;'
+            'C Files (*.h *.c);;'
+            'C++ Files (*.h *.hpp *.hh *.cxx *.cpp *.cc);;'
+            'C# Files (*.cs);;'
+            'HTML Files (*.html *.htm *.asp *.shtml *.css);;'
+            'PHP Files (*.php *.php3 *.php4 *.php5 *.phtml);;'
+            'XML Files (*.xml *.xsl *.xslt *.dtd);;'
+            'Java Files (*.java);;'
+            'JavaScript Files (*.js);;'
+            'SQL Files (*.sql);;'
+            'Docbook Files (*.docbook);;'
+            'Perl Files (*.pl *.pm *.ph);;'
+            'Shell Files (*.sh);;'
+            'Aster Files (*.com*);;'
+            'All Files (*)')
+
+        fileFilters = QStringList.split(';;', self.fileFiltersString)
+        
+        self.ext2Filter = {}
+        for fileFilter in fileFilters:
+            extensions = QStringList.split('*', fileFilter)
+            for extension in extensions[1:]:
+                extension = unicode(extension).strip().replace(')', '')
+                if extension:
+                    self.ext2Filter[extension] = unicode(fileFilter)
+        
+        
+        
+    #####################################################################
+    ## methods above need to be implemented by a subclass
+    #####################################################################
+    
+    def canSplit(self):
+        """
+        public method to signal if splitting of the view is available.
+        
+        @return flag indicating splitting of the view is available.
+        """
+        return 0
+        
+    def addSplit(self):
+        """
+        Public method used to split the current view.
+        """
+        pass
+        
+    def removeSplit(self):
+        """
+        Public method used to remove the current split view.
+        
+        @return Flag indicating successful deletion
+        """
+        return 0
+        
+    def setSplitOrientation(self, orientation):
+        """
+        Public method used to set the orientation of the split view.
+        
+        @param orientation orientation of the split
+                (QSplitter.Horizontal or QSplitter.Vertical)
+        """
+        pass
+        
+    def eventFilter(self, object, event):
+        """
+        Private method called to filter an event.
+        
+        @param object object, that generated the event (QObject)
+        @param event the event, that was generated by object (QEvent)
+        @return flag indicating if event was filtered out
+        """
+        return 0
+        
+    def focusInEvent(self, event):
+        """
+        Public method called when the viewmanager receives focus.
+        
+        @param event the event object (QFocusEvent)
+        """
+        self.editorActGrp.setEnabled(1)
+        
+    def focusOutEvent(self, event):
+        """
+        Public method called when the viewmanager loses focus.
+        
+        @param event the event object (QFocusEvent)
+        """
+        self.editorActGrp.setEnabled(0)
+        
+    
+    def initEditMenu(self):
+        """
+        Public method to create the Edit menu
+        
+        @return the generated menu
+        """
+        menu = QPopupMenu(self.ui)
+        menu.insertTearOffHandle()
+        self.undoAct.addTo(menu)
+        self.redoAct.addTo(menu)
+        self.revertAct.addTo(menu)
+        menu.insertSeparator()
+        self.cutAct.addTo(menu)
+        self.copyAct.addTo(menu)
+        self.pasteAct.addTo(menu)
+        self.deleteAct.addTo(menu)
+        menu.insertSeparator()
+        self.indentAct.addTo(menu)
+        self.unindentAct.addTo(menu)
+        menu.insertSeparator()
+        self.commentAct.addTo(menu)
+        self.uncommentAct.addTo(menu)
+        self.streamCommentAct.addTo(menu)
+        self.boxCommentAct.addTo(menu)
+        menu.insertSeparator()
+        self.autoCompleteAct.addTo(menu)
+        self.autoCompleteFromDocAct.addTo(menu)
+        self.autoCompleteFromAPIsAct.addTo(menu)
+        menu.insertSeparator()
+        self.searchAct.addTo(menu)
+        self.searchAgainAct.addTo(menu)
+        self.replaceAct.addTo(menu)
+        menu.insertSeparator()
+        self.searchFilesAct.addTo(menu)
+        menu.insertSeparator()
+        self.gotoAct.addTo(menu)
+        self.gotoBraceAct.addTo(menu)
+        menu.insertSeparator()
+        self.selectBraceAct.addTo(menu)
+        self.selectAllAct.addTo(menu)
+        self.deselectAllAct.addTo(menu)
+        menu.insertSeparator()
+        self.shortenEmptyAct.addTo(menu)
+        self.convertEOLAct.addTo(menu)
+        
+        return menu
+        
+    def initEditToolbar(self):
+        """
+        Public method to create the Edit toolbar
+        
+        @return the generated toolbar
+        """
+        tb = QToolBar(self.ui)
+        self.undoAct.addTo(tb)
+        self.redoAct.addTo(tb)
+        tb.addSeparator()
+        self.cutAct.addTo(tb)
+        self.copyAct.addTo(tb)
+        self.pasteAct.addTo(tb)
+        self.deleteAct.addTo(tb)
+        tb.addSeparator()
+        self.indentAct.addTo(tb)
+        self.unindentAct.addTo(tb)
+        tb.addSeparator()
+        self.commentAct.addTo(tb)
+        self.uncommentAct.addTo(tb)
+        
+        return tb
+        
+    ##################################################################
+    ## Initialize the search related actions, search menu and toolbar
+    ##################################################################
+    
+    def initSearchActions(self):
+        """
+        Private method defining the user interface actions for the search commands.
+        """
+        self.searchActGrp = QActionGroup(self)
+        
+        self.searchAct = QAction(self.trUtf8('Search'),
+                QIconSet(utilIcons.getPixmap("find.png")),
+                self.trUtf8('&Search...'),
+                QKeySequence(self.trUtf8("CTRL+F","Search|Search")),
+                self.searchActGrp)
+        self.searchAct.setStatusTip(self.trUtf8('Search for a text'))
+        self.searchAct.setWhatsThis(self.trUtf8(
+            """<b>Search</b>"""
+            """<p>Search for some text in the current editor. A"""
+            """ dialog is shown to enter the searchtext and options"""
+            """ for the search.</p>"""
+        ))
+        self.connect(self.searchAct,SIGNAL('activated()'),self.handleSearch)
+        self.searchActions.append(self.searchAct)
+        
+        self.searchAgainAct = QAction(self.trUtf8('Search again'),
+                QIconSet(utilIcons.getPixmap("findNext.png")),
+                self.trUtf8('Search &again'),
+                Qt.Key_F3,self.searchActGrp)
+        self.searchAgainAct.setStatusTip(self.trUtf8('Search again for text'))
+        self.searchAgainAct.setWhatsThis(self.trUtf8(
+            """<b>Search again</b>"""
+            """<p>Search again for some text in the current editor."""
+            """ The previously entered searchtext and options are reused.</p>"""
+        ))
+        self.connect(self.searchAgainAct,SIGNAL('activated()'),self.searchDlg.handleFindNext)
+        self.searchActions.append(self.searchAgainAct)
+        
+        self.replaceAct = QAction(self.trUtf8('Replace'),
+                self.trUtf8('&Replace...'),
+                QKeySequence(self.trUtf8("CTRL+R","Search|Replace")),
+                self.searchActGrp)
+        self.replaceAct.setStatusTip(self.trUtf8('Replace some text'))
+        self.replaceAct.setWhatsThis(self.trUtf8(
+            """<b>Replace</b>"""
+            """<p>Search for some text in the current editor and replace it. A"""
+            """ dialog is shown to enter the searchtext, the replacement text"""
+            """ and options for the search and replace.</p>"""
+        ))
+        self.connect(self.replaceAct,SIGNAL('activated()'),self.handleReplace)
+        self.searchActions.append(self.replaceAct)
+        
+        self.gotoAct = QAction(self.trUtf8('Goto Line'),
+                QIconSet(utilIcons.getPixmap("goto.png")),
+                self.trUtf8('&Goto Line...'),
+                QKeySequence(self.trUtf8("CTRL+G","Search|Goto Line")),
+                self.searchActGrp)
+        self.gotoAct.setStatusTip(self.trUtf8('Goto Line'))
+        self.gotoAct.setWhatsThis(self.trUtf8(
+            """<b>Goto Line</b>"""
+            """<p>Go to a specific line of text in the current editor."""
+            """ A dialog is shown to enter the linenumber.</p>"""
+        ))
+        self.connect(self.gotoAct,SIGNAL('activated()'),self.handleGoto)
+        self.searchActions.append(self.gotoAct)
+        
+        self.gotoBraceAct = QAction(self.trUtf8('Goto Brace'),
+                QIconSet(utilIcons.getPixmap("gotoBrace.png")),
+                self.trUtf8('Goto &Brace'),
+                QKeySequence(self.trUtf8("CTRL+L","Search|Goto Brace")),
+                self.searchActGrp)
+        self.gotoBraceAct.setStatusTip(self.trUtf8('Goto Brace'))
+        self.gotoBraceAct.setWhatsThis(self.trUtf8(
+            """<b>Goto Brace</b>"""
+            """<p>Go to the matching brace in the current editor.</p>"""
+        ))
+        self.connect(self.gotoBraceAct,SIGNAL('activated()'),self.handleGotoBrace)
+        self.searchActions.append(self.gotoBraceAct)
+        
+        self.searchActGrp.setEnabled(0)
+        
+        self.searchFilesAct = QAction(self.trUtf8('Search in Files'),
+                QIconSet(utilIcons.getPixmap("projectFind.png")),
+                self.trUtf8('Search in &Files...'),
+                QKeySequence(self.trUtf8("SHIFT+CTRL+F","Search|Search Files")),
+                self)
+        self.searchFilesAct.setStatusTip(self.trUtf8('Search for a text in files'))
+        self.searchFilesAct.setWhatsThis(self.trUtf8(
+            """<b>Search in Files</b>"""
+            """<p>Search for some text in the files of a directory tree"""
+            """ or the project. A dialog is shown to enter the searchtext"""
+            """ and options for the search and to display the result.</p>"""
+        ))
+        self.connect(self.searchFilesAct,SIGNAL('activated()'),self.handleSearchFiles)
+        self.searchActions.append(self.searchFilesAct)
+        
+        
+    ##################################################################
+    ## Initialize the view related actions, view menu and toolbar
+    ##################################################################
+    
+    def initViewActions(self):
+        """
+        Protected method defining the user interface actions for the view commands.
+        """
+        self.viewActGrp = QActionGroup(self)
+        self.viewFoldActGrp = QActionGroup(self)
+
+        self.zoomInAct = QAction(self.trUtf8('Zoom in'),
+                            QIconSet(utilIcons.getPixmap("zoomIn.png")),
+                            self.trUtf8('Zoom &in'),
+                            Qt.CTRL+Qt.Key_Plus, self.viewActGrp)
+        self.zoomInAct.setStatusTip(self.trUtf8('Zoom in on the text'))
+        self.zoomInAct.setWhatsThis(self.trUtf8(
+                """<b>Zoom in</b>"""
+                """<p>Zoom in on the text. This makes the text bigger.</p>"""
+                ))
+        self.connect(self.zoomInAct,SIGNAL('activated()'),self.handleZoomIn)
+        self.viewActions.append(self.zoomInAct)
+        
+        self.zoomOutAct = QAction(self.trUtf8('Zoom out'),
+                            QIconSet(utilIcons.getPixmap("zoomOut.png")),
+                            self.trUtf8('Zoom &out'),
+                            Qt.CTRL+Qt.Key_Minus, self.viewActGrp)
+        self.zoomOutAct.setStatusTip(self.trUtf8('Zoom out on the text'))
+        self.zoomOutAct.setWhatsThis(self.trUtf8(
+                """<b>Zoom out</b>"""
+                """<p>Zoom out on the text. This makes the text smaller.</p>"""
+                ))
+        self.connect(self.zoomOutAct,SIGNAL('activated()'),self.handleZoomOut)
+        self.viewActions.append(self.zoomOutAct)
+        
+        self.zoomToAct = QAction(self.trUtf8('Zoom'),
+                            QIconSet(utilIcons.getPixmap("zoomTo.png")),
+                            self.trUtf8('&Zoom'),
+                            0, self.viewActGrp)
+        self.zoomToAct.setStatusTip(self.trUtf8('Zoom the text'))
+        self.zoomToAct.setWhatsThis(self.trUtf8(
+                """<b>Zoom</b>"""
+                """<p>Zoom the text. This opens a dialog where the"""
+                """ desired size can be entered.</p>"""
+                ))
+        self.connect(self.zoomToAct,SIGNAL('activated()'),self.handleZoom)
+        self.viewActions.append(self.zoomToAct)
+        
+        self.toggleAllAct = QAction(self.trUtf8('Toggle all folds'),
+                            self.trUtf8('Toggle &all folds'),
+                            0, self.viewFoldActGrp)
+        self.toggleAllAct.setStatusTip(self.trUtf8('Toggle all folds'))
+        self.toggleAllAct.setWhatsThis(self.trUtf8(
+                """<b>Toggle all folds</b>"""
+                """<p>Toggle all folds of the current editor.</p>"""
+                ))
+        self.connect(self.toggleAllAct,SIGNAL('activated()'),self.handleToggleAll)
+        self.viewActions.append(self.toggleAllAct)
+        
+        self.toggleCurrentAct = QAction(self.trUtf8('Toggle current fold'),
+                            self.trUtf8('Toggle &current fold'),
+                            0, self.viewFoldActGrp)
+        self.toggleCurrentAct.setStatusTip(self.trUtf8('Toggle current fold'))
+        self.toggleCurrentAct.setWhatsThis(self.trUtf8(
+                """<b>Toggle current fold</b>"""
+                """<p>Toggle the folds of the current line of the current editor.</p>"""
+                ))
+        self.connect(self.toggleCurrentAct,SIGNAL('activated()'),self.handleToggleCurrent)
+        self.viewActions.append(self.toggleCurrentAct)
+        
+        self.unhighlightAct = QAction(self.trUtf8('Remove all highlights'),
+                            QIconSet(utilIcons.getPixmap("unhighlight.png")),
+                            self.trUtf8('Remove all highlights'),
+                            0, self)
+        self.unhighlightAct.setStatusTip(self.trUtf8('Remove all highlights'))
+        self.unhighlightAct.setWhatsThis(self.trUtf8(
+                """<b>Remove all highlights</b>"""
+                """<p>Remove the highlights of all editors.</p>"""
+                ))
+        self.connect(self.unhighlightAct,SIGNAL('activated()'),self.unhighlight)
+        self.viewActions.append(self.unhighlightAct)
+        
+        self.splitViewAct = QAction(self.trUtf8('Split view'),
+                            QIconSet(utilIcons.getPixmap("splitVertical.png")),
+                            self.trUtf8('&Split view'),
+                            0, self)
+        self.splitViewAct.setStatusTip(self.trUtf8('Add a split to the view'))
+        self.splitViewAct.setWhatsThis(self.trUtf8(
+                """<b>Split view</b>"""
+                """<p>Add a split to the view.</p>"""
+                ))
+        self.connect(self.splitViewAct,SIGNAL('activated()'),self.handleSplitView)
+        self.viewActions.append(self.splitViewAct)
+        
+        self.splitOrientationAct = QAction(self.trUtf8('Arrange horizontally'),
+                            self.trUtf8('Arrange &horizontally'),
+                            0, self, None, 1)
+        self.splitOrientationAct.setStatusTip(self.trUtf8('Arrange the splitted views horizontally'))
+        self.splitOrientationAct.setWhatsThis(self.trUtf8(
+                """<b>Arrange horizontally</b>"""
+                """<p>Arrange the splitted views horizontally.</p>"""
+                ))
+        self.splitOrientationAct.setOn(0)
+        self.connect(self.splitOrientationAct,SIGNAL('activated()'),self.handleSplitOrientation)
+        self.viewActions.append(self.splitOrientationAct)
+        
+        self.splitRemoveAct = QAction(self.trUtf8('Remove split'),
+                            QIconSet(utilIcons.getPixmap("remsplitVertical.png")),
+                            self.trUtf8('&Remove split'),
+                            0, self)
+        self.splitRemoveAct.setStatusTip(self.trUtf8('Remove the current split'))
+        self.splitRemoveAct.setWhatsThis(self.trUtf8(
+                """<b>Remove split</b>"""
+                """<p>Remove the current split.</p>"""
+                ))
+        self.connect(self.splitRemoveAct,SIGNAL('activated()'),self.removeSplit)
+        self.viewActions.append(self.splitRemoveAct)
+        
+        self.viewActGrp.setEnabled(0)
+        self.viewFoldActGrp.setEnabled(0)
+        self.unhighlightAct.setEnabled(0)
+        self.splitViewAct.setEnabled(0)
+        self.splitOrientationAct.setEnabled(0)
+        self.splitRemoveAct.setEnabled(0)
+        
+    def initViewMenu(self):
+        """
+        Public method to create the View menu
+        
+        @return the generated menu
+        """
+        menu = QPopupMenu(self.ui)
+        menu.insertTearOffHandle()
+        self.viewActGrp.addTo(menu)
+        menu.insertSeparator()
+        self.viewFoldActGrp.addTo(menu)
+        menu.insertSeparator()
+        self.unhighlightAct.addTo(menu)
+        if self.canSplit():
+            menu.insertSeparator()
+            self.splitViewAct.addTo(menu)
+            self.splitOrientationAct.addTo(menu)
+            self.splitRemoveAct.addTo(menu)       
+        return menu
+        
+    def initViewToolbar(self):
+        """
+        Public method to create the View toolbar
+        
+        @return the generated toolbar
+        """
+        tb = QToolBar(self.ui)
+        self.viewActGrp.addTo(tb)
+        tb.addSeparator()
+        self.unhighlightAct.addTo(tb)
+        if self.canSplit():
+            tb.addSeparator()
+            self.splitViewAct.addTo(tb)
+            self.splitRemoveAct.addTo(tb)
+        
+        return tb
+        
+    ##################################################################
+    ## Initialize the macro related actions and macro menu
+    ##################################################################
+    
+    def initMacroActions(self):
+        """
+        Private method defining the user interface actions for the macro commands.
+        """
+        self.macroActGrp = QActionGroup(self)
+
+        self.macroStartRecAct = QAction(self.trUtf8('Start Macro Recording'),
+                            self.trUtf8('S&tart Macro Recording'),
+                            0, self.macroActGrp)
+        self.macroStartRecAct.setStatusTip(self.trUtf8('Start Macro Recording'))
+        self.macroStartRecAct.setWhatsThis(self.trUtf8(
+                """<b>Start Macro Recording</b>"""
+                """<p>Start recording editor commands into a new macro.</p>"""
+                ))
+        self.connect(self.macroStartRecAct,SIGNAL('activated()'),self.handleMacroStartRecording)
+        self.macroActions.append(self.macroStartRecAct)
+        
+        self.macroStopRecAct = QAction(self.trUtf8('Stop Macro Recording'),
+                            self.trUtf8('Sto&p Macro Recording'),
+                            0, self.macroActGrp)
+        self.macroStopRecAct.setStatusTip(self.trUtf8('Stop Macro Recording'))
+        self.macroStopRecAct.setWhatsThis(self.trUtf8(
+                """<b>Stop Macro Recording</b>"""
+                """<p>Stop recording editor commands into a new macro.</p>"""
+                ))
+        self.connect(self.macroStopRecAct,SIGNAL('activated()'),self.handleMacroStopRecording)
+        self.macroActions.append(self.macroStopRecAct)
+        
+        self.macroRunAct = QAction(self.trUtf8('Run Macro'),
+                            self.trUtf8('&Run Macro'),
+                            0, self.macroActGrp)
+        self.macroRunAct.setStatusTip(self.trUtf8('Run Macro'))
+        self.macroRunAct.setWhatsThis(self.trUtf8(
+                """<b>Run Macro</b>"""
+                """<p>Run a previously recorded editor macro.</p>"""
+                ))
+        self.connect(self.macroRunAct,SIGNAL('activated()'),self.handleMacroRun)
+        self.macroActions.append(self.macroRunAct)
+        
+        self.macroDeleteAct = QAction(self.trUtf8('Delete Macro'),
+                            self.trUtf8('&Delete Macro'),
+                            0, self.macroActGrp)
+        self.macroDeleteAct.setStatusTip(self.trUtf8('Delete Macro'))
+        self.macroDeleteAct.setWhatsThis(self.trUtf8(
+                """<b>Delete Macro</b>"""
+                """<p>Delete a previously recorded editor macro.</p>"""
+                ))
+        self.connect(self.macroDeleteAct,SIGNAL('activated()'),self.handleMacroDelete)
+        self.macroActions.append(self.macroDeleteAct)
+        
+        self.macroLoadAct = QAction(self.trUtf8('Load Macro'),
+                            self.trUtf8('&Load Macro'),
+                            0, self.macroActGrp)
+        self.macroLoadAct.setStatusTip(self.trUtf8('Load Macro'))
+        self.macroLoadAct.setWhatsThis(self.trUtf8(
+                """<b>Load Macro</b>"""
+                """<p>Load an editor macro from a file.</p>"""
+                ))
+        self.connect(self.macroLoadAct,SIGNAL('activated()'),self.handleMacroLoad)
+        self.macroActions.append(self.macroLoadAct)
+        
+        self.macroSaveAct = QAction(self.trUtf8('Save Macro'),
+                            self.trUtf8('&Save Macro'),
+                            0, self.macroActGrp)
+        self.macroSaveAct.setStatusTip(self.trUtf8('Save Macro'))
+        self.macroSaveAct.setWhatsThis(self.trUtf8(
+                """<b>Save Macro</b>"""
+                """<p>Save a previously recorded editor macro to a file.</p>"""
+                ))
+        self.connect(self.macroSaveAct,SIGNAL('activated()'),self.handleMacroSave)
+        self.macroActions.append(self.macroSaveAct)
+        
+        self.macroActGrp.setEnabled(0)
+        
+    def initMacroMenu(self):
+        """
+        Public method to create the Macro menu
+        
+        @return the generated menu
+        """
+        menu = QPopupMenu(self.ui)
+        menu.insertTearOffHandle()
+        self.macroActGrp.addTo(menu)
+        return menu
+    
+
+    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)
+        """        
+     
+        if (editor.modified) and (editor in self.doubles.keys()) :
+            res = QMessageBox.warning(
+                     None,
+                     self.trUtf8("Fichier Duplique"),
+                     self.trUtf8("Le fichier ne sera pas sauvegarde."),
+                     self.trUtf8("&Quitter"), 
+                     self.trUtf8("&Annuler"))
+            if res == 0 : return 1
+            return 0
+        if editor.modified:
+            fn = editor.getFileName()
+            if fn is None:
+                fn = self.trUtf8('Noname')
+            res = QMessageBox.warning(self.parent(), 
+                self.trUtf8("Fichier Modifie"),
+                self.trUtf8("Le fichier <b>%1</b> n a pas ete sauvegarde.")
+                    .arg(fn),
+                self.trUtf8("&Sauvegarder"), self.trUtf8("&Quitter "),
+                self.trUtf8("&Annuler"), 0, 2)
+            if res == 0:
+                (ok, newName) = editor.saveFile()
+                if ok:
+                    self.setEditorName(editor, newName)
+                return ok
+            elif res == 2:
+                return  0
+        return 1
+        
+    def checkAllDirty(self):
+        """
+        Public method to check the dirty status of all editors.
+        
+        @return flag indicating successful reset of all dirty flags (boolean)
+        """
+        for editor in self.editors:
+            if not self.checkDirty(editor):
+                return 0
+                
+        return 1
+        
+    def closeEditor(self, editor):
+        """
+        Private method to close an editor window.
+        
+        @param editor editor window to be closed
+        @return flag indicating success (boolean)
+        """
+        # save file if necessary
+        if not self.checkDirty(editor):
+            return 0
+            
+        # remove the window
+        self.removeView(editor)
+        self.editors.remove(editor)        
+        if not len(self.editors):
+            self.handleLastEditorClosed()
+            self.emit(PYSIGNAL('lastEditorClosed'), ()) #CS_pbruno connecter signal avec l'appli
+        return 1
+    
+    def handleClose(self):
+        """
+        Public method to close the current window.
+        
+        @return flag indicating success (boolean)
+        """
+        aw = self.activeWindow()
+        if aw is None:
+            return 0
+            
+        res = self.closeEditor(aw)
+        if res and aw == self.currentEditor:
+            self.currentEditor = None
+            
+        return res
+        
+    def handleNewView(self):
+        """
+        Public method to close the current window.
+        
+        @return flag indicating success (boolean)
+        """
+        aw = self.activeWindow()
+        if aw is None:
+            return 0
+            
+        aw.handleNewView()
+        
+            
+    def handleCloseAll(self):
+        """
+        Private method to close all editor windows via file menu.
+        """
+        savedEditors = self.editors[:]
+        retour=1
+        for editor in savedEditors:
+            retour=retour*self.closeEditor(editor)
+        return retour
+            
+    def handleCloseWindow(self, fn):
+        """
+        Public method to close an arbitrary source editor.
+        
+        @param fn filename of editor to be closed
+        @return flag indicating success (boolean)
+        """
+        for editor in self.editors:
+            if samepath(fn, editor.getFileName()):
+                break
+        else:
+            return 1
+            
+        res = self.closeEditor(editor)
+        if res and editor == self.currentEditor:
+            self.currentEditor = None
+            
+        return res
+        
+    def handleExit(self):
+        """
+        Public method to handle the debugged program terminating.
+        """
+        if self.currentEditor is not None:
+            self.currentEditor.highlight()
+            self.currentEditor = None
+            
+        self.setSbFile()
+
+    def handlePythonFile(self,pyfn,lineno=None):
+        """
+        Public method to handle the user selecting a file for display.
+        
+        @param pyfn name of file to be opened
+        @param lineno line number to place the cursor at
+        """
+        try:
+            self.displayPythonFile(pyfn,lineno)
+        except IOError:
+            pass
+
+        
+    def displayJDC(self,jdc,fn=None):
+        """
+        Public slot to display a file in an editor.
+        
+        @param fn name of file to be opened
+        @param lineno line number to place the cursor at
+        """        
+        titre=None
+        if fn != None : titre=fn.split("/")[-1]
+        newWin, editor = self.getEditor(None, jdc, title = titre )
+        
+        if newWin:
+            editor.fileName=fn
+            self.handleModificationStatusChanged(editor.modified, editor)
+        self.checkActions(editor)
+        
+        # insert filename into list of recently opened files
+        self.addToRecentList(editor.getFileName())
+
+
+        
+    def newEditorView(self, fn, caller):
+        """
+        Public method to create a new editor displaying the given document.
+        
+        @param fn filename of this view
+        @param caller reference to the editor calling this method        
+        """
+        from editor import JDCEditor
+        editor = JDCEditor(fn, None, self, editor=caller)
+        self.editors.append(editor)
+        self.connect(editor, PYSIGNAL('modificationStatusChanged'),
+            self.handleModificationStatusChanged)
+        self.connect(editor, PYSIGNAL('cursorChanged'), self.handleCursorChanged)
+        self.connect(editor, PYSIGNAL('editorSaved'), self.handleEditorSaved)
+        self.connect(editor, PYSIGNAL('breakpointToggled'), self.handleBreakpointToggled)
+        self.connect(editor, PYSIGNAL('bookmarkToggled'), self.handleBookmarkToggled)
+        self.connect(editor, PYSIGNAL('syntaxerrorToggled'), self.handleSyntaxErrorToggled)
+        self.connect(editor, PYSIGNAL('autoCompletionAPIsAvailable'), 
+            self.handleEditoracAPIsAvailable)
+        self.handleEditorOpened()
+        self.emit(PYSIGNAL('editorOpened'), (fn,))
+        
+        self.connect(caller, PYSIGNAL('editorRenamed'), editor.handleRenamed)
+        self.connect(editor, PYSIGNAL('editorRenamed'), caller.handleRenamed)
+        
+        self.addView(editor, fn)
+        self.handleModificationStatusChanged(editor.modified, editor)
+        self.checkActions(editor)
+        
+    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.remove(fn)
+        self.recent.prepend(fn)
+        if len(self.recent) > 9:
+            self.recent = self.recent[:9]
+
+    def toggleWindow(self,w):
+        """
+        Private method to toggle a workspace window.
+        
+        @param w editor window to be toggled
+        """
+        if w.isHidden():
+            w.show()
+        else:
+            w.hide()
+
+    def setFileLine(self,fn,line,error=0,syntaxError=0):
+        """
+        Public method to update the user interface when the current program or line changes.
+        
+        @param fn filename of editor to update (string)
+        @param line line number to highlight (int)
+        @param error flag indicating an error highlight (boolean)
+        @param syntaxError flag indicating a syntax error
+        """
+        self.setSbFile(fn,line)
+
+        try:
+            newWin, self.currentEditor = self.getEditor(fn)
+        except IOError:
+            return
+
+        # Change the highlighted line.
+        self.currentEditor.highlight(line,error,syntaxError)
+
+        self.currentEditor.highlightVisible()
+        self.checkActions(self.currentEditor, 0)
+            
+    def setSbFile(self,fn=None,line=None,pos=None):
+        """
+        Private method to set the file info in the status bar.
+        
+        @param fn filename to display (string)
+        @param line line number to display (int)
+        @param pos character position to display (int)
+        """
+        if fn is None:
+            fn = ''
+            writ = '   '
+        else:
+            if QFileInfo(fn).isWritable():
+                writ = ' rw'
+            else:
+                writ = ' ro'
+        
+        self.sbWritable.setText(writ)
+        self.sbFile.setText(self.trUtf8('File: %1').arg(fn,-50))
+
+        if line is None:
+            line = ''
+
+        self.sbLine.setText(self.trUtf8('Line: %1').arg(line,5))
+
+        if pos is None:
+            pos = ''
+            
+        self.sbPos.setText(self.trUtf8('Pos: %1').arg(pos, 5))
+        
+    def unhighlight(self, current=0):
+        """
+        Public method to switch off all highlights.
+        
+        @param current flag indicating only the current editor should be unhighlighted
+                (boolean)
+        """
+        if current: 
+            if self.currentEditor is not None:
+                self.currentEditor.highlight()
+        else:
+            for editor in self.editors:
+                editor.highlight()
+
+    def getOpenFilenames(self):
+        """
+        Public method returning a list of the filenames of all editors.
+        
+        @return list of all opened filenames (list of strings)
+        """
+        filenames = []
+        for editor in self.editors:
+            fn = editor.getFileName()
+            if fn is not None:
+                filenames.append(fn)
+                
+        return filenames
+                
+    def getEditor(self, fn, jdc = None, title = None, units = None):
+        """
+        Private method to return the editor displaying the given file.
+        
+        If there is no editor with the given file, a new editor window is
+        created.
+        
+        @param fn filename to look for
+        @param isPythonFile flag indicating that this is a Python file
+                even if it doesn't have the .py extension (boolean)
+        @return tuple of two values giving a flag indicating a new window creation and
+            a reference to the editor displaying this file
+        """
+        newWin = 0
+        double=None
+        for editor in self.editors:
+            if samepath(fn, editor.getFileName()):
+               abort = QMessageBox.warning(self,
+                        self.trUtf8("Fichier"),
+                        self.trUtf8("Le fichier <b>%1</b> est deja ouvert.Voulez-vous l ouvrir tel qu'il etait lors du dernier enregistrement") .arg(fn),
+                        self.trUtf8("&Duplication"),
+                        self.trUtf8("&Annuler"), None, 1)
+               if abort:
+                        break
+               double=editor
+        else:
+            from editor import JDCEditor
+            editor = JDCEditor(fn, jdc, self,units=units)
+            if double != None :
+               self.doubles[editor]=double
+               #self.doubles[double]=editor
+            if editor.jdc: # le fichier est bien un jdc            
+                self.editors.append(editor)
+                self.connect(editor, PYSIGNAL('modificationStatusChanged'),
+                    self.handleModificationStatusChanged)
+                self.connect(editor, PYSIGNAL('cursorChanged'), self.handleCursorChanged)
+                self.connect(editor, PYSIGNAL('editorSaved'), self.handleEditorSaved)
+                self.connect(editor, PYSIGNAL('breakpointToggled'), self.handleBreakpointToggled)
+                self.connect(editor, PYSIGNAL('bookmarkToggled'), self.handleBookmarkToggled)
+                self.connect(editor, PYSIGNAL('syntaxerrorToggled'), self.handleSyntaxErrorToggled)
+                self.connect(editor, PYSIGNAL('autoCompletionAPIsAvailable'), 
+                    self.handleEditoracAPIsAvailable)
+                self.handleEditorOpened()
+                self.emit(PYSIGNAL('editorOpened'), (fn,))
+                newWin = 1
+            else:
+                editor.closeIt()
+
+        if newWin:
+            self.addView(editor, fn , title)
+        elif editor.jdc:
+            self.showView(editor, fn)
+            
+        return (newWin, editor)
+        
+        
+    def getOpenEditor(self, fn):
+        """
+        Public method to return the editor displaying the given file.
+        
+        @param fn filename to look for
+        @return a reference to the editor displaying this file or None, if
+            no editor was found
+        """
+        for editor in self.editors:
+            if samepath(fn, editor.getFileName()):
+                return editor
+                
+        return None
+
+    def getActiveName(self):
+        """
+        Public method to retrieve the filename of the active window.
+        
+        @return filename of active window (string)
+        """
+        aw = self.activeWindow()
+        if aw:
+            return aw.getFileName()
+        else:
+            return None
+
+    def saveEditor(self, fn):
+        """
+        Public method to save a named editor file.
+        
+        @param fn filename of editor to be saved (string)
+        @return flag indicating success (boolean)
+        """
+        for editor in self.editors:
+            if samepath(fn, editor.getFileName()):
+                break
+        else:
+            return 1
+            
+        if not editor.modified:
+            return 1
+        else:
+            ok, dummy = editor.saveFile()
+            return ok
+        
+    def saveCurrentEditor(self):
+        """
+        Public slot to save the contents of the current editor.
+        """
+        aw = self.activeWindow()
+        if aw in self.doubles.keys() :
+           QMessageBox.warning(
+                     None,
+                     self.trUtf8("Fichier Duplique"),
+                     self.trUtf8("Le fichier ne sera pas sauvegarde."),
+                     self.trUtf8("&Annuler"))
+           return
+        if aw:
+            ok, newName = aw.saveFile()
+            if ok:
+                self.setEditorName(aw, newName)
+        else:
+            return
+
+    def saveAsCurrentEditor(self):
+        """
+        Public slot to save the contents of the current editor to a new file.
+        """
+        aw = self.activeWindow()
+        if aw:
+            ok, newName = aw.saveFileAs()
+            if ok:
+                self.setEditorName(aw, newName)
+        else:
+            return
+
+    def saveAllEditors(self):
+        """
+        Public slot to save the contents of all editors.
+        """
+        for editor in self.editors:
+            ok, newName = editor.saveFile()
+            if ok:
+                self.setEditorName(editor, newName)
+        
+        # restart autosave timer
+        if self.autosaveInterval > 0:
+            self.autosaveTimer.start(self.autosaveInterval * 60000, 1)
+
+    def saveCurrentEditorToProject(self):
+        """
+        Public slot to save the contents of the current editor to the current project.
+        """
+        pro = self.ui.getProject()
+        path = pro.ppath
+        aw = self.activeWindow()
+        if aw:
+            ok, newName = aw.saveFileAs(path)
+            if ok:
+                self.setEditorName(aw, newName)
+                pro.appendFile(newName)
+        else:
+            return
+        
+    def newIncludeEditor(self) :
+        self.newEditor(include=1)
+        
+    def newEditor(self,include=0):
+        """
+        Public slot to generate a new empty editor.
+        """
+        from editor import JDCEditor
+        editor = JDCEditor(None,None,self,include=include)
+        
+        self.editors.append(editor)
+        self.connect(editor, PYSIGNAL('modificationStatusChanged'),
+            self.handleModificationStatusChanged)
+        self.connect(editor, PYSIGNAL('cursorChanged'), self.handleCursorChanged)
+        self.connect(editor, PYSIGNAL('editorSaved'),   self.handleEditorSaved)
+        self.connect(editor, PYSIGNAL('breakpointToggled'), self.handleBreakpointToggled)
+        self.connect(editor, PYSIGNAL('bookmarkToggled'), self.handleBookmarkToggled)
+        self.connect(editor, PYSIGNAL('syntaxerrorToggled'), self.handleSyntaxErrorToggled)
+        self.connect(editor, PYSIGNAL('autoCompletionAPIsAvailable'), 
+            self.handleEditoracAPIsAvailable)
+        self.addView(editor, None)
+        self.handleEditorOpened()
+        self.checkActions(editor)
+        self.emit(PYSIGNAL('editorOpened'), (None,))
+        
+    def printCurrentEditor(self):
+        """
+        Public slot to print the contents of the current editor.
+        """
+        aw = self.activeWindow()
+        if aw:
+            aw.printFile()
+        else:
+            return
+
+    def printCurrentEditorSel(self):
+        """
+        Public slot to print the selection of the current editor.
+        """
+        aw = self.activeWindow()
+        if aw:
+            aw.printSelection()
+        else:
+            return
+
+    def handlevisuJdcPy(self):
+        if self.activeWindow()== None : return
+        self.activeWindow().viewJdcPy()
+        
+    def handleViewJdcFichierSource(self):
+        if self.activeWindow()== None : return
+        self.activeWindow().viewJdcSource()
+                
+    def handleViewJdcRapport(self):
+        if self.activeWindow()== None : return
+        self.activeWindow().viewJdcRapport()
+        
+    def handleNewProject(self):
+        """
+        Public slot to handle the NewProject signal.
+        """
+        self.saveToProjectAct.setEnabled(1)
+        
+    def handleProjectOpened(self):
+        """
+        Public slot to handle the projectOpened signal.
+        """
+        self.saveToProjectAct.setEnabled(1)
+        
+    def handleProjectClosed(self):
+        """
+        Public slot to handle the projectClosed signal.
+        """
+        self.saveToProjectAct.setEnabled(0)
+        
+    def handleProjectFileRenamed(self, oldfn, newfn):
+        """
+        Public slot to handle the projectFileRenamed signal.
+        
+        @param oldfn old filename of the file (string)
+        @param newfn new filename of the file (string)
+        """
+        editor = self.getOpenEditor(oldfn)
+        if editor:
+            editor.fileRenamed(newfn)
+        
+    def enableEditorsCheckFocusIn(self, enabled):
+        """
+        Public method to set a flag enabling the editors to perform focus in checks.
+        
+        @param enabled flag indicating focus in checks should be performed (boolean)
+        """
+        self.editorsCheckFocusIn = enabled
+        
+    def editorsCheckFocusInEnabled(self):
+        """
+        Public method returning the flag indicating editors should perform focus in checks.
+        
+        @return flag indicating focus in checks should be performed (boolean)
+        """
+        return self.editorsCheckFocusIn
+
+    def handleFindFileName(self):
+        """
+        Private method to handle the search for file action.
+        """
+        self.ui.findFileNameDialog.show()
+        self.ui.findFileNameDialog.raiseW()
+        self.ui.findFileNameDialog.setActiveWindow()
+        
+    ##################################################################
+    ## Below are the action methods for the edit menu
+    ##################################################################
+    
+    def handleEditUndo(self):
+        """
+        Private method to handle the undo action.
+        """
+        self.activeWindow().undo()
+        
+    def handleEditRedo(self):
+        """
+        Private method to handle the redo action.
+        """
+        self.activeWindow().redo()
+        
+    def handleEditRevert(self):
+        """
+        Private method to handle the revert action.
+        """
+        self.activeWindow().revertToUnmodified()
+        
+    def handleEditCut(self):
+        """
+        Private method to handle the cut action.
+        """
+        self.activeWindow().cut()
+        
+    def handleEditCopy(self):
+        """
+        Private method to handle the copy action.
+        """
+        self.activeWindow().copy()
+        
+    def handleEditPaste(self):
+        """
+        Private method to handle the paste action.
+        """
+        self.activeWindow().paste()
+        
+    def handleEditDelete(self):
+        """
+        Private method to handle the delete action.
+        """
+        self.activeWindow().clear()
+        
+    def handleEditIndent(self):
+        """
+        Private method to handle the indent action.
+        """
+        self.activeWindow().indentLineOrSelection()
+        
+    def handleEditUnindent(self):
+        """
+        Private method to handle the unindent action.
+        """
+        self.activeWindow().unindentLineOrSelection()
+        
+    def handleEditComment(self):
+        """
+        Private method to handle the comment action.
+        """
+        self.activeWindow().commentLineOrSelection()
+        
+    def handleEditUncomment(self):
+        """
+        Private method to handle the uncomment action.
+        """
+        self.activeWindow().uncommentLineOrSelection()
+        
+    def handleEditStreamComment(self):
+        """
+        Private method to handle the stream comment action.
+        """
+        self.activeWindow().streamCommentLineOrSelection()
+        
+    def handleEditBoxComment(self):
+        """
+        Private method to handle the box comment action.
+        """
+        self.activeWindow().boxCommentLineOrSelection()
+        
+    def handleEditSelectBrace(self):
+        """
+        Private method to handle the select to brace action.
+        """
+        self.activeWindow().selectToMatchingBrace()
+        
+    def handleEditSelectAll(self):
+        """
+        Private method to handle the select all action.
+        """
+        self.activeWindow().selectAll(1)
+        
+    def handleEditDeselectAll(self):
+        """
+        Private method to handle the select all action.
+        """
+        self.activeWindow().selectAll(0)
+        
+    def handleConvertEOL(self):
+        """
+        Private method to handle the convert line end characters action.
+        """
+        aw = self.activeWindow()
+        aw.convertEols(aw.eolMode())
+        
+    def handleShortenEmptyLines(self):
+        """
+        Private method to handle the shorten empty lines action.
+        """
+        self.activeWindow().handleShortenEmptyLines()
+        
+    def handleEditAutoComplete(self):
+        """
+        Private method to handle the autocomplete action.
+        """
+        aw = self.activeWindow()
+        aw.autoComplete()
+        
+    def handleEditAutoCompleteFromDoc(self):
+        """
+        Private method to handle the autocomplete from document action.
+        """
+        aw = self.activeWindow()
+        aw.autoCompleteFromDocument()
+        
+    def handleEditAutoCompleteFromAPIs(self):
+        """
+        Private method to handle the autocomplete from APIs action.
+        """
+        aw = self.activeWindow()
+        aw.autoCompleteFromAPIs()
+        
+    def handleEditoracAPIsAvailable(self, available):
+        """
+        Private method to handle the availability of API autocompletion signal.
+        """
+        self.autoCompleteFromAPIsAct.setEnabled(available)
+        
+    ##################################################################
+    ## Below are the action and utility methods for the search menu
+    ##################################################################
+
+    def getWord(self, text, index):
+        """
+        Private method to get the word at a position.
+        
+        @param text text to look at (string or QString)
+        @param index position to look at (int)
+        @return the word at that position
+        """
+        re = QRegExp('[^\w_]')
+        start = text.findRev(re, index) + 1
+        end = text.find(re, index)
+        if end > start:
+            word = text.mid(start, end-start)
+        else:
+            word = QString('')
+        return word
+        
+    def textForFind(self):
+        """
+        Private method to determine the selection or the current word for the next find operation.
+        
+        @return selection or current word (QString)
+        """
+        aw = self.activeWindow()
+        if aw is None:
+            return ''
+            
+        if aw.hasSelectedText():
+            text = aw.selectedText()
+            if text.contains('\r') or text.contains('\n'):
+                # the selection contains at least a newline, it is
+                # unlikely to be the expression to search for
+                return ''
+                
+            return text
+            
+        # no selected text, determine the word at the current position
+        line, index = aw.getCursorPosition()
+        return self.getWord(aw.text(line), index)
+        
+    def getSRHistory(self, key):
+        """
+        Private method to get the search or replace history list.
+        
+        @param key list to return (must be 'search' or 'replace')
+        @return the requested history list (QStringList)
+        """
+        return self.srHistory[key]
+        
+    def handleSearch(self):
+        """
+        Private method to handle the search action.
+        """
+        self.searchDlg.showFind(self.textForFind())
+        
+    def handleReplace(self):
+        """
+        Private method to handle the replace action.
+        """
+        self.replaceDlg.showReplace(self.textForFind())
+        
+    def handleGoto(self):
+        """
+        Private method to handle the goto action.
+        """
+        aw = self.activeWindow()
+        dlg = GotoDialog(self.ui, None, 1)
+        dlg.selectAll()
+        if dlg.exec_loop() == QDialog.Accepted:
+            aw.gotoLine(min(dlg.getLinenumber(), aw.lines()))
+        
+    def handleGotoBrace(self):
+        """
+        Private method to handle the goto brace action.
+        """
+        self.activeWindow().moveToMatchingBrace()
+        
+    def handleSearchFiles(self):
+        """
+        Private method to handle the search in files action.
+        """
+        self.ui.findFilesDialog.show(self.textForFind())
+        self.ui.findFilesDialog.raiseW()
+        self.ui.findFilesDialog.setActiveWindow()
+        
+    ##################################################################
+    ## Below are the action methods for the view menu
+    ##################################################################
+    
+    def handleZoomIn(self):
+        """
+        Private method to handle the zoom in action.
+        """
+        self.activeWindow().zoomIn()
+        
+    def handleZoomOut(self):
+        """
+        Private method to handle the zoom out action.
+        """
+        self.activeWindow().zoomOut()
+        
+    def handleZoom(self):
+        """
+        Private method to handle the zoom action.
+        """
+        aw = self.activeWindow()
+        dlg = ZoomDialog(aw.getZoom(), self.ui, None, 1)
+        if dlg.exec_loop() == QDialog.Accepted:
+            aw.zoomTo(dlg.getZoomSize())
+            
+    def handleToggleAll(self):
+        """
+        Private method to handle the toggle all folds action.
+        """
+        self.activeWindow().foldAll()
+        
+    def handleToggleCurrent(self):
+        """
+        Private method to handle the toggle current fold action.
+        """
+        aw = self.activeWindow()
+        line, index = aw.getCursorPosition()
+        aw.foldLine(line)
+        
+    def handleSplitView(self):
+        """
+        Private method to handle the split view action.
+        """
+        self.addSplit()
+        
+    def handleSplitOrientation(self):
+        """
+        Private method to handle the split orientation action.
+        """
+        if self.splitOrientationAct.isOn():
+            self.setSplitOrientation(QSplitter.Horizontal)
+            self.splitViewAct.setIconSet(\
+                QIconSet(utilIcons.getPixmap("splitHorizontal.png")))
+            self.splitRemoveAct.setIconSet(\
+                QIconSet(utilIcons.getPixmap("remsplitHorizontal.png")))
+        else:
+            self.setSplitOrientation(QSplitter.Vertical)
+            self.splitViewAct.setIconSet(\
+                QIconSet(utilIcons.getPixmap("splitVertical.png")))
+            self.splitRemoveAct.setIconSet(\
+                QIconSet(utilIcons.getPixmap("remsplitVertical.png")))
+    
+    ##################################################################
+    ## Below are the action methods for the macro menu
+    ##################################################################
+    
+    def handleMacroStartRecording(self):
+        """
+        Private method to handle the start macro recording action.
+        """
+        self.activeWindow().handleStartMacroRecording()
+        
+    def handleMacroStopRecording(self):
+        """
+        Private method to handle the stop macro recording action.
+        """
+        self.activeWindow().handleStopMacroRecording()
+        
+    def handleMacroRun(self):
+        """
+        Private method to handle the run macro action.
+        """
+        self.activeWindow().handleRunMacro()
+        
+    def handleMacroDelete(self):
+        """
+        Private method to handle the delete macro action.
+        """
+        self.activeWindow().handleDeleteMacro()
+        
+    def handleMacroLoad(self):
+        """
+        Private method to handle the load macro action.
+        """
+        self.activeWindow().handleLoadMacro()
+        
+    def handleMacroSave(self):
+        """
+        Private method to handle the save macro action.
+        """
+        self.activeWindow().handleSaveMacro()
+    
+    ##################################################################
+    ## Below are the action methods for the bookmarks menu
+    ##################################################################
+    
+    def handleToggleBookmark(self):
+        """
+        Private method to handle the toggle bookmark action.
+        """
+        self.activeWindow().handleToggleBookmark()
+        
+    def handleNextBookmark(self):
+        """
+        Private method to handle the next bookmark action.
+        """
+        self.activeWindow().handleNextBookmark()
+    
+    def handlePreviousBookmark(self):
+        """
+        Private method to handle the previous bookmark action.
+        """
+        self.activeWindow().handlePreviousBookmark()
+    
+    def handleClearAllBookmarks(self):
+        """
+        Private method to handle the clear all bookmarks action.
+        """
+        for editor in self.editors:
+            editor.handleClearBookmarks()
+            
+        self.bookmarkNextAct.setEnabled(0)
+        self.bookmarkPreviousAct.setEnabled(0)
+        self.bookmarkClearAct.setEnabled(0)
+    
+    def handleShowBookmarksMenu(self):
+        """
+        Private method to handle the show bookmarks menu signal.
+        """
+        self.bookmarks = {}
+        self.bookmarksMenu.clear()
+        
+        filenames = self.getOpenFilenames()
+        filenames.sort()
+        for filename in filenames:
+            editor = self.getOpenEditor(filename)
+            for bookmark in editor.getBookmarks():
+                if len(filename) > 50:
+                    dots = "..."
+                else:
+                    dots = ""
+                id = self.bookmarksMenu.insertItem(\
+                        "%s%s : %d" % (dots, filename[-50:], bookmark))
+                self.bookmarks[id] = (filename, bookmark)
+    
+    def handleBookmarkSelected(self, id):
+        """
+        Private method to handle the bookmark selected signal.
+        
+        @param id index of the selected menu entry
+                This acts as an index into the list of bookmarks
+                that was created, when the bookmarks menu was built.
+        """
+        self.displayPythonFile(self.bookmarks[id][0], self.bookmarks[id][1])
+        
+    def handleBookmarkToggled(self, editor):
+        """
+        Private slot to handle the bookmarkToggled signal.
+        
+        It checks some bookmark actions and reemits the signal.
+        
+        @param editor editor that sent the signal
+        """
+        if editor.hasBookmarks():
+            self.bookmarkNextAct.setEnabled(1)
+            self.bookmarkPreviousAct.setEnabled(1)
+            self.bookmarkClearAct.setEnabled(1)
+        else:
+            self.bookmarkNextAct.setEnabled(0)
+            self.bookmarkPreviousAct.setEnabled(0)
+            self.bookmarkClearAct.setEnabled(0)
+        self.emit(PYSIGNAL('bookmarkToggled'), (editor,))
+    
+    def handleGotoSyntaxError(self):
+        """
+        Private method to handle the goto syntax error action.
+        """
+        self.activeWindow().handleGotoSyntaxError()
+    
+    def handleClearAllSyntaxErrors(self):
+        """
+        Private method to handle the clear all syntax errors action.
+        """
+        for editor in self.editors:
+            editor.handleClearSyntaxError()
+    
+    def handleSyntaxErrorToggled(self, editor):
+        """
+        Private slot to handle the syntaxerrorToggled signal.
+        
+        It checks some syntax error actions and reemits the signal.
+        
+        @param editor editor that sent the signal
+        """
+        if editor.hasSyntaxErrors():
+            self.syntaxErrorGotoAct.setEnabled(1)
+            self.syntaxErrorClearAct.setEnabled(1)
+        else:
+            self.syntaxErrorGotoAct.setEnabled(0)
+            self.syntaxErrorClearAct.setEnabled(0)
+        self.emit(PYSIGNAL('syntaxerrorToggled'), (editor,))
+    
+    ##################################################################
+    ## Below are general utility methods
+    ##################################################################
+    
+    def handleResetUI(self):
+        """
+        Public slot to handle the resetUI signal.
+        """
+        editor = self.activeWindow()
+        if editor is None:
+            self.setSbFile()
+        else:
+            line, pos = editor.getCursorPosition()
+            self.setSbFile(editor.getFileName(), line+1, pos)
+        
+    def closeViewManager(self):
+        """
+        Public method to shutdown the viewmanager. 
+        
+        If it cannot close all editor windows, it aborts the shutdown process.
+        
+        @return flag indicating success (boolean)
+        """
+        self.handleCloseAll()
+        if len(self.editors):
+            return 0
+        else:
+            return 1
+
+    def handleLastEditorClosed(self):
+        """
+        Private slot to handle the lastEditorClosed signal.
+        """
+        self.SauveRecents() 
+        
+        
+    def handleEditorOpened(self):
+        """
+        Private slot to handle the editorOpened signal.
+        """
+        self.closeActGrp.setEnabled(1)
+        self.saveActGrp.setEnabled(1)
+        self.printAct.setEnabled(1)
+        self.printSelAct.setEnabled(1)
+        self.editActGrp.setEnabled(1)
+        self.searchActGrp.setEnabled(1)
+        self.viewActGrp.setEnabled(1)
+        self.viewFoldActGrp.setEnabled(1)
+        self.unhighlightAct.setEnabled(1)
+        self.splitViewAct.setEnabled(1)
+        self.splitOrientationAct.setEnabled(1)
+        self.macroActGrp.setEnabled(1)
+        self.bookmarkActGrp.setEnabled(1)
+        
+        # activate the autosave timer
+        if not self.autosaveTimer.isActive() and \
+           self.autosaveInterval > 0:
+            self.autosaveTimer.start(self.autosaveInterval * 60000, 1)
+        
+        
+    def checkActions(self, editor, setSb=1):
+        """
+        Private slot to check some actions for their enable/disable status and set the statusbar info.
+        
+        @param editor editor window
+        @param setSb flag indicating an update of the status bar is wanted (boolean)
+        """
+        if editor is not None:
+            self.saveAct.setEnabled(editor.modified)
+            self.revertAct.setEnabled(editor.modified)
+            
+            lex = editor.getLexer()
+            if lex is not None:
+                self.commentAct.setEnabled(lex.canBlockComment())
+                self.uncommentAct.setEnabled(lex.canBlockComment())
+                self.streamCommentAct.setEnabled(lex.canStreamComment())
+                self.boxCommentAct.setEnabled(lex.canBoxComment())
+            else:
+                self.commentAct.setEnabled(0)
+                self.uncommentAct.setEnabled(0)
+                self.streamCommentAct.setEnabled(0)
+                self.boxCommentAct.setEnabled(0)
+            
+            if editor.hasBookmarks():
+                self.bookmarkNextAct.setEnabled(1)
+                self.bookmarkPreviousAct.setEnabled(1)
+                self.bookmarkClearAct.setEnabled(1)
+            else:
+                self.bookmarkNextAct.setEnabled(0)
+                self.bookmarkPreviousAct.setEnabled(0)
+                self.bookmarkClearAct.setEnabled(0)
+            
+            if editor.hasSyntaxErrors():
+                self.syntaxErrorGotoAct.setEnabled(1)
+                self.syntaxErrorClearAct.setEnabled(1)
+            else:
+                self.syntaxErrorGotoAct.setEnabled(0)
+                self.syntaxErrorClearAct.setEnabled(0)
+            
+            if editor.canAutoCompleteFromAPIs():
+                self.autoCompleteFromAPIsAct.setEnabled(1)
+            else:
+                self.autoCompleteFromAPIsAct.setEnabled(0)
+                
+            if setSb:
+                line, pos = editor.getCursorPosition()
+                self.setSbFile(editor.getFileName(), line+1, pos)
+                
+            self.emit(PYSIGNAL('checkActions'), (editor,))
+        
+    def handlePreferencesChanged(self):
+        """
+        Public slot to handle the preferencesChanged signal.
+        
+        This method performs the following actions
+            <ul>
+            <li>reread the colours for the syntax highlighting</li>
+            <li>reloads the already created API objetcs</li>
+            <li>starts or stops the autosave timer</li>
+            <li><b>Note</b>: changes in viewmanager type are activated
+              on an application restart.</li>
+            </ul>
+        """
+        # reload api information
+        for language, api in self.apis.items():
+            if api is not None:
+                apifiles = Preferences.getEditorAPI(language)
+                if len(apifiles):
+                    api.clear()
+                    for apifile in apifiles:
+                        api.load(apifile)
+                else:
+                    self.apis[language] = None
+                    
+        # reload editor settings
+        for editor in self.editors:
+            editor.readSettings()
+            
+        # reload the autosave timer setting
+        self.autosaveInterval = Preferences.getEditor("AutosaveInterval")
+        if len(self.editors):
+            if self.autosaveTimer.isActive() and \
+               self.autosaveInterval == 0:
+                self.autosaveTimer.stop()
+            elif not self.autosaveTimer.isActive() and \
+               self.autosaveInterval > 0:
+                self.autosaveTimer.start(self.autosaveInterval * 60000, 1)
+        
+    def handleEditorSaved(self, fn):
+        """
+        Public slot to handle the editorSaved signal.
+        
+        It simply reemits the signal.
+        
+        @param fn filename of the saved editor
+        """
+        self.emit(PYSIGNAL('editorSaved'), (fn,))
+        
+    def handleCursorChanged(self, fn, line, pos):
+        """
+        Private slot to handle the cursorChanged signal. 
+        
+        It emits the signal cursorChanged with parameter editor.
+        
+        @param fn filename (string)
+        @param line line number of the cursor (int)
+        @param pos position in line of the cursor (int)
+        """
+        self.setSbFile(fn, line, pos)
+        self.emit(PYSIGNAL('cursorChanged'), (self.getOpenEditor(fn),))
+        
+    def handleBreakpointToggled(self, editor):
+        """
+        Private slot to handle the breakpointToggled signal.
+        
+        It simply reemits the signal.
+        
+        @param editor editor that sent the signal
+        """
+        self.emit(PYSIGNAL('breakpointToggled'), (editor,))
+        
+            
+    def getProject(self):
+        """
+        Public method to get a reference to the Project object.
+        
+        @return Reference to the Project object (Project.Project)
+        """
+        return self.ui.getProject()
+        
+    def getActions(self, type):
+        """
+        Public method to get a list of all actions.
+        
+        @param type string denoting the action set to get.
+                It must be one of "edit", "file", "search",
+                "view" or "window"
+        @return list of all actions (list of QAction)
+        """
+        try:
+            exec 'actionList = self.%sActions[:]' % type
+        except:
+            actionList = []
+                
+        return actionList
+        
+    def editorCommand(self, cmd):
+        """
+        Private method to send an editor command to the active window.
+        
+        @param cmd the scintilla command to be sent
+        """
+        aw = self.activeWindow()
+        if aw:
+            aw.SendScintilla(cmd)
+        
+    ##################################################################
+    ## Below are protected utility methods
+    ##################################################################
+    
+    def _getOpenStartDir(self):
+        """
+        Protected method to return the starting directory for a file open dialog. 
+        
+        The appropriate starting directory is calculated
+        using the following search order, until a match is found:<br />
+            1: Directory of currently active editor<br />
+            2: Directory of currently active Project<br />
+            3: CWD
+
+        @return String name of directory to start or None
+        """
+        # if we have an active source, return its path
+        if self.activeWindow() is not None and \
+           self.activeWindow().getFileName():
+            return os.path.dirname(self.activeWindow().getFileName())
+            
+        # ok, try if there is an active project and return its path
+        elif self.getProject().isOpen():
+            return self.getProject().ppath
+            
+        else:
+            try :
+               userDir=os.path.expanduser("~/Eficas_install/")
+               return userDir
+            except :
+               return ""        
+
+
+    def _getOpenFileFilter(self):
+        """
+        Protected method to return the active filename filter for a file open dialog.
+        
+        The appropriate filename filter is determined by file extension of
+        the currently active editor.
+        
+        @return name of the filename filter (QString) or None
+        """
+        if self.activeWindow() is not None and \
+           self.activeWindow().getFileName():
+            ext = os.path.splitext(self.activeWindow().getFileName())[1]
+            try:
+                return QString(self.ext2Filter[ext])
+            except KeyError:
+                return None
+                
+        else:
+            return None
+
+            
+
+
+"""
+Module implementing a tabbed viewmanager class.
+"""
+
+
+
+class TabWidget(QTabWidget):
+    """
+    Class implementing a custimized TabWidget.
+    """
+    def __init__(self, parent):
+        """
+        Constructor
+        
+        @param parent parent widget (QWidget)
+        """
+        QTabWidget.__init__(self, parent)
+        
+        self.editors = []
+        self.curIndex = 0
+        
+        self.connect(self, SIGNAL("currentChanged(QWidget *)"), self.handleCurrentChanged)
+        
+    def handleCurrentChanged(self):
+        """
+        Private slot called by the currentChanged signal.
+        """
+        self.curIndex = self.currentPageIndex()
+        
+    def addTab(self, editor, title):
+        """
+        Overwritten method to add a new tab.
+        
+        @param editor the editor object to be added (QScintilla.Editor.Editor)
+        @param title title for the new tab (string, QString or QTab)
+        """
+        QTabWidget.addTab(self, editor, title)
+        
+        if not editor in self.editors:
+            self.editors.append(editor)
+            self.connect(editor, PYSIGNAL('captionChanged'),
+                self.handleCaptionChange)
+                
+    def showPage(self, editor):
+        """
+        Overridden method to show a tab.
+        
+        @param editor the editor object to be shown (QScintilla.Editor.Editor)
+        """
+        QTabWidget.showPage(self, editor)
+        self.curIndex = self.indexOf(editor)
+        
+    def nextTab(self):
+        """
+        Public slot used to show the next tab.
+        """
+        if self.count():
+            self.curIndex += 1
+            if self.curIndex == self.count():
+                self.curIndex = 0
+                
+            QTabWidget.showPage(self, self.page(self.curIndex))
+
+    def prevTab(self):
+        """
+        Public slot used to show the previous tab.
+        """
+        if self.count():
+            self.curIndex -= 1
+            if self.curIndex == -1:
+                self.curIndex = self.count() - 1
+                
+            QTabWidget.showPage(self, self.page(self.curIndex))
+
+    def handleCaptionChange(self, cap, editor):
+        """
+        Private method to handle Caption change signals from the editor. 
+        
+        Updates the listview text to reflect the new caption information.
+        
+        @param cap Caption for the editor
+        @param editor Editor to update the caption for
+        """
+        fn = editor.getFileName()
+        if fn:
+            txt = os.path.basename(fn)
+            if editor.isReadOnly():
+                txt = '%s (ro)' % txt
+            self.changeTab(editor, txt)
+        
+    def removePage(self, object):
+        """
+        Overwritten method to remove a page.
+        
+        @param object object to be removed (QObject)
+        """
+        QTabWidget.removePage(self, object)
+        
+        self.disconnect( object, PYSIGNAL('captionChanged'),
+                         self.handleCaptionChange )
+        self.editors.remove(object)
+        
+    def hasEditor(self, editor):
+        """
+        Public method to check for an editor.
+        
+        @param editor editor object to check for
+        @return flag indicating, whether the editor to be checked belongs
+            to the list of editors managed by this tab widget.
+        """
+        return editor in self.editors
+        
+    def hasEditors(self):
+        """
+        Public method to test, if any editor is managed.
+        
+        @return flag indicating editors are managed
+        """
+        return len(self.editors) and 1 or 0
+        
+class Tabview(QSplitter, ViewManager):
+    """
+    Class implementing a tabbed viewmanager class embedded in a splitter.
+    
+    @signal lastEditorClosed emitted after the last editor window was closed
+    @signal editorOpened emitted after an editor window was opened
+    @signal editorSaved emitted after an editor window was saved
+    """
+    def __init__(self,parent, ui):
+        """
+        Constructor
+        
+        @param parent parent widget (QWidget)
+        @param ui reference to the main user interface
+        @param dbs reference to the debug server object
+        """
+        self.tabWidgets = []
+        
+        QSplitter.__init__(self,parent)
+        ViewManager.__init__(self, ui)
+        tw = TabWidget(self)
+        self.tabWidgets.append(tw)
+        self.currentTabWidget = tw
+        self.connect(tw, SIGNAL('currentChanged(QWidget*)'),
+            self.handleCurrentChanged)
+        tw.installEventFilter(self)
+        tw.tabBar().installEventFilter(self)
+        self.setOrientation(QSplitter.Vertical)
+        
+    def initViewActions(self):
+        """
+        Protected method defining the user interface actions for the view commands.
+        """
+        ViewManager.initViewActions(self)
+        
+        self.nextTabAct = QAction(self.trUtf8('Show next tab'), 
+                      self.trUtf8('Show next tab'), 
+                      QKeySequence(self.trUtf8('Ctrl+Alt+Tab')), self)
+        self.connect(self.nextTabAct, SIGNAL('activated()'), self.nextTab)
+        self.viewActions.append(self.nextTabAct)
+        
+        self.prevTabAct = QAction(self.trUtf8('Show previous tab'), 
+                      self.trUtf8('Show previous tab'), 
+                      QKeySequence(self.trUtf8('Shift+Ctrl+Alt+Tab')), self)
+        self.connect(self.prevTabAct, SIGNAL('activated()'), self.prevTab)
+        self.viewActions.append(self.prevTabAct)
+        
+    def nextTab(self):
+        """
+        Private slot used to show the next tab of the current tabwidget.
+        """
+        self.currentTabWidget.nextTab()
+        
+    def prevTab(self):
+        """
+        Private slot used to show the previous tab of the current tabwidget.
+        """
+        self.currentTabWidget.prevTab()
+        
+    def canCascade(self):
+        """
+        Public method to signal if cascading of managed windows is available.
+        
+        @return flag indicating cascading of windows is available
+        """
+        return 0
+        
+    def canTile(self):
+        """
+        Public method to signal if tiling of managed windows is available.
+        
+        @return flag indicating tiling of windows is available
+        """
+        return 0
+        
+    def canSplit(self):
+        """
+        public method to signal if splitting of the view is available.
+        
+        @return flag indicating splitting of the view is available.
+        """
+        return 1
+        
+    def tile(self):
+        """
+        Public method to tile the managed windows.
+        """
+        pass
+        
+    def cascade(self):
+        """
+        Public method to cascade the managed windows.
+        """
+        pass
+        
+    def removeAllViews(self):
+        """
+        Private method to remove all views (i.e. windows)
+        """
+        for win in self.editors:
+            self.removeView(win)
+            
+    def removeView(self, win):
+        """
+        Private method to remove a view (i.e. window)
+        
+        @param win editor window to be removed
+        """
+        for tw in self.tabWidgets:
+            if tw.hasEditor(win):
+                tw.removePage(win)
+                break        
+        win.closeIt()        
+        
+        # if this was the last editor in this view, switch to the next, that
+        # still has open editors
+        for i in range(self.tabWidgets.index(tw), -1, -1) + \
+                 range(self.tabWidgets.index(tw) + 1, len(self.tabWidgets)):
+            if self.tabWidgets[i].hasEditors():
+                self.currentTabWidget = self.tabWidgets[i]
+                self.activeWindow().setFocus()
+                break
+    
+    def addView(self, win, fn=None, title=None):
+        """
+        Private method to add a view (i.e. window)
+        
+        @param win editor window to be added
+        @param fn filename of this editor
+        """
+        win.show()
+        if fn is None:
+            if title== None : 
+               self.untitledCount += 1
+               self.currentTabWidget.addTab(win, self.trUtf8("Untitled %1").arg(self.untitledCount))
+            else :
+               self.currentTabWidget.addTab(win, title)
+        else:
+            txt = os.path.basename(fn)
+            if not QFileInfo(fn).isWritable():
+                txt = '%s (ro)' % txt
+            self.currentTabWidget.addTab(win, txt)
+            self.currentTabWidget.setTabToolTip(win, os.path.dirname(fn))
+        self.currentTabWidget.showPage(win)
+        win.setFocus()
+    
+    def showView(self, win, fn=None):
+        """
+        Private method to show a view (i.e. window)
+        
+        @param win editor window to be shown
+        @param fn filename of this editor
+        """
+        win.show()
+        for tw in self.tabWidgets:
+            if tw.hasEditor(win):
+                tw.showPage(win)
+                self.currentTabWidget = tw
+                break
+        win.setFocus()
+    
+    def activeWindow(self):
+        """
+        Private method to return the active (i.e. current) window.
+        
+        @return reference to the active editor
+        """
+        return self.currentTabWidget.currentPage()
+        
+    def handleShowWindowMenu(self, windowMenu):
+        """
+        Private method to set up the viewmanager part of the Window menu.
+        
+        @param windowMenu reference to the window menu
+        """
+        pass
+        
+    def initWindowActions(self):
+        """
+        Define the user interface actions for window handling.
+        """
+        pass
+        
+    def setEditorName(self, editor, newName):
+        """
+        Change the displayed name of the editor.
+        
+        @param editor editor window to be changed
+        @param newName new name to be shown (string or QString)
+        """
+        self.currentTabWidget.changeTab(editor, 
+            os.path.basename(unicode(newName)))
+        self.currentTabWidget.setTabToolTip(editor, 
+            os.path.dirname(unicode(newName)))
+    
+    def handleModificationStatusChanged(self, m, editor):
+        """
+        Private slot to handle the modificationStatusChanged signal.
+        
+        @param m flag indicating the modification status (boolean)
+        @param editor editor window changed
+        """
+        for tw in self.tabWidgets:
+            if tw.hasEditor(editor):
+                break
+        if m:
+            tw.setTabIconSet(editor, 
+                QIconSet(utilIcons.getPixmap("fileModified.png")))
+        elif editor.hasSyntaxErrors():
+            tw.setTabIconSet(editor, 
+                QIconSet(utilIcons.getPixmap("syntaxError.png")))
+        else:
+            tw.setTabIconSet(editor, 
+                QIconSet(utilIcons.getPixmap("empty.png")))
+        self.checkActions(editor)
+        
+    def handleSyntaxErrorToggled(self, editor):
+        """
+        Private slot to handle the syntaxerrorToggled signal.
+        
+        @param editor editor that sent the signal
+        """
+        for tw in self.tabWidgets:
+            if tw.hasEditor(editor):
+                break
+        if editor.hasSyntaxErrors():
+            tw.setTabIconSet(editor, 
+                QIconSet(utilIcons.getPixmap("syntaxError.png")))
+        else:
+            tw.setTabIconSet(editor, 
+                QIconSet(utilIcons.getPixmap("empty.png")))
+                
+        ViewManager.handleSyntaxErrorToggled(self, editor)
+        
+    def addSplit(self):
+        """
+        Public method used to split the current view.
+        """
+        tw = TabWidget(self)
+        tw.show()
+        self.tabWidgets.append(tw)
+        self.currentTabWidget = self.tabWidgets[-1]
+        self.connect(tw, SIGNAL('currentChanged(QWidget*)'),
+            self.handleCurrentChanged)
+        tw.installEventFilter(self)
+        tw.tabBar().installEventFilter(self)
+        self.setSizes([int(100/len(self.tabWidgets))] * len(self.tabWidgets))
+        self.splitRemoveAct.setEnabled(1)
+        
+    def removeSplit(self):
+        """
+        Public method used to remove the current split view.
+        
+        @return flag indicating successfull removal
+        """
+        if len(self.tabWidgets) > 1:
+            tw = self.currentTabWidget
+            res = 1
+            savedEditors = tw.editors[:]
+            for editor in savedEditors:
+                res &= self.closeEditor(editor)
+            if res:
+                i = self.tabWidgets.index(tw)
+                if i == len(self.tabWidgets)-1:
+                    i -= 1
+                self.tabWidgets.remove(tw)
+                tw.close(1)
+                self.currentTabWidget = self.tabWidgets[i]
+                if len(self.tabWidgets) == 1:
+                    self.splitRemoveAct.setEnabled(0)
+                return 1
+                
+        return 0
+        
+    def setSplitOrientation(self, orientation):
+        """
+        Public method used to set the orientation of the split view.
+        
+        @param orientation orientation of the split
+                (QSplitter.Horizontal or QSplitter.Vertical)
+        """
+        self.setOrientation(orientation)
+        
+    def handleCurrentChanged(self, editor):
+        """
+        Private slot to handle the currentChanged signal.
+        
+        @param editor selected editor window
+        """
+        self.checkActions(editor)
+        editor.setFocus()
+        
+    def eventFilter(self, watched, event):
+        """
+        Method called to filter the event queue.
+        
+        @param watched the QObject being watched
+        @param event the event that occurred
+        @return always 0
+        """
+        if event.type() == QEvent.MouseButtonPress and \
+           not event.button() == Qt.RightButton:
+            if isinstance(watched, QTabWidget):
+                self.currentTabWidget = watched
+            elif isinstance(watched, QTabBar):
+                self.currentTabWidget = watched.parent()
+            elif isinstance(watched, QScintilla.Editor.Editor):
+                for tw in self.tabWidgets:
+                    if tw.hasEditor(watched):
+                        self.currentTabWidget = tw
+                        break
+                        
+            aw = self.activeWindow()
+            if aw is not None:
+                self.checkActions(aw)
+                aw.setFocus()
+            
+        return 0
+
+
+class MyTabview(Tabview):
+    """
+    Base class inherited by all specific viewmanager classes.
+    
+    It defines the interface to be implemented by specific
+    viewmanager classes and all common methods.
+    
+    @signal lastEditorClosed emitted after the last editor window was closed
+    @signal editorOpened(string) emitted after an editor window was opened
+    @signal editorSaved(string) emitted after an editor window was saved
+    @signal checkActions(editor) emitted when some actions should be checked
+            for their status
+    @signal cursorChanged(editor) emitted after the cursor position of the active
+            window has changed
+    @signal breakpointToggled(editor) emitted when a breakpoint is toggled.
+    @signal bookmarkToggled(editor) emitted when a bookmark is toggled.
+    """
+    def __init__(self, parent, ui):
+        Tabview.__init__(self, parent, ui)
+        self.appli=parent
+        self.code =self.appli.code
+        self.salome=self.appli.salome
+        self.initRecent()
+
+    def initRecent(self) :
+       rep=self.appli.CONFIGURATION.rep_user
+       monFichier=rep+"/listefichiers_"+self.code
+       index=0
+       try :
+           f=open(monFichier)
+           while ( index < 9) :
+              ligne=f.readline()
+              if ligne != "" :
+                 l=(ligne.split("\n"))[0]
+                 self.recent.append(l)
+              index=index+1
+       except : pass
+
+       try    : f.close()
+       except : pass
+        
+    def SauveRecents(self) :
+       rep=self.appli.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 checkActions(self, editor, setSb=1):
+        """
+        Private slot to check some actions for their enable/disable status and set the statusbar info.
+        
+        @param editor editor window
+        @param setSb flag indicating an update of the status bar is wanted (boolean)
+        """        
+        self.emit(PYSIGNAL('checkActions'), (editor,)) 
+
+    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.remove(fn)
+        self.recent.prepend(fn)
+        if len(self.recent) > 9:
+            self.recent = self.recent[:9] 
+        
+    def handleOpen(self,fn=None,patron=0,units=None):
+        """
+        Public slot to open a Python JDC file.
+        
+        @param prog name of file to be opened (string or QString)
+               patron booleen pour indiquer si le fichier doit etre
+                      ajoute a la liste des fichiers ouverts recemment
+        """
+        # Get the file name if one wasn't specified.
+        if fn is None:
+
+            fn = QFileDialog.getOpenFileName(self._getOpenStartDir(),
+                        self.trUtf8('JDC Files (*.comm);;''All Files (*)'), self.ui)
+
+            if fn.isNull():
+                return
+
+        fn = normabspath(unicode(fn))
+
+        newWin, editor = self.getEditor(fn,units=units)
+        
+        if newWin:
+            self.handleModificationStatusChanged(editor.modified, editor)
+        self.checkActions(editor)
+        
+        # insert filename into list of recently opened files
+        if patron == 0 : self.addToRecentList(fn)
+    
+
+   ##################################################################
+   ## Below are protected utility methods
+   #################################################################
+    
+    def _getOpenStartDir(self):
+        """
+        Protected method to return the starting directory for a file open dialog. 
+        
+        The appropriate starting directory is calculated
+        using the following search order, until a match is found:<br />
+            1: Directory of currently active editor<br />
+            2: Directory of currently active Project<br />
+            3: CWD
+
+        @return String name of directory to start or None
+        """
+        # if we have an active source, return its path
+        if self.activeWindow() is not None and \
+           self.activeWindow().getFileName():
+            return os.path.dirname(self.activeWindow().getFileName())
+            
+            
+        else:
+            # None will cause open dialog to start with cwd
+            try :
+               userDir=os.path.expanduser("~/Eficas_install/")
+               return userDir
+            except :
+               return ""        
+
+
+    def handleEditorOpened(self):
+        """
+        Private slot to handle the editorOpened signal.
+        """
+        pass
+        
+    def handleModificationStatusChanged(self, m, editor):
+        """
+        Private slot to handle the modificationStatusChanged signal.
+        
+        @param m flag indicating the modification status (boolean)
+        @param editor editor window changed
+        """
+        for tw in self.tabWidgets:
+            if tw.hasEditor(editor):
+                break
+        if m:
+            #tw.setTabIconSet(editor, 
+            #    QIconSet(utilIcons.getPixmap("fileModified.png")))
+            pass
+        elif editor.hasSyntaxErrors():
+            tw.setTabIconSet(editor, 
+                QIconSet(utilIcons.getPixmap("syntaxError.png")))
+        else:
+            tw.setTabIconSet(editor, 
+                QIconSet(utilIcons.getPixmap("empty.png")))
+        self.checkActions(editor)        
+        
+        
+
+
+if __name__=='__main__':
+    import sys
+    import prefs 
+    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
+    from Editeur import import_code
+    from Editeur import session
+
+    # Analyse des arguments de la ligne de commande
+    options=session.parse(sys.argv)
+    code=options.code    
+    app = QApplication(sys.argv)
+    
+    mw = MyTabview(None,None)
+    app.setMainWidget(mw)
+    app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
+    mw.show()
+    mw.getEditor('azAster.comm')
+    mw.getEditor('azAster2.comm')
+    res = app.exec_loop()
+    sys.exit(res)
diff --git a/InterfaceQT4/__init__.py b/InterfaceQT4/__init__.py
new file mode 100644 (file)
index 0000000..21d22fb
--- /dev/null
@@ -0,0 +1,24 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce package contient les fonctionnalités  nécessaires
+    pour l'éditeur graphique QT
+"""
diff --git a/InterfaceQT4/browser.py b/InterfaceQT4/browser.py
new file mode 100644 (file)
index 0000000..8d2c165
--- /dev/null
@@ -0,0 +1,423 @@
+# -*- coding: utf-8 -*-
+
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import string,re
+import types,sys,os
+import traceback
+from PyQt4 import *
+from PyQt4.QtGui  import *
+from PyQt4.QtCore import *
+
+class JDCTree( QTreeWidget ):
+    def __init__( self, jdc_item, QWParent):        
+        QListView.__init__( self, QWParent )
+        
+        self.item          = jdc_item
+        self.tree          = self        
+        self.editor       = QWParent
+        self.appliEficas   = self.editor.appliEficas
+        
+        self.setColumnCount(2)
+        mesLabels=QStringList()
+        mesLabels << self.trUtf8('Commande                   ') << self.trUtf8('Concept/Valeur           ')
+        self.setHeaderLabels(mesLabels)
+                
+        self.setMinimumSize(QSize(600,500))
+        print self
+        self.setColumnWidth(0,300)
+
+        self.connect(self, SIGNAL("itemClicked ( QTreeWidgetItem * ,int) "), self.handleOnItem)
+        self.racine=self.item.itemNode(self,self.item)
+        self.expandItem(self.racine)
+        self.node_selected=self.racine
+        self.racine.affichePanneau()
+
+
+    def contextMenuEvent(self,event) :
+        coord=event.globalPos()
+        item= self.currentItem()
+        self.handleContextMenu(item,coord)
+
+    def handleContextMenu(self,item,coord):
+        """
+        Private slot to show the context menu of the listview.
+        
+        @param itm the selected listview item (QListWidgetItem)
+        @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()
+        if item.menu != None:
+           item.menu.exec_(coord)            
+            
+    def handleOnItem(self,item,int):
+        item.affichePanneau()
+        try :
+           fr = item.item.get_fr()
+           if self.editor:
+              self.editor.affiche_infos(fr)
+        except:
+            pass
+
+
+# type de noeud
+COMMENT     = "COMMENTAIRE"
+PARAMETERS  = "PARAMETRE"
+class JDCNode(QTreeWidgetItem):
+    def __init__( self, treeParent, item):
+        self.item        = item
+        self.treeParent  = treeParent
+        self.tree        = self.treeParent.tree
+        self.editor     = self.treeParent.editor
+        self.appliEficas = treeParent.appliEficas
+                        
+        name  = self.appliEficas.trUtf8(  str( item.GetLabelText()[0] ) )
+        value = self.appliEficas.trUtf8(  str( item.GetText() ) )
+        mesColonnes=QStringList()
+        mesColonnes <<  name << value
+        QTreeWidgetItem.__init__(self,treeParent,mesColonnes)
+
+        monIcone = QIcon("/home/noyret/Install_Eficas/EficasV1/InterfaceQT4/icons/" +self.item.GetIconName() + ".gif")
+        self.setIcon(0,monIcone)
+        self.children = []
+        self.build_children()
+        self.menu=None
+        self.existeMenu=1
+
+        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 """
+        """ 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)
+            if ind in listeExpanded : nouvelItem.setExpanded(1)
+            ind=ind+1
+
+    def affichePanneau(self) :
+        if self.item.isactif():
+           panel=self.getPanel()
+        else:
+            from monInactifPanel import PanelInactif
+            panel = PanelInactif(self,self.editor)
+        panel.show()
+        self.select()
+
+
+    def createPopUpMenu(self):
+        #implemente dans les noeuds derives si necessaire
+        self.existeMenu = 0
+
+    def commentIt(self):
+        """
+        Cette methode a pour but de commentariser la commande pointee par self
+        """
+        # On traite par une exception le cas ou l'utilisateur final cherche a désactiver
+        # (commentariser) un commentaire.
+        try :
+            pos=self.treeParent.children.index(self)
+            commande_comment = self.item.get_objet_commentarise()
+            # On signale a l editeur du panel (le JDCDisplay) une modification
+            self.editor.init_modif()
+            self.treeParent.build_children()
+            self.treeParent.children[pos].select()
+            self.treeParent.children[pos].affichePanneau()
+        except Exception,e:
+            traceback.print_exc()
+            QMessageBox.critical( self.editor, "TOO BAD",str(e))
+        
+    def unCommentIt(self):
+        """
+        Realise la decommentarisation de self
+        """
+        try :
+            pos=self.treeParent.children.index(self)
+            commande,nom = self.item.uncomment()
+            self.editor.init_modif()
+            self.treeParent.build_children()
+            self.treeParent.children[pos].select()
+            self.treeParent.children[pos].affichePanneau()
+        except Exception,e:
+            QMessageBox.critical( self.editor, "Erreur !",str(e))
+        
+    def addComment( self, after=True ):
+        """
+        Ajoute un commentaire a l'interieur du JDC :
+        """
+        self.editor.init_modif()
+        if after:
+            pos = 'after'
+        else:
+            pos = 'before'
+        return self.append_brother( COMMENT, pos )
+                
+    def addParameters( self, after=True ):
+        """
+        Ajoute un parametre a l'interieur du JDC :
+        """
+        self.editor.init_modif()
+        if after:
+            pos = 'after'
+        else:
+            pos = 'before'
+        return self.append_brother( PARAMETERS, pos )
+    
+    
+    def select( self ):
+        """
+        Rend le noeud courant (self) selectionne et deselectionne
+        tous les autres
+        """        
+        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'):
+        """
+        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()
+        self.editor.init_modif()
+        index = self.treeParent.children.index(self)
+        if pos == 'before':
+            index = index
+        elif pos == 'after':
+            index = index +1
+        else:
+            print str(pos)," n'est pas un index valide pour append_brother"
+            return 0
+        return self.treeParent.append_child(name,pos=index)
+
+    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')
+           ou en position intermediaire.
+           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':
+            index = len(self.children)
+        elif type(pos) == types.IntType :
+            # position fixee
+            index = pos
+        elif type(pos) == types.InstanceType:
+            # pos est un item. Il faut inserer name apres pos
+            index = self.item.get_index(pos) +1
+        elif type(name) == types.InstanceType:
+            index = self.item.get_index_child(name.nom)
+        else:
+            index = self.item.get_index_child(name)
+        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(index)
+        child=self.children[index]
+        child.affichePanneau() 
+        return child
+
+    def delete(self):
+        """ 
+            Methode externe pour la destruction de l'objet associe au noeud
+        """
+        self.editor.init_modif()
+        index = self.treeParent.children.index(self) - 1 
+        if index < 0 : index =0
+
+        ret=self.treeParent.item.suppitem(self.item)
+        if ret == 0:return
+
+        self.treeParent.build_children()
+        brothers=self.treeParent.children
+        if brothers:
+           toselect=brothers[index]
+        else:
+           toselect=self.treeParent
+        toselect.select()
+        toselect.affichePanneau()
+
+#        
+#    #------------------------------------------------------------------
+    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()
+        monIcone = QIcon("/home/noyret/Install_Eficas/EficasV1/InterfaceQT4/icons/" +self.item.GetIconName() + ".gif")
+        self.setIcon(0,monIcone)
+
+    def update_node_label(self):
+        """ Met a jour le label du noeud """
+        #print "NODE update_node_label", self.item.GetLabelText()
+        labeltext,fonte,couleur = self.item.GetLabelText()
+        self.setText(0, labeltext)        
+    
+    def update_node_texte(self):
+        """ Met a jour les noms des SD et valeurs des mots-cles """
+        #print "NODE update_node_texte", self.item.GetLabelText()
+        value = self.item.GetText()
+        self.setText(1, value)
+
+    def update_nodes(self):
+        #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 """
+        #print "NODE update_texte", self.item.GetLabelText()
+        self.update_node_texte()
+        if self.isExpanded() :
+            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 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 PyQt4.QtCore import *
+    
+
+#    sys.path[:0]=['..','../Aster','../Aster/Cata' ]
+
+#    app = QApplication(sys.argv)
+        
+#    fn      = 'azAster.comm'
+#    jdcName =  os.path.basename(fn)
+#    f=open(fn,'r')
+#    text=f.read()
+#    f.close()
+#    print 'text',text
+    print "afaire"
+    
+#
+#    from autre_analyse_cata import analyse_catalogue
+#    from Cata import cataSTA8
+#    cata=cataSTA8
+#    fic_cata="../../Aster/Cata/cataSTA8/cata.py"
+#    cata_ordonne ,list_simp_reel = analyse_catalogue(cata)
+#    
+#    
+#    
+#    j=cata.JdC( procedure=text, cata=cata, nom=jdcName,
+#                            cata_ord_dico=cata_ordonne )
+#                            
+#    j.compile()
+#    if not j.cr.estvide():
+#        print j.cr
+#        sys.exit()
+#    
+#    j.exec_compile()
+#    if not j.cr.estvide():
+#        print j.cr
+#        sys.exit()
+#                            
+#    from Editeur import comploader
+#    comploader.charger_composants(QT)    
+#    from Editeur import Objecttreeitem
+#    jdc_item=Objecttreeitem.make_objecttreeitem( app, "nom", j)
+#                
+#    if jdc_item:                        
+#        tree = JDCTree( jdc_item, None )                
+#    
+#    app.setMainWidget(tree)    
+#    app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
+#    tree.show()
+#            
+#    res = app.exec_loop()
+#    sys.exit(res)
+#    
+#    
diff --git a/InterfaceQT4/compobase.py b/InterfaceQT4/compobase.py
new file mode 100644 (file)
index 0000000..a287b7d
--- /dev/null
@@ -0,0 +1,3 @@
+from Editeur import Objecttreeitem
+treeitem = Objecttreeitem.ObjectTreeItem
+objet = None
diff --git a/InterfaceQT4/compobloc.py b/InterfaceQT4/compobloc.py
new file mode 100644 (file)
index 0000000..e236eef
--- /dev/null
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+
+from PyQt4 import *
+from PyQt4.QtGui import *
+from Editeur     import Objecttreeitem
+
+import compofact
+import browser
+
+
+class Node(browser.JDCNode):
+    def getPanel(self):
+        """        
+        """    
+        from monMCFactPanel import MonMCFactPanel
+        return MonMCFactPanel(self,parent=self.editor)
+
+
+class BLOCTreeItem(compofact.FACTTreeItem):
+  itemNode=Node
+
+  def get_objet(self,name) :
+      for v in self.object.mc_liste:
+          if v.nom == name : return v
+      return None
+    
+  def iscopiable(self):
+    return 0
+
+
+import Accas
+treeitem = BLOCTreeItem
+objet = Accas.MCBLOC   
diff --git a/InterfaceQT4/compocomm.py b/InterfaceQT4/compocomm.py
new file mode 100644 (file)
index 0000000..671bc67
--- /dev/null
@@ -0,0 +1,117 @@
+# -*- 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.
+#
+#
+# ======================================================================
+
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+import string
+
+from Editeur     import Objecttreeitem
+import browser
+import typeNode
+
+
+class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel):
+    def getPanel( self ):
+        """
+        """
+        from monCommentairePanel import MonCommentairePanel
+        return MonCommentairePanel(self,parent=self.editor)
+
+    def createPopUpMenu(self):
+        typeNode.PopUpMenuNodePartiel.createPopUpMenu(self)
+        self.Decommente = QAction('Decommenter',self.tree)
+        self.tree.connect(self.Decommente,SIGNAL("activated()"),self.Decommenter)
+        self.Decommente.setStatusTip("Decommente la commande ")
+
+        if hasattr(self.item,'uncomment'):
+           self.menu.addAction(self.Decommente)
+
+    def Decommenter(self) :
+        item= self.tree.currentItem()
+        item.unCommentIt()
+
+    def update_node_label(self) :
+        """
+        """
+        debComm=self.item.GetText()
+        self.setText(1,debComm)
+
+    
+class COMMTreeItem(Objecttreeitem.ObjectTreeItem):
+    itemNode=Node    
+
+    def init(self):
+      self.setfunction = self.set_valeur
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icône associée au noeud qui porte self,
+      dépendant de la validité de l'objet
+      NB : un commentaire est toujours valide ...
+      """
+      return "ast-white-percent"
+
+    def GetLabelText(self):
+        """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+        """
+        return 'commentaire'   #CS_pbruno,Fonte_Commentaire,None
+
+    def get_valeur(self):
+      """
+      Retourne la valeur de l'objet Commentaire cad son texte
+      """
+      return self.object.get_valeur() or ''
+    
+    def GetText(self):
+        texte = self.object.valeur
+        texte = string.split(texte,'\n')[0]
+        if len(texte) < 25 :
+            return texte
+        else :
+            return texte[0:24]
+
+    def set_valeur(self,valeur):
+      """
+      Afecte valeur à l'objet COMMENTAIRE
+      """
+      self.object.set_valeur(valeur)
+      
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      """
+      return []
+
+
+    def get_objet_commentarise(self):
+       """
+           La méthode get_objet_commentarise() de la classe compocomm.COMMTreeItem
+           surcharge la méthode get_objet_commentarise de la classe Objecttreeitem.ObjectTreeItem
+           elle a pour but d'empecher l'utilisateur final de commentariser un commentaire.
+       """
+       raise Exception( 'Impossible de commentariser un commentaire' )
+  
+import Extensions
+treeitem =COMMTreeItem
+objet = Extensions.commentaire.COMMENTAIRE    
diff --git a/InterfaceQT4/compocommandecomm.py b/InterfaceQT4/compocommandecomm.py
new file mode 100644 (file)
index 0000000..153f2b7
--- /dev/null
@@ -0,0 +1,94 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+import traceback
+import string
+
+from Editeur import Objecttreeitem
+import compocomm
+
+class COMMANDE_COMMTreeItem(Objecttreeitem.ObjectTreeItem):
+    itemNode=compocomm.Node
+
+    def init(self):
+      self.setfunction = self.set_valeur
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icône associée au noeud qui porte self,
+      dépendant de la validité de l'objet
+      NB : une commande commentarisée est toujours valide ...
+      """
+      if self.isvalid():
+          return "ast-green-percent"
+      else:
+          return "ast-red-percent"
+
+    def GetLabelText(self):
+        """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+        """
+        return 'commentaire'
+
+    def get_valeur(self):
+      """
+      Retourne la valeur de la commande commentarisée cad son texte
+      """
+      return self.object.get_valeur() or ''
+    
+    def GetText(self):
+        texte = self.object.valeur
+        texte = string.split(texte,'\n')[0]
+        if len(texte) < 25 :
+            return texte
+        else :
+            return texte[0:24]
+
+    def set_valeur(self,valeur):
+      """
+      Afefcte valeur à l'objet commande commentarisée
+      """
+      self.object.set_valeur(valeur)
+      
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      """
+      return []
+
+    def uncomment(self):
+      """
+      Demande à l'objet commande commentarisée de se décommentariser.
+      Si l'opération s'effectue correctement, retourne l'objet commande
+      et éventuellement le nom de la sd produite, sinon lève une exception
+      """
+      try:
+        commande,nom = self.object.uncomment()
+        #self.parent.children[pos].select()
+      except Exception,e:
+        traceback.print_exc()
+        raise e
+      return commande,nom
+  
+import Accas
+treeitem =COMMANDE_COMMTreeItem
+objet = Accas.COMMANDE_COMM    
diff --git a/InterfaceQT4/compoerror.py b/InterfaceQT4/compoerror.py
new file mode 100644 (file)
index 0000000..305039f
--- /dev/null
@@ -0,0 +1,38 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+from Tkinter import Label,Button
+
+#Modules Eficas
+from Noyau.N_OBJECT import ErrorObj
+from Editeur import Objecttreeitem
+from desError import Ui_DError
+
+class ERRORTreeItem(Objecttreeitem.AtomicObjectTreeItem):
+
+    panel = Ui_DError
+    def GetIconName(self):
+        return "ast-red-ball"
+
+
+treeitem =ERRORTreeItem
+objet = ErrorObj
+
diff --git a/InterfaceQT4/compofact.py b/InterfaceQT4/compofact.py
new file mode 100644 (file)
index 0000000..76b81c6
--- /dev/null
@@ -0,0 +1,139 @@
+# -*- 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.
+#
+#
+# ======================================================================
+
+from PyQt4 import *
+from PyQt4.QtGui  import *
+from PyQt4.QtCore import *
+import browser
+
+from Editeur import Objecttreeitem
+
+
+class Node(browser.JDCNode):
+    def getPanel(self):
+        """
+        """
+        from monMCFactPanel import MonMCFactPanel
+        return MonMCFactPanel(self,parent=self.editor)
+        
+    def doPaste(self,node_selected):
+        objetACopier = self.item.get_copie_objet()
+        child=node_selected.doPasteMCF(objetACopier)
+        return child
+
+    def doPasteMCF(self,objetACopier):
+        child = self.parent.append_child(objetACopier,
+                                              pos=self.item,
+                                              retour='oui')
+        return child
+
+
+class FACTTreeItem(Objecttreeitem.ObjectTreeItem):
+  itemNode=Node
+  
+  def IsExpandable(self):
+    return 1
+
+  def GetText(self):
+      return  ''
+
+  def GetLabelText(self):
+      """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+      """
+      # None --> fonte et couleur par défaut
+      return self.object.getlabeltext(),None,None
+
+  def isvalid(self):
+    return self.object.isvalid()
+
+  def iscopiable(self):
+    return 1
+
+  def GetIconName(self):
+    if self.object.isvalid():
+      return "ast-green-los"
+    elif self.object.isoblig():
+      return "ast-red-los"
+    else:
+      return "ast-yel-los"
+
+  def keys(self):
+    keys=self.object.mc_dict.keys()
+    return keys
+
+  def GetSubList(self):
+      """
+         Reactualise la liste des items fils stockes dans self.sublist
+      """
+      liste=self.object.mc_liste
+      sublist=[None]*len(liste)
+      # suppression des items lies aux objets disparus
+      for item in self.sublist:
+         old_obj=item.getObject()
+         if old_obj in liste:
+            pos=liste.index(old_obj)
+            sublist[pos]=item
+         else:
+            pass # objets supprimes ignores
+      # ajout des items lies aux nouveaux objets
+      pos=0
+      for obj in liste:
+         if sublist[pos] is None:
+            # nouvel objet : on cree un nouvel item
+            def setfunction(value, object=obj):
+                object.setval(value)
+            item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
+            sublist[pos]=item
+         pos=pos+1
+
+      self.sublist=sublist
+      return self.sublist
+
+  def additem(self,name,pos):
+    objet = self.object.addentite(name,pos)
+    return objet
+
+  def suppitem(self,item) :
+      """ 
+         Cette methode a pour fonction de supprimer l'item passee en argument
+         des fils de l'item FACT qui est son pere
+           - item = item du MOCLE a supprimer du MOCLE pere
+           - item.getObject() = MCSIMP ou MCBLOC 
+      """
+      itemobject=item.getObject()
+      if itemobject.isoblig() :
+         self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
+         return 0
+
+      if self.object.suppentite(itemobject):
+         message = "Mot-clé " + itemobject.nom + " supprimé"
+         self.appli.affiche_infos(message)
+         return 1
+      else:
+         self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
+         return 0
+
+import Accas
+objet = Accas.MCFACT
+treeitem = FACTTreeItem
diff --git a/InterfaceQT4/compoformule.py b/InterfaceQT4/compoformule.py
new file mode 100644 (file)
index 0000000..43ae257
--- /dev/null
@@ -0,0 +1,179 @@
+# -*- coding: utf-8 -*-
+
+"""
+Ce module contient les classes permettant de définir les objets graphiques
+représentant un objet de type FORMULE, cad le panneau et l'item de l'arbre
+d'EFICAS
+"""
+
+import string
+import compooper
+import browser
+import typeNode
+
+
+class FormuleNode(browser.JDCNode,typeNode.PopUpMenuNode):
+        
+    def getPanel(self):
+      
+      from monFormulePanel import MonFormulePanel
+      return MonFormulePanel(self,parent=self.editor)
+        
+   
+    def createPopUpMenu(self):
+      typeNode.PopUpMenuNode.createPopUpMenu(self)
+
+            
+class FORMULETreeItem(compooper.EtapeTreeItem):
+    """
+    Classe servant a définir l'item porté par le noeud de l'arbre d'EFICAS
+    qui représente la FORMULE
+    """
+    itemNode=FormuleNode
+
+    def init(self):
+      self.setfunction = self.set_valeur
+
+# ---------------------------------------------------------------------------
+#                   API de FORMULE pour l'arbre 
+# ---------------------------------------------------------------------------
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      On considére que FORMULE n'a pas de fils
+      --> modification par rapport a MACRO classique
+      """
+      # dans EFICAS on ne souhaite pas afficher les mots-clés fils de FORMULE
+      # de façon traditionnelle
+      return []
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icone à afficher dans l'arbre
+      Ce nom dépend de la validité de l'objet
+      """
+      if self.object.isactif():
+        self.object.state="modified"
+        if self.object.isvalid():
+          return "ast-green-square"
+        else:
+          return "ast-red-square"
+      else:
+        return "ast-white-text"
+
+    def GetLabelText(self):
+      """ Retourne 3 valeurs :
+      - le texte a afficher dans le noeud représentant l'item
+      - la fonte dans laquelle afficher ce texte
+      - la couleur du texte
+      """
+      if self.object.isactif():
+        # None --> fonte et couleur par défaut
+        return self.labeltext,None,None
+      else:
+        return self.labeltext,None,None
+        #return self.labeltext,fontes.standard_italique,None
+    
+# ---------------------------------------------------------------------------
+#       Méthodes permettant la modification et la lecture des attributs
+#       du paramètre = API graphique de la FORMULE pour Panel et EFICAS
+# ---------------------------------------------------------------------------
+
+    def get_nom(self):
+      """
+      Retourne le nom de la FORMULE
+      """
+      return self.object.get_nom()
+
+    def get_type(self):
+      """
+      Retourne le type de la valeur retournée par la FORMULE
+      """
+      return self.object.type_retourne
+
+    def get_args(self):
+      """
+      Retourne les arguments de la FORMULE
+      """
+      args=""
+      for mot in self.object.mc_liste:
+          if mot.nom == 'NOM_PARA':
+             args=mot.valeur
+             break
+      if args :
+          if args[0] == "(" and args[-1] ==")":
+             args=args[1:-1]
+          # transforme en tuple si ce n est pas déja le casa
+          try :
+             args=string.split(args,',')
+          except :
+             pass
+      return args
+
+    def get_corps(self):
+      """
+      Retourne le corps de la FORMULE
+      """
+      corps=""
+      for mot in self.object.mc_liste:
+          if mot.nom == 'VALE':
+             corps=mot.valeur
+             break
+      return corps
+
+
+    def get_liste_types_autorises(self):
+      """
+         Retourne la liste des types autorises pour les valeurs de sortie 
+         d'une FORMULE
+      """
+      return self.object.l_types_autorises
+
+    def save_formule(self,new_nom,new_typ,new_arg,new_exp):
+      """
+      Vérifie si (new_nom,new_typ,new_arg,new_exp) définit bien une FORMULE 
+      licite :
+          - si oui, stocke ces paramètres comme nouveaux paramètres de la 
+            FORMULE courante et retourne 1
+          - si non, laisse les paramètres anciens de la FORMULE inchangés et 
+            retourne 0
+      """
+      test,erreur = self.object.verif_formule_python(formule=(new_nom,new_typ,new_arg,
+                                                       new_exp))
+      if test :
+          # la formule est bien correcte : on sauve les nouveaux paramètres
+          test=self.object.update_formule_python(formule=(new_nom,new_typ,new_exp,new_arg))
+      return test,erreur
+
+# ---------------------------------------------------------------------------
+#          Accès aux méthodes de vérification de l'objet FORM_ETAPE
+# ---------------------------------------------------------------------------
+
+    def verif_nom(self,nom):
+        """
+        Lance la vérification du nom passé en argument
+        """
+        return self.object.verif_nom(nom)
+
+    def verif_arguments(self,arguments):
+        """
+        Lance la vérification des arguments passés en argument
+        """
+        return self.object.verif_arguments('('+arguments+')')
+
+    def verif_formule(self,formule):
+        """
+        Lance la vérification de FORMULE passée en argument
+        """
+        return self.object.verif_formule(formule=formule)
+
+
+    def verif_formule_python(self,formule):
+        """
+        Lance la vérification de FORMULE passée en argument
+        """
+        return self.object.verif_formule_python(formule=formule)
+
+import Accas
+treeitem =FORMULETreeItem
+objet = Accas.FORM_ETAPE
diff --git a/InterfaceQT4/compojdc.py b/InterfaceQT4/compojdc.py
new file mode 100644 (file)
index 0000000..b99bf3c
--- /dev/null
@@ -0,0 +1,115 @@
+# -*- coding: utf-8 -*-
+
+from Editeur import Objecttreeitem
+import browser
+
+
+class Node(browser.JDCNode):
+    def getPanel(self):
+        """
+        """
+        from monRacinePanel import MonRacinePanel
+        return MonRacinePanel(self,parent=self.editor)
+
+    def doPasteCommande(self,objet_a_copier):
+        """
+          Réalise la copie de l'objet passé en argument qui est nécessairement
+          une commande
+        """
+        child = self.append_child(objet_a_copier,pos='first',retour='oui')
+        return child
+
+
+class JDCTreeItem(Objecttreeitem.ObjectTreeItem):
+  itemNode=Node
+  
+  def IsExpandable(self):
+    return 1
+
+  def GetText(self):
+      return  "    "
+
+  def GetLabelText(self):
+      # None --> fonte et couleur par défaut
+      return self.object.nom,None,None
+
+  def get_jdc(self):
+    """
+    Retourne l'objet pointé par self
+    """
+    return self.object
+  
+  def GetIconName(self):
+    if self.object.isvalid():
+      return "ast-green-square"
+    else:
+      return "ast-red-square"
+
+  def keys(self):
+      if self.object.etapes_niveaux != []:
+          return range(len(self.object.etapes_niveaux))
+      else:
+          return range(len(self.object.etapes))
+
+  def additem(self,name,pos):
+      cmd = self._object.addentite(name,pos)
+      return cmd
+
+  def suppitem(self,item) :
+    # item             = item de l'ETAPE à supprimer du JDC
+    # item.getObject() = ETAPE ou COMMENTAIRE
+    # self.object      = JDC
+
+    itemobject=item.getObject()
+    if self.object.suppentite(itemobject):
+       if itemobject.nature == "COMMENTAIRE" :
+          message = "Commentaire supprimé"
+       else :
+          message = "Commande " + itemobject.nom + " supprimée"
+       self.appli.affiche_infos(message)
+       return 1
+    else:
+       self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet")
+       return 0
+
+  def GetSubList(self):
+    """
+       Retourne la liste des items fils de l'item jdc.
+       Cette liste est conservee et mise a jour a chaque appel
+    """
+    if self.object.etapes_niveaux != []:
+        liste = self.object.etapes_niveaux
+    else:
+        liste = self.object.etapes
+    sublist=[None]*len(liste)
+    # suppression des items lies aux objets disparus
+    for item in self.sublist:
+       old_obj=item.getObject()
+       if old_obj in liste:
+          pos=liste.index(old_obj)
+          sublist[pos]=item
+       else:
+          pass # objets supprimes ignores
+    # ajout des items lies aux nouveaux objets
+    pos=0
+    for obj in liste:
+       if sublist[pos] is None:
+          # nouvel objet : on cree un nouvel item
+          item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj)
+          sublist[pos]=item
+       pos=pos+1
+
+    self.sublist=sublist
+    return self.sublist
+
+  def get_l_noms_etapes(self):
+      """ Retourne la liste des noms des étapes de self.object"""
+      return self.object.get_l_noms_etapes()
+
+  def get_liste_cmd(self):
+      listeCmd = self.object.niveau.definition.get_liste_cmd()
+      return listeCmd
+
+import Accas
+treeitem =JDCTreeItem
+objet = Accas.JDC    
diff --git a/InterfaceQT4/compomacro.py b/InterfaceQT4/compomacro.py
new file mode 100644 (file)
index 0000000..1afafa5
--- /dev/null
@@ -0,0 +1,153 @@
+# -*- coding: utf-8 -*-
+
+# Modules Python
+import os,sys,string
+import types
+import traceback
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import compooper
+import browser
+import typeNode
+
+
+class MACRONode(browser.JDCNode,typeNode.PopUpMenuNode):         
+    def getPanel(self):
+      from   monMacroPanel import MonMacroPanel
+      return MonMacroPanel (self,parent=self.editor )
+    
+    def createPopUpMenu(self):
+      typeNode.PopUpMenuNode.createPopUpMenu(self)
+        
+    
+class MACROTreeItem(compooper.EtapeTreeItem):
+#  """ Cette classe hérite d'une grande partie des comportements
+#      de la classe compooper.EtapeTreeItem
+#  """
+    itemNode=MACRONode
+
+# ------------------------------------
+#  Classes necessaires à INCLUDE
+# ------------------------------------
+
+class INCLUDETreeItemBase(MACROTreeItem):
+
+    def __init__(self,appli, labeltext, object, setfunction):    
+       MACROTreeItem.__init__(self,appli, labeltext, object, setfunction)
+
+    def iscopiable(self):
+       return 0
+
+
+class INCLUDENode(browser.JDCNode,typeNode.PopUpMenuNode):    
+    def getPanel(self):
+      from   monIncludePanel import MonIncludePanel
+      return MonIncludePanel (self,parent=self.editor )
+
+    def createPopUpMenu(self):
+      typeNode.PopUpMenuNode.createPopUpMenu(self)
+      #self.menu.insertItem( qApp.translate('Browser','Edit'), self.makeEdit )
+      
+    def makeEdit(self):    #,appli,node
+        if self.item.object.text_converted == 0:
+                # Le texte du fichier inclus n'a pas pu etre converti par le module convert
+                msg="Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n"
+                msg=msg+self.item.object.text_error
+                return
+    
+        if not hasattr(self.item.object,"jdc_aux") or self.item.object.jdc_aux is None:
+               #L'include n'est pas initialise
+               self.item.object.build_include(None,"")
+    
+        # On cree un nouvel onglet dans le bureau
+        self.editor.vm.displayJDC( self.item.object.jdc_aux , self.item.object.jdc_aux.nom )
+     
+
+class INCLUDETreeItem(INCLUDETreeItemBase):
+    itemNode=INCLUDENode
+    
+
+# ------------------------------------
+#  Classes necessaires à POURSUITE
+# ------------------------------------
+    
+class POURSUITENode(browser.JDCNode, typeNode.PopUpMenuNode):    
+    def getPanel(self):
+      from   monPoursuitePanel import MonPoursuitePanel
+      return MonPoursuitePanel (self,parent=self.editor )
+
+    def createPopUpMenu(self):
+      typeNode.PopUpMenuNode.createPopUpMenu(self)
+      self.menu.insertItem( qApp.translate('Browser','Edit'), self.makeEdit )
+
+    def makeEdit(self):    #,appli,node
+        if self.item.object.text_converted == 0:
+                msg="Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n"
+                msg=msg+self.item.object.text_error
+                return
+    
+        if not hasattr(self.item.object,"jdc_aux") or self.item.object.jdc_aux is None:
+            text="""DEBUT()
+                    FIN()"""
+            self.object.build_poursuite(None,text)
+    
+        # On cree un nouvel onglet dans le bureau
+        self.editor.vm.displayJDC( self.item.object.jdc_aux , self.item.object.jdc_aux.nom)
+    
+class POURSUITETreeItem(INCLUDETreeItemBase):
+  itemNode=POURSUITENode
+
+
+# ----------------------------------------
+#  Classes necessaires à INCLUDE MATERIAU
+# ----------------------------------------
+    
+
+class MATERIAUNode(MACRONode):
+
+    def getPanel(self):
+      from   monMacroPanel import MonMacroPanel
+      return MonMacroPanel (self,parent=self.editor )
+
+    def createPopUpMenu(self):
+      typeNode.PopUpMenuNode.createPopUpMenu(self)
+      self.menu.insertItem( qApp.translate('Browser','View'), self.makeView )
+
+    def makeView(self) :
+      if hasattr(self.item.object,'fichier_ini') and self.item.object.fichier_ini==None:
+         QMessageBox.information( self, "Include vide","L'include doit etre correctement initialisé pour etre visualisé")
+         return
+      f = open(self.item.object.fichier_ini, "rb")
+      texte = f.read()
+      f.close()
+      from desVisu import DVisu
+      monVisu=DVisu(parent=self.editor,fl=Qt.WType_Dialog)
+      monVisu.TB.setText(texte)
+      monVisu.show()
+
+class INCLUDE_MATERIAUTreeItem(INCLUDETreeItemBase):
+    itemNode=MATERIAUNode
+
+# ------------------------------------
+# TreeItem
+# ------------------------------------
+    
+
+def treeitem(appli, labeltext, object, setfunction=None):
+   """ Factory qui retourne l'item adapte au type de macro : 
+       INCLUDE, POURSUITE, MACRO
+   """
+   if object.nom == "INCLUDE_MATERIAU":
+      return INCLUDE_MATERIAUTreeItem(appli, labeltext, object, setfunction)
+   elif object.nom == "INCLUDE":
+      return INCLUDETreeItem(appli, labeltext, object, setfunction)
+   elif object.nom == "POURSUITE":
+      return POURSUITETreeItem(appli, labeltext, object, setfunction)
+   else:
+      return MACROTreeItem(appli, labeltext, object, setfunction)
+
+import Accas
+objet=Accas.MACRO_ETAPE
+    
+
diff --git a/InterfaceQT4/compomclist.py b/InterfaceQT4/compomclist.py
new file mode 100644 (file)
index 0000000..04a7913
--- /dev/null
@@ -0,0 +1,203 @@
+# -*- coding: utf-8 -*-
+
+import types
+import traceback
+
+import compofact
+import browser
+from Editeur     import Objecttreeitem
+from Noyau.N_OBJECT import ErrorObj
+#import compoerror
+
+
+class Node(browser.JDCNode):
+    def getPanel(self):
+        """        
+        """    
+        if self.item.isMCList() :
+           if self.item.ajout_possible():
+              from monMCListAjoutPanel import MonMCListAjoutPanel
+              return MonMCListAjoutPanel(self,parent=self.editor)
+           else :
+              print "MCList"
+        elif self.item.isMCFact() :
+           from monMCFactPanel import MonMCFactPanel
+           return MonMCFactPanel(self,parent=self.editor)
+        else :
+           print "MCList"
+
+    def doPaste(self,node_selected):
+        objet_a_copier = self.item.get_copie_objet()
+        child=node_selected.doPasteMCF(objet_a_copier)
+        #print "doPaste",child
+        return child
+
+    def doPasteMCF(self,objet_a_copier):
+        child=None
+        # le noeud courant est une MCList
+        if self.item.isMCList() :
+          child = self.append_child(objet_a_copier,pos='first',retour='oui')
+
+        # le noeud courant est un MCFACT
+        elif self.item.isMCFact() :
+          # le noeud selectionne est un MCFACT dans une MCList
+          if self.parent.item.isMCList():
+             child = self.parent.append_child(objet_a_copier,
+                                              pos=self.item,
+                                              retour='oui')
+
+          # le noeud MCFACT selectionne n'est pas dans une MCList
+          else:
+             child = self.parent.append_child(objet_a_copier,retour='oui')
+
+        else:
+          QMessageBox.information( self, "Copie impossible",
+                   "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")          
+          self.editor.affiche_infos("Copie refusée")
+
+        return child
+
+class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
+    """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
+        du noyau Accas instances de la classe MCLIST.
+        Elle adapte ces objets pour leur permettre d'etre intégrés en tant que
+        noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
+        Cette classe délègue les appels de méthode et les accès
+        aux attributs à l'objet du noyau soit manuellement soit 
+        automatiquement (voir classe Delegate et attribut object).
+    """
+    itemNode=Node
+
+    def init(self):
+        # Si l'objet Accas (MCList) a moins d'un mot cle facteur
+        # on utilise directement ce mot cle facteur comme delegue
+        self.updateDelegate()
+
+    def updateDelegate(self):
+        if len(self._object) > 1:
+           self.setdelegate(self._object)
+        else:
+           self.setdelegate(self._object.data[0])
+
+    def panel(self,jdcdisplay,pane,node):
+        """ Retourne une instance de l'objet panneau associe a l'item (self)
+            Si la liste ne contient qu'un mot clé facteur, on utilise le panneau
+            FACTPanel.
+            Si la liste est plus longue on utilise le panneau MCLISTPanel.
+        """
+        if len(self._object) > 1:
+           return MCLISTPanel(jdcdisplay,pane,node)
+        elif isinstance(self._object.data[0],ErrorObj):
+           return compoerror.ERRORPanel(jdcdisplay,pane,node)
+        else:
+           return compofact.FACTPanel(jdcdisplay,pane,node)
+
+    def IsExpandable(self):
+        if len(self._object) > 1:
+           return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
+        else:
+           return compofact.FACTTreeItem.IsExpandable(self)
+
+    def GetSubList(self):
+        self.updateDelegate()
+        if len(self._object) <= 1:
+           self._object.data[0].alt_parent=self._object
+           return compofact.FACTTreeItem.GetSubList(self)
+
+        liste=self._object.data
+        sublist=[None]*len(liste)
+        # suppression des items lies aux objets disparus
+        for item in self.sublist:
+           old_obj=item.getObject()
+           if old_obj in liste:
+              pos=liste.index(old_obj)
+              sublist[pos]=item
+           else:
+              pass # objets supprimes ignores
+        # ajout des items lies aux nouveaux objets
+        pos=0
+        for obj in liste:
+           if sublist[pos] is None:
+              # nouvel objet : on cree un nouvel item
+              def setfunction(value, object=obj):
+                  object=value
+              item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
+              sublist[pos]=item
+              #Attention : on ajoute une information supplementaire pour l'actualisation de 
+              # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
+              # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
+              # informations de validite. alt_parent permet de remedier a ce defaut.
+              obj.alt_parent=self._object
+           pos=pos+1
+
+        self.sublist=sublist
+        return self.sublist
+
+    def GetIconName(self):
+        if self._object.isvalid():
+            return "ast-green-los"
+        elif self._object.isoblig():
+            return "ast-red-los"
+        else:
+            return "ast-yel-los"
+
+    def get_docu(self):
+        """ Retourne la clef de doc de l'objet pointé par self """
+        return self.object.get_docu()    
+
+    def iscopiable(self):
+        if len(self._object) > 1:
+           return Objecttreeitem.SequenceTreeItem.iscopiable(self)
+        else:
+           return compofact.FACTTreeItem.iscopiable(self)
+
+    def isMCFact(self):
+        """
+        Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
+        """
+        return len(self._object) <= 1
+
+    def isMCList(self):
+        """
+        Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
+        """
+        return len(self._object) > 1
+        
+    def get_copie_objet(self):
+        return self._object.data[0].copy()
+
+    def additem(self,obj,pos):
+        #print "compomclist.additem",obj,pos
+        if len(self._object) <= 1:
+           return compofact.FACTTreeItem.additem(self,obj,pos)
+
+        o= self.object.addentite(obj,pos)
+        return o
+
+    def suppitem(self,item):
+        """
+        Retire un objet MCFACT de la MCList (self.object) 
+        """
+        #print "compomclist.suppitem",item
+        obj=item.getObject()
+        if len(self._object) <= 1:
+           return compofact.FACTTreeItem.suppitem(self,item)
+
+        if self.object.suppentite(obj):
+           if len(self._object) == 1: self.updateDelegate()     
+           message = "Mot-clef " + obj.nom + " supprimé"
+           self.appli.affiche_infos(message)
+           return 1
+        else:
+           self.appli.affiche_infos('Impossible de supprimer ce mot-clef')
+           return 0
+
+            
+import Accas
+objet = Accas.MCList    
+
+def treeitem(appli,labeltext,object,setfunction):
+  """ Factory qui produit un objet treeitem adapte a un objet 
+      Accas.MCList (attribut objet de ce module)
+  """
+  return MCListTreeItem(appli,labeltext,object,setfunction)
diff --git a/InterfaceQT4/componiveau.py b/InterfaceQT4/componiveau.py
new file mode 100644 (file)
index 0000000..02743c7
--- /dev/null
@@ -0,0 +1,93 @@
+# -*- coding: utf-8 -*-
+
+from Editeur     import Objecttreeitem
+from Extensions  import commentaire 
+import browser
+
+class Node(browser.JDCNode):
+      pass
+
+class NIVEAUTreeItem(Objecttreeitem.ObjectTreeItem):
+  itemNode=Node
+
+  def isactif(self):
+      return self.object.isactif()
+    
+  def IsExpandable(self):
+      return 1
+    
+  def GetLabelText(self):
+      """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+      """
+      if self.isactif():
+          fonte = Fonte_Niveau
+      else :
+          fonte = Fonte_Niveau_inactif
+      return self.labeltext,fonte,'#00008b'
+    
+  def GetIconName(self):
+      if self.isactif():
+          if self.object.isvalid():
+              return "ast-green-text"
+          else:
+              return "ast-red-text"
+      else:
+          return "ast-white-text"
+  
+  def keys(self):
+      if self.object.etapes_niveaux != []:
+          return range(len(self.object.etapes_niveaux))
+      else:
+          return range(len(self.object.etapes))
+
+  def GetSubList(self):
+    sublist=[]
+    for key in self.keys():
+      if self.object.etapes_niveaux != []:
+          liste = self.object.etapes_niveaux
+      else:
+          liste = self.object.etapes
+      try:
+        value = liste[key]
+      except KeyError:
+        continue
+      def setfunction(value, key=key, object=liste):
+        object[key] = value
+      item =self.make_objecttreeitem(self.appli,value.ident() + " : ", value, setfunction)
+      sublist.append(item)
+    return sublist
+
+  def additem(self,name,pos):
+      if isinstance(name,Objecttreeitem.TreeItem) :
+          cmd=self.object.addentite(name.getObject(),pos)
+      else :
+          cmd = self.object.addentite(name,pos)
+      item = self.make_objecttreeitem(self.appli,cmd.nom + " : ", cmd)
+      return item
+
+  def suppitem(self,item) :
+    # item = item de l'ETAPE à supprimer du JDC
+    # item.getObject() = ETAPE ou COMMENTAIRE
+    # self.object = JDC
+    itemobject=item.getObject()
+    if self.object.suppentite(itemobject):
+       if isinstance(item.object,commentaire.COMMENTAIRE):
+          message = "Commentaire supprimé"
+       else :
+          message = "Commande " + itemobject.nom + " supprimée"
+       self.appli.affiche_infos(message)
+       return 1
+    else:
+       self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet")
+       return 0
+
+  def GetText(self):
+      return ''
+
+    
+import Accas
+treeitem = NIVEAUTreeItem
+objet = Accas.ETAPE_NIVEAU    
diff --git a/InterfaceQT4/componuplet.py b/InterfaceQT4/componuplet.py
new file mode 100644 (file)
index 0000000..d9c610c
--- /dev/null
@@ -0,0 +1,79 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import types
+from repr import Repr
+from copy import copy,deepcopy
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+
+myrepr = Repr()
+myrepr.maxstring = 100
+myrepr.maxother = 100
+
+# Si Expandable vaut 1 les éléments du nuplet apparaissent dans l'arbre
+# Si Expandable vaut 0 les éléments n'apparaissent pas
+Expandable=1
+
+
+import browser
+
+class Node(browser.JDCNode): pass
+    
+
+class NUPLETTreeItem(Objecttreeitem.ObjectTreeItem):
+  itemNode=Node
+
+  def IsExpandable(self):
+    return Expandable
+
+  def GetText(self):
+      return  ''
+
+  def isvalid(self):
+    return self.object.isvalid()
+
+  def GetIconName(self):
+    if self.object.isvalid():
+      return "ast-green-los"
+    elif self.object.isoblig():
+      return "ast-red-los"
+    else:
+      return "ast-yel-los"
+
+  def GetSubList(self):
+    if not Expandable:return []
+    sublist=[]
+    for obj in self.object.mc_liste:
+      item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, None)    
+      sublist.append(item)
+    return sublist
+
+  def additem(self,name,pos):
+    raise "NUPLET"
+
+  def suppitem(self,item) :
+    raise "NUPLET"
+
+import Accas
+treeitem=NUPLETTreeItem
+objet=Accas.MCNUPLET
diff --git a/InterfaceQT4/compooper.py b/InterfaceQT4/compooper.py
new file mode 100644 (file)
index 0000000..66bd646
--- /dev/null
@@ -0,0 +1,261 @@
+# -*- coding: utf-8 -*-
+import traceback
+import string
+from PyQt4 import *
+from PyQt4.QtGui  import *
+from PyQt4.QtCore import *
+
+
+from Editeur     import Objecttreeitem
+import browser
+import typeNode
+
+class Node(browser.JDCNode, typeNode.PopUpMenuNode):
+    def getPanel( self ):
+        """
+        """
+        from monCommandePanel import MonCommandePanel
+        return MonCommandePanel(self,parent=self.editor)
+
+    def createPopUpMenu(self):
+        typeNode.PopUpMenuNode.createPopUpMenu(self)
+        if ("AFFE_CARA_ELEM" in self.item.get_genealogie()) and self.editor.salome: 
+           self.menu.insertItem( 'View3D', self.view3D )
+
+    def doPaste(self,node_selected):
+        """
+            Déclenche la copie de l'objet item avec pour cible
+            l'objet passé en argument : node_selected
+        """
+        objet_a_copier = self.item.get_copie_objet()
+        child=node_selected.doPasteCommande(objet_a_copier)
+        return child
+
+    def doPasteCommande(self,objet_a_copier):
+        """
+          Réalise la copie de l'objet passé en argument qui est nécessairement
+          une commande
+        """
+        parent=self.parent
+        #child = parent.item.append_child(objet_a_copier,self.item.getObject())
+        child = self.append_brother(objet_a_copier)
+        #if child is None:return 0
+        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',retour='oui')
+        return child
+
+    def view3D(self) :
+        import TroisDPal
+        troisD=TroisDPal.TroisDPilote(self.item,self.editor.parent.appliEficas)
+        troisD.envoievisu()
+
+
+class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
+  """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
+      Accas. Elle leur permet d'etre affichés comme des noeuds
+      d'un arbre graphique.
+      Cette classe a entre autres deux attributs importants :
+        - _object qui est un pointeur vers l'objet du noyau
+        - object qui pointe vers l'objet auquel sont délégués les
+          appels de méthode et les acces aux attributs
+      Dans le cas d'une ETAPE, _object et object pointent vers le 
+      meme objet.
+  """
+  itemNode=Node
+  
+  def IsExpandable(self):
+      return 1
+
+  def GetIconName(self):
+      """
+      Retourne le nom de l'icone a afficher dans l'arbre
+      Ce nom dépend de la validité de l'objet
+      """
+      if not self.object.isactif():
+         return "ast-white-square"
+      elif self.object.isvalid():
+         return "ast-green-square"
+      else:
+         valid=self.valid_child()
+         valid=valid * self.valid_regles("non")
+         if self.reste_val != {}:
+            valid=0
+         if valid==0  :
+            return "ast-red-square"
+         else :
+            try :
+            # on traite ici le cas d include materiau
+            #  print self.object.definition.nom 
+              if  self.object.fichier_ini != self.object.nom_mater :
+                  return "ast-red-square"
+            except :
+              pass
+            return "ast-yellow-square"
+
+  def GetLabelText(self):
+      """ Retourne 3 valeurs :
+      - le texte a afficher dans le noeud représentant l'item
+      - la fonte dans laquelle afficher ce texte
+      - la couleur du texte
+      """
+      if self.object.isactif():
+        # None --> fonte et couleur par défaut
+        return self.labeltext,None,None
+      else:
+        return self.labeltext, None, None #CS_pbruno todo
+      
+  def get_objet(self,name) :
+      for v in self.object.mc_liste:
+          if v.nom == name : return v
+      return None
+      
+  def get_type_sd_prod(self):
+      """
+         Retourne le nom du type du concept résultat de l'étape
+      """
+      sd_prod=self.object.get_type_produit()
+      if sd_prod:
+         return sd_prod.__name__
+      else:
+         return ""
+
+  def additem(self,name,pos):      
+      mcent = self._object.addentite(name,pos)
+      return mcent
+      
+
+  def suppitem(self,item) :
+      # item : item du MOCLE de l'ETAPE a supprimer
+      # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList 
+      itemobject=item.getObject()
+      if itemobject.isoblig() :
+          self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
+          return 0
+      if self.object.suppentite(itemobject):
+          message = "Mot-clé " + itemobject.nom + " supprimé"
+          self.appli.affiche_infos(message)
+          return 1
+      else :
+          self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
+          return 0
+
+  def GetText(self):
+      try:
+          return self.object.get_sdname()
+      except:
+          return ''
+
+  def keys(self):
+      keys=self.object.mc_dict.keys()
+      return keys
+
+  def GetSubList(self):
+      """
+         Reactualise la liste des items fils stockes dans self.sublist
+      """
+      if self.isactif():
+         liste=self.object.mc_liste
+      else:
+         liste=[]
+
+      sublist=[None]*len(liste)
+      # suppression des items lies aux objets disparus
+      for item in self.sublist:
+         old_obj=item.getObject()
+         if old_obj in liste:
+            pos=liste.index(old_obj)
+            sublist[pos]=item
+         else:
+            pass # objets supprimes ignores
+
+      # ajout des items lies aux nouveaux objets
+      pos=0
+      for obj in liste:
+         if sublist[pos] is None:
+            # nouvel objet : on cree un nouvel item
+            def setfunction(value, object=obj):
+                object.setval(value)
+            item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
+            sublist[pos]=item
+         pos=pos+1
+
+      self.sublist=sublist
+      return self.sublist
+
+  def isvalid(self):
+      return self.object.isvalid()
+
+  def iscopiable(self):
+      """
+      Retourne 1 si l'objet est copiable, 0 sinon
+      """
+      return 1
+
+  def update(self,item):
+      if item.sd and item.sd.nom:
+         self.nomme_sd(item.sd.nom)
+
+  def nomme_sd(self,nom):
+      """ Lance la méthode de nommage de la SD """
+      oldnom=""
+      if self.object.sd != None :
+         oldnom=self.object.sd.nom
+      test,mess= self.object.nomme_sd(nom)
+      if test:self.object.parent.reset_context()
+      if (test and self.appli.dict_reels.has_key(oldnom) ):
+              self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom]
+      return test,mess
+
+  def is_reentrant(self):
+      return self.object.is_reentrant()
+    
+  def get_noms_sd_oper_reentrant(self):
+      return self.object.get_noms_sd_oper_reentrant()
+
+  def get_objet_commentarise(self):
+      """
+          Cette méthode retourne un objet commentarisé
+          représentatif de self.object
+      """
+      # Format de fichier utilisé
+      format=self.appli.format_fichier
+      return self.object.get_objet_commentarise(format)
+
+  def get_objet_commentarise_BAK(self):
+      """
+          Cette méthode retourne un objet commentarisé
+          représentatif de self.object
+      """
+      import generator,string,Accas
+      # Format de fichier utilisé
+      format=self.appli.format_fichier
+      g=generator.plugins[format]()
+      texte_commande = g.gener(self.object,format='beautifie')
+      # Il faut enlever la premiere ligne vide de texte_commande que 
+      # rajoute le generator
+      rebut,texte_commande = string.split(texte_commande,'\n',1)
+      # on construit l'objet COMMANDE_COMM repésentatif de self mais non 
+      # enregistré dans le jdc
+      commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
+                                             parent=self.object.parent)
+      commande_comment.niveau = self.object.niveau
+      commande_comment.jdc = commande_comment.parent = self.object.jdc
+
+      pos=self.object.parent.etapes.index(self.object)
+      parent=self.object.parent
+      self.object.parent.suppentite(self.object)
+      parent.addentite(commande_comment,pos)
+
+      return commande_comment
+
+
+import Accas
+treeitem = EtapeTreeItem
+objet = Accas.ETAPE    
+
diff --git a/InterfaceQT4/compoparam.py b/InterfaceQT4/compoparam.py
new file mode 100644 (file)
index 0000000..b21ae80
--- /dev/null
@@ -0,0 +1,122 @@
+# -*- coding: utf-8 -*-
+"""
+   Ce module contient les classes permettant de définir les objets graphiques
+   représentant un objet de type PARAMETRE, cad le panneau et l'item de l'arbre
+   d'EFICAS
+"""
+
+# import modules Python
+import string
+
+# import modules EFICAS
+from Editeur     import Objecttreeitem
+import browser
+import typeNode
+
+
+class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel): 
+    def getPanel(self):
+        """        
+        """    
+        from monParamPanel  import MonParamPanel
+        return MonParamPanel(self, parent=self.editor )
+
+    def createPopUpMenu(self):
+        typeNode.PopUpMenuNodePartiel.createPopUpMenu(self)
+
+
+
+class PARAMTreeItem(Objecttreeitem.ObjectTreeItem):
+    """
+    Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
+    qui représente le PARAMETRE
+    """
+    itemNode=Node
+
+    def init(self):      
+      self.setfunction = self.set_valeur
+
+# ---------------------------------------------------------------------------
+#                   API du PARAMETRE pour l'arbre 
+# ---------------------------------------------------------------------------
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icone associée au noeud qui porte self,
+      dépendant de la validité de l'objet
+      NB : un PARAMETRE est toujours valide ...
+      """
+      if self.isactif():
+          if self.isvalid():
+              return "ast-green-square"
+          else:
+              return "ast-red-square"
+      else:
+          return "ast-white-square"
+
+    def GetLabelText(self):
+        """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+        """
+        return 'PARAMETRE',None,None 
+
+    def GetText(self):
+      """
+      Retourne le texte à afficher aprês le nom de la commande (ici apres 'paramêtre')
+      Ce texte est tronqué à 25 caractêres
+      """
+      texte=self.object.nom+"="+str(self.object.valeur)
+      texte = string.split(texte,'\n')[0]
+      if len(texte) < 25 :
+          return texte
+      else :
+          return texte[0:24]+'...'
+
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      """
+      return []
+    
+# ---------------------------------------------------------------------------
+#       Méthodes permettant la modification et la lecture des attributs
+#       du paramêtre = API graphique du PARAMETRE pour Panel et EFICAS
+# ---------------------------------------------------------------------------
+
+    def get_valeur(self):
+      """
+      Retourne la valeur de l'objet PARAMETRE cad son texte
+      """
+      if self.object.valeur is None: return ''
+      else: return self.object.valeur 
+
+    def get_nom(self):
+      """
+      Retourne le nom du paramêtre
+      """
+      return self.object.nom
+
+    def set_valeur(self,new_valeur):
+      """
+      Affecte valeur à l'objet PARAMETRE
+      """
+      self.object.set_valeur(new_valeur)
+
+    def set_nom(self,new_nom):
+      """
+      Renomme le paramêtre
+      """
+      self.object.set_nom(new_nom)
+      #self.object.set_attribut('nom',new_nom)
+
+    def get_fr(self):
+      """
+      Retourne le fr associé au paramêtre, cad la bulle d'aide pour EFICAS
+      """
+      return "Définition d'un paramêtre"
+    
+import Extensions.parametre
+treeitem =PARAMTreeItem
+objet = Extensions.parametre.PARAMETRE
diff --git a/InterfaceQT4/compoproc.py b/InterfaceQT4/compoproc.py
new file mode 100644 (file)
index 0000000..0a1adca
--- /dev/null
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+from Editeur     import Objecttreeitem
+import compooper
+import browser
+import typeNode
+
+
+class Node(browser.JDCNode,typeNode.PopUpMenuNode):
+    def getPanel(self):
+        from monMacroPanel import MonMacroPanel
+        return MonMacroPanel(self,parent=self.editor)
+
+    def createPopUpMenu(self):
+        typeNode.PopUpMenuNode.createPopUpMenu(self)
+
+
+class ProcEtapeTreeItem(compooper.EtapeTreeItem):
+    itemNode=Node
+  
+import Accas
+treeitem = ProcEtapeTreeItem
+objet = Accas.PROC_ETAPE    
+
diff --git a/InterfaceQT4/composimp.py b/InterfaceQT4/composimp.py
new file mode 100644 (file)
index 0000000..2d7364f
--- /dev/null
@@ -0,0 +1,604 @@
+# -*- coding: utf-8 -*-
+# Modules Python
+import string,types,os
+
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import browser
+from Noyau.N_CR   import justify_text
+    
+import prefs
+
+class Node(browser.JDCNode):    
+    def getPanel(self):
+        """        
+        """
+        klass = None 
+        
+        # Attention l ordre des if est important        
+        if self.item.wait_shell():
+            # l'objet attend un shell
+            # a priori jamais
+            print "Pb : Panneau Shell attendu"
+            print "Pb : Prevenir la maintenance"
+            klass = None #CS_pbruno todo
+            return None
+
+        # l'objet prend sa (ses) valeur(s) dans un ensemble discret de valeurs
+        if self.item.has_into():
+            if self.item.is_list() :
+                from monPlusieursIntoPanel import MonPlusieursIntoPanel
+                klass = MonPlusieursIntoPanel
+            else:
+                from monUniqueIntoPanel import MonUniqueIntoPanel
+                klass = MonUniqueIntoPanel
+
+        # l'objet prend une ou des valeurs a priori quelconques
+        else:
+            # on attend une liste de valeurs 
+            if self.item.is_list() :
+                # on attend une liste de SD
+                if self.item.wait_assd():
+                    from monPlusieursASSDPanel import MonPlusieursASSDPanel 
+                    klass = MonPlusieursASSDPanel
+                else:
+                    # on attend une liste de valeurs de types debase (entiers, réels,...)
+                    from monPlusieursBasePanel import MonPlusieursBasePanel 
+                    klass = MonPlusieursBasePanel
+            # on n'attend qu'une seule valeur 
+            else:
+                # on attend une SD ou un objet de la classe CO (qui n'existe pas encore)
+                if self.item.wait_co():
+                    if len(self.item.get_sd_avant_du_bon_type()) != 0 :
+                       from monUniqueSDCOIntoPanel import MonUniqueSDCOIntoPanel
+                       klass = MonUniqueSDCOIntoPanel
+                    else :
+                       from monUniqueSDCOPanel import MonUniqueSDCOPanel
+                       klass = MonUniqueSDCOPanel
+
+                # on attend une SD
+                elif self.item.wait_assd():
+                    if 'R' in self.item.GetType():
+                        from monUniqueASSDPanel import MonUniqueASSDReelPanel
+                        klass = MonUniqueASSDReelPanel
+                    else :
+                        from monUniqueASSDPanel import MonUniqueASSDPanel
+                        klass = MonUniqueASSDPanel
+
+                # on attend une valeur d'un type de base (entier,reel,...)
+                else:
+                        # on attend un complexe
+                     if self.item.wait_complex():
+                        from monUniqueCompPanel import MonUniqueCompPanel
+                        klass = MonUniqueCompPanel
+                     else:
+                        # on attend un entier, un réel ou une string
+                        from monUniqueBasePanel import MonUniqueBasePanel
+                        klass = MonUniqueBasePanel
+                        
+        # cas particulier des fonctions
+        genea = self.item.get_genealogie()
+        if "VALE" in genea or "VALE_C" in genea:
+            if "DEFI_FONCTION" in genea :
+                from monFonctionPanel import MonFonctionPanel
+                klass = MonFonctionPanel
+
+        if not klass:
+            return None
+        return klass( self, self.editor )
+        
+        
+    
+class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
+  itemNode=Node
+
+  def init(self) :
+      self.expandable = 0
+  
+
+  #-----------------------------------------------
+  #
+  # Methodes liees aux informations sur le Panel
+  # ou au mot-clef simple
+  #
+  #-----------------------------------------------
+  # is_list
+  # get_into                a priori inutile --> commentee
+  # has_into
+  # wait_into                a priori inutile --> commentee
+  # GetMinMax
+  # GetMultiplicite
+  # GetIntervalle
+  # GetListeValeurs
+  # get_liste_possible
+
+  def is_list(self):
+      """
+          Cette méthode indique si le mot cle simple attend une liste (valeur de retour 1)
+          ou s'il n'en attend pas (valeur de retour 0)
+
+          Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
+          Dans le cas sans validateur, l'information est donnée par l'attribut max
+          de la definition du mot cle.
+          Dans le cas avec validateur, il faut combiner l'information précédente avec
+          celle issue de l'appel de la méthode is_list sur le validateur.On utilisera
+          l'operateur ET pour effectuer cette combinaison (AndVal).
+      """
+      is_a_list=0
+      min,max = self.GetMinMax()
+      assert (min <= max)
+      if max > 1 :
+                is_a_list=1
+      # Dans le cas avec validateurs, pour que le mot cle soit considéré
+      # comme acceptant une liste, il faut que max soit supérieur a 1
+      # ET que la méthode is_list du validateur retourne 1. Dans les autres cas
+      # on retournera 0 (n'attend pas de liste)
+      if self.definition.validators :
+         is_a_list= self.definition.validators.is_list() * is_a_list
+      return is_a_list 
+
+  #def get_into(self,liste_courante=None):
+  #    """
+  #        Cette méthode retourne la liste de choix proposée par le mot cle. Si le mot cle ne propose
+  #        pas de liste de choix, la méthode retourne None.
+  #        L'argument d'entrée liste_courante, s'il est différent de None, donne la liste des choix déja
+  #        effectués par l'utilisateur. Dans ce cas, la méthode get_into doit calculer la liste des choix
+  #        en en tenant compte.
+  #        Cette méthode part du principe que la relation entre into du mot clé et les validateurs est
+  #        une relation de type ET (AndVal).
+  #    """
+  #    if not self.object.definition.validators :
+  #       return self.object.definition.into
+  #    else:
+  #       return self.object.definition.validators.get_into(liste_courante,self.definition.into)
+
+  def has_into(self):
+      """
+          Cette méthode indique si le mot cle simple propose un choix (valeur de retour 1)
+          ou s'il n'en propose pas (valeur de retour 0)
+
+          Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
+          Dans le cas sans validateur, l'information est donnée par l'attribut into
+          de la definition du mot cle.
+          Dans le cas avec validateurs, pour que le mot cle soit considéré
+          comme proposant un choix, il faut que into soit présent OU
+          que la méthode has_into du validateur retourne 1. Dans les autres cas
+          on retournera 0 (ne propose pas de choix)
+      """
+      has_an_into=0
+      if self.definition.into:
+               has_an_into=1
+      elif self.definition.validators :
+         has_an_into= self.definition.validators.has_into()
+      return has_an_into
+
+
+  def GetMinMax(self):
+      """ Retourne les valeurs min et max de la définition de object """
+      return self.object.get_min_max()
+
+  def GetMultiplicite(self):
+      """ A préciser.
+          Retourne la multiplicité des valeurs affectées a l'objet
+          représenté par l'item. Pour le moment retourne invariablement 1.
+      """
+      return 1
+
+  def GetIntervalle(self):
+      """ 
+           Retourne le domaine de valeur attendu par l'objet représenté 
+           par l'item.
+      """
+      return self.object.getintervalle()
+
+  def GetListeValeurs(self) :
+      """ Retourne la liste des valeurs de object """
+      valeurs=self.object.get_liste_valeurs()
+      try :
+        if "R" in self.object.definition.type:
+           clef=self.object.GetNomConcept()
+           if self.appli.dict_reels.has_key(clef):
+              if type(valeurs) == types.TupleType:
+                 valeurs_reelles=[]
+                 for val in valeurs :
+                    if self.appli.dict_reels[clef].has_key(val) : 
+                       valeurs_reelles.append(self.appli.dict_reels[clef][val])
+                    else :
+                       valeurs_reelles.append(val)
+              else :
+                 if self.appli.dict_reels[clef].has_key(valeurs):
+                    valeurs_reelles=self.appli.dict_reels[clef][valeurs]
+              valeurs=valeurs_reelles
+      except :
+        pass
+      return valeurs
+    
+  def get_liste_possible(self,listeActuelle=[]):
+      if hasattr(self.definition.validators,'into'):
+         valeurspossibles = self.definition.validators.into 
+      else:
+         valeurspossibles = self.get_definition().into
+
+      #On ne garde que les items valides
+      listevalideitem=[]
+      if type(valeurspossibles) in (types.ListType,types.TupleType) :
+         pass
+      else :
+         valeurspossibles=(valeurspossibles,)
+      for item in valeurspossibles:
+          encorevalide=self.valide_item(item)
+          if encorevalide :
+             listevalideitem.append(item)
+
+      #on ne garde que les choix possibles qui passent le test de valide_liste_partielle
+      listevalideliste=[]
+      for item in listevalideitem:
+          encorevalide=self.valide_liste_partielle(item,listeActuelle)
+          if encorevalide :
+              listevalideliste.append(item)
+      return listevalideliste
+
+  def get_liste_param_possible(self):
+      liste_param=[]
+      for param in self.object.jdc.params:
+          encorevalide=self.valide_item(param.valeur)
+          if encorevalide:
+             type_param=param.valeur.__class__.__name__
+             for typ in self.definition.type:
+                 if typ=='R':
+                     liste_param.append(param)
+                 if typ=='I' and type_param=='int':
+                     liste_param.append(param)
+                 if typ=='TXM' and type_param=='str':
+                     liste_param.append(repr(param))
+                 if ('grma' in repr(typ)) and type_param=='str':
+                     liste_param.append(param.nom)
+      return liste_param
+
+  #--------------------------------------------------
+  #
+  # Methodes liees a la validite des valeurs saisies
+  #
+  #---------------------------------------------------
+  # valide_item
+  # valide_liste_partielle
+  # valide_liste_complete
+  # info_erreur_item
+  # info_erreur_liste
+  # IsInIntervalle
+  # isvalid
+
+  def valide_item(self,item):
+      """
+        La validation est réalisée directement par l'objet
+      """
+      return self.object.valide_item(item)
+     
+  def valide_liste_partielle(self,item,listecourante):
+      #On protege la liste en entree en la copiant
+      valeur=listecourante[:]
+      valeur.append(item)
+      return self.object.valid_valeur_partielle(valeur)
+
+  def valide_liste_complete (self,valeur):
+      return self.object.valid_valeur(valeur)
+
+  def valide_val (self,valeur):
+      return self.object.valid_val(valeur)
+
+  def info_erreur_item(self) :
+      commentaire=""
+      if self.definition.validators :
+         commentaire=self.definition.validators.info_erreur_item()
+      return commentaire
+      
+  def aide(self) :
+      commentaire=""
+      if self.definition.validators :
+         commentaire=self.definition.validators.aide()
+      return commentaire
+
+  def info_erreur_liste(self) :
+      commentaire=""
+      if self.definition.validators :
+         commentaire=self.definition.validators.info_erreur_liste()
+      return commentaire
+
+  def IsInIntervalle(self,valeur):
+      """ 
+          Retourne 1 si la valeur est dans l'intervalle permis par
+          l'objet représenté par l'item.
+      """
+      return self.valide_item(valeur)
+
+  def isvalid(self):
+    valide=self.object.isvalid()
+    return valide
+
+  #--------------------------------------------------
+  #
+  # Autres ...
+  #
+  #---------------------------------------------------
+  # GetIconName
+  # GetText
+  # set_valeur_co
+  # get_sd_avant_du_bon_type
+  # delete_valeur_co
+
+
+  def GetIconName(self):
+    if self.isvalid():
+      return "ast-green-ball"
+    elif self.object.isoblig():
+      return "ast-red-ball"
+    else:
+      return "ast-yel-ball"
+
+  def GetText(self):
+    """
+    Classe SIMPTreeItem
+    Retourne le texte a afficher dans l'arbre représentant la valeur de l'objet
+    pointé par self 
+    """
+    text= self.object.GetText()
+    if text == None : text=""
+    return text
+    
+
+  def set_valeur_co(self,nom_co):
+      """
+      Affecte au MCS pointé par self l'objet de type CO et de nom nom_co
+      """
+      ret = self.object.set_valeur_co(nom_co)
+      #print "set_valeur_co",ret
+      return ret
+      
+  def get_sd_avant_du_bon_type(self):
+      """
+      Retourne la liste des noms des SD présentes avant l'étape qui contient
+      le MCS pointé par self et du type requis par ce MCS
+      """
+      a=self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type)
+      return a
+
+  def get_sd_avant_du_bon_type_pour_type_de_base(self):
+      a=self.object.jdc.get_sd_avant_du_bon_type_pour_type_de_base(self.object.etape,"LASSD")
+      return a
+
+
+
+
+  def delete_valeur_co(self,valeur=None):
+      """
+           Supprime la valeur du mot cle (de type CO)
+           il faut propager la destruction aux autres etapes
+      """
+      if not valeur : valeur=self.object.valeur
+      # XXX faut il vraiment appeler del_sdprod ???
+      #self.object.etape.parent.del_sdprod(valeur)
+      self.object.etape.parent.delete_concept(valeur)
+
+  #-----------------------------------------------
+  #
+  # Methodes liees au type de l objet attendu
+  #
+  #-----------------------------------------------
+  # wait_co 
+  # wait_geom
+  # wait_complex
+  # wait_reel
+  # wait_shell
+  # wait_assd
+  # GetType
+
+  def wait_co(self):
+      """
+      Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un objet de type ASSD qui n'existe pas encore (type CO()),
+      0 sinon
+      """
+      return self.object.wait_co()
+
+  def wait_geom(self):
+      """
+      Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un objet GEOM, 0 sinon
+      """
+      return self.object.wait_geom()
+    
+  def wait_complex(self):
+      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un complexe, 0 sinon """
+      if 'C' in self.object.definition.type:
+          return 1
+      else:
+          return 0
+
+  def wait_reel(self):
+      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un réel, 0 sinon """
+      if 'R' in self.object.definition.type:
+          return 1
+      else:
+          return 0
+        
+  def wait_shell(self):
+      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un shell, 0 sinon """
+      if 'shell' in self.object.definition.type:
+          return 1
+      else:
+          return 0
+
+  def wait_assd(self):
+      """Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un objet de type ASSD ou dérivé, 0 sinon """
+      return self.object.wait_assd()
+    
+  def wait_assd_or_type_base(self) :
+      boo=0
+      if len(self.object.definition.type) > 1 :
+         if self.wait_reel() :
+            boo = 1
+         if 'I' in self.object.definition.type :
+            boo = 1
+      return boo
+
+   
+  def GetType(self):
+      """ 
+          Retourne le type de valeur attendu par l'objet représenté par l'item.
+      """
+      return self.object.get_type()
+
+  #-----------------------------------------------------
+  #
+  # Methodes liees  a l evaluation de la valeur saisie
+  #
+  #-----------------------------------------------------
+  # eval_valeur
+  # eval_valeur_item
+  # is_CO
+  # traite_reel
+
+  def eval_valeur(self,valeur):
+      """ Lance l'interprétation de 'valeur' (chaine de caractéres) comme valeur de self :
+             - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...)
+             - retourne 'valeur' (chaine de caractéres) sinon
+      """
+      newvaleur=self.eval_val(valeur)
+      return newvaleur,1
+
+  def eval_valeur_BAK(self,valeur):
+      """ Lance l'interprétation de 'valeur' (chaine de caractéres) comme valeur
+      de l'objet pointé par self :
+        - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...)
+        - retourne 'valeur' (chaine de caractéres) sinon
+        - retourne None en cas d invalidite
+        - retourne invalide si 1 des objets du tuple l est
+      """
+      validite=1
+      if type(valeur) in (types.ListType,types.TupleType) :
+         valeurretour=[]
+         for item in valeur :
+             newvaleur,validiteitem=self.eval_valeur_item(item)
+             valeurretour.append(newvaleur)
+             if validiteitem == 0:
+                validite=0
+      else :
+         valeurretour,validite= self.eval_valeur_item(valeur)
+      if validite == 0 :
+         valeurretour = None
+      return valeurretour,validite
+
+  def eval_valeur_item(self,valeur):
+      """ Lance l'interprétation de 'valeur' qui doit ne pas etre un tuple 
+          - va retourner la valeur de retour et la validite
+            selon le type de l objet attendu
+          - traite les reels et les parametres 
+      """ 
+      #print "eval_valeur_item",valeur
+      if valeur==None or valeur == "" :
+         return None,0
+      validite=1
+      if self.wait_reel():
+             valeurinter = self.traite_reel(valeur)
+             if valeurinter != None :
+                valeurretour,validite= self.object.eval_valeur(valeurinter)
+             else:
+                valeurretour,validite= self.object.eval_valeur(valeur)
+      elif self.wait_geom():
+             valeurretour,validite = valeur,1
+      else :
+             valeurretour,validite= self.object.eval_valeur(valeur)
+      #print "eval_valeur_item",valeurretour,validite
+
+      if validite == 0:
+         if type(valeur) == types.StringType and self.object.wait_TXM():
+            essai_valeur="'" + valeur + "'"
+            valeurretour,validite= self.object.eval_valeur(essai_valeur)
+
+      if hasattr(valeurretour,'__class__'):
+         #if valeurretour.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'):
+         if valeurretour.__class__.__name__ in ('PARAMETRE',):
+            validite=1
+
+      #if self.wait_co():
+         # CCAR : il ne faut pas essayer de creer un concept
+         # il faut simplement en chercher un existant ce qui a du etre fait par self.object.eval_valeur(valeur)
+         #try:
+            #valeurretour=Accas.CO(valeur)
+         #except:
+            #valeurretour=None
+            #validite=0
+      # on est dans le cas ou on a évalué et ou on n'aurait pas du
+      if self.object.wait_TXM() :
+          if type(valeurretour) != types.StringType:
+             valeurretour=str(valeur)
+             validite=1
+      return valeurretour,validite
+      
+  def is_CO(self,valeur=None):
+      """
+         Indique si valeur est un concept produit de la macro
+         Cette méthode n'a de sens que pour un MCSIMP d'une MACRO
+         Si valeur vaut None on teste la valeur du mot cle
+      """
+      # Pour savoir si un concept est un nouveau concept de macro
+      # on regarde s'il est présent dans l'attribut sdprods de l'étape
+      # ou si son nom de classe est CO.
+      # Il faut faire les 2 tests car une macro non valide peut etre
+      # dans un etat pas tres catholique avec des CO pas encore types
+      # et donc pas dans sdprods (resultat d'une exception dans type_sdprod)
+      if not valeur:valeur=self.object.valeur
+      if valeur in self.object.etape.sdprods:return 1
+      if type(valeur) is not types.InstanceType:return 0
+      if valeur.__class__.__name__ == 'CO':return 1
+      return 0
+
+  def is_param(self,valeur) :
+      for param in self.jdc.params:
+          if (repr(param) == valeur):
+             return 1
+      return 0
+
+  def traite_reel(self,valeur):
+      """
+      Cette fonction a pour but de rajouter le '.' en fin de chaine pour un réel
+      ou de détecter si on fait référence a un concept produit par DEFI_VALEUR
+      ou un EVAL ...
+      """
+      valeur = string.strip(valeur)
+      liste_reels = self.get_sd_avant_du_bon_type()
+      if valeur in liste_reels:
+          return valeur
+      if len(valeur) >= 3 :
+          if valeur[0:4] == 'EVAL' :
+              # on a trouvé un EVAL --> on retourne directement la valeur
+              return valeur
+      if string.find(valeur,'.') == -1 :
+          # aucun '.' n'a été trouvé dans valeur --> on en rajoute un a la fin
+          if (self.is_param(valeur)):
+              return valeur
+          else:
+              if string.find(valeur,'e') != -1:
+                 # Notation scientifique ?
+                 try :
+                    r=eval(valeur)
+                    return valeur
+                 except :
+                    return None
+              else :
+                 return valeur+'.'
+      else:
+          return valeur
+        
+
+import Accas
+treeitem = SIMPTreeItem
+objet = Accas.MCSIMP
+
diff --git a/InterfaceQT4/editor.py b/InterfaceQT4/editor.py
new file mode 100644 (file)
index 0000000..7b8c937
--- /dev/null
@@ -0,0 +1,625 @@
+# -*- coding: utf-8 -*-
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import types,sys,os
+import traceback
+from PyQt4 import *
+from PyQt4.QtGui  import *
+from PyQt4.QtCore import *
+
+# Modules Eficas
+
+import convert,generator
+from Editeur     import session
+from Editeur     import comploader
+from Editeur     import Objecttreeitem
+#import panelsQT
+import browser
+import readercata
+import qtCommun
+
+import prefs
+
+VERSION_EFICAS  = "EFICAS v1.14"
+
+
+class JDCEditor(QSplitter):
+# -------------------------- #
+    """
+       Editeur de jdc
+    """        
+
+    def __init__ (self,fichier = None, jdc = None, QWParent=None, units = None, include=0 ,appli=None, vm=None):          
+    #----------------------------------------------------------------------------------------------------------#
+
+        #print "debut JDCEditor __init__"
+        print "fichier", fichier,"jdc",jdc,"units",units,"include",include
+        QSplitter.__init__(self, QWParent)
+       self.appliEficas = appli
+       self.appli       = appli  #---- attendu par IHM
+        self.vm          = vm
+        self.fichier     = fichier
+        self.jdc         = jdc
+        self.QWParent    = QWParent
+
+        self.test=0
+        VERSION_CODE    = session.d_env.cata
+        if appli != None :
+           self.salome =  self.appliEficas.salome
+        else :
+           self.salome=0
+
+        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.jdc_openturn_xml=""
+       self.jdc_openturn_std=""
+        self.ihm="QT"
+        
+        from Editeur import configuration
+        self.CONFIGURATION = self.appliEficas.CONFIGURATION
+        self.CONFIGStyle =   self.appliEficas.CONFIGStyle
+
+        self.sb = None
+        if hasattr(self.appliEficas,"statusBar"):
+           self.sb = self.appliEficas.statusBar()
+      
+        self.fileInfo       = None
+        self.lastModified   = 0
+        
+        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 )
+        self.readercata = readercata.reader
+        
+        #------- construction du jdc --------------
+
+        jdc_item = None
+                        
+        nouveau=0
+        if self.fichier is not None:        #  fichier jdc fourni
+            self.fileInfo = QFileInfo(self.fichier)
+            self.fileInfo.setCaching(0)
+            if jdc==None :
+               self.jdc = self.readFile(self.fichier)
+            else :
+               self.jdc=jdc
+            if units is not None:
+               self.jdc.recorded_units=units
+               self.jdc.old_recorded_units=units
+        else: 
+            if not self.jdc:                   #  nouveau jdc
+                if not include :
+                   self.jdc = self._newJDC(units=units)
+                else :
+                   self.jdc = self._newJDCInclude(units=units)
+                nouveau=1
+        
+        if self.jdc:            
+            self.jdc.appli = self
+            txt_exception  = None
+            if not jdc:
+                self.jdc.analyse()            
+                txt_exception = self.jdc.cr.get_mess_exception()            
+            if txt_exception:
+                self.jdc = None
+                qApp.restoreOverrideCursor()
+                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")
+                jdc_item=Objecttreeitem.make_objecttreeitem( self, "nom", self.jdc )
+
+                if (not self.jdc.isvalid()) and (not nouveau) :
+                    self.viewJdcRapport()
+        if jdc_item:                        
+            self.tree = browser.JDCTree( jdc_item,  self )
+        
+    #--------------------------------#
+    def _newJDC( self ,units = None):        
+    #--------------------------------#
+        """
+        Initialise un nouveau JDC vierge
+        """
+        CONTEXT.unset_current_step()        
+        jdc=self.readercata.cata[0].JdC( procedure="",
+                                         appli=self,
+                                         cata=self.readercata.cata,
+                                         cata_ord_dico=self.readercata.cata_ordonne_dico,
+                                         rep_mat=self.CONFIGURATION.rep_mat
+                                        )                         
+        if units is not None:
+           jdc.recorded_units=units
+           jdc.old_recorded_units=units
+        jdc.analyse()        
+        return jdc
+        
+    #--------------------------------#
+    def _newJDCInclude( self ,units = None):        
+    #--------------------------------#
+        """
+        Initialise un nouveau JDC vierge
+        """
+        import Extensions.jdc_include
+        JdC_aux=Extensions.jdc_include.JdC_include
+        print JdC_aux
+        CONTEXT.unset_current_step()        
+
+        jaux=self.readercata.cata[0].JdC( procedure="",
+                               appli=self,
+                               cata=self.readercata.cata,
+                               cata_ord_dico=self.readercata.cata_ordonne_dico,
+                               rep_mat=self.CONFIGURATION.rep_mat,
+                              )
+        jaux.analyse()
+
+        J=JdC_aux( procedure="",
+                   appli=self,
+                   cata=self.readercata.cata,
+                   cata_ord_dico=self.readercata.cata_ordonne_dico,
+                   jdc_pere=jaux,
+                   rep_mat=self.CONFIGURATION.rep_mat,
+                   )
+        J.analyse()
+        if units is not None:
+           J.recorded_units=units
+           J.old_recorded_units=units
+        return J
+
+    #-----------------------#
+    def readFile(self, fn):
+    #--------------------------------#
+        """
+        Public slot to read the text from a file.
+        @param fn filename to read from (string or QString)
+        """        
+        fn = unicode(fn)        
+                        
+        # ------------------------------------------------------------------------------------
+        #                         charge le JDC
+        # ------------------------------------------------------------------------------------      
+        
+        jdcName=os.path.basename(fn)
+        # Il faut convertir le contenu du fichier en fonction du format
+        if convert.plugins.has_key( self.format_fichier ):
+             # Le convertisseur existe on l'utilise
+             appli = self 
+             p=convert.plugins[self.format_fichier]()
+             p.readfile(fn)         
+             text=p.convert('exec',appli)
+             if not p.cr.estvide():                 
+                self.affiche_infos("Erreur à la conversion")
+        
+        CONTEXT.unset_current_step()
+        ##   os.chdir(self.initialdir)
+        jdc=self.readercata.cata[0].JdC(procedure=text,
+                                    appli=self,
+                                    cata=self.readercata.cata,
+                                    cata_ord_dico=self.readercata.cata_ordonne_dico,
+                                    nom=jdcName,
+                                    rep_mat=self.CONFIGURATION.rep_mat
+                                   )
+        # ----------------------------------------------------
+        #      charge le JDC fin
+        # ----------------------------------------------------
+        self.modified = False
+                        
+#        qApp.restoreOverrideCursor()        
+        if self.fileInfo!= None : 
+           self.lastModified = self.fileInfo.lastModified()
+        else :
+           self.lastModified = 1
+        return jdc
+        
+    #-----------------------#
+    def get_source(self,file):
+    #-----------------------#
+        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 _viewText(self, txt, caption = "FILE_VIEWER"):    
+    #----------------------------------------------#
+        w = qtCommun.ViewText( self.QWParent )
+        w.setWindowTitle( caption )
+        w.setText(txt)
+        w.show()
+        
+    #-----------------------#
+    def viewJdcSource(self):        
+    #-----------------------#
+        format = self.format_fichier
+        f=open(self.fichier,'r')
+        texteSource=f.read()
+        f.close()
+        self._viewText(texteSource, "JDC_SOURCE")
+                
+    #-----------------------#
+    def viewJdcPy(self):        
+    #-----------------------#
+        format = self.format_fichier
+        strSource = str( self.get_text_JDC(format) )       
+        self._viewText(strSource, "JDC_RESULTAT")
+                 
+    #-----------------------#
+    def viewJdcRapport(self):
+    #-----------------------#
+        strRapport = str( self.jdc.report() )
+        self._viewText(strRapport, "JDC_RAPPORT")        
+        
+    #----------------#
+    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 affiche_alerte(self,titre,message):
+    #------------------------------#
+    # appele par I_MACRO_ETAPE
+        QMessageBox.information( self, titre, message)
+
+    #-------------------#
+    def init_modif(self):
+    #-------------------#
+      """
+          Met l'attribut modified a 'o' : utilise par Eficas pour savoir
+          si un JDC doit etre sauvegarde avant destruction ou non
+      """
+      self.modified = True
+
+    #---------------------------------------#
+    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 writeFilesOpenturns(self,fn) :
+#    #------------------------------------ 
+#      base=fn[:fn.rfind(".")]
+#      fileXML=base + '.xml'
+#      fileSTD=base + '_std.py'
+#        self.writeFile(fileXML,self.jdc_openturn_xml)
+#        self.writeFile(fileSTD,self.jdc_openturn_std)
+#
+#
+    #-----------------------------#
+    def get_text_JDC(self,format):
+    #-----------------------------#
+      if generator.plugins.has_key(format):
+         # Le generateur existe on l'utilise
+         g=generator.plugins[format]()
+         jdc_formate=g.gener(self.jdc,format='beautifie')
+        if format == "openturns" :
+           self.jdc_openturn_xml=g.getOpenturnsXML()
+           self.jdc_openturn_std=g.getOpenturnsSTD()
+         if not g.cr.estvide():            
+            self.affiche_infos("Erreur à la generation")
+            QMessageBox.critical( self, "Erreur a la generation","EFICAS ne sait pas convertir ce JDC")
+            return
+         else:
+            return jdc_formate
+      else:         
+         # Il n'existe pas c'est une erreur
+         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, 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.addJdcInSalome( self.fichier)
+#               if self.code == 'ASTER':
+#                  self.QWParent.appli.createOrUpdateMesh(self)
+#               #PN ; TODO
+#
+            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(path,1)
+
+   
+        
+    #---------------------------------------------#
+    def get_file(self,unite=None,fic_origine = ''):
+    #---------------------------------------------#
+    # appele par I_JDC
+        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)
+        #PN --> les prefs
+        fn = QFileDialog.getOpenFileName( self, titre)
+        
+        if fn.isNull(): 
+        # ce retour est impose par le get_file d'I_JDC
+           return None," "
+            
+        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
+        
+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
+#    import session
+#
+#    # Analyse des arguments de la ligne de commande
+#    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)
diff --git a/InterfaceQT4/eficas_go.py b/InterfaceQT4/eficas_go.py
new file mode 100644 (file)
index 0000000..daaf8bf
--- /dev/null
@@ -0,0 +1,61 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce module permet de lancer l'application EFICAS en affichant
+    un ecran Splash pour faire patienter l'utilisateur
+"""
+# Modules Python
+import sys
+from qt import *
+
+# Modules Eficas
+import prefs
+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
+
+from Editeur import import_code
+from Editeur import session
+
+def lance_eficas(code=None,fichier=None):
+    """
+        Lance l'appli EFICAS
+    """
+    # Analyse des arguments de la ligne de commande
+    if code !=None : prefs.code=code
+    import qtEficas
+    options=session.parse(sys.argv)
+    code=options.code
+
+    app = QApplication(sys.argv)
+    mw = qtEficas.Appli(code=code)
+    app.setMainWidget(mw)
+    app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
+    mw.show()
+    mw.ouvreFichiers()
+    res = app.exec_loop()
+    sys.exit(res)
+
+
diff --git a/InterfaceQT4/gereTraduction.py b/InterfaceQT4/gereTraduction.py
new file mode 100644 (file)
index 0000000..025d63c
--- /dev/null
@@ -0,0 +1,52 @@
+from PyQt4 import *
+from PyQt4.QtGui import *
+import os
+
+
+def traduction(directPath,editor,version):
+    if version == "V7V8" : 
+       from Traducteur import traduitV7V8 
+       suffixe="v8.comm"
+    if version == "V8V9" : 
+       from Traducteur import traduitV8V9 
+       suffixe="v9.comm"
+    fn = QFileDialog.getOpenFileName( QString(directPath) , "")
+
+    FichieraTraduire=str(fn)
+    if (FichieraTraduire == "" or FichieraTraduire == () ) : return
+    i=FichieraTraduire.rfind(".")
+    Feuille=FichieraTraduire[0:i]
+    FichierTraduit=Feuille+suffixe
+
+    i=Feuille.rfind("/")
+    directLog=Feuille[0:i]
+    log=directLog+"/convert.log"
+    os.system("rm -rf "+log)
+    os.system("rm -rf "+FichierTraduit)
+
+    qApp.setOverrideCursor(QCursor(Qt.WaitCursor))
+    if version == "V7V8" : traduitV7V8.traduc(FichieraTraduire,FichierTraduit,log)
+    if version == "V8V9" : traduitV8V9.traduc(FichieraTraduire,FichierTraduit,log)
+    qApp.setOverrideCursor(QCursor(Qt.ArrowCursor))
+
+    Entete="Fichier Traduit : "+FichierTraduit +"\n\n"
+    if  os.stat(log)[6] != 0L :
+        f=open(log)
+        texte= f.read()
+        f.close()
+    else :
+       texte = Entete  
+       commande="diff "+FichieraTraduire+" "+FichierTraduit+" >/dev/null"
+       try :
+         if os.system(commande) == 0 :
+            texte = texte + "Pas de difference entre le fichier origine et le fichier traduit"
+       except :
+         pass
+
+    from desVisu import DVisu
+    titre = "conversion de "+ FichieraTraduire
+    monVisu=DVisu(parent=editor,fl=Qt.WType_Dialog)
+    monVisu.setCaption(titre)
+    monVisu.TB.setText(texte)
+    monVisu.show()
+
diff --git a/InterfaceQT4/monChoixCata.py b/InterfaceQT4/monChoixCata.py
new file mode 100644 (file)
index 0000000..50371d0
--- /dev/null
@@ -0,0 +1,62 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desChoixCata import Ui_DChoixCata
+from PyQt4  import *
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+
+# Import des panels
+
+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
+  """
+  def __init__(self,listeCata,readercata, QWparent , name = None,fl = 0):
+      #print "MonChoixCata"
+      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(0,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()
+
+  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)
+
diff --git a/InterfaceQT4/monCommandePanel.py b/InterfaceQT4/monCommandePanel.py
new file mode 100644 (file)
index 0000000..530142d
--- /dev/null
@@ -0,0 +1,108 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desCommande import Ui_DComm
+from qtCommun    import QTPanel
+from qtCommun    import QTPanelTBW1
+from qtCommun    import QTPanelTBW2
+from qtCommun    import QTPanelTBW3
+from PyQt4       import *
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+class DComm(Ui_DComm,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)
+       self.setModal(modal)
+
+
+# Import des panels
+
+class MonCommandePanel(DComm,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):
+        #print "MonCommandePanel"
+        DComm.__init__(self,parent,fl)
+        QTPanel.__init__(self,node,parent)
+        QTPanelTBW1.__init__(self,node,parent)
+        QTPanelTBW2.__init__(self,node,parent)
+        QTPanelTBW3.__init__(self,node,parent)
+        self.connecterSignaux()
+
+  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.LENomConcept,SIGNAL("returnPressed()"),self.LENomConceptReturnPressed)
+        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)
+
+
+  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/monCommentairePanel.py b/InterfaceQT4/monCommentairePanel.py
new file mode 100644 (file)
index 0000000..2449ac3
--- /dev/null
@@ -0,0 +1,109 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+
+from PyQt4 import *
+from PyQt4.QtGui  import *
+from PyQt4.QtCore import *
+
+from desCommentaire import Ui_DComment
+from qtCommun      import QTPanel
+from qtCommun      import QTPanelTBW2
+
+class DComment(Ui_DComment,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 MonCommentairePanel(DComment,QTPanelTBW2,QTPanel):
+  """
+  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):
+        #print "MonCommentairePanel"
+        DComment.__init__(self,parent,fl)
+        QTPanel.__init__(self,node,parent)
+        QTPanelTBW2.__init__(self,node,parent)
+        self.RemplitPanel()
+        self.connecterSignaux()
+
+  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.textCommentaire,SIGNAL("textChanged()"),self.TexteCommentaireEntre)
+
+  def RemplitPanel(self):
+        texte=self.node.item.get_valeur()
+        self.textCommentaire.setText(texte)
+
+  def TexteCommentaireEntre(self):
+        texte=str(self.textCommentaire.toPlainText())
+        self.editor.init_modif()
+        self.node.item.set_valeur(texte)
+        self.node.onValid()
+
+  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 BNextPressed(self) :
+      QTPanelTBW2.BNextPressed(self)
+
+  def BOkPressed(self):
+      QTPanel.BOkPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
diff --git a/InterfaceQT4/monFonctionPanel.py b/InterfaceQT4/monFonctionPanel.py
new file mode 100644 (file)
index 0000000..4dba067
--- /dev/null
@@ -0,0 +1,155 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+from qtSaisie      import SaisieValeur
+from monPlusieursBasePanel import MonPlusieursBasePanel
+
+from PyQt4.QtGui  import *
+from PyQt4.QtCore import *
+
+# Import des panels
+
+class MonFonctionPanel(MonPlusieursBasePanel):
+  """
+  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):
+        #print "MonFonctionPanel"
+        self.node=node
+        self.SetNbValeurs()
+        MonPlusieursBasePanel.__init__(self,node,parent,name,fl)
+
+  def SetNbValeurs(self):
+        genea=self.node.item.get_genealogie()
+        if "VALE" in genea:
+            self.nbValeurs=2
+        if "VALE_C" in genea:
+            self.nbValeurs=3
+
+
+  def DecoupeListeValeurs(self,liste):
+        #decoupe la liste des valeurs en n ( les x puis les y)
+        l_valeurs=[]
+        if (len(liste)% self.nbValeurs != 0):
+            message="La cardinalité n'est pas correcte, la dernière valeur est ignorée"
+            #self.Commentaire.setText(QString(commentaire)) 
+            self.editor.affiche_infos(commentaire)
+        for i in range(len(liste)/ self.nbValeurs) :
+            if (self.nbValeurs==2):
+              t=(liste[i*self.nbValeurs], liste[i*self.nbValeurs+1])
+            else:
+              t=(liste[i*self.nbValeurs], liste[i*self.nbValeurs+1], liste[i*self.nbValeurs+2])
+            l_valeurs.append(t)
+        return l_valeurs
+
+  def BuildLBValeurs(self):
+        self.LBValeurs.clear()
+        listeValeurs=self.node.item.GetListeValeurs()
+        for valeur in self.DecoupeListeValeurs(listeValeurs):
+               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)
+        if liste == [] :
+           liste,validite=SaisieValeur.TraiteLEValeur(self)
+        else :
+           validite=1
+        if validite == 0 : return
+        if liste ==[]    : return
+
+        if len(liste) != self.nbValeurs :
+            commentaire  = QString(str(liste)) 
+            commentaire += QString(" n est pas un tuple de ") 
+            commentaire += QString(str(self.nbValeurs)) 
+            commentaire += QString(" valeurs")
+           self.LEValeur.setText(QString(str(liste)))
+            self.editor.affiche_infos(commentaire)
+            return
+
+        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 : 
+           indexListe=len(self.listeValeursCourantes)
+        listeVal=[]
+        for valeur in self.listeValeursCourantes :
+                listeVal.append(valeur)
+        validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal)
+        self.Commentaire.setText(comm2)
+        if not validite :
+                self.editor.affiche_infos(comm)
+        else:
+           self.LEValeur.setText(QString(""))
+           l1=self.listeValeursCourantes[:indexListe]
+           l3=self.listeValeursCourantes[indexListe:]
+           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 AjoutNValeur(self,liste) :
+        if len(liste)%self.nbValeurs != 0 :
+           texte="Nombre de valeur incorrecte"
+           #self.Commentaire.setText(texte)
+           self.editor.affiche_infos(texte)
+           return
+        listeDecoupee=self.DecoupeListeValeurs(liste)
+        for vals in listeDecoupee :
+            self.Ajout1Valeur(vals)
+           
+
+  def Sup1Valeur(self):
+        index=self.LBValeurs.currentRow()
+        if index == None : return
+        self.LBValeurs.takeItem(index)
+        listeVal=[]
+        i=0
+        for valeur in self.listeValeursCourantes :
+                if self.nbValeurs == 2 :
+                   if (i != index*2 and i != index*2+1 ) : listeVal.append(valeur)
+                elif self.nbValeurs == 3 :
+                   if (i != index*3 and i != index*3+1 and i != index*3 +2) : listeVal.append(valeur)
+                else :
+                   print "aiiiiiiiiiiiiiiiiiieeee"
+                i = i+1
+        self.listeValeursCourantes=listeVal
+        listeValeurs=self.listeValeursCourantes
+
diff --git a/InterfaceQT4/monFormulePanel.py b/InterfaceQT4/monFormulePanel.py
new file mode 100644 (file)
index 0000000..570fc66
--- /dev/null
@@ -0,0 +1,181 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desFormule import Ui_DFormule
+from qtCommun import QTPanel
+from qtCommun import QTPanelTBW2
+
+from PyQt4.QtGui  import *
+from PyQt4.QtCore import *
+
+
+class DFormule(Ui_DFormule,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 MonFormulePanel(DFormule,QTPanelTBW2):
+  """
+  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):
+        #print "MonFormulePanel"
+        DFormule.__init__(self,parent,fl)
+        QTPanel.__init__(self,node,parent)
+        QTPanelTBW2.__init__(self,node,parent)
+        self.connecterSignaux()
+        self.LENomFormule.setText(node.item.get_nom())
+        self.LECorpsFormule.setText(node.item.get_corps())
+        texte_args=""
+        if node.item.get_args() != None :
+            for i in node.item.get_args() :
+                if texte_args != "" :
+                   texte_args = texte_args +","
+                texte_args=texte_args + i
+        self.LENomsArgs.setText(texte_args)
+
+        self.parent=parent
+
+  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.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand)
+        self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand)
+        self.connect(self.BNext,SIGNAL("clicked()"),self.BNextPressed)
+        self.connect(self.LENomFormule,SIGNAL("returnPressed()"),self.NomFormuleSaisi)
+        self.connect(self.LENomsArgs,SIGNAL("returnPressed()"),self.argsSaisis)
+        self.connect(self.LECorpsFormule,SIGNAL("returnPressed()"),self.FormuleSaisie)
+        self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc)
+
+  def BSupPressed(self):
+      QTPanel.BSupPressed(self)
+
+  def BOkPressed(self):
+      QTPanel.BOkPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(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 NomFormuleSaisi(self):
+      nomFormule = str(self.LENomFormule.text())
+      if nomFormule == '' : return
+      test,erreur = self.node.item.verif_nom(nomFormule)
+      if test :
+         commentaire=nomFormule+" est un nom valide pour une FORMULE"
+      else :
+         commentaire=nomFormule+" n'est pas un nom valide pour une FORMULE"
+      self.editor.affiche_infos(commentaire) 
+
+  def argsSaisis(self):
+      arguments = str(self.LENomsArgs.text())
+      if arguments == '' : return
+
+      test,erreur = self.node.item.verif_arguments(arguments)
+      if test:
+         commentaire="Argument(s) valide(s) pour une FORMULE"
+      else:
+         commentaire="Argument(s) invalide(s) pour une FORMULE"
+      self.editor.affiche_infos(commentaire) 
+
+  def FormuleSaisie(self):
+      nomFormule = str(self.LENomFormule.text())
+      arguments  = str(self.LENomsArgs.text())
+      expression = str(self.LECorpsFormule.text())
+      if expression == '' : return
+      test,erreur = self.node.item.verif_formule_python((nomFormule,"REEL",arguments,expression))
+
+      if test:
+         commentaire="Corps de FORMULE valide"
+      else:
+         commentaire="Corps de FORMULE invalide"
+      self.editor.affiche_infos(commentaire) 
+
+
+  def BOkPressedFormule(self):
+      if self.parent.modified == 'n' : self.parent.init_modif()
+
+      nomFormule = str(self.LENomFormule.text())
+      test,erreur = self.node.item.verif_nom(nomFormule)
+      if not test :
+         self.editor.affiche_infos(erreur)
+         return
+
+      arguments  = str(self.LENomsArgs.text())
+      test,erreur = self.node.item.verif_arguments(arguments)
+      if not test :
+         self.editor.affiche_infos(erreur)
+         return
+
+      expression = str(self.LECorpsFormule.text())
+      test,erreur = self.node.item.verif_formule_python((nomFormule,"REEL",arguments,expression))
+      if not test :
+         self.editor.affiche_infos(erreur)
+         return
+
+      test=self.node.item.object.update_formule_python(formule=(nomFormule,"REEL",arguments,expression))
+      test,erreur = self.node.item.save_formule(nomFormule,"REEL",arguments,expression)
+      if test :
+         #self.node.update_texte()
+         #self.node.update_label()
+         #self.node.update_node()
+         self.node.onValid()
+         self.node.update_valid()
+         commentaire = "Formule modifiée"
+      else:
+         commentaire ="Formule incorrecte : " + erreur 
+      self.editor.init_modif()
+      self.editor.affiche_infos(commentaire)
diff --git a/InterfaceQT4/monInactifPanel.py b/InterfaceQT4/monInactifPanel.py
new file mode 100644 (file)
index 0000000..bf54472
--- /dev/null
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+
+
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+from qtCommun import QTPanel
+from desInactif import Ui_DInactif
+
+
+SEPARATEUR = '-'*30
+
+      
+class PanelInactif( QTPanel, Ui_DInactif,QDialog ):   
+    def __init__(self,node,parent ):
+        #print "PanelInactif"
+        QDialog.__init__(self,parent)
+        QTPanel.__init__(self,node,parent)
+        Ui_DInactif.__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)
+                
+        self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed)
+
+    def BSupPressed(self):
+       QTPanel.BSupPressed(self)
+        
diff --git a/InterfaceQT4/monIncludePanel.py b/InterfaceQT4/monIncludePanel.py
new file mode 100644 (file)
index 0000000..15a0408
--- /dev/null
@@ -0,0 +1,194 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+import os,traceback,sys
+from qtCommun import QTPanel
+from qtCommun import QTPanelTBW1
+from qtCommun import QTPanelTBW2
+from qtCommun import QTPanelTBW3
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+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(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):
+        #print "MonIncludePanel"
+        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
+        if not hasattr(self.node.item.object,'fichier_unite'):
+           self.pageBad()
+        else:
+           self.pageOk()
+
+  def pageOk(self):
+        self.TWChoix.removeTab(3)
+        self.TWChoix.setCurrentIndex(2)
+        self.LENomFichier.setText(self.node.item.object.fichier_ini)
+
+
+  def pageBad(self) :
+        self.TWChoix.removeTab(2)
+        self.TWChoix.setCurrentIndex(2)
+
+  def BBrowsePressed(self):
+      print self.node.makeEdit
+      self.node.makeEdit()
+
+  def BOkIncPressed (self):
+      self.LENomFichReturnPressed()
+
+  def LENomFichReturnPressed(self):
+        nomFichier=str(self.LENomFichier.text())
+        if not os.path.isfile(nomFichier) :
+           commentaire = "Fichier introuvable"
+           self.Commentaire.setText(QString(commentaire))
+           self.editor.affiche_infos(commentaire)
+           return
+
+        text=self.convert_file(nomFichier)
+
+        # Si probleme a la lecture-conversion on arrete le traitement
+        if not text:
+           return
+
+        try :
+           self.node.item.object.change_fichier_init(nomFichier,text)
+           commentaire = "Fichier modifie  : " + self.node.item.get_nom()
+           self.Commentaire.setText(QString(commentaire))
+           self.editor.affiche_infos(commentaire)
+        except: 
+           l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
+           QMessageBox.critical( self, "Erreur fatale au chargement du fichier Include", l[0])
+           commentaire = "Fichier invalide" 
+           self.Commentaire.setText(QString(commentaire))
+           self.editor.affiche_infos(commentaire)
+           return
+
+
+  def convert_file(self,file):
+       """
+         Methode pour convertir le fichier file dans le format courant
+       """
+       format=self.editor.format_fichier
+       text=None
+       if convert.plugins.has_key(format):
+          # Le convertisseur existe on l'utilise
+          p=convert.plugins[format]()
+          p.readfile(file)
+          text=p.convert('execnoparseur')
+       else :
+            commentaire = "Impossible de lire le fichier : Format inconnu"
+            self.Commentaire.setText(QString(commentaire))
+            self.editor.affiche_infos(commentaire)
+       return text
+
+
+  def BChangeFilePressed(self):
+      userDir=os.path.expanduser("~/Eficas_install/")
+      fn = QFileDialog.getOpenFileName(self.node.appliEficas,
+                self.node.appliEficas.trUtf8('Fichier Include'),
+                self.node.appliEficas.trUtf8('All Files (*);;''JDC Files (*.comm);;'))
+
+      if fn.isNull():
+         return
+
+      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
new file mode 100644 (file)
index 0000000..0a67288
--- /dev/null
@@ -0,0 +1,60 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desListeParam import Ui_DLisParam
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+# Import des panels
+class DLisParam(Ui_DLisParam,QDialog):
+   def __init__(self,parent ,modal ) :
+       QDialog.__init__(self,parent)
+       self.setupUi(self)
+
+class MonListeParamPanel(DLisParam):
+  """
+  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,liste,parent,name = None,fl = 0):
+        #print "MonListeParamPanel"
+        self.panel=parent
+        DLisParam.__init__(self,parent,fl)
+        self.liste=liste
+        self.dictListe={}
+        self.initVal()
+        self.connecterSignaux()
+
+  def connecterSignaux(self) :
+        self.connect(self.LBParam,SIGNAL("itemPressed(QListWidgetItem*)"),self.LBParamItemPressed)
+
+  def initVal(self):
+        self.LBParam.clear()
+        for param in self.liste :
+            self.LBParam.addItem(QString(repr(param)))
+            self.dictListe[QString(repr(param))] = param
+
+  def LBParamItemPressed(self):
+        i=self.LBParam.selectedItems()[0].text()
+        self.panel.Ajout1Valeur(self.dictListe[i])
diff --git a/InterfaceQT4/monMCFactPanel.py b/InterfaceQT4/monMCFactPanel.py
new file mode 100644 (file)
index 0000000..7f775ff
--- /dev/null
@@ -0,0 +1,75 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desMCFact import Ui_DMCFact
+from qtCommun import QTPanel
+from qtCommun import QTPanelTBW1
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+class DMCFact(Ui_DMCFact,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 MonMCFactPanel(DMCFact,QTPanelTBW1):
+  """
+  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):
+        #print "MonMCFactPanel"
+        DMCFact.__init__(self,parent,fl)
+        QTPanel.__init__(self,node,parent)
+        QTPanelTBW1.__init__(self,node,parent)
+        self.connecterSignaux()
+
+  def connecterSignaux(self):
+        self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed)
+        self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed)
+        self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc)
+
+  def BSupPressed(self):
+      QTPanel.BSupPressed(self)
+
+  def BOkPressed(self):
+      QTPanel.BOkPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
diff --git a/InterfaceQT4/monMCListAjoutPanel.py b/InterfaceQT4/monMCListAjoutPanel.py
new file mode 100644 (file)
index 0000000..5a80768
--- /dev/null
@@ -0,0 +1,77 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desMCListAjout import Ui_DMCListAjout
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+from qtCommun import QTPanel
+
+
+class DMCListAjout(Ui_DMCListAjout,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 MonMCListAjoutPanel(DMCListAjout,QTPanel):
+  """
+  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):
+        #print "MonMCListAjoutPanel"
+        DMCListAjout.__init__(self,parent,fl)
+        QTPanel.__init__(self,node,parent)
+        monMCFact=self.node.item.get_nom()
+        self.MCFacteur.setText(QString(monMCFact))
+        self.MCFacteur.setAlignment(Qt.AlignHCenter)
+        self.connecterSignaux()
+
+  def connecterSignaux(self):
+        self.connect(self.bOk,SIGNAL("clicked()"),self.BAjoutClicked)
+        self.connect(self.bAjout,SIGNAL("clicked()"),self.BAjoutClicked)
+        self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed)
+        self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc)
+
+  def BSupPressed(self):
+      QTPanel.BSupPressed(self)
+
+  def BAjoutClicked(self):
+        self.node.treeParent.append_child(self.node.item.get_nom())
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
diff --git a/InterfaceQT4/monMacroPanel.py b/InterfaceQT4/monMacroPanel.py
new file mode 100644 (file)
index 0000000..7e6d744
--- /dev/null
@@ -0,0 +1,107 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desCommande import Ui_DComm
+from qtCommun import QTPanel
+from qtCommun import QTPanelTBW1
+from qtCommun import QTPanelTBW2
+from qtCommun import QTPanelTBW3
+from PyQt4 import *
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+class DMacro(Ui_DComm,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 MonMacroPanel(DMacro,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):
+        #print "MonMacroPanel"
+        DMacro.__init__(self,parent,fl)
+        QTPanel.__init__(self,node,parent)
+        QTPanelTBW2.__init__(self,node,parent)
+        QTPanelTBW1.__init__(self,node,parent)
+        self.connecterSignaux()
+        if self.node.item.object.get_type_produit() != None :
+           QTPanelTBW3.__init__(self,node,parent)
+        else :
+           self.TWChoix.removeTab(1)
+           
+  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.LENomConcept,SIGNAL("returnPressed()"),self.LENomConceptReturnPressed)
+        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)
+
+  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/monOptionsEditeur.py b/InterfaceQT4/monOptionsEditeur.py
new file mode 100644 (file)
index 0000000..e307158
--- /dev/null
@@ -0,0 +1,170 @@
+# -*- coding: utf-8 -*-
+
+import os, re
+
+from PyQt4.QtGui  import *
+from PyQt4.QtCore import *
+
+from OptionsEditeur import Ui_desOptions
+
+
+class desOptions(Ui_desOptions,QDialog):
+   def __init__(self,parent ,modal ) :
+       QDialog.__init__(self,parent)
+       self.setupUi(self)
+       self.setModal(modal)
+
+class Options(desOptions):
+   def __init__(self,parent = None,modal = 0,configuration=None):
+       #print "Options"
+       desOptions.__init__(self,parent,modal)
+       self.configuration=configuration
+       self.viewMan=parent
+       self.dVersion={}
+       self.dRepMat={}
+       self.dRepCat={}
+       self.connecterSignaux()
+       self.initAll()
+  
+   def connecterSignaux(self) :
+       self.connect(self.CBVersions,SIGNAL("activated(int)"),self.VersionChoisie)
+       self.connect(self.Bdefaut,SIGNAL("clicked()"),self.BdefautChecked)
+       self.connect(self.LEVersionAjout,SIGNAL("returnPressed()"),self.AjoutVersion)
+       self.connect(self.LERepDoc,SIGNAL("returnPressed()"),self.ChangePathDoc)
+       self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked)
+       self.connect(self.LEVersionSup,SIGNAL("returnPressed()"),self.SupVersion)
+       self.connect(self.PBajout,SIGNAL("clicked()"),self.AjoutVersion)
+       self.connect(self.PBSup,SIGNAL("clicked()"),self.SupVersion)
+       self.connect(self.PBQuit,SIGNAL("clicked()"),self.close)
+       self.connect(self.LERepDoc,SIGNAL("textChanged(const QString&)"),self.ChangePathDoc)
+
+
+   def initAll(self):
+       self.CBVersions.clear()
+       for item in self.configuration.catalogues :
+           try :
+              (code,version,cata,format,defaut)=item
+           except :
+              (code,version,cata,format)=item
+           self.dVersion[version]=(item)
+           self.dRepCat[version]=str(cata)
+           self.CBVersions.addItem(QString(version))
+
+           codeSansPoint=re.sub("\.","",version)
+           chaine="rep_mat_"+codeSansPoint
+           if hasattr(self.configuration,chaine):
+              rep_mat=getattr(self.configuration,chaine)
+              self.dRepMat[version]=str(rep_mat)
+           else :
+              self.dRepMat[version]=""
+       self.LERepMat.setText(self.dRepMat[version])
+       self.LERepCata.setText(self.dRepCat[version])
+       if hasattr(self.configuration,"path_doc"):
+          self.LERepDoc.setText(self.configuration.path_doc)
+
+        
+   def VersionChoisie(self):
+       version=str(self.CBVersions.currentText())
+       if self.dRepMat.has_key(version):
+          self.LERepMat.setText(self.dRepMat[version])
+       if self.dRepCat.has_key(version):
+          self.LERepCata.setText(self.dRepCat[version])
+
+   def BokClicked(self):
+       version=str(self.CBVersions.currentText())
+       if self.LERepCata.text() == "" :
+          QMessageBox.critical( self, "Champ non rempli","Le champs Catalogue  doit etre rempli" )
+          return
+
+       self.dRepMat[version]=self.LERepMat.text()
+       if str(self.dRepMat[version] != "") != "" :
+          codeSansPoint=re.sub("\.","",version)
+          chaine="rep_mat_"+codeSansPoint
+          setattr(self.configuration,chaine,self.dRepMat[version])
+
+       self.dRepCat[version]=str(self.LERepCata.text())
+       if version in self.dVersion.keys():
+          item=list(self.dVersion[version])
+          item[2]=self.dRepCat[version]
+          self.dVersion[version]=tuple(item)
+       else :
+          self.dVersion[version]=('ASTER',version,self.dRepCat[version],'python')
+          
+       lItem=[]
+       for version in self.dVersion.keys() :
+          lItem.append(self.dVersion[version])
+       self.configuration.catalogues=lItem
+       self.configuration.save_params()
+
+   def AjoutVersion(self):
+       version=self.LEVersionAjout.text()
+       if str(version) == "" : return
+       self.CBVersions.addItem(version)
+       self.LERepMat.setText("")
+       self.LERepCata.setText("")
+       self.LEVersionAjout.setText("")
+       self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+
+   def SupVersion(self):
+       version=str(self.LEVersionSup.text())
+       if version == "" : return
+       i =0
+       while i < self.CBVersions.count() :
+           if  self.CBVersions.itemText(i) == version :
+               self.CBVersions.removeItem(i)
+               break
+           i=i+1
+       try :
+          del self.dVersion[version]
+          del self.dRepMat[version]
+          del self.dRepCat[version]
+       except :
+          self.LEVersionSup.setText("")
+          return
+       codeSansPoint=re.sub("\.","",version)
+       chaine="rep_mat_"+codeSansPoint
+       if hasattr(self.configuration,chaine):
+          delattr(self.configuration,chaine)
+       self.LEVersionSup.setText("")
+
+       lItem=[]
+       for version in self.dVersion.keys() :
+           lItem.append(self.dVersion[version])
+       self.LERepMat.setText("")
+       self.LERepCata.setText("")
+       self.configuration.catalogues=lItem
+       self.configuration.save_params()
+       self.CBVersions.setCurrentIndex(0)
+       self.VersionChoisie()
+
+
+   def BdefautChecked(self):
+       res = QMessageBox.warning(
+                 None,
+                 self.trUtf8("Restauration des parametres par defaut "),
+                 self.trUtf8("Votre fichier editeur sera ecrase."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+       self.Bdefaut.setState(QButton.Off)
+       if res == 1 : return 
+
+       appli=self.configuration.appli
+       rep_ini=self.configuration.rep_ini
+       fic_ini_util=self.configuration.fic_ini_utilisateur
+       old_fic_ini_util=fic_ini_util+"_old"
+       commande="mv "+fic_ini_util+" "+old_fic_ini_util
+       os.system(commande)
+       from Editeur import configuration
+       configNew=configuration.CONFIG(appli,rep_ini)
+       self.configuration=configNew
+       appli.CONFIGURATION=configNew
+       self.configuration.save_params()
+       self.dVersion={}
+       self.dRepMat={}
+       self.dRepCat={}
+       self.initAll()
+
+   def ChangePathDoc(self):
+       self.configuration.path_doc=str(self.LERepDoc.text())
+       self.configuration.save_params()
+
diff --git a/InterfaceQT4/monOptionsPdf.py b/InterfaceQT4/monOptionsPdf.py
new file mode 100644 (file)
index 0000000..643eeb7
--- /dev/null
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+
+from PyQt4.QtGui  import *
+from PyQt4.QtCore import *
+
+from OptionsPdf import Ui_desPdf
+
+class desPdf(Ui_desPdf,QDialog):
+   def __init__(self,parent ,modal ) :
+       QDialog.__init__(self,parent)
+       self.setupUi(self)
+       self.setModal(modal)
+     
+
+class OptionPdf(desPdf):
+   def __init__(self,parent = None,modal = 0,configuration=None):
+       #print "OptionsPdf"
+       desPdf.__init__(self,parent,modal)
+       self.configuration=configuration
+       self.initVal()
+       self.connecterSignaux()
+
+   def connecterSignaux(self) :
+       self.connect(self.BCancel,SIGNAL("clicked()"),self.reject)
+       self.connect(self.LERepPdf,SIGNAL("returnPressed()"),self.LeRepPdfPressed)
+       self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked)
+
+   def initVal(self):
+       if hasattr(self.configuration,'exec_acrobat'):
+          self.LERepPdf.setText(self.configuration.exec_acrobat)
+       else :
+          self.LERepPdf.clear()
+   
+   def LeRepPdfPressed(self):
+       nouveau=str(self.LERepPdf.text())
+       self.configuration.exec_acrobat=nouveau
+       self.configuration.save_params()
+
+   def BokClicked(self):
+       self.LeRepPdfPressed()
+       self.close()
diff --git a/InterfaceQT4/monParamPanel.py b/InterfaceQT4/monParamPanel.py
new file mode 100644 (file)
index 0000000..a77f943
--- /dev/null
@@ -0,0 +1,173 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os,re
+
+# Modules Eficas
+import prefs 
+
+from PyQt4 import *
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+from desParam import Ui_DParam
+from qtCommun import QTPanel
+from qtCommun import QTPanelTBW2
+
+class DParam(Ui_DParam,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 MonParamPanel(DParam,QTPanelTBW2,QTPanel):
+  """
+  """
+  def __init__(self,node, parent = None,name = None,fl = 0):
+        #print "MonParamPanel"
+        DParam.__init__(self,parent,fl)
+        QTPanel.__init__(self,node,parent)
+        QTPanelTBW2.__init__(self,node,parent)
+        self.InitLEs()
+        self.connecterSignaux()
+
+  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.lineEditVal,SIGNAL("returnPressed()"),self.BOkPressed)
+
+  def InitLEs(self):
+        nom=self.node.item.get_nom()
+        self.lineEditNom.setText(nom)
+        valeur=self.node.item.get_valeur()
+        if valeur != None:
+           #str=QString("").setNum(valeur)
+           self.lineEditVal.setText(str(valeur))
+        else :
+           self.lineEditVal.clear()
+
+  def BOkParamPressed(self):
+        val=self.LEValeurPressed() 
+        nom,commentaire=self.LENomPressed()
+        if not nom :
+           if commentaire == None :
+              commentaire="Entrer un nom de parametre"
+           self.Commentaire.setText(QString(commentaire))
+           self.editor.affiche_infos(commentaire)
+           return
+        if not val :
+           return
+        self.node.item.set_nom(nom)
+        self.node.item.set_valeur(val)
+        self.node.update_texte()
+        self.node.update_valid()
+        self.editor.init_modif()
+        self.InitLEs()
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def LEValeurPressed(self):
+        self.Commentaire.setText(QString(""))
+        commentaire="Valeur incorrecte"
+        qtVal=self.lineEditVal.text()
+        boul=2
+        try :
+            val,boul=QString.toInt(qtVal)
+        except :
+            pass
+        if boul == 0 :
+            try :
+                val,boul=QString.toDouble(qtVal)
+            except :
+                pass
+        if boul == 0 :
+            try :
+                val=str(qtVal)
+                boul=1
+            except :
+                pass
+        if boul: commentaire="Valeur correcte"
+        valString=str(self.lineEditVal.text())
+        self.Commentaire.setText(QString(commentaire))
+        if (valString.find(' ') > -1) or (valString.find(',') > -1) :
+           commentaire="Valeur incorrecte"
+           self.Commentaire.setText(QString(commentaire))
+           return None
+        self.Commentaire.setText(QString(commentaire))
+        return valString
+
+  def LENomPressed(self):
+        self.Commentaire.setText(QString(""))
+        qtNom=self.lineEditNom.text()
+        nom=str(qtNom)
+        numDebutPattern=re.compile('[a-zA-Z"_"]')
+        if numDebutPattern.match(nom) :
+           return nom,None
+        else :
+           commentaire="Les noms de parametre doivent commencer par une lettre ou un souligne"
+           return None,commentaire
+
+  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 AppelleBuildLBRegles(self):
+      listeRegles=self.node.item.get_regles()
+      listeNomsEtapes = self.node.item.get_l_noms_etapes()
+      self.BuildLBRegles(listeRegles,listeNomsEtapes)
+
+  def BNextPressed(self) :
+      QTPanelTBW2.BNextPressed(self)
+
+  def BOkPressed(self):
+      QTPanel.BOkPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
diff --git a/InterfaceQT4/monPlusieursASSDPanel.py b/InterfaceQT4/monPlusieursASSDPanel.py
new file mode 100644 (file)
index 0000000..4894248
--- /dev/null
@@ -0,0 +1,135 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+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
+from politiquesValidation  import PolitiquePlusieurs
+# Import des panels
+
+class MonPlusieursASSDPanel(MonPlusieursIntoPanel):
+  """
+  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):
+        #print "MonPlusieursASSDPanel"
+        QTPanel.__init__(self,node,parent)
+        DPlusInto.__init__(self,parent,fl)
+
+        self.listeValeursCourantes=self.node.item.GetListeValeurs()
+        self.InitValeursCourantes()
+        self.DisplayListBoxCourantes()
+        self.DisplayListBoxPossibles()
+
+        self.politique=PolitiquePlusieurs(node,parent)
+        self.connecterSignaux()
+
+  def DisplayListBoxPossibles(self):
+        listeNomsSD = self.node.item.get_sd_avant_du_bon_type()
+        self.listBoxVal.clear()
+        for aSD in listeNomsSD:
+            self.listBoxVal.addItem( aSD)
+        if len(listeNomsSD) == 1 :
+            self.listBoxVal.setCurrentRow(1)
+
+  def DisplayListBoxCourantes(self):
+        self.LBValeurs.clear()
+        for aSD in self.listNomsValeurs :
+            self.LBValeurs.addItem( aSD)
+
+  def InitValeursCourantes(self):
+        self.listNomsValeurs=[]
+        for i in self.listeValeursCourantes :
+              self.listNomsValeurs.append(i.get_name())
+
+  def BOkPourListePressed(self):
+        if self.listeValeursCourantes == [] :
+          self.editor.affiche_infos("Pas de Validation d un groupe vide")
+           return
+        self.node.item.set_valeur(self.listeValeursCourantes)
+       self.editor.affiche_infos("Valeur Acceptée")
+       pass
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def Sup1Valeur(self):
+        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 != indexCourant : listeVal.append(valeur)
+                i = i+1
+        self.listeValeursCourantes=listeVal
+        self.InitValeursCourantes()
+        self.DisplayListBoxCourantes()
+        self.DisplayListBoxPossibles()
+          
+  def Ajout1Valeur(self):
+        liste=[]
+        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)
+        validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) 
+       self.Commentaire.setText(comm2)
+        if not validite :
+               self.editor.affiche_infos(comm)
+        else:
+           l1=self.listeValeursCourantes[:index]
+           l3=self.listeValeursCourantes[index:]
+           for valeur in listeRetour:
+               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()
+           self.DisplayListBoxCourantes()
+           self.DisplayListBoxPossibles()
+
+
diff --git a/InterfaceQT4/monPlusieursBasePanel.py b/InterfaceQT4/monPlusieursBasePanel.py
new file mode 100644 (file)
index 0000000..4a67d94
--- /dev/null
@@ -0,0 +1,221 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+from desPlusieursBase import Ui_DPlusBase
+from qtCommun      import QTPanel
+from qtSaisie      import SaisieValeur
+from politiquesValidation import PolitiquePlusieurs
+
+class DPlusBase (Ui_DPlusBase,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 MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur):
+  """
+  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):
+        #print "MonPlusieursBasePanel"
+        QTPanel.__init__(self,node,parent)
+        DPlusBase.__init__(self,parent,fl)
+        self.politique=PolitiquePlusieurs(node,parent)
+        self.BuildLBValeurs()
+        self.listeValeursCourantes=self.node.item.GetListeValeurs()
+        self.InitCommentaire()
+        self.detruitBouton()
+        self.connecterSignaux()
+
+  def connecterSignaux(self) :
+        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.bParam,SIGNAL("clicked()"),self.BParametresPressed)
+        self.connect(self.bImport,SIGNAL("clicked()"),self.BImportPressed)
+        self.connect(self.BAjout1Val,SIGNAL("clicked()"),self.Ajout1Valeur)
+        self.connect(self.BSup1Val,SIGNAL("clicked()"),self.Sup1Valeur)
+        self.connect(self.LEValeur,SIGNAL("returnPressed()"),self.LEValeurPressed)
+        self.connect(self.BSalome,SIGNAL("clicked()"),self.BSalomePressed)
+        self.connect(self.BView2D,SIGNAL("clicked()"),self.BView2DPressed)
+
+  def detruitBouton(self):
+        mc = self.node.item.get_definition()
+        type = mc.type[0]
+        print 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()
+
+  def ViewDoc(self):
+        QTPanel.ViewDoc(self)
+
+  def BuildLBValeurs(self):
+       # redefinit en raison de l heritage par monFonctionPanel
+        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.node.item.set_valeur(self.listeValeursCourantes)
+       self.editor.affiche_infos("Valeur Acceptée")
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def BParametresPressed(self):
+        QTPanel.BParametresPressed(self)
+
+  def LEValeurPressed(self):
+        self.Ajout1Valeur()
+
+  def Sup1Valeur(self):
+        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 i != index : listeVal.append(valeur)
+                i = i+1
+        self.listeValeursCourantes=listeVal
+          
+
+  def Ajout1Valeur(self,valeur=None):
+        liste,validite=SaisieValeur.TraiteLEValeur(self,valeur)
+        if validite == 0 : return
+        if liste ==[]    : return
+
+        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)
+        validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) 
+       self.Commentaire.setText(comm2)
+        if not validite :
+               self.editor.affiche_infos(comm)
+        else:
+           self.LEValeur.setText(QString(""))
+           l1=self.listeValeursCourantes[:index]
+           l3=self.listeValeursCourantes[index:]
+           for valeur in listeRetour:
+               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)
+        fn = QFileDialog.getOpenFileName(self.node.appliEficas, 
+                                         self.node.appliEficas.trUtf8('Fichier de données'), 
+                                         QString(),
+                                         self.trUtf8('All Files (*)',))
+        if fn == None : return
+        if fn == "" : return
+        from monSelectVal import MonSelectVal
+        MonSelectVal(file=fn,parent=self).show()
+
+  def InitCommentaire(self):
+        commentaire=""
+        mc = self.node.item.get_definition()
+        d_aides = { 'TXM' : 'chaînes de caractères',
+                  'R'   : 'réels',
+                  'I'   : 'entiers',
+                  'C'   : 'complexes'}
+        type = mc.type[0]
+        if not d_aides.has_key(type) :
+           if mc.min == mc.max:
+               commentaire="Entrez "+str(mc.min)+" valeurs "
+           else :
+               commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs "
+        else :
+           if mc.min == mc.max:
+               commentaire="Entrez "+str(mc.min)+" "+d_aides[type]
+           else :
+               commentaire="Entrez entre "+str(mc.min)+" et  "+str(mc.max) +" " + d_aides[type]
+        aideval=self.node.item.aide()
+        commentaire=commentaire + "\n" + aideval
+        self.Commentaire.setText(QString(commentaire))
+
+  def BSalomePressed(self):
+
+        genea=self.node.item.get_genealogie()
+        kwType = None
+        for e in genea:
+            if "GROUP_NO" in e: kwType = "GROUP_NO"
+            if "GROUP_MA" in e: kwType = "GROUP_MA"
+
+        #print "BkwType",kwType
+        #print "editor", self.editor
+        selection, commentaire = self.editor.parent.appliEficas.selectGroupFromSalome(kwType,editor=self.editor)
+        if commentaire !="" :
+            self.Commentaire.setText(QString(commentaire))
+        monTexte=""
+        if selection == [] : return
+        for geomElt in selection: 
+            monTexte=geomElt+","
+        monTexte= monTexte[0:-1]
+        self.LEValeur.setText(QString(monTexte))
+
+  def BView2DPressed(self):
+        valeur=self.LEValeur.text()
+        if valeur == QString("") :
+           valeur=self.LBValeurs.currentText()
+        if valeur == QString("") : return
+        valeur = str(valeur)
+        if valeur :
+           ok, msgError = self.editor.parent.appliEficas.displayShape(valeur)
+           if not ok:
+              self.editor.parent.appli.affiche_infos(msgError)
+
diff --git a/InterfaceQT4/monPlusieursIntoPanel.py b/InterfaceQT4/monPlusieursIntoPanel.py
new file mode 100644 (file)
index 0000000..af2eaa4
--- /dev/null
@@ -0,0 +1,155 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+from desPlusieursInto import Ui_DPlusInto
+from qtCommun      import QTPanel
+from qtSaisie      import SaisieValeur
+from politiquesValidation import PolitiquePlusieurs
+
+class DPlusInto(Ui_DPlusInto,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 MonPlusieursIntoPanel(DPlusInto,QTPanel,SaisieValeur):
+  """
+  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):
+        #print "MonPlusieursIntoPanel"
+        QTPanel.__init__(self,node,parent)
+        DPlusInto.__init__(self,parent,fl)
+        self.politique=PolitiquePlusieurs(node,parent)
+        SaisieValeur.BuildLBValeurs(self)
+        self.listeValeursCourantes=self.node.item.GetListeValeurs()
+        SaisieValeur.RemplitPanel(self,self.listeValeursCourantes)
+        self.InitCommentaire()
+        self.connecterSignaux()
+
+  def connecterSignaux(self) :
+        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.BAjout1Val,SIGNAL("clicked()"),self.Ajout1Valeur)
+        self.connect(self.BSup1Val,SIGNAL("clicked()"),self.Sup1Valeur)
+
+
+  def BOkPourListePressed(self):
+        if self.listeValeursCourantes == [] :
+           self.editor.affiche_infos("Pas de validation d un groupe vide")
+           return
+        self.node.item.set_valeur(self.listeValeursCourantes)
+       self.editor.affiche_infos("Valeur Acceptée")
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
+  def Sup1Valeur(self):
+        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 != indexCourant : listeVal.append(valeur)
+                i = i+1
+        self.listeValeursCourantes=listeVal
+        SaisieValeur.RemplitPanel(self,self.listeValeursCourantes)
+          
+  def Ajout1Valeur(self):
+        liste=[]
+
+        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)
+        validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) 
+       self.Commentaire.setText(comm2)
+        if not validite :
+               self.editor.affiche_infos(comm)
+        else:
+           l1=self.listeValeursCourantes[:index]
+           l3=self.listeValeursCourantes[index:]
+           for valeur in listeRetour:
+               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)
+
+  def InitCommentaire(self):
+        commentaire=""
+        mc = self.node.item.get_definition()
+        d_aides = { 'TXM' : 'chaînes de caractères',
+                  'R'   : 'réels',
+                  'I'   : 'entiers',
+                  'C'   : 'complexes'}
+        type = mc.type[0]
+        if not d_aides.has_key(type) :
+           if mc.min == mc.max:
+               commentaire="Entrez "+str(mc.min)+" valeurs "
+           else :
+               commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs "
+        else :
+           if mc.min == mc.max:
+               commentaire="Entrez "+str(mc.min)+" "+d_aides[type]
+           else :
+               commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max)+" "+d_aides[type]
+        aideval=self.node.item.aide()
+        commentaire=commentaire + "\n" + aideval
+        self.Commentaire.setText(QString(commentaire))
+
diff --git a/InterfaceQT4/monPoursuitePanel.py b/InterfaceQT4/monPoursuitePanel.py
new file mode 100644 (file)
index 0000000..2143f27
--- /dev/null
@@ -0,0 +1,90 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+import os,traceback,sys
+from PyQt4 import *
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+from monMacroPanel import MonMacroPanel
+
+
+# Import des panels
+# La page est ajoutee a partir du python genere par designer
+
+class MonPoursuitePanel(MonMacroPanel):
+  """
+  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)
+        self.node=node
+        self.ajoutPageOk()
+
+  def ajoutPageOk(self) :
+        self.TabPage = QtGui.QWidget()
+        self.TabPage.setGeometry(QtCore.QRect(0,0,499,433))
+        self.TabPage.setObjectName("TabPage")
+        self.gridLayout_2 = QtGui.QGridLayout(self.TabPage)
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.textLabel1_3 = QtGui.QLabel(self.TabPage)
+        self.textLabel1_3.setWordWrap(False)
+        self.textLabel1_3.setObjectName("textLabel1_3")
+        self.gridLayout_2.addWidget(self.textLabel1_3,0,0,1,1)
+        self.LENomFichier = QtGui.QLineEdit(self.TabPage)
+        self.LENomFichier.setMinimumSize(QtCore.QSize(470,40))
+        self.LENomFichier.setObjectName("LENomFichier")
+        self.gridLayout_2.addWidget(self.LENomFichier,1,0,1,1)
+        spacerItem = QtGui.QSpacerItem(21,190,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        self.gridLayout_2.addItem(spacerItem,2,0,1,1)
+        self.hboxlayout = QtGui.QHBoxLayout()
+        self.hboxlayout.setObjectName("hboxlayout")
+        spacerItem1 = QtGui.QSpacerItem(331,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
+        self.hboxlayout.addItem(spacerItem1)
+        self.BBrowse = QtGui.QPushButton(self.TabPage)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.BBrowse.sizePolicy().hasHeightForWidth())
+        self.BBrowse.setSizePolicy(sizePolicy)
+        self.BBrowse.setMinimumSize(QtCore.QSize(140,50))
+        self.BBrowse.setObjectName("BBrowse")
+        self.hboxlayout.addWidget(self.BBrowse)
+        self.gridLayout_2.addLayout(self.hboxlayout,3,0,1,1)
+        spacerItem2 = QtGui.QSpacerItem(21,87,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        self.gridLayout_2.addItem(spacerItem2,4,0,1,1)
+        self.TWChoix.addTab(self.TabPage,"")
+        self.textLabel1_3.setText(QtGui.QApplication.translate("DPour", "<font size=\"+1\">La commande POURSUITE requiert un nom de Fichier :</font>", None, QtGui.QApplication.UnicodeUTF8))
+        self.BBrowse.setText(QtGui.QApplication.translate("DPour", "Edit", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.TabPage), QtGui.QApplication.translate("DPour", "Fichier Poursuite", None, QtGui.QApplication.UnicodeUTF8))
+
+        self.LENomFichier.setText(self.node.item.object.jdc_aux.nom)
+        self.connect(self.BBrowse,SIGNAL("clicked()"),self.BBrowsePressed)
+
+
+  def BBrowsePressed(self):
+      self.node.makeEdit()
+
+
diff --git a/InterfaceQT4/monRacinePanel.py b/InterfaceQT4/monRacinePanel.py
new file mode 100644 (file)
index 0000000..5b9fa79
--- /dev/null
@@ -0,0 +1,114 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desRacine import Ui_DRac
+from qtCommun  import QTPanel
+from qtCommun  import QTPanelTBW2
+
+from PyQt4 import *
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+class DRac(Ui_DRac,QWidget):
+   def __init__(self,parent ,modal = 0 ) :
+       QWidget.__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 MonRacinePanel(DRac,QTPanelTBW2):
+  """
+  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):
+        #print "MonRacinePanel"
+        DRac.__init__(self,parent,0)
+        self.connecterSignaux()
+        QTPanel.__init__(self,node,parent)
+        QTPanelTBW2.__init__(self,node,parent,racine=1)
+        self.a=0
+
+  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.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand)
+        self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand)
+        self.connect(self.BNext,SIGNAL("clicked()"),self.BNextPressed)
+        self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc)
+
+  def BSupPressed(self):
+      QTPanel.BSupPressed(self)
+
+  def BOkPressed(self):
+      self.DefCmd()
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(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 AppelleBuildLBRegles(self):
+      listeRegles=self.node.item.get_regles()
+      listeNomsEtapes = self.node.item.get_l_noms_etapes()
+      self.BuildLBRegles(listeRegles,listeNomsEtapes)
+
+  def DefCmd(self):
+      if self.LBNouvCommande.currentItem()== None : return
+      name=str(self.LBNouvCommande.currentItem().text())
+      if name==QString(" "): return
+      if name.find("GROUPE :")==0 : return
+      print self.editor
+      print self.editor.__class__
+      self.editor.init_modif()
+      print self.node.__class__
+      new_node = self.node.append_child(name,'first')
diff --git a/InterfaceQT4/monSelectVal.py b/InterfaceQT4/monSelectVal.py
new file mode 100644 (file)
index 0000000..24e8839
--- /dev/null
@@ -0,0 +1,101 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desSelectVal import Ui_DSelVal
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+class DSelVal(Ui_DSelVal,QDialog):
+   def __init__(self,parent ,modal ) :
+       QDialog.__init__(self,parent)
+       self.setupUi(self)
+
+class MonSelectVal(DSelVal):
+  """
+  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,file,parent,name = None,fl = 0):
+        #print "MonSelectVal"
+        self.FonctPanel=parent
+        DSelVal.__init__(self,parent,0)
+        self.separateur=" "
+        self.texte=" "
+        self.textTraite=""
+        self.file=str(file)
+        self.readVal()
+        self.initVal()
+        self.connecterSignaux()
+
+  def connecterSignaux(self) :
+        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 readVal(self):
+        f = open(self.file, "rb")
+        self.texte = f.read()
+        f.close()
+
+  def initVal(self):
+        self.TBtext.clear()
+        self.TBtext.setText(self.texte)
+
+  def SelectEsp(self):
+        self.separateur=" "
+        
+  def SelectVir(self):
+        self.separateur=","
+        
+  def SelectPoint(self):
+        self.separateur=";"
+        
+  def BImportSelPressed(self):
+
+        texte = self.TBtext.textCursor().selectedText()
+        textTraite=texte.replace(u'\u2029',"\n")
+        self.textTraite=str(textTraite)
+        self.Traitement()
+        
+  def BImportToutPressed(self):
+        self.textTraite=self.texte
+        self.Traitement()
+
+  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)
+        liste=[]
+        for val in liste1 :
+            val=str(val)
+            try :
+              val=eval(val,{})
+            except :
+              pass
+            liste.append(val)
+        self.FonctPanel.AjoutNValeur(liste) 
diff --git a/InterfaceQT4/monUniqueASSDPanel.py b/InterfaceQT4/monUniqueASSDPanel.py
new file mode 100644 (file)
index 0000000..474f62f
--- /dev/null
@@ -0,0 +1,100 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+from desUniqueASSD import Ui_DUnASSD
+from qtCommun      import QTPanel
+from qtSaisie      import SaisieValeur
+from politiquesValidation import PolitiqueUnique
+
+class DUnASSD(Ui_DUnASSD,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 MonUniqueASSDPanel(DUnASSD,QTPanel,SaisieValeur):
+  """
+  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):
+        #print "MonUniqueASSDPanel"
+        self.editor=parent
+        QTPanel.__init__(self,node,parent)
+        DUnASSD.__init__(self,parent,fl)
+        self.politique=PolitiqueUnique(node,parent)
+        self.InitListBoxASSD()
+        self.InitCommentaire()
+        self.connecterSignaux()
+
+  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 BOkPressed(self):
+        self.ClicASSD()
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
+  def InitCommentaire(self): 
+      mc = self.node.item.get_definition()
+      try :
+          type = mc.type[0].__name__
+      except :
+          type = str(mc.type[0])
+      if len(mc.type)>1 :
+          for typ in mc.type[1:] :
+            try :
+                l=typ.__name__
+            except:
+                l=str(typ)
+            type = type + ' ou '+l
+      commentaire="Un objet de type "+type+" est attendu"
+      aideval=self.node.item.aide()
+      commentaire=commentaire +"\n"+ aideval
+      self.Commentaire.setText(QString(commentaire))
diff --git a/InterfaceQT4/monUniqueBasePanel.py b/InterfaceQT4/monUniqueBasePanel.py
new file mode 100644 (file)
index 0000000..24792e4
--- /dev/null
@@ -0,0 +1,152 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+from desUniqueBase import Ui_DUnBase
+from qtCommun      import QTPanel
+from qtSaisie      import SaisieValeur
+from politiquesValidation import PolitiqueUnique
+
+class DUnBase(Ui_DUnBase,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 MonUniqueBasePanel(DUnBase,QTPanel,SaisieValeur):
+  """
+  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):
+        #print "MonUniqueBasePanel"
+        self.editor=parent
+        QTPanel.__init__(self,node,parent)
+        DUnBase.__init__(self,parent,fl)
+        self.politique=PolitiqueUnique(node,parent)
+        self.InitLineEditVal()
+        self.InitCommentaire()
+        self.detruitBouton()
+        self.connecterSignaux()
+
+  def connecterSignaux(self) :
+        self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc)
+        self.connect(self.bOk,SIGNAL("clicked()"),self.BOk2Pressed)
+        self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed)
+        self.connect(self.lineEditVal,SIGNAL("returnPressed()"),self.LEValeurPressed)
+        self.connect(self.bParametres,SIGNAL("pressed()"),self.BParametresPressed)
+        self.connect(self.BSalome,SIGNAL("pressed()"),self.BSalomePressed)
+        self.connect(self.BView2D,SIGNAL("clicked()"),self.BView2DPressed)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
+  def detruitBouton(self):
+        mc = self.node.item.get_definition()
+        type = mc.type[0]
+        if not('grma' in repr(type)) or not(self.editor.salome) :
+           self.BSalome.close()
+           self.BView2D.close()
+
+  def InitLineEditVal(self):
+        valeur=self.node.item.get_valeur()
+        valeurTexte=self.politique.GetValeurTexte(valeur)
+        if valeurTexte != None :
+           if repr(valeurTexte.__class__).find("PARAMETRE") > 0:
+               str = QString(repr(valeur)) 
+           else :
+               try :
+                   str=QString("").setNum(valeurTexte)
+               except :
+                   str=QString(valeurTexte)
+           self.lineEditVal.setText(str)
+
+
+  def InitCommentaire(self):
+      mc = self.node.item.get_definition()
+      d_aides = { 'TXM' : "Une chaîne de caractères est attendue",
+                  'R'   : "Un réel est attendu",
+                  'I'   : "Un entier est attendu"}
+      type = mc.type[0]
+      commentaire=d_aides.get(type,"Type de base inconnu")
+      aideval=self.node.item.aide()
+      commentaire=commentaire +"\n"+ aideval
+      self.Commentaire.setText(QString(commentaire))
+
+  def BOk2Pressed(self):
+        SaisieValeur.BOk2Pressed(self)
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def LEValeurPressed(self):
+        SaisieValeur.LEValeurPressed(self)
+
+  def BParametresPressed(self):
+        QTPanel.BParametresPressed(self)
+
+  def Ajout1Valeur(self,valeur):
+        SaisieValeur.LEValeurPressed(self,valeur)
+
+  def BSalomePressed(self):
+        genea=self.node.item.get_genealogie()
+        kwType = None
+        for e in genea:
+            if "GROUP_NO" in e: kwType = "GROUP_NO"
+            if "GROUP_MA" in e: kwType = "GROUP_MA"
+
+        selection, commentaire = self.editor.parent.appliEficas.selectGroupFromSalome(kwType,editor=self.editor)
+        if commentaire !="" :
+            self.Commentaire.setText(QString(commentaire))
+        monTexte=""
+        if selection == [] : return
+        for geomElt in selection:
+            monTexte=geomElt+","
+        monTexte= monTexte[0:-1]
+        self.LEValeur.setText(QString(monTexte))
+
+  def BView2DPressed(self):
+        valeur=self.LEValeur.text()
+        if valeur == QString("") : return
+        valeur = str(valeur)
+        if valeur :
+           ok, msgError = self.editor.parent.appliEficas.displayShape(valeur)
+           if not ok:
+              self.editor.parent.appli.affiche_infos(msgError)
+
diff --git a/InterfaceQT4/monUniqueCompPanel.py b/InterfaceQT4/monUniqueCompPanel.py
new file mode 100644 (file)
index 0000000..22eb994
--- /dev/null
@@ -0,0 +1,189 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os,re
+
+# Modules Eficas
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
+from desUniqueComp import Ui_DUnComp
+from qtCommun      import QTPanel
+from politiquesValidation import PolitiqueUnique
+
+class DUnComp(Ui_DUnComp,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 MonUniqueCompPanel(DUnComp,QTPanel,PolitiqueUnique):
+  """
+  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):
+        #print "MonUniqueCompPanel"
+        QTPanel.__init__(self,node,parent)
+        DUnComp.__init__(self,parent,fl)
+        self.politique=PolitiqueUnique(node,parent)
+        self.InitLinesVal()
+        self.InitCommentaire()
+        self.connecterSignaux()
+
+  def connecterSignaux(self):
+        self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc)
+        self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed)
+        self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed)
+        self.connect(self.LEImag,SIGNAL("returnPressed()"),self.LEImagRPressed)
+        self.connect(self.LEReel,SIGNAL("returnPressed()"),self.LEReelRPressed)
+        self.connect(self.LEcomp,SIGNAL("returnPressed()"),self.LEcompRPressed)
+
+
+  def InitLinesVal(self):
+        valeur=self.node.item.get_valeur()
+        if valeur == None or valeur == '' : return
+        if type(valeur) not in (types.ListType,types.TupleType) :
+           self.LEcomp.setText(str(valeur))
+        else :
+           typ_cplx,x1,x2=valeur
+           self.LEReel.setText(str(x1))
+           self.LEImag.setText(str(x2))
+           if typ_cplx == "RI" :
+              self.RBRI.setDown(1)
+           else :
+              self.RBMP.setDown(1)
+      
+
+  def LEcompRPressed(self) :
+        self.LEReel.clear()
+        self.LEImag.clear()
+        commentaire="expression valide"
+        valeur = str(self.LEcomp.text())
+        d={}
+        try :
+          v=eval(valeur,d)
+        except :
+          commentaire="expression invalide"
+          self.editor.affiche_infos(commentaire)
+          return
+        try :
+          i=v.imag
+        except :
+          commentaire="expression n est pas de la forme a+bj"
+        self.editor.affiche_infos(commentaire)
+          
+  def LEReelRPressed(self):
+        self.LEcomp.clear()
+        commentaire="expression valide"
+        valeur = str(self.LEReel.text())
+        try :
+          a=string.atof(valeur)
+        except :
+          commentaire="expression invalide"
+        self.editor.affiche_infos(commentaire)
+
+  def LEImagRPressed(self):
+        self.LEcomp.clear()
+        commentaire="expression valide"
+        valeur = str(self.LEImag.text())
+        try :
+          a=string.atof(valeur)
+        except :
+          commentaire="expression invalide"
+        self.editor.affiche_infos(commentaire)
+
+  def BOkPressed(self):
+        if self.LEcomp.text()== "" : 
+           valeur = self.getValeurAster()
+        else :
+           if self.LEReel.text() != "" or self.LEImag.text() != "" :
+              commentaire="entrer une seule valeur SVP"
+              self.editor.affiche_infos(commentaire)
+              return
+           valeur=  self.getValeurComp()
+        self.politique.RecordValeur(valeur)
+
+  def getValeurAster(self):
+      """
+      Retourne le complexe saisi par l'utilisateur
+      """
+      l=[]
+      if  (self.RBMP.isChecked() == 1 ) :
+         l.append("MP")
+      elif (self.RBRI.isChecked() == 1) :
+         l.append("RI")
+      else :
+         commentaire="saisir le type de complexe"
+         self.editor.affiche_infos(commentaire)
+         return None
+      try :
+         l.append(string.atof(str(self.LEReel.text())))
+         l.append(string.atof(str(self.LEImag.text())))
+      except :
+         return None
+      return `tuple(l)`
+
+  def getValeurComp(self):
+        commentaire="expression valide"
+        valeur = str(self.LEcomp.text())
+        d={}
+        try :
+          v=eval(valeur,d)
+        except :
+          commentaire="expression invalide"
+          self.editor.affiche_infos(commentaire)
+          return None
+        try :
+          i=v.imag
+        except :
+          commentaire="expression n est pas de la forme a+bj"
+          self.editor.affiche_infos(commentaire)
+          return None
+        return v
+
+  def InitCommentaire(self):
+        commentaire='Un complexe est attendu'
+        aideval=self.node.item.aide()
+        commentaire=commentaire +"\n"+ aideval
+        self.Commentaire.setText(QString(commentaire))
+
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
diff --git a/InterfaceQT4/monUniqueIntoPanel.py b/InterfaceQT4/monUniqueIntoPanel.py
new file mode 100644 (file)
index 0000000..ab63481
--- /dev/null
@@ -0,0 +1,82 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+from desUniqueInto        import Ui_DUnIn
+from qtCommun             import QTPanel
+from qtSaisie             import SaisieValeur
+from politiquesValidation import PolitiqueUnique
+
+class DUnIn(Ui_DUnIn,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 MonUniqueIntoPanel(DUnIn,QTPanel,SaisieValeur):
+  """
+  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):
+        #print "MonUniqueIntoPanel"
+        QTPanel.__init__(self,node,parent)
+        DUnIn.__init__(self,parent,fl)
+        SaisieValeur.RemplitPanel(self)
+        self.politique=PolitiqueUnique(node,parent)
+        self.connecterSignaux()
+
+  def connecterSignaux(self) :
+        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)
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
diff --git a/InterfaceQT4/monUniqueSDCOIntoPanel.py b/InterfaceQT4/monUniqueSDCOIntoPanel.py
new file mode 100644 (file)
index 0000000..c968b0f
--- /dev/null
@@ -0,0 +1,99 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+import prefs 
+
+from PyQt4 import *
+from PyQt4.QtGui import *
+
+from desUniqueSDCOInto    import DUnSDCOInto
+from qtCommun             import QTPanel
+from qtSaisie             import SaisieSDCO
+from politiquesValidation import PolitiqueUnique
+
+# Import des panels
+
+class MonUniqueSDCOIntoPanel(DUnSDCOInto,QTPanel,SaisieSDCO):
+  """
+  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):
+        #print "MonUniqueSDCOIntoPanel"
+        QTPanel.__init__(self,node,parent)
+        DUnSDCOInto.__init__(self,parent,name,fl)
+        self.initLBSDCO()
+
+  def initLBSDCO(self):
+        listeNomsSDCO = self.node.item.get_sd_avant_du_bon_type()
+        for aSDCO in listeNomsSDCO:
+            self.LBSDCO.insertItem( aSDCO)
+        valeur = self.node.item.get_valeur()
+        if valeur  != "" and valeur != None :
+           self.LESDCO.setText(QString(valeur.nom))
+
+
+  def LBSDCOReturnPressed(self):
+        """
+         Teste si la valeur fournie par l'utilisateur est une valeur permise :
+          - si oui, l'enregistre
+          - si non, restaure l'ancienne valeur
+        """
+        nomConcept=str(self.LBSDCO.currentText())
+        self.LESDCO.clear()
+        self.editor.init_modif()
+        anc_val = self.node.item.get_valeur()
+        test_CO=self.node.item.is_CO(anc_val)
+
+        valeur,validite=self.node.item.eval_valeur(nomConcept)
+        test = self.node.item.set_valeur(valeur)
+        if not test :
+          commentaire = "impossible d'évaluer : %s " %`valeur`
+        elif validite:
+          commentaire = "Valeur du mot-clé enregistrée"
+          if test_CO:
+             # il faut egalement propager la destruction de l'ancien concept
+             self.node.item.delete_valeur_co(valeur=anc_val)
+             self.node.item.object.etape.get_type_produit(force=1)
+             self.node.item.object.etape.parent.reset_context()
+        else :
+          commentaire = self.node.item.get_cr()
+          self.reset_old_valeur(anc_val,mess=mess)
+          self.editor.affiche_infos(commentaire)
+        self.Commentaire.setText(commentaire)
+
+  def LESDCOReturnPressed(self) :
+        self.LBSDCO.clearSelection()
+        SaisieSDCO.LESDCOReturnPressed(self)
+
+  def BOkPressed(self):
+        self.LESDCOReturnPressed()
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
diff --git a/InterfaceQT4/monUniqueSDCOPanel.py b/InterfaceQT4/monUniqueSDCOPanel.py
new file mode 100644 (file)
index 0000000..d00b6e0
--- /dev/null
@@ -0,0 +1,92 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+from PyQt4.QtCore import *
+from PyQt4.QtGui  import *
+
+from desUniqueSDCO        import Ui_DUnSDCO
+from qtCommun             import QTPanel
+from qtSaisie             import SaisieSDCO
+
+class DUnSDCO(Ui_DUnSDCO,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 MonUniqueSDCOPanel(DUnSDCO,QTPanel,SaisieSDCO):
+  """
+  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):
+        #print "MonUniquesSDCOPanel"
+        QTPanel.__init__(self,node,parent)
+        DUnSDCO.__init__(self,parent,fl)
+        valeur = self.node.item.get_valeur()
+        if valeur  != "" and valeur != None :
+           self.LESDCO.setText(QString(valeur.nom))
+        self.connecterSignaux()
+
+  def connecterSignaux(self) :
+        self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc)
+        self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed)
+        self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed)
+        self.connect(self.LESDCO,SIGNAL("returnPressed()"),self.LESDCOReturnPressed)
+
+
+
+  def BOkPressed(self):
+        SaisieSDCO.LESDCOReturnPressed(self)
+
+  def BSupPressed(self):
+        QTPanel.BSupPressed(self)
+
+  def BOuiPressed(self):
+        self.Commentaire.setText("Aucun Objet de ce type n'est defini")
+        self.rbOui.setChecked(1)
+
+  def LESDCOReturnPressed(self):
+        """
+           Lit le nom donné par l'utilisateur au concept de type CO qui doit être
+           la valeur du MCS courant et stocke cette valeur
+        """
+        SaisieSDCO.LESDCOReturnPressed(self)
+
+  def ViewDoc(self):
+      QTPanel.ViewDoc(self)
+
diff --git a/InterfaceQT4/politiquesValidation.py b/InterfaceQT4/politiquesValidation.py
new file mode 100644 (file)
index 0000000..a976f97
--- /dev/null
@@ -0,0 +1,160 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import types
+
+
+#------------------
+class Validation  :
+#------------------
+  def __init__(self,node,parent) :
+         self.node=node
+         self.parent=parent
+
+  def TesteUneValeur(self,valeurentree):
+         valeur,validite=self.node.item.eval_valeur(valeurentree)
+         if not validite :
+                  commentaire = "impossible d'évaluer : %s " %`valeurentree`
+                  return valeur,validite,commentaire
+
+         testtype,commentaire = self.node.item.object.verif_type(valeur)
+         if not testtype :
+                  return valeur,0,commentaire
+
+         valide=self.node.item.valide_item(valeur)
+         if type(valide) == types.TupleType:
+                 validite,commentaire=valide
+         else :
+                 validite=valide
+                 commentaire=" "
+
+         if not validite :
+                  commentaire = "impossible d'évaluer : %s " %`valeurentree`
+         return valeur, validite, commentaire
+
+# ----------------------------------------------------------------------------------------
+#   Méthodes utilisées pour la manipulation des items en notation scientifique
+#   a mettre au point
+# ----------------------------------------------------------------------------------------
+  def SetValeurTexte(self,texteValeur) :
+         try :
+                  if "R" in self.node.item.object.definition.type:
+                     if texteValeur[0] != "'":
+                        clef=eval(texteValeur)
+                        if str(clef) != str(texteValeur) :
+                           self.node.item.object.init_modif()
+                           clefobj=self.node.item.object.GetNomConcept()
+                           if not self.parent.dict_reels.has_key(clefobj):
+                              self.parent.dict_reels[clefobj] = {}
+                           self.parent.dict_reels[clefobj][clef]=texteValeur
+                           self.parent.dict_reels[clefobj]
+                           self.node.item.object.fin_modif()
+         except:
+            pass
+
+  def GetValeurTexte(self,valeur) :
+         valeurTexte=valeur
+         if "R" in self.node.item.object.definition.type:
+                  clefobj=self.node.item.object.GetNomConcept()
+                  if self.parent.dict_reels.has_key(clefobj):
+                     if self.parent.dict_reels[clefobj].has_key(valeur):
+                        valeurTexte=self.parent.dict_reels[clefobj][valeur]
+         return valeurTexte
+
+#------------------------------------
+class PolitiqueUnique(Validation) :
+#------------------------------------
+  """
+  classe servant pour les entrees ne demandant qu un mot clef
+  """
+  def __init__(self,node,parent):
+        Validation.__init__(self,node,parent)
+
+  def RecordValeur(self,valeurentree):
+         if self.parent.modified == 'n' : self.parent.init_modif()
+         ancienne_val = self.node.item.get_valeur()
+         valeur,validite,commentaire =self.TesteUneValeur(valeurentree)
+         if validite :
+            validite=self.node.item.set_valeur(valeur)
+            if self.node.item.isvalid():
+                  commentaire = "Valeur du mot-clé enregistrée"
+                  self.SetValeurTexte(str(valeurentree))
+            else:
+                  cr = self.node.item.get_cr()
+                  commentaire =  "Valeur du mot-clé non autorisée "+cr.get_mess_fatal()
+                  self.node.item.set_valeur(ancienne_val)
+         return validite, commentaire 
+
+#------------------------
+class PolitiquePlusieurs:
+#------------------------
+  """
+  classe servant pour les entrees ne demandant qu un mot clef
+  """
+  def __init__(self,node,parent) :
+         self.node=node
+         self.parent=parent
+
+
+  def AjoutValeurs(self,listevaleur,index,listecourante):
+         listeRetour=[]
+         commentaire="Nouvelle valeur acceptée"
+         commentaire2=""
+         valide=1
+         if listevaleur==None: return
+         if listevaleur=="": return
+         if not( type(listevaleur)  in (types.ListType,types.TupleType)) :
+            listevaleur=tuple(listevaleur)
+         for valeur in listevaleur :
+             # On teste le type de la valeur
+             valide=self.node.item.valide_item(valeur)
+             if not valide :
+                #print self.__class__
+                #if not testtype :
+                try :
+                   valeur,valide=self.node.item.eval_valeur(valeur)
+                   valide,commentaire = self.node.item.object.verif_type(valeur)
+                except :
+                   #return testtype,commentaire,"",listeRetour
+                   pass
+             if not valide:
+                commentaire="Valeur "+str(valeur)+ " incorrecte : ajout à la liste refusé"
+                commentaire2=self.node.item.info_erreur_item()
+                return valide,commentaire,commentaire2,listeRetour
+
+             # On valide la liste obtenue
+             encorevalide=self.node.item.valide_liste_partielle(valeur,listecourante)
+             if not encorevalide :
+                commentaire2=self.node.item.info_erreur_liste()
+                # On traite le cas ou la liste n est pas valide pour un pb de cardinalite
+                min,max = self.node.item.GetMinMax()
+                if len(listecourante) + 1 >= max :
+                   commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
+                   return valide,commentaire,commentaire2,listeRetour
+                if len(listecourante) + 1 > min :
+                   return valide,commentaire,commentaire2,listeRetour
+             # On ajoute la valeur testee a la liste courante et a la liste acceptee
+             listecourante.insert(index,valeur)
+             index=index+1
+             listeRetour.append(valeur)
+
+         return valide,commentaire,commentaire2,listeRetour
diff --git a/InterfaceQT4/prefsQT.py b/InterfaceQT4/prefsQT.py
new file mode 100644 (file)
index 0000000..ef1aa89
--- /dev/null
@@ -0,0 +1,25 @@
+# -*- 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.
+#
+#
+# ======================================================================
+
+lang='fr'
+
diff --git a/InterfaceQT4/qtCommun.py b/InterfaceQT4/qtCommun.py
new file mode 100644 (file)
index 0000000..5a9ed16
--- /dev/null
@@ -0,0 +1,325 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+import traceback
+
+from PyQt4 import *
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+import prefsQT
+
+# Import des panels
+
+# ---------- #
+class QTPanel:
+# ---------- #
+  """
+  Classe contenant les méthodes Qt communes a tous les panneaux droits
+  Tous les panneaux Mon...Panel héritent de cette classe
+  Gére plus précisement :
+     - l affichage de la doc
+     - le bouton Suppression (BSupPressed)
+     - la mutualisation de l affichage des regles
+  """
+  def __init__(self,node, parent = None):
+        self.editor    = parent
+        self.node      = node
+        
+  def BSupPressed(self):
+        self.editor.init_modif()
+        self.node.delete()
+        
+  def ViewDoc(self) :
+      cle_doc = self.node.item.get_docu()
+      if cle_doc == None :
+         QMessageBox.information( self.editor, "Documentation Vide", \
+                                  "Aucune documentation Aster n'est associée à ce noeud")
+         return
+      cle_doc = string.replace(cle_doc,'.','')
+      cle_doc = string.replace(cle_doc,'-','')
+      commande = self.editor.appliEficas.CONFIGURATION.exec_acrobat
+      try :
+         f=open(commande,"rb")
+      except :
+         texte="impossible de trouver la commande  " + commande
+         QMessageBox.information( self.editor, "Lecteur PDF", texte)
+         return
+      nom_fichier = cle_doc+".pdf"
+      fichier = os.path.abspath(os.path.join(self.editor.CONFIGURATION.path_doc,
+                                       nom_fichier))
+      try :
+         f=open(fichier,"rb")
+      except :
+         texte="impossible d'ouvrir " + fichier
+         QMessageBox.information( self.editor, "Documentation Vide", texte)
+         return
+      if os.name == 'nt':
+          os.spawnv(os.P_NOWAIT,commande,(commande,fichier,))
+      elif os.name == 'posix':
+          script ="#!/usr/bin/sh \n%s %s&" %(commande,fichier)
+          pid = os.system(script)
+
+  def BOkPressed(self):
+        """ Impossible d utiliser les vrais labels avec designer ?? """
+        label=self.TWChoix.tabText(self.TWChoix.currentIndex())
+        #print label
+        if label==QString("Nouvelle Commande"):
+           self.DefCmd()
+        if label==QString("Nommer Concept"):
+           self.LENomConceptReturnPressed()
+        if label==QString("Ajouter Mot-Clef"):
+           if self.LBMCPermis.currentItem() == None : return
+           self.DefMC(self.LBMCPermis.currentItem())
+        if label==QString("Définition Formule"):
+           self.BOkPressedFormule()
+        if label==QString("Valeur Parametre"):
+           self.BOkParamPressed()
+        if label==QString("Fichier Include"):
+           self.BOkIncPressed()
+
+  def BParametresPressed(self):
+        liste=self.node.item.get_liste_param_possible()
+        from monListeParamPanel import MonListeParamPanel
+        MonListeParamPanel(liste=liste,parent=self).show()
+       
+  def AppelleBuildLBRegles(self):
+        listeRegles     = self.node.item.get_regles()
+        listeNomsEtapes = self.node.item.get_mc_presents()
+        self.BuildLBRegles(listeRegles,listeNomsEtapes)
+
+
+  def BuildLBRegles(self,listeRegles,listeNomsEtapes):
+        self.LBRegles.clear()
+        if len(listeRegles) > 0:
+           for regle in listeRegles :
+              texteRegle=regle.gettext()
+              texteMauvais,test = regle.verif(listeNomsEtapes)
+              for ligne in texteRegle.split("\n") :
+                 if ligne == "" :
+                    self.LBRegles.addItem(ligne)
+                    continue
+                 if ligne[0]=="\t" :
+                    ligne="     "+ligne[1:]
+                 if test :
+                    self.LBRegles.addItem(ligne)
+                 else :
+                    
+                    monItem=QListWidgetItem(ligne)
+                    monItem.setForeground(Qt.red)
+                    self.LBRegles.addItem(monItem)
+
+
+# ----------------------- #
+class QTPanelTBW1(QTPanel):
+# ----------------------- #
+  """
+  Classe contenant les méthodes nécessaires a l onglet "Ajouter Mot-Clef"  
+  hérite de QTPanel  # Attention n appelle pas le __init__
+  Gére plus précisement :
+  """
+  def __init__(self,node, parent = None):
+        self.editor    = parent
+        self.node      = node
+        self.BuildLBMCPermis()
+        self.AppelleBuildLBRegles()
+
+  def BuildLBMCPermis(self):
+        self.LBMCPermis.clear()
+        QObject.connect(self.LBMCPermis,SIGNAL("itemDoubleClicked(QListWidgetItem*)"),self.DefMC)
+        jdc = self.node.item.get_jdc()
+        genea =self.node.item.get_genealogie()
+        liste_mc=self.node.item.get_liste_mc_ordonnee(genea,jdc.cata_ordonne_dico)
+        for aMc in liste_mc:
+           self.LBMCPermis.addItem( aMc)
+
+
+  def DefMC(self,item):
+        """ On ajoute un mot-clé à  la commande : subnode """
+        name=str(item.text())
+        self.editor.init_modif()
+        self.node.append_child(name)
+
+# ---------------------------- #
+class QTPanelTBW2(QTPanel):
+# ---------------------------- #
+  """
+  Classe contenant les méthodes nécessaires a l onglet "Nouvelle Commande"  
+  hérite de QTPanel  # Attention n appelle pas le __init__
+  Gére plus précisement :
+  """
+
+  def __init__(self,node, parent = None, racine = 0):
+        self.editor    = parent
+        self.node      = node
+        self.BuildLBNouvCommande()
+        self.NbRecherches = 0
+        if racine == 1 : self.AppelleBuildLBRegles()
+
+      
+  def BuildLBNouvCommande(self):
+        self.LBNouvCommande.clear()
+
+        jdc=self.node.item.object.get_jdc_root()
+        if self.RBalpha.isChecked():
+           listeCmd = jdc.get_liste_cmd()
+           for aCmd in listeCmd:
+              self.LBNouvCommande.addItem( aCmd )
+        else :
+           listeGroupes,dictGroupes=jdc.get_groups()
+           for grp in listeGroupes:
+              if grp == "CACHE":continue
+              listeCmd=dictGroupes[grp]
+              texte="GROUPE : "+grp
+              self.LBNouvCommande.addItem( texte )
+              self.LBNouvCommande.addItem( " " )
+              for aCmd in listeCmd:
+                 self.LBNouvCommande.addItem( aCmd)
+              self.LBNouvCommande.addItem( " " )
+        #QObject.connect( self.LBNouvCommande, SIGNAL("itemClicked(QListWidgetItem*)"),self.DefCmd )
+        QObject.connect( self.LBNouvCommande, SIGNAL("itemDoubleClicked(QListWidgetItem*)"),self.DefCmd )
+
+  def DefCmd(self):
+        if (self.editor.focusWidget())!=self.LBNouvCommande :
+            return 
+        if self.LBNouvCommande.currentItem()== 0 : return
+        if self.LBNouvCommande.currentItem()== None : return
+        name=str(self.LBNouvCommande.currentItem().text())
+        if name==QString(" "):
+          return
+        if name.find("GROUPE :")==0 :
+          return
+        self.editor.init_modif()
+        print self.node
+        print name
+        new_node = self.node.append_brother(name,'after')
+
+
+  def LEFiltreTextChanged(self):
+        self.NbRecherches = 0
+        try :
+           MonItem=self.LBNouvCommande.findItems(self.LEFiltre.text().toUpper(),Qt.MatchContains)[0]
+          self.LBNouvCommande.setCurrentItem(MonItem)
+        except :
+           pass
+
+  def LEfiltreReturnPressed(self):
+        self.DefCmd()
+
+  def BNextPressed(self):
+        self.NbRecherches = self.NbRecherches + 1
+        monItem = None
+        try :
+            MonItem=self.LBNouvCommande.findItems(self.LEFiltre.text().toUpper(),Qt.MatchContains)[self.NbRecherches]
+        except :
+            try : # ce try sert si la liste est vide
+               MonItem=self.LBNouvCommande.findItems(self.LEFiltre.text().toUpper(),Qt.MatchContains)[0]
+               self.NbRecherches = 0
+            except :
+               return
+       self.LBNouvCommande.setCurrentItem(MonItem)
+
+  def LBNouvCommandeClicked(self):
+        name=str(self.LBNouvCommande.currentText())
+
+
+# ---------------------------- #
+class QTPanelTBW3(QTPanel):
+# ---------------------------- #
+
+  """
+  Classe contenant les méthodes nécessaires a l onglet "Nommer Concept"  
+  si non réentrant
+  hérite de QTPanel                   # Attention n appelle pas le __init__
+  Gére plus précisement :
+  """
+
+  def __init__(self,node, parent = None):
+        self.editor    = parent
+        self.node      = node
+        type_sd = self.node.item.get_type_sd_prod()
+        nomConcept = self.node.item.GetText()
+        self.typeConcept.setText(type_sd)
+        self.LENomConcept.setText("")
+        self.LENomConcept.setText(nomConcept)
+        
+  def LENomConceptReturnPressed(self):
+        """
+        Nomme le concept SD retourne par l'etape
+        """
+        nom = str(self.LENomConcept.text())
+        nom = string.strip(nom)
+        if nom == '' : return                  # si pas de nom, on ressort sans rien faire
+        self.editor.init_modif()
+        test,mess = self.node.item.nomme_sd(nom)
+        self.editor.affiche_infos(mess)
+
+# ------------------------------- #
+from desViewTexte import Ui_dView
+class ViewText(Ui_dView,QDialog):
+# ------------------------------- #
+    """
+    Classe permettant la visualisation de texte
+    """
+    def __init__(self,parent):
+        QDialog.__init__(self,parent)
+        self.setupUi(self)
+
+        self.resize( QSize(600,507).expandedTo(self.minimumSizeHint()) )
+        self.connect( self.bclose,SIGNAL("clicked()"), self, SLOT("close()") )
+        self.connect( self.bsave,SIGNAL("clicked()"), self.saveFile )
+        
+    def setText(self, txt ):    
+        self.view.setText(txt)
+        
+    def saveFile(self):
+        #recuperation du nom du fichier
+        fn = QFileDialog.getSaveFileName(None,
+                self.trUtf8("Save File"),
+                self.trUtf8("/tmp"))
+        #if not fn.isNull():                
+        #   print "hhhhhhhhhhhhhhjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkk"
+        #   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"))
+        #      if abort:
+        #         return
+        #   fn = unicode(QDir.convertSeparators(fn))                
+        #else:
+        #   return
+
+        #ecriture du fichier
+        if fn.isNull() : return
+        try:
+           f = open(fn, 'wb')
+           f.write(str(self.view.toPlainText()))
+           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
+
diff --git a/InterfaceQT4/qtEficas.py b/InterfaceQT4/qtEficas.py
new file mode 100644 (file)
index 0000000..5f633e6
--- /dev/null
@@ -0,0 +1,341 @@
+# -*- coding: iso-8859-1 -*-
+
+import os, sys
+REPINI=os.path.dirname(os.path.abspath(__file__))
+INSTALLDIR=os.path.join(REPINI,'..')
+sys.path.append(INSTALLDIR)
+sys.path.append(INSTALLDIR+"/UiQT4")
+sys.path.append(INSTALLDIR+"/InterfaceQT4")
+
+from PyQt4.QtGui  import *
+from PyQt4.QtCore import *
+from PyQt4.QtAssistant import *
+from myMain import Ui_Eficas
+from viewManager import MyTabview
+
+from Editeur import configuration
+from Editeur import session
+
+
+
+class Appli(Ui_Eficas,QMainWindow):    
+    """
+    Class implementing the main user interface.
+    """
+    def __init__(self,code="ASTER",salome=0,parent=None):
+        """
+        Constructor
+        """
+        self.ihm="QT"
+        self.code=code
+        self.salome=salome
+       self.top = self #(pour CONFIGURATION)
+
+        self.initPrefs()
+        self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
+        self.CONFIGStyle = configuration.make_config_style(self,prefs.REPINI)
+
+        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.monAssistant=QAssistantClient(QString(""), self.viewmanager)
+        
+        #if self.salome :
+        #   from Editeur import session
+        #   self.ouvreFichiers()
+        from Editeur import session
+        self.ouvreFichiers()
+
+        self.ficPatrons={}
+        self.initPatrons()
+
+        self.recent =  QStringList()
+        self.ficRecents={}
+        self.initRecents()
+        
+    def OPENTURNS(self) :
+        self.MenuBar.removeItem(5)
+        self.MenuBar.removeItem(6)
+        self.MenuBar.removeItem(7)
+
+
+    def connecterSignaux(self) :
+        self.connect(self.recentMenu,SIGNAL('aboutToShow()'),self.handleShowRecentMenu)
+
+       self.connect(self.action_Nouveau,SIGNAL("activated()"),self.fileNew)
+        self.connect(self.actionNouvel_Include,SIGNAL("activated()"),self.NewInclude)
+        self.connect(self.action_Ouvrir,SIGNAL("activated()"),self.fileOpen)
+        self.connect(self.actionEnregistrer,SIGNAL("activated()"),self.fileSave)
+        self.connect(self.actionEnregistrer_sous,SIGNAL("activated()"),self.fileSaveAs)
+        self.connect(self.actionFermer,SIGNAL("activated()"),self.fileClose)
+        self.connect(self.actionFermer_tout,SIGNAL("activated()"),self.fileCloseAll)
+        self.connect(self.actionQuitter,SIGNAL("activated()"),self.fileExit)
+
+        self.connect(self.actionCouper,SIGNAL("activated()"),self.editCut)
+        self.connect(self.actionCopier,SIGNAL("activated()"),self.editCopy)
+        self.connect(self.actionColler,SIGNAL("activated()"),self.editPaste)
+
+        self.connect(self.actionRapport_de_Validation,SIGNAL("activated()"),self.jdcRapport)
+        self.connect(self.actionFichier_Source,SIGNAL("activated()"),self.jdcFichierSource)
+        self.connect(self.actionFichier_Resultat,SIGNAL("activated()"),self.visuJdcPy)
+
+        self.connect(self.actionParametres_Eficas,SIGNAL("activated()"),self.optionEditeur)
+        self.connect(self.actionLecteur_Pdf,SIGNAL("activated()"),self.optionPdf)
+
+        self.connect(self.actionTraduitV7V8,SIGNAL("activated()"),self.traductionV7V8)
+        self.connect(self.actionTraduitV8V9,SIGNAL("activated()"),self.traductionV8V9)
+
+        #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.aidenew_itemAction,SIGNAL("activated()"),self.helpAbout)
+                             
+
+    def ouvreFichiers(self) :
+    # Ouverture des fichiers de commandes donnes sur la ligne de commande
+        cwd=os.getcwd()
+        self.dir=cwd
+        for study in session.d_env.studies:
+            os.chdir(cwd)
+            d=session.get_unit(study,self)
+            self.viewmanager.handleOpen(fichier=study["comm"],units=d)
+
+    def  get_source(self,file):
+    # appele par Editeur/session.py
+        import convert
+        p=convert.plugins['python']()
+        p.readfile(file)
+        texte=p.convert('execnoparseur')
+        return texte
+
+
+        
+    def initPatrons(self) :
+    # Mise à jour du menu des fichiers recemment ouverts
+        from Editeur import listePatrons
+        self.listePatrons = listePatrons.listePatrons(self.code)
+        idx = 0
+        for nomSsMenu in self.listePatrons.liste.keys():
+            ssmenu=self.menuPatrons.addMenu(nomSsMenu)
+            for fichier in self.listePatrons.liste[nomSsMenu]:
+               id = ssmenu.addAction(fichier)
+               self.ficPatrons[id]=fichier
+               self.connect(id, SIGNAL('triggered()'),self.handleOpenPatrons)
+            #   self.Patrons.setItemParameter(id,idx)
+               idx=idx+1
+
+    def initRecents(self):
+       #try :
+       if 1 :
+           rep=self.CONFIGURATION.rep_user
+           monFichier=rep+"/listefichiers_"+self.code
+           index=0
+           f=open(monFichier)
+           while ( index < 9) :
+              ligne=f.readline()
+              if ligne != "" :
+                 l=(ligne.split("\n"))[0]
+                 self.recent.append(l)
+              index=index+1
+       #except : pass
+       else :
+           pass
+
+       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):
+        from gereTraduction import traduction
+        traduction(self.CONFIGURATION.rep_user,self.viewmanager,"V7V8")
+
+    def traductionV8V9(self):
+        from gereTraduction import traduction
+        traduction(self.CONFIGURATION.rep_user,self.viewmanager,"V8V9")
+
+    def version(self) :
+        from desVisu import DVisu
+        titre = "version "
+        monVisu=DVisu(parent=self.viewmanager)
+        monVisu.setCaption(titre)
+        monVisu.TB.setText("Eficas V1.13")
+        monVisu.adjustSize()
+        monVisu.show()
+
+    def aidePPal(self) :
+        maD=INSTALLDIR+"/AIDE/fichiers"
+        docsPath = QDir(maD).absPath()
+        self.monAssistant.showPage( QString("%1/index.html").arg(docsPath) )
+
+    def optionEditeur(self) :
+        from monOptionsEditeur import Options
+        monOption=Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
+        monOption.show()
+        
+    def optionPdf(self) :
+        from monOptionsPdf import OptionPdf
+        monOption=OptionPdf(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
+        monOption.show()
+        
+    def handleShowRecentMenu(self):
+        """
+        Private method to set up recent files menu.
+        """
+        self.recentMenu.clear()
+        
+        for rp in self.recent:
+            id = self.recentMenu.addAction(rp)
+            self.ficRecents[id]=rp
+            self.connect(id, SIGNAL('triggered()'),self.handleOpenRecent)
+        self.recentMenu.addSeparator()
+        self.recentMenu.addAction(self.trUtf8('&Clear'), self.handleClearRecent)
+        
+    def handleOpenPatrons(self):
+        idx=self.sender()
+        fichier=REPINI+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
+        self.viewmanager.handleOpen(fichier=fichier, patron = 1)
+
+    def handleOpenRecent(self):
+        idx=self.sender()
+        fichier=self.ficRecents[idx]
+        self.viewmanager.handleOpen(fichier=fichier, patron =0 )
+        
+    def handleClearRecent(self):
+        self.recent = QStringList()
+        
+    def fileNew(self):        
+        self.viewmanager.newEditor()        
+        
+    def fileOpen(self ):
+        self.viewmanager.handleOpen()        
+        
+    def fileSave(self):
+        self.viewmanager.saveCurrentEditor()
+        
+    def fileSaveAs(self):
+        self.viewmanager.saveAsCurrentEditor()
+        
+    def fileClose(self):
+        self.viewmanager.handleClose()
+        
+    def fileCloseAll(self):
+        self.viewmanager.handleCloseAll()
+        
+    def fileExit(self):
+        # On peut sortir sur Abort
+        self.viewmanager.handleCloseAll()
+        if self.salome :
+           self.close()
+        else :
+           qApp.closeAllWindows()
+        
+    def editCopy(self):
+        self.viewmanager.handleEditCopy()
+      
+    def editCut(self):
+        self.viewmanager.handleEditCut()
+    
+    def editPaste(self):
+        self.viewmanager.handleEditPaste()
+        
+    def jdcFichierSource(self):
+        self.viewmanager.handleViewJdcFichierSource()
+        
+    def jdcRapport(self):
+        self.viewmanager.handleViewJdcRapport()
+        
+    def visuJdcPy(self):
+        self.viewmanager.handleViewJdcPy()
+
+    def helpAbout(self):
+        import AIDE
+        AIDE.go3(parent=self)
+
+    def NewInclude(self):
+        self.viewmanager.newIncludeEditor()
+
+    def initPrefs(self):
+        if code == "ASTER" : 
+           from Aster import prefs
+           import sys
+           sys.path.append(INSTALLDIR+"/Aster")
+       else :
+          import prefs 
+           #try :
+           if 1 :
+             apply(Appli.__dict__[code],(self,))
+           #except :
+           else:
+             pass
+        if hasattr(prefs,'encoding'):
+           import sys
+           reload(sys)
+           sys.setdefaultencoding(prefs.encoding)
+
+if __name__=='__main__':
+
+    # Modules Eficas
+    sys.path.append(INSTALLDIR+"/Aster")
+    from Aster import prefs
+    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
+
+    from Editeur import import_code
+    from Editeur import session
+
+    # Analyse des arguments de la ligne de commande
+    options=session.parse(sys.argv)
+    code=options.code
+
+
+    app = QApplication(sys.argv)
+    #app.setMainWidget(mw) (qt3)
+    Eficas=Appli()
+    Eficas.show()
+
+    #app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
+    #mw.ouvreFichiers()
+    #mw.show()
+
+    res=app.exec_()
+    sys.exit(res)
diff --git a/InterfaceQT4/qtSaisie.py b/InterfaceQT4/qtSaisie.py
new file mode 100644 (file)
index 0000000..5314472
--- /dev/null
@@ -0,0 +1,189 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from PyQt4 import *
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+# Import des panels
+
+class SaisieValeur:
+  """
+  Classe contenant les méthodes communes aux  panels
+  permettant de choisir des valeurs 
+  """
+  def __init__(self):
+        pass
+
+  def InitListBoxASSD(self):
+       listeNomsSD = self.node.item.get_sd_avant_du_bon_type()
+       for aSD in listeNomsSD:
+            self.listBoxASSD.addItem( aSD)
+            QObject.connect(self.listBoxASSD, SIGNAL("doubleClicked(QListBoxItem*)" ), self.ClicASSD )
+       min,max =  self.node.item.GetMinMax()
+       l= self.node.item.GetListeValeurs()
+       
+       if (min == 1 and min == max and len(listeNomsSD)==1 and (l==[] or l==None)):
+            if ('R' not in self.node.item.get_type()) :
+               self.listBoxASSD.setCurrentItem(0)
+
+
+  def BuildLBValeurs(self):
+        self.LBValeurs.clear()
+        listeValeurs=self.node.item.GetListeValeurs()
+        for valeur in listeValeurs:
+            self.LBValeurs.addItem(str(valeur))
+        if listeValeurs != None and listeValeurs != [] :
+            self.LBValeurs.setCurrentRow(len(listeValeurs) - 1)
+       
+
+  def RemplitPanel(self,listeDejaLa=[]):
+        self.listBoxVal.clear()
+        lChoix=self.node.item.get_liste_possible(listeDejaLa)
+        for valeur in lChoix :
+            self.listBoxVal.addItem( str(valeur) ) 
+        if len(lChoix) == 1 :
+            self.listBoxVal.setCurrentRow(1)
+
+  def ClicASSD(self):
+         if self.listBoxASSD.currentItem()== None : return
+         valeurQstring=self.listBoxASSD.currentItem().text()
+         commentaire = QString("Valeur selectionnée : ") 
+         commentaire.append(valeurQstring)
+         self.Commentaire.setText(commentaire)
+         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.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.currentItem()==None :
+            commentaire = "Pas de valeur selectionnée" 
+            self.Commentaire.setText(QString(commentaire))
+         else :
+            self.ClicValeur()       
+
+  def BOk2Pressed(self):
+         if str(self.lineEditVal.text())== "" :
+            commentaire = "Pas de valeur entrée " 
+            self.Commentaire.setText(QString(commentaire))
+         else :
+            self.LEValeurPressed()       
+
+  def LEValeurPressed(self,valeur=None):
+         if valeur == None :
+            nouvelleValeur=str(self.lineEditVal.text())
+         else :
+            self.lineEditVal.setText(QString(valeur.nom))
+            nouvelleValeur=valeur
+         validite,commentaire=self.politique.RecordValeur(nouvelleValeur)
+         if commentaire != "" :
+            #self.Commentaire.setText(QString(commentaire))
+            self.editor.affiche_infos(commentaire)
+
+
+  def TraiteLEValeur(self,valeurTraitee=None) :
+        # lit la chaine entree dans le line edit
+        # et la tranforme en chaine de valeurs
+        # a traiter. renvoie eventuellement des complexes
+        listeValeurs=[]
+        if valeurTraitee == None :
+           valeurBrute=str(self.LEValeur.text())
+        else :
+           valeurBrute=valeurTraitee
+        if valeurBrute == str("") : return listeValeurs,1
+
+        try :
+            valeur=eval(valeurBrute,{})        
+        except :
+            valeur=valeurBrute
+
+        if type(valeur)  in (types.ListType,types.TupleType) :
+           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]])
+                       listeValeurs.append(t)
+                       indice=indice+3
+                    except :
+                       commentaire = "Veuillez entrer le complexe sous forme aster ou sous forme python"
+                       self.editor.affiche_infos(commentaire)
+                       return listeValeurs,0
+                       
+
+                 else :     # ce n'est pas un tuple à la mode aster
+                    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:
+          listeValeurs.append(valeur)
+
+        return listeValeurs,1
+
+
+class SaisieSDCO :
+  def __init__(self):
+        pass
+
+  def LESDCOReturnPressed(self):
+        """
+           Lit le nom donné par l'utilisateur au concept de type CO qui doit être
+           la valeur du MCS courant et stocke cette valeur
+        """
+        self.editor.init_modif()
+        anc_val = self.node.item.get_valeur()
+        if anc_val != None:
+          # il faut egalement propager la destruction de l'ancien concept
+          self.node.item.delete_valeur_co(valeur=anc_val)
+          # et on force le recalcul des concepts de sortie de l'etape
+          self.node.item.object.etape.get_type_produit(force=1)
+          # et le recalcul du contexte
+          self.node.item.object.etape.parent.reset_context()
+        nomConcept = str(self.LESDCO.text())
+        if nomConcept == "" : return
+
+        test,commentaire=self.node.item.set_valeur_co(nomConcept)
+        if test:
+           commentaire="Valeur du mot-clé enregistree"
+           self.node.update_node_valid()
+        else :
+           cr = self.node.item.get_cr()
+           commentaire = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
+           self.node.item.set_valeur_co(anc_val)
+        self.Commentaire.setText(QString(commentaire))
diff --git a/InterfaceQT4/readercata.py b/InterfaceQT4/readercata.py
new file mode 100644 (file)
index 0000000..052d2f1
--- /dev/null
@@ -0,0 +1,389 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce module sert a lire un catalogue et a construire
+    un objet CataItem pour Eficas.
+    Il s'appuie sur la classe READERCATA
+"""
+# Modules Python
+import time
+import os,sys,py_compile
+import traceback
+import cPickle
+import re
+
+# Modules Eficas
+import prefs
+from Noyau.N_CR import CR
+from Editeur.utils  import init_rep_cata_dev
+
+from Editeur    import analyse_catalogue
+from Editeur    import autre_analyse_cata
+from Editeur    import uiinfo
+from monChoixCata import MonChoixCata
+
+from PyQt4 import *
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+version="14"
+
+class READERCATA:
+
+   def __init__(self,QWParent, appliEficas):
+      self.QWParent=QWParent
+      self.appliEficas=self.QWParent.appliEficas
+      self.code=self.QWParent.code
+      self.QWParent.format_fichier='python'
+      self.version_code=self.QWParent.version_code
+      self.version_cata=None
+      self.fic_cata=None
+      self.OpenCata()
+      self.cataitem=None
+
+   def OpenCata(self):
+      """ 
+          Ouvre le catalogue standard du code courant, cad le catalogue présent
+          dans le répertoire Cata 
+      """
+      message1 = "Compilation des fichiers Eficas \n\n Veuillez patienter ..."
+
+      liste_cata_possibles=[]
+      for catalogue in self.appliEficas.CONFIGURATION.catalogues:
+          if catalogue[0] == self.code :
+             liste_cata_possibles.append(catalogue)
+
+      if len(liste_cata_possibles)==0:          
+          QMessageBox.critical( self.QWParent, "Import du catalogue","Pas de catalogue defini pour le code %s" % self.code)
+          self.appliEficas.close()
+          sys.exit(1)
+
+      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.QWParent.format_fichier=liste_cata_possibles[0][3] 
+          lab=QString("Eficas V1.") 
+          lab+=QString(version) 
+          lab+=QString(" pour ")
+          lab+=QString(self.code) 
+          lab+=QString(" avec le catalogue ")
+          lab+=self.version_code
+          try :
+          # souci pour les includes
+              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()
+
+      if self.fic_cata == None :
+          print "Pas de catalogue pour code %s, version %s" %(self.code,self.version_code)
+          sys.exit(0)
+
+      self.determineMater()
+
+
+      # détermination de fic_cata_c et fic_cata_p
+      self.fic_cata_c = self.fic_cata + 'c'
+      self.fic_cata_p = os.path.splitext(self.fic_cata)[0]+'_pickled.py'
+
+      # import du catalogue
+      self.cata = self.import_cata(self.fic_cata)
+      if not self.cata :          
+          QMessageBox.critical( self.QWParent, "Import du catalogue","Impossible d'importer le catalogue %s" %self.fic_cata)
+         self.appliEficas.close()
+          sys.exit(1)
+      #
+      # analyse du catalogue (ordre des mots-clés)
+      #
+      # Retrouve_Ordre_Cata_Standard fait une analyse textuelle du catalogue
+      # remplacé par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation
+      # des mots clés a la création
+      self.Retrouve_Ordre_Cata_Standard_autre()
+
+      #
+      # analyse des données liées a  l'IHM : UIinfo
+      #
+      uiinfo.traite_UIinfo(self.cata)
+
+      #
+      # traitement des clefs documentaires
+      #
+      self.traite_clefs_documentaires()
+
+      # chargement et analyse des catalogues développeur (le cas échéant)
+      #
+      if self.appliEficas.CONFIGURATION.isdeveloppeur == 'OUI' :
+          init_rep_cata_dev(self.fic_cata,self.appliEficas.CONFIGURATION.path_cata_dev)
+          fic_cata_dev = os.path.join(self.appliEficas.CONFIGURATION.path_cata_dev,'cata_developpeur.py')
+          if os.path.isfile(fic_cata_dev):
+              # il y a bien un catalogue développeur : il faut récupérer le module_object associé ...
+              test = self.compile_cata(fic_cata_dev,fic_cata_dev+'c')
+              if not test :
+                  showinfo("Compilation catalogue développeur",
+                           "Erreur dans la compilation du catalogue développeur")
+                  self.cata = (self.cata,)
+              else:
+                  self.cata_dev =self.import_cata(fic_cata_dev)
+                  #self.Retrouve_Ordre_Cata_Developpeur()
+                  self.Retrouve_Ordre_Cata_Developpeur_autre()
+                  self.cata = (self.cata,self.cata_dev)
+          else:
+              self.cata = (self.cata,)
+      else:
+          self.cata = (self.cata,)
+      titre="Eficas V1.14 avec le catalogue " + os.path.basename(self.fic_cata)
+      if self.appliEficas.top:
+        self.appliEficas.setWindowTitle(titre)
+      self.appliEficas.titre=titre
+
+   def determineMater(self) :
+      # Determinination du repertoire materiau
+      v_codeSansPoint=self.version_code
+      v_codeSansPoint=re.sub("\.","",v_codeSansPoint)
+      chaine="rep_mat_"+v_codeSansPoint
+      if hasattr(self.appliEficas.CONFIGURATION,chaine):
+          a=getattr(self.appliEficas.CONFIGURATION,chaine)
+      else :
+          try :
+             a=self.appliEficas.CONFIGURATION.dRepMat[self.version_code]
+          except :
+             if self.code == "ASTER" :
+                print "Probleme avec le repertoire materiau"
+             a='.'
+      self.appliEficas.CONFIGURATION.rep_mat=a
+
+   def import_cata(self,cata):
+      """ 
+          Réalise l'import du catalogue dont le chemin d'acca¨s est donné par cata
+      """
+      nom_cata = os.path.splitext(os.path.basename(cata))[0]
+      rep_cata = os.path.dirname(cata)
+      sys.path[:0] = [rep_cata]
+      try :
+          o=__import__(nom_cata)
+          return o
+      except Exception,e:
+          traceback.print_exc()
+          return 0
+
+   def Retrouve_Ordre_Cata_Standard_autre(self):
+      """ 
+          Construit une structure de données dans le catalogue qui permet
+          a  EFICAS de retrouver l'ordre des mots-clés dans le texte du catalogue.
+          Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui
+          contient le nom des mots clés dans le bon ordre
+      """ 
+      self.cata_ordonne_dico,self.appliEficas.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata)
+
+   def Retrouve_Ordre_Cata_Standard(self):
+      """ 
+          Retrouve l'ordre des mots-clés dans le catalogue, cad :
+           - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer
+               l'ordre des mots-clés dans le catalogue
+           - s'il n'a pas été modifié, relie le fichier pickle 
+      """
+      time1 = os.path.getmtime(self.fic_cata)
+      try :
+          time2 = os.path.getmtime(self.fic_cata_p)
+      except:
+          time2 = 0
+      if time2 > time1 :
+          # l'objet catalogue n'a pas été modifié depuis le dernier "pickle"
+          self.Get_Ordre_Cata()
+      else :
+          # le catalogue a été modifié depuis le dernier "pickle" :
+          # il faut retrouver l'ordre du catalogue et refaire pickle
+          self.Get_Ordre_Cata(mode='cata')
+      self.appliEficas.affiche_infos("Catalogue standard chargé")
+
+   def Retrouve_Ordre_Cata_Developpeur(self):
+      """ 
+          Retrouve l'ordre des mots-clés dans le catalogue, cad :
+          - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer
+            l'ordre des mots-clés dans le catalogue
+          - s'il n'a pas été modifié, relie le fichier pickle 
+      """
+      if self.code != 'ASTER' : return
+      fic_cata = os.path.join(self.appliEficas.CONFIGURATION.path_cata_dev,'cata_developpeur.py')
+      message="Chargement catalogue développeur présent dans :\n %s..." % self.appliEficas.CONFIGURATION.path_cata_dev
+      cata_dev_ordonne = analyse_cata.analyse_catalogue(self,self.fic_cata)
+      self.cata_dev_ordonne_cr = cata_dev_ordonne.cr
+      cata_dev_ordonne_dico = cata_dev_ordonne.entites
+      self.cata_ordonne_dico.update(cata_dev_ordonne_dico)
+      self.appliEficas.affiche_infos(" catalogue(s) développeur(s) chargé(s)" )
+
+   def Retrouve_Ordre_Cata_Developpeur_autre(self):
+      """
+          Retrouve l'ordre des mots-clés dans le catalogue, cad :
+          - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer
+            l'ordre des mots-clés dans le catalogue
+          - s'il n'a pas été modifié, relie le fichier pickle
+      """
+      if self.code != 'ASTER' : return
+      message="Chargement catalogue développeur présent dans :\n %s..." % self.appliEficas.CONFIGURATION.path_cata_dev
+      cata_dev_ordonne_dico,self.appliEficas.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata)
+      self.cata_ordonne_dico.update(cata_dev_ordonne_dico)
+      self.appliEficas.affiche_infos(" catalogue(s) développeur(s) chargé(s)" )
+
+   def Get_Ordre_Cata(self,mode='pickle'):
+      """ 
+          Retrouve l'ordre du catalogue :
+            - mode='pickle ': tente de relire le fichier pickle et sinon lance l'analyse du catalogue
+            - mode='cata'   : force l'analyse du catalogue directement sans relire le pickle
+      """
+      if mode == 'pickle' :
+          try:
+              f = open(self.fic_cata_p)
+              u = cPickle.Unpickler(f)
+              self.cata_ordonne_dico = u.load()
+              f.close()
+          except :
+              # on peut ne pas arriver a  relire le fichier pickle s'il a été altéré
+              # ou (le plus probable) s'il a été créé sous un autre OS
+              self.Get_Ordre_Cata(mode='cata')
+      elif mode == 'cata':
+          cata_ordonne = analyse_catalogue.analyse_catalogue(self,self.fic_cata)
+          self.cata_ordonne_cr = cata_ordonne.cr
+          self.cata_ordonne_dico = cata_ordonne.entites
+          f = open(self.fic_cata_p,'w+')
+          p = cPickle.Pickler(f)
+          p.dump(self.cata_ordonne_dico)
+          f.close()
+      else :
+          raise Exception("Appel a  un mode inconnu de Get_Ordre_Cata : %s" % mode)
+          return
+
+   def ask_choix_catalogue(self):
+      """
+      Ouvre une fenetre de sélection du catalogue dans le cas oa¹ plusieurs
+      ont été définis dans Accas/editeur.ini
+      """      
+      # construction du dictionnaire et de la liste des catalogues
+      self.dico_catalogues = {}
+      defaut = None
+      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' : defaut = catalogue[1]
+      liste_choix = self.dico_catalogues.keys()
+      liste_choix.sort()
+
+      lab=QString("Eficas V1.") 
+      lab+=QString(version) 
+      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, "", "Aucun catalogue déclaré pour %s" %self.code)
+         self.appliEficas.close()
+          sys.exit(1)
+          
+      # création d'une boite de dialogue modale
+      widgetChoix=MonChoixCata(liste_choix,self, self.appliEficas, "", True )
+      ret=widgetChoix.exec_()
+      
+      lab=QString("Eficas V1.") 
+      lab+=QString(version) 
+      lab+=QString(" pour ")
+      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]
+          self.version_code = self.version_cata
+          self.appliEficas.format_fichier = self.dico_catalogues[self.version_cata][3]
+          lab+=self.version_cata
+          self.appliEficas.setWindowTitle(lab)
+          #qApp.mainWidget().setCaption(lab)
+      else :
+          sys.exit(0)
+
+
+   def compile_cata(self,cata,catac):
+      """ 
+           Teste si le catalogue a bien besoin d'etre recompilé et si oui, le compile et
+           affiche un message dans le splash . Retourne 1 si la compilation s'est bien déroulée,
+           0 sinon.
+      """
+      time1 = os.path.getmtime(cata)
+      try:
+          time2 = os.path.getmtime(catac)
+      except:
+          time2 = 0
+      if time1 > time2:
+          try:
+              # le catalogue doit etre recompilé avant d'etre importé
+              if self.QWParent.test == 0 :
+                 splash._splash.configure(text="Compilation du catalogue\nCela peut prendre plusieurs secondes ...")
+              py_compile.compile(cata)
+          except:
+              return 0
+      return 1
+
+
+
+   def visuCRCATA(self):
+      """
+      Méthode permettant l'affichage du rapport de validation
+      """
+      cr = CR( debut = "Début rapport de validation du catalogue",
+               fin = "Fin rapport de validation du catalogue")
+      titre="rapport de validation du catalogue"
+      if hasattr(self,'cata_ordonne_cr') :
+          cr.add(self.cata_ordonne_cr)
+      if hasattr(self,'cata_dev_ordonne_cr') :
+          cr.add(self.cata_dev_ordonne_cr)
+      for cata in self.cata:
+          if hasattr(cata,'JdC'):
+              cr.add(cata.JdC.report())
+      texte_cr = str(cr)
+      self.visu_texte_cr = Fenetre(self.appliEficas,titre=titre,texte=texte_cr)
+
+
+   def traite_clefs_documentaires(self):
+      try:
+        self.fic_cata_clef=os.path.splitext(self.fic_cata_c)[0]+'_clefs_docu'
+        f=open(self.fic_cata_clef)
+      except:
+        #print "Pas de fichier associé contenant des clefs documentaires"
+        return
+
+      dict_clef_docu={}
+      for l in f.readlines():
+          clef=l.split(':')[0]
+          docu=l.split(':')[1]
+          docu=docu[0:-1]
+          dict_clef_docu[clef]=docu
+      for oper in self.cata.JdC.commandes:
+           if dict_clef_docu.has_key(oper.nom):
+              oper.docu=dict_clef_docu[oper.nom]
diff --git a/InterfaceQT4/typeNode.py b/InterfaceQT4/typeNode.py
new file mode 100644 (file)
index 0000000..f3e84ec
--- /dev/null
@@ -0,0 +1,76 @@
+# -*- coding: utf-8 -*-
+from PyQt4 import *
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+#---------------------------#
+class PopUpMenuNodePartiel :
+#---------------------------#
+    def createPopUpMenu(self):
+        self.createActions()
+
+        self.menu = QMenu(self.tree)
+        #ss-menu Comment:
+        self.commentMenu=self.menu.addMenu('Commentaire')
+        self.commentMenu.addAction(self.CommApres)
+        self.commentMenu.addAction(self.CommAvant)
+        #ss-menu Parameters:
+        self.paramMenu =self.menu.addMenu('Parametre') 
+        self.paramMenu.addAction(self.ParamApres)
+        self.paramMenu.addAction(self.ParamAvant)
+
+        #items du menu
+        self.menu.addAction(self.Supprime)
+    
+    def createActions(self):
+        self.CommApres = QAction('après',self.tree)
+        self.tree.connect(self.CommApres,SIGNAL("activated()"),self.addCommApres)
+        self.CommApres.setStatusTip("Insere un commentaire apres la commande ")
+        self.CommAvant = QAction('avant',self.tree)
+        self.tree.connect(self.CommAvant,SIGNAL("activated()"),self.addCommAvant)
+        self.CommAvant.setStatusTip("Insere un commentaire avant la commande ")
+
+        self.ParamApres = QAction('après',self.tree)
+        self.tree.connect(self.ParamApres,SIGNAL("activated()"),self.addParametersApres)
+        self.ParamApres.setStatusTip("Insere un parametre apres la commande ")
+        self.ParamAvant = QAction('avant',self.tree)
+        self.tree.connect(self.ParamAvant,SIGNAL("activated()"),self.addParametersAvant)
+        self.ParamAvant.setStatusTip("Insere un parametre avant la commande ")
+
+        self.Supprime = QAction('Supprimer',self.tree)
+        self.tree.connect(self.Supprime,SIGNAL("activated()"),self.supprimeNoeud)
+        self.Supprime.setStatusTip("supprime le mot clef ")
+
+    def supprimeNoeud(self):
+        item= self.tree.currentItem()
+        item.delete()
+
+    def addParametersApres(self):
+        item= self.tree.currentItem()
+        item.addParameters(True)
+
+    def addParametersAvant(self):
+        item= self.tree.currentItem()
+        item.addParameters(False)
+
+    def addCommApres(self):
+        item= self.tree.currentItem()
+        item.addComment(True)
+
+    def addCommAvant(self):
+        item= self.tree.currentItem()
+        item.addComment(False)
+
+#-----------------------------------------#
+class PopUpMenuNode(PopUpMenuNodePartiel) :
+#-----------------------------------------#
+    def createPopUpMenu(self):
+        PopUpMenuNodePartiel.createPopUpMenu(self)
+        self.Commente = QAction('ce noeud',self.tree)
+        self.tree.connect(self.Commente,SIGNAL("activated()"),self.Commenter)
+        self.Commente.setStatusTip("commente le noeud ")
+        self.commentMenu.addAction(self.Commente)
+
+    def Commenter(self):
+        item= self.tree.currentItem()
+        item.commentIt()
diff --git a/InterfaceQT4/utilIcons.py b/InterfaceQT4/utilIcons.py
new file mode 100644 (file)
index 0000000..ec83c59
--- /dev/null
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+
+from PyQt4.QtGui import QPixmap, QIcon
+import os
+
+class PixmapCache:
+    """
+    Class implementing a pixmap cache for icons.
+    """
+    def __init__(self):
+        """
+        Constructor
+        """
+        self.pixmapCache = {}
+
+
+    def getPixmap(self, key):
+        """
+        Public method to retrieve a pixmap.
+        
+        @param key name of the wanted pixmap (string)
+        @return the requested pixmap (QPixmap)
+        """
+        if (1==1):
+        #try:
+            key="/local/pnoyret/Install_Eficas/EficasV1/InterfaceQT/icons/"+key
+            return QPixmap(key)
+            #return self.pixmapCache[key]
+        #except KeyError:
+        else :
+            self.pixmapCache[key] = QPixmap.fromMimeSource(key)
+            return self.pixmapCache[key]
+            
+pixCache = PixmapCache()
+
+def getPixmap(key, cache = pixCache):
+    """
+    Module function to retrieve a pixmap.
+    
+    @param key name of the wanted pixmap (string)
+    @return the requested pixmap (QPixmap)
+    """
+    return cache.getPixmap(key)
+    
+def getIcon(key):
+    key="/local/pnoyret/Install_Eficas/EficasV1/InterfaceQT/icons/"+key
+    return QIcon(key)
+    
+
+#from PyQt4.Qt3Support import Q3MimeSourceFactory
+
+#def initializeMimeSourceFactory():
+    """
+    Function to initialize the default mime source factory.
+    
+    """
+#    defaultFactory = Q3MimeSourceFactory.defaultFactory()
+#    repini=os.path.dirname(os.path.abspath(__file__))
+#    defaultFactory.addFilePath(repini+"/../Editeur/icons") #CS_pbruno todo (config)
+    
diff --git a/InterfaceQT4/viewManager.py b/InterfaceQT4/viewManager.py
new file mode 100644 (file)
index 0000000..52650ea
--- /dev/null
@@ -0,0 +1,260 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import os, string
+from PyQt4.QtGui  import *
+from PyQt4.QtCore import *
+
+class MyTabview:
+
+   def __init__(self,appliEficas):
+       self.appliEficas=appliEficas
+       self.tabWidgets = []
+       self.mesIndexes = {}
+       self.appliEficas=appliEficas
+       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)
+        
+
+   def handleOpen(self,fichier=None,patron=0,units=None):
+       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,units=units)
+
+   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):
+       self.appliEficas.sauveRecents()
+       print "passage dans CloseAll"
+       print "self.dict_editors", self.dict_editors
+       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"
+       maPage=self.getEditor()
+
+   def newIncludeEditor(self):
+       self.newEditor(include=1)
+
+   def handleViewJdcFichierSource(self):
+       index=self.myQtab.currentIndex()
+       if index < 0 : return
+       self.dict_editors[index].viewJdcSource()
+
+   def handleViewJdcRapport(self):
+       index=self.myQtab.currentIndex()
+       if index < 0 : return
+       self.dict_editors[index].viewJdcRapport()
+
+   def handleViewJdcPy(self):
+       index=self.myQtab.currentIndex()
+       if index < 0 : return
+       self.dict_editors[index].viewJdcPy()
+
+   def saveCurrentEditor(self):
+       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):
+       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 displayJDC(self,jdc,fn=None):
+        """
+        Public slot to display a file in an editor.
+        @param fn name of file to be opened
+        # insert filename into list of recently opened files
+        """
+        titre=None
+        if fn != None : titre=fn.split("/")[-1]
+        editor = self.getEditor(fichier= fn, jdc = jdc ,include=1)
+        self.appliEficas.addToRecentList(editor.getFileName())
+
+   def getEditor(self,fichier = None,jdc = None, units = None,include=0):
+       newWin = 0
+       double = None
+       indexEditor=0
+       for indexEditor in self.dict_editors.keys():
+           editor=self.dict_editors[indexEditor]
+           from utilitaires import samepath
+           if samepath(fichier, editor.getFileName()):
+              abort = QMessageBox.warning(self.appliEficas,
+                        self.appliEficas.trUtf8("Fichier"),
+                        self.appliEficas.trUtf8("Le fichier <b>%1</b> est deja ouvert.").arg(fichier),
+                        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,vm = self,include=include)
+            if double != None :
+               self.doubles[editor]=double
+            if editor.jdc: # le fichier est bien un jdc
+                self.editors.append(editor)
+                newWin = 1
+            else:
+                editor.closeIt()
+
+       if newWin:
+            self.addView(editor, fichier)
+       elif editor.jdc:
+            self.myQtab.setCurrentIndex(indexEditor)
+
+       index=self.myQtab.currentIndex()
+       if index != -1 :
+          self.dict_editors[index]=editor
+       return editor
+
+   def addView(self, win, fichier=None):
+        if fichier is None:
+            self.untitledCount += 1
+            self.myQtab.addTab(win, self.appliEficas.trUtf8("Untitled %1").arg(self.untitledCount))
+        else:
+            liste=fichier.split('/')
+            txt =  liste[-1]
+            if not QFileInfo(fichier).isWritable():
+                txt = '%s (ro)' % txt
+            self.myQtab.addTab(win, txt)
+        self.myQtab.setCurrentWidget(win)
+        self.currentEditor=win
+        win.setFocus()
+
+   def getOpenStartDir(self) :
+       #PN --> Les Preferences
+        try :
+            userDir=os.path.expanduser("~/Eficas_install/")
+            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
+        
diff --git a/InterfaceTK/Interp.py b/InterfaceTK/Interp.py
new file mode 100644 (file)
index 0000000..8fb9582
--- /dev/null
@@ -0,0 +1,153 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import Tkinter,ScrolledText
+import os, sys, string, traceback 
+import code
+
+sys.ps1 = ">>> "
+sys.ps2 = "... "
+
+class PythonInterpreter( code.InteractiveConsole):
+    def __init__( self, text, namespace = None):
+        code.InteractiveConsole.__init__( self, namespace)
+        self.text = text
+
+    def showtraceback( self):
+        start = self.text.pos + " - 1 lines"
+        code.InteractiveConsole.showtraceback( self)
+        end = self.text.pos
+        self.text.tag_add( "exception", start, end)
+
+class InterpWindow(Tkinter.Toplevel):
+    def __init__(self,namespace, parent=None):
+        Tkinter.Toplevel.__init__(self,parent)
+        self._initTkWidgets()
+        self.stdout = self.stderr = self
+        self.pos = '1.0'
+        self.history = [ '' ]
+        self.hpos = 0
+        self.tabCount = 0
+        self.shell = PythonInterpreter( self,namespace)
+        self.write("Python %s on %s\n%s\n(%s)\n" %
+                       (sys.version, sys.platform, sys.copyright,
+                        self.__class__.__name__))
+        self.write( sys.ps1)
+        self.text.focus_set()
+
+    def _initTkWidgets( self):
+        self.text = ScrolledText.ScrolledText( self, bg = "white",fg="black", wrap="word")
+        self.text.pack( fill='both', expand = 1)
+        self.text.bind( '<KeyPress>', self.clearMsg)
+        self.text.bind( '<Return>', self.inputhandler)
+        self.text.bind( '<KP_Enter>', self.inputhandler)
+        self.text.bind( '<Up>', self.uphistory)
+        self.text.bind( '<Down>', self.downhistory)
+        self.text.bind( '<Control-a>', self.goto_sol)
+        self.text.bind( '<Control-d>', self.sendeof)
+        self.text.tag_config("exception", foreground = "red")
+
+    def swapStdFiles(self):
+        sys.stdout,self.stdout = self.stdout,sys.stdout
+        sys.stderr,self.stderr = self.stderr,sys.stderr
+
+    def write(self, data):
+        self.text.insert("end", data)
+        self.pos = self.text.index("end - 1 char")
+        self.text.yview_pickplace("end")
+
+    def tag_add( self, tag, start, end):
+        self.text.tag_add( tag, start, end)
+
+    def inputhandler(self, *args):
+        # Remove any extraneous stuff
+        self.text.delete( self.pos + " lineend", "end")
+        # Now get the line
+        line = self.text.get(self.pos, "end - 1 char")
+        self.text.insert("end", "\n")
+        self.pos = self.text.index("end")
+        self.addHistory( line)
+        self.swapStdFiles()
+        if self.shell.push( line):
+            self.write(sys.ps2)
+        else:
+            self.write(sys.ps1)
+        self.swapStdFiles()
+        self.text.mark_set("insert", "end")
+        return "break"
+
+    def addHistory( self, line):
+        if line:
+            self.history.insert( len( self.history) - 1, line)
+            self.hpos = len( self.history) - 1
+
+    def sendeof(self, *args):
+        self.destroy()
+        return "break"
+
+    def uphistory(self, event=None):
+        if not self.history: return "break"
+
+        if self.hpos > 0:
+            self.hpos = self.hpos - 1
+
+        line = self.history[ self.hpos]
+        self.text.delete( self.pos, "end")
+        self.text.insert( self.pos, line)
+
+        return "break"
+
+    def downhistory( self, event=None):
+        if not self.history: return "break"
+
+        if self.hpos < (len( self.history) - 1):
+            self.hpos = self.hpos + 1
+
+        line = self.history[ self.hpos]
+        self.text.delete( self.pos, "end")
+        self.text.insert( self.pos, line)
+
+        return "break"
+
+    def goto_sol( self, event=None):
+        """
+        Met en mode edition la ligne courante
+        """
+        self.text.mark_set( 'insert', 'insert linestart + 4 chars')
+        return "break"
+        
+    def clearMsg( self, event=None):
+        index = self.text.index( "insert")
+        self.text.delete( "insert lineend", "end")
+        self.tabCount = 0
+
+if __name__ == "__main__":
+    app = Tkinter.Tk()
+    d={'a':1}
+
+    def go():
+      InterpWindow(d,parent=app)
+
+    Tkinter.Button(app,text="Interp",command=go).pack()
+    Tkinter.Button(app,text="Quit",command=app.destroy).pack()
+
+    app.mainloop()
+
diff --git a/InterfaceTK/TroisDPal.py b/InterfaceTK/TroisDPal.py
new file mode 100644 (file)
index 0000000..c0cc0d0
--- /dev/null
@@ -0,0 +1,48 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+   Ce module contient la classe 3Dpilote qui va creer les ordres 
+   de pilotage de l idl PAL pour un element de structure
+"""
+import generator
+
+class TroisDPilote:
+
+   def __init__(self,node,appli,parent):
+      self.node=node
+      self.appli=appli
+      self.parent=parent
+
+   def envoievisu(self):
+      """ 
+      """
+      format="vers3DSalome"
+      if generator.plugins.has_key(format):
+         # Le generateur existe on l'utilise
+         g=generator.plugins[format]()
+         g.init_jdc(self.node.get_jdc())
+         texte=g.gener(self.node)
+      else:
+         print "Le generateur n a pas ete trouvé"
+         print "Erreur ! Erreur!"
+         return ""
+      self.appli.envoievisu(texte)
+
diff --git a/InterfaceTK/__init__.py b/InterfaceTK/__init__.py
new file mode 100644 (file)
index 0000000..28da2d3
--- /dev/null
@@ -0,0 +1,20 @@
+# -*- 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.
+#
+#
+# ======================================================================
diff --git a/InterfaceTK/appli.py b/InterfaceTK/appli.py
new file mode 100644 (file)
index 0000000..147a560
--- /dev/null
@@ -0,0 +1,458 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce module contient la classe APPLI qui est la classe mère de
+    l'application EFICAS. Elle prend en charge l'organisation générale
+    des composants graphiques et l'initialisation Tk
+    L'aspect applicatif doit etre pris en charge par la classe dérivée
+"""
+# Modules Python
+import os
+import string
+import sys
+import types
+import Pmw
+import Tkinter
+from widgets import showerror
+
+# Modules Eficas
+import splash
+import prefs
+import styles
+from styles import style
+import fontes
+import tooltip
+import properties
+import convert,generator
+from Editeur import comploader
+from Editeur.utils import extension_fichier,stripPath
+
+from widgets import Fenetre
+from Misc import MakeNomComplet
+from Editeur import session
+
+import listeFichiers
+import listePatronsTK
+
+REPTK=os.path.dirname(os.path.abspath(__file__))
+sys.path[:0]=[REPTK]
+
+VERSION="EFICAS v1.14"
+
+class APPLI: 
+  def __init__ (self,master,code=prefs.code,fichier=None,test=0,ihm="TK",salome=0) :
+      self.ihm=ihm
+      self.code=code
+      self.salome=salome
+      self.top=master
+      self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS)
+
+      #dimensionnement de la fenetre principale
+      #aspect ratio de l'ecran
+      aspect=float(self.top.winfo_screenwidth())/float(self.top.winfo_screenheight())
+      #resolution (pixels par point). On utilise le fait qu'on a "normalement" 72 points par inch
+      resolution= self.top.winfo_screenwidth()/(self.top.winfo_screenmmwidth()/25.4*72)
+      DDY=max(20,resolution*(fontes.standard[1]+4)) #largeur d'un caractere fonte standard en pixel
+      x=int(45*DDY) #largeur d'ouverture de 45 caracteres de fonte standard 
+      y=int(25*DDY) #hauteur d'ouverture de 25 caracteres de fonte standard
+      minx=x*8/10 #largeur min (80 pour cent de largeur)
+      miny=y*8/10 #hauteur min (80 pour cent de hauteur)
+      self.top.minsize(minx,miny)
+      self.top.geometry('%dx%d' % (x,y))
+
+      self.top.title(VERSION + ' pour '+self.code)
+      self.titre=VERSION + ' pour '+self.code
+      self.top.withdraw()
+      self.initializeTk(master)
+      Pmw.initialise(master)
+
+      self.dict_reels={}
+      self.liste_simp_reel=[]
+      # L'attribut test permet d'activer les panneaux de splash et d'erreur (test=0)
+      # Si test est different de 0, les panneaux ne sont pas activés
+      self.test=test
+
+      # Lecture des parametres de configuration (fichier global editeur.ini 
+      # et utilisateur eficas.ini)
+      self.lecture_parametres()
+
+      self.format_fichier = Tkinter.StringVar()
+      self.message=''
+      # Avant la creation du bureau qui lit le catalogue
+      self.version_code=session.d_env.cata
+
+      # Creation de la menubar, toolbar, messagebar
+      self.cree_composants_graphiques()
+      # Creation des autres composants graphiques dont le bureau (parametrable par prefs.py)
+      self.load_appli_composants()                
+      self.listeFichiers=listeFichiers.listeFichiers(self)
+      self.listePatrons=listePatronsTK.listePatronsTK(self)
+      self.dir=None
+
+      # Fermer le splash et deiconifier la fenetre principale si on n'est pas en test
+      if (self.test == 0):
+           splash.fini_splash()
+           #self.affiche_FAQ()
+
+      # Ouverture des fichiers de commandes donnes sur la ligne de commande
+      cwd=os.getcwd()
+      self.dir=cwd
+      for study in session.d_env.studies:
+          os.chdir(cwd)
+          d=session.get_unit(study,self)
+          self.bureau.openJDC(file=study["comm"],units=d)
+
+
+  def send_message(self,message):
+      self.message=message
+
+  def exitEFICAS(self):
+      self.quit()
+
+  def quit(self):
+      if self.top:
+        self.top.quit()
+
+  def lecture_parametres(self):
+      """
+          Active la lecture des paramètres standards et utilisateur
+      """
+      if (self.test == 0):
+         splash._splash.configure(text = "Chargement des paramètres utilisateur")
+      from Editeur import configuration
+      self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
+      self.CONFIGStyle = configuration.make_config_style(self,prefs.REPINI)
+
+  def cree_composants_graphiques(self):
+      """
+          Cree les constituants graphiques fixes de l'application :
+           - menubar
+           - toolbar
+           - statusbar
+      """
+      if (self.test == 0):
+         splash._splash.configure(text = "Chargement de l'IHM")
+         splash._splash.configure(text = "Chargement de la menubar")
+      import menubar
+      self.menubar=menubar.MENUBAR(self,self.top)
+      if (self.test == 0):
+         splash._splash.configure(text = "Chargement de la toolbar")
+      import toolbar
+      self.toolbar=toolbar.TOOLBAR(self,self.top)
+      if (self.test == 0):
+         splash._splash.configure(text = "Chargement de la statusbar")
+      import statusbar
+      self.statusbar=statusbar.STATUSBAR(self.top,styles.style.statusfont)
+
+  def load_appli_composants(self):
+      """
+          Cree les autres constituants graphiques de l'application :
+           - bureau 
+           - readercata
+           - ...
+          Cette creation est parametrable par fichier prefs.py
+      """
+      if (self.test == 0):
+         splash._splash.configure(text = "Chargement des appli_composants")
+      for mname in self.appli_composants:
+         self.load_appli_composant(mname)
+
+  def load_appli_composant(self,mname):
+      module=__import__(mname,globals(),locals())
+      factory=getattr(module,mname.upper())
+      appli_composant=factory(self,self.top)
+      setattr(self,mname,appli_composant)
+      self.fill_menus(appli_composant,appli_composant.menu_defs)
+      self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant)
+
+  def affiche_FAQ(self):
+      import faq
+      faq.affiche(self.top)
+
+  def affiche_infos(self,message):
+      self.statusbar.affiche_infos(message)
+      return
+
+  def  initializeTk(self, root):
+        """
+        Initialize platform specific options
+        """
+        if sys.platform == 'mac':
+            self.initializeTk_mac(root)
+        elif sys.platform == 'win32':
+            self.initializeTk_win32(root)
+        else:
+            self.initializeTk_unix(root)
+
+  def initializeTk_win32(self, root):
+        root.option_add('*Font', fontes.standard)
+        root.option_add('*EntryField.Entry.Font', fontes.standard)
+        root.option_add('*Listbox*Font',fontes.standard)
+
+  def initializeTk_colors_common(self, root):
+        root.option_add('*background', style.background)
+        root.option_add('*foreground', style.foreground)
+        root.option_add('*EntryField.Entry.background', style.entry_background)
+        root.option_add('*Entry*background', style.entry_background)
+        root.option_add('*Listbox*background', style.list_background)
+        root.option_add('*Listbox*selectBackground', style.list_select_background)
+        root.option_add('*Listbox*selectForeground', style.list_select_foreground)
+
+  def initializeTk_mac(self, root):
+        self.initializeTk_colors_common(root)
+
+  def initializeTk_unix(self, root):
+      root.option_add('*Font', fontes.standard)
+      root.option_add('*EntryField.Entry.Font',fontes.standard )
+      root.option_add('*Listbox*Font', fontes.standard)
+      self.initializeTk_colors_common(root)
+
+  def get_texte_infos(self):
+      """
+          Retourne un texte d'informations sur la session courante d'EFICAS
+      """
+      texte = VERSION + '\n\n'
+      texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n'
+      texte = texte + 'Equipe : SINETICS\n\n'
+      texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
+      return texte
+
+  def efface_aide(self,event):
+      """
+          Efface la bulle d'aide d'un panneau
+      """
+      try:
+          self.aide.destroy()
+      except:
+          pass
+      return
+
+  def affiche_aide(self,event,aide):
+      """
+          Affiche l'aide concernant un panneau
+      """
+      x=event.x
+      y=event.y
+      widget=event.widget
+      self.aide=tooltip.TOOLTIP(widget)
+      self.aide.xoffset = 10
+      self.aide.yoffset = - widget.winfo_height()/2
+      self.aide.setText(aide)
+      self.aide._showTip()
+      return 
+
+  def cree_menu(self,menu,itemlist,appli_composant):
+      """
+          Ajoute les items du tuple itemlist
+          dans le menu menu
+      """
+      number_item=0
+      radio=None
+      for item in itemlist:
+         number_item=number_item + 1
+         raccourci_label=""
+         if not item :
+            #menu.add_separator()
+            pass
+         else:
+            if len(item)==3:
+               raccourci=item[2]
+               raccourci_label="   "+raccourci
+               newitem=(item[0],item[1])
+            else :
+               if len(item)==4:
+                  raccourci=item[2]
+                  raccourci_label="   "+item[3]
+                  newitem=(item[0],item[1])
+               else :
+                  raccourci=""
+                  newitem=item
+            item=newitem
+            label,method=item
+            if type(method) == types.TupleType:
+               # On a un tuple => on cree une cascade
+               menu_cascade=Tkinter.Menu(menu)
+               menu.add_cascade(label=label,menu=menu_cascade)
+               self.cree_menu(menu_cascade,method,appli_composant)
+            elif method[0] == '&':
+               # On a une chaine avec & en tete => on cree un radiobouton
+               command=getattr(appli_composant,method[1:])
+               menu.add_radiobutton(label=label,command=command)
+               if radio == None:radio=number_item
+            else:
+               command=getattr(appli_composant,method)
+               menu.add_command(label=label,accelerator=raccourci_label,command=command)
+               if raccourci != "" :
+                  self.top.bind(raccourci,command)
+      # Si au moins un radiobouton existe on invoke le premier
+      if radio:menu.invoke(radio)
+
+  def fill_menus(self,appli_composant,defs):
+      menudict=self.menubar.menudict
+      for mname,itemlist in defs:
+          if mname in menudict.keys() : 
+             menu=menudict[mname]
+          else :
+             continue
+          self.cree_menu(menu,itemlist,appli_composant)
+
+  def update_jdc_courant(self):
+      self.bureau.update_jdc_courant()
+
+  def affiche_alerte(self,titre,message):
+      f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)
+      f.wait()
+
+
+class valeur:
+   def __init__(self,v=None):
+      self.v=v
+   def set(self,v):
+      self.v=v
+   def get(self):
+      return self.v
+
+class STANDALONE(APPLI):
+   def __init__ (self,code=prefs.code,fichier=None,version='v8.2',ihm="TK") :
+      self.ihm=ihm
+      self.salome=0
+      self.code=code
+      self.top=None
+      self.format_fichier=valeur()
+
+      self.dict_reels={}
+      self.liste_simp_reel=[]
+      # L'attribut test doit valoir 1 si on ne veut pas creer les fenetres
+      self.test=1
+      self.titre="STANDALONE POUR TEST"
+
+      # Lecture des parametres de configuration (fichier global editeur.ini
+      # et utilisateur eficas.ini)
+      self.lecture_parametres()
+
+      self.message=''
+      # Avant la creation du bureau qui lit le catalogue
+      self.version_code=version
+      import readercata
+      self.readercata=readercata.READERCATA(self,None)
+
+      self.dir=None
+
+   def affiche_infos(self,message):
+      return
+
+   def get_text_JDC(self,JDC,format):
+      if generator.plugins.has_key(format):
+         # Le generateur existe on l'utilise
+         g=generator.plugins[format]()
+         jdc_formate=g.gener(JDC,format='beautifie')
+         return jdc_formate
+      else:
+         # Il n'existe pas c'est une erreur
+         return
+
+   def newJDC(self):
+      CONTEXT.unset_current_step()
+      J=self.readercata.cata[0].JdC(procedure="",
+                                    appli=self,
+                                    cata=self.readercata.cata,
+                                    cata_ord_dico=self.readercata.cata_ordonne_dico,
+                                    rep_mat=self.CONFIGURATION.rep_mat,
+                                   )
+      J.analyse()
+      return J
+
+   def openJDC(self,file):
+      self.fileName = file
+      e=extension_fichier(file)
+      self.JDCName=stripPath(file)
+      self.initialdir = os.path.dirname(os.path.abspath(file))
+      format=self.format_fichier.get()
+      # 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('exec',self)
+         if not p.cr.estvide():
+             raise ValueError(str(p.cr))
+
+      # On se met dans le repertoire ou se trouve le fichier de commandes
+      # pour trouver les eventuels fichiers include ou autres
+      # localises a cote du fichier de commandes
+      os.chdir(self.initialdir)
+      CONTEXT.unset_current_step()
+      J=self.readercata.cata[0].JdC(procedure=text,
+                                    appli=self,
+                                    cata=self.readercata.cata,
+                                    cata_ord_dico=self.readercata.cata_ordonne_dico,
+                                    nom=self.JDCName,
+                                    rep_mat=self.CONFIGURATION.rep_mat,
+                                   )
+      J.analyse()
+      txt= J.cr.get_mess_exception()
+      if txt:raise ValueError(txt)
+      return J
+
+   def openTXT(self,text):
+      self.JDCName="TEXT"
+      CONTEXT.unset_current_step()
+      J=self.readercata.cata[0].JdC(procedure=text,
+                                    appli=self,
+                                    cata=self.readercata.cata,
+                                    cata_ord_dico=self.readercata.cata_ordonne_dico,
+                                    nom=self.JDCName,
+                                    rep_mat=self.CONFIGURATION.rep_mat,
+                                   )
+      J.analyse()
+      txt= J.cr.get_mess_exception()
+      if txt:raise ValueError(txt)
+      return J
+
+   def create_item(self,obj):
+      return comploader.make_objecttreeitem(self,getattr(obj,"nom","item"),obj)
+
+   def get_file(self,unite=None,fic_origine = ''):
+      """
+          Retourne le nom du fichier correspondant a l unite logique unite (entier)
+          ou d'un fichier poursuite
+      """
+      f,ext=os.path.splitext(fic_origine)
+      if unite :
+          #include
+          finclude=f+".%d" % unite
+      else:
+          #poursuite
+          n=ext[-1]
+          if n == '0':
+             ext=".comm"
+          else: 
+             ext=".com%d" % (string.atoi(n)-1)
+             if ext == '.com0' and not os.path.isfile(f+".com0"):
+                ext=".comm"
+          finclude=f+ext
+      ff=open(finclude)
+      text=ff.read()
+      ff.close()
+      return finclude,text
+
+   def affiche_alerte(self,titre,message):
+      print titre+ "\n\n" + message
diff --git a/InterfaceTK/basestyle.py b/InterfaceTK/basestyle.py
new file mode 100644 (file)
index 0000000..e4287b7
--- /dev/null
@@ -0,0 +1,27 @@
+class STYLE:
+    background='gray90'
+    foreground='black'
+    entry_background='white'
+    list_background='white'
+    list_select_background='#00008b'
+    list_select_foreground='grey'
+    tooltip_background="yellow"
+
+    standard = ("Helvetica",12)
+    standard_italique = ("Helvetica",12,'italic')
+    standard_gras = ("Helvetica",12,'bold')
+    standard_gras_souligne = ("Helvetica",12,'bold','underline')
+
+    canvas = ('Helvetica',10)
+    canvas_italique = ('Helvetica',10,'italic')
+    canvas_gras = ("Helvetica",10,'bold')
+    canvas_gras_italique = ("Helvetica",12,'bold','italic')
+
+    standard12 = ("Helvetica",14)
+    standard12_gras = ("Helvetica",14,'bold')
+    standard12_gras_italique = ( "Helvetica",14,'bold','italic')
+
+    standardcourier10 = ("Courier",14)
+    statusfont = ("Helvetica",16)
+
+style=STYLE()
diff --git a/InterfaceTK/browser.py b/InterfaceTK/browser.py
new file mode 100644 (file)
index 0000000..51c4e3a
--- /dev/null
@@ -0,0 +1,65 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+"""
+# Modules Python
+import os,string
+
+# Modules Eficas
+import Interp
+import catabrowser
+import cataediteur
+
+class BROWSER:
+
+   menu_defs=[
+              ('Browsers',[
+                           ('Browser catalogue','browser_catalogue'),
+                           ('Editeur catalogue','edite_catalogue'),
+                           ('Shell','shell'),
+                         ]
+              )
+             ]
+
+   button_defs=[]
+
+   def __init__(self,appli,parent):
+      self.appli=appli
+      self.parent=parent
+      self.cataitem = catabrowser.CATAItem(self,"Catalogue "+self.appli.readercata.code,
+                                           self.appli.readercata.cata,
+                                           objet_cata_ordonne = self.appli.readercata.cata_ordonne_dico)
+
+   def shell(self,event=None):
+      if not hasattr(self.appli.bureau.JDCDisplay_courant,'jdc'):return
+      d={'j':self.appli.bureau.JDCDisplay_courant.jdc}
+      Interp.InterpWindow(d,parent=self.parent)
+
+   def browser_catalogue(self,event=None):
+      catabrowser.CataBrowser(parent=self.parent,appli=self.appli,
+                                cata = self.appli.readercata.cata,
+                                item = self.cataitem)
+
+   def edite_catalogue(self,event=None):
+      cataediteur.CataEditeur(parent=self.parent,appli=self.appli,cata=self.appli.readercata.cata)
+
+
+
diff --git a/InterfaceTK/bureau.py b/InterfaceTK/bureau.py
new file mode 100644 (file)
index 0000000..5921a2d
--- /dev/null
@@ -0,0 +1,817 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+   Ce module contient la classe BUREAU qui gere les JDC ouverts
+"""
+# Modules Python
+import os,string,sys,re
+import traceback
+import Pmw
+from widgets import askopenfilename,asksaveasfilename
+from widgets import showinfo,askyesno,showerror
+
+# Modules Eficas
+import splash
+import prefs
+import convert
+import generator
+import AIDE
+import os
+from jdcdisplay import JDCDISPLAY
+from Editeur.utils import extension_fichier,stripPath,save_in_file
+from widgets import Fenetre,Ask_Format_Fichier,FenetreSurLigneWarning
+from fenetre_mc_inconnus import fenetre_mc_inconnus
+from Ihm import CONNECTOR
+try :
+   from Traducteur import traduitV7V8 
+except :
+   pass
+
+from Editeur import comploader
+
+dict_defext = {"ASTER":".comm","HOMARD":".py","OPENTURNS":".comm"}
+dict_filtyp = {"ASTER":(("ASTER", ".comm"),),"HOMARD":(("HOMARD", ".py"),),"OPENTURNS":(("OPENTURNS", ".comm"),)}
+
+class BUREAU:
+   menu_defs=[
+              ('Fichier',[
+                           ('Nouveau','newJDC','<Control-n>'),
+                           ('Ouvrir','openJDC','<Control-o>'),
+                           ('Enregistrer','saveJDC','<Control-e>'),
+                           ('Enregistrer sous','saveasJDC','<Control-s>'),
+                           None,
+                           ('Fermer','closeJDC','<Control-f>'),
+                           ('Quitter','exitEFICAS','<Control-q>'),
+                         ]
+              ),
+              ('Edition',[
+                           ('Copier','copy','<Control-c>'),
+                           ('Couper','cut','<Control-x>'),
+                           ('Coller','paste','<Control-v>'),
+                         ]
+              ),
+              ('Jeu de commandes',[
+                                   ('Rapport de validation','visuCRJDC','<Control-r>'),
+                                   ('Fichier a plat','visu_a_plat','<Control-p>'),
+                                   ('Fichier .py','visuJDC_py'),
+                                   ('Fichier source','visu_txt_brut_JDC','<Control-b>'),
+                                   ('Parametres Eficas','affichage_fichier_ini'),
+                                   ('Mots-cles inconnus','mc_inconnus'),
+                                  ]
+              ),
+              ('Traduction',[
+                             ('Traduction v7 en v8','TraduitFichier','<Control-t>','Ctrl+T')
+                            ]
+              ),
+              ('Aide',[
+                        ('Aide EFICAS','aideEFICAS','<Control-a>','Ctrl+A'),
+                      ]
+              ),
+             ]
+
+   button_defs  =      (('New24',"newJDC","Creation d'un nouveau fichier",'always'),
+                        ('Open24',"openJDC","Ouverture d'un fichier existant",'always'),
+                        ('Save24',"saveJDC","Sauvegarde du fichier courant",'always'),
+                        ('Fermer24',"closeJDC","Fermeture du fichier courant",'always'),
+                        ('Zoom24',"visuJDC","Visualisation du fichier de commandes",'always'),
+                        None,
+                        ('Copy24',"copy","Copie l'objet courant",'jdc'),
+                        ('Cut24',"cut","Coupe l'objet courant",'jdc'),
+                        ('Paste24',"paste","Colle l'objet copie apres l'objet courant",'jdc'),
+                        None,
+                        ('Delete24',"delete","Supprime l'objet courant",'jdc'),
+                        ('Help24',"view_doc","Documentation de l'objet courant",'jdc')
+                       )
+   try:
+      menu_defs=prefs.menu_defs['bureau']
+   except:
+      pass
+   try:
+      button_defs=prefs.button_defs['bureau']
+   except:
+      pass
+
+   def __init__(self,appli,parent):
+      self.parent=parent
+      self.appli=appli
+      if self.appli.test == 0 :
+         splash._splash.configure(text = "Creation du bureau")
+      self.nb = Pmw.NoteBook(self.parent,raisecommand=self.selectJDC)
+      self.nb.pack(fill='both',expand=1)
+      self.JDCDisplay_courant=None
+      self.fileName=None
+      self.liste_JDCDisplay=[]
+      self.charger_composants()
+      self.cree_cataitem()
+      self.text_reel=""
+      self.initialdir = self.appli.CONFIGURATION.initialdir
+
+   def charger_composants(self):
+      comploader.charger_composants()
+
+   def cree_cataitem(self):
+      """
+          On recupere dans l'appli_composant readercata les variables 
+          qui servent par la suite pour la creation des JDC
+      """
+      self.cataitem=self.appli.readercata.cataitem
+      self.cata=self.appli.readercata.cata
+      self.cata_ordonne_dico=self.appli.readercata.cata_ordonne_dico
+      self.code=self.appli.readercata.code
+      self.version_code=self.appli.readercata.version_code
+      self.fic_cata=self.appli.readercata.fic_cata
+
+   def selectJDC(self,event=None):
+      """
+          Cette methode est appelee chaque fois que l'on selectionne 
+          l'onglet d'un JDC dans le NoteBook des JDC.
+          Elle permet de stocker dans les variable self.JDC et 
+          self.JDCDisplay_courant les valeurs concernant le JDC courant
+      """
+      if len(self.liste_JDCDisplay) == 0 : return
+      #if self.JDCDisplay_courant : self.JDCDisplay_courant.jdc.unset_context()
+      numero_jdc = self.nb.index(self.nb.getcurselection())
+      self.JDCDisplay_courant.unselect()
+      self.JDCDisplay_courant = self.liste_JDCDisplay[numero_jdc]
+      self.JDC = self.JDCDisplay_courant.jdc
+      self.JDCName = self.JDC.nom
+      self.JDCDisplay_courant.select()
+      #print "selectJDC",numero_jdc,self.JDCDisplay_courant,self.JDCName
+
+
+   def newJDC_include(self,event=None):
+      """
+          Initialise un nouveau JDC include vierge
+      """
+      import Extensions.jdc_include
+      JdC_aux=Extensions.jdc_include.JdC_include
+
+      self.appli.statusbar.reset_affichage_infos()
+
+      CONTEXT.unset_current_step()
+      jaux=self.cata[0].JdC(procedure="",appli=self.appli,
+                         cata=self.cata,cata_ord_dico=self.cata_ordonne_dico,
+                         rep_mat=self.appli.CONFIGURATION.rep_mat,
+                         )
+      jaux.analyse()
+
+      J=JdC_aux(procedure="",appli=self.appli,
+                         cata=self.cata,cata_ord_dico=self.cata_ordonne_dico,
+                         jdc_pere=jaux,
+                         rep_mat=self.appli.CONFIGURATION.rep_mat,
+                         )
+      J.analyse()
+      self.JDCName=J.nom
+      self.fileName=None
+      self.ShowJDC(J,self.JDCName)
+      self.appli.toolbar.active_boutons()
+      return J
+
+   def newJDC(self,event=None):
+      """
+          Initialise un nouveau JDC vierge
+      """
+      self.appli.statusbar.reset_affichage_infos()
+
+      CONTEXT.unset_current_step()
+      J=self.cata[0].JdC(procedure="",appli=self.appli,
+                         cata=self.cata,cata_ord_dico=self.cata_ordonne_dico,
+                         rep_mat=self.appli.CONFIGURATION.rep_mat,
+                         )
+      J.analyse()
+      self.JDCName=J.nom
+      self.fileName=None
+      self.ShowJDC(J,self.JDCName)
+      self.appli.toolbar.active_boutons()
+      return J
+
+   def ShowJDC(self,JDC,nom,label_onglet=None,JDCDISPLAY=JDCDISPLAY,enregistre="non"):
+      """
+          Lance l'affichage du JDC cad creation du JDCDisplay
+          Rajoute le JDCDisplay a la liste des JDCDisplay si label_onglet == None cad si on cree
+          bien un nouveau JDCDisplay et non si on remplace (renommage de l'onglet)
+      """
+      self.JDC=JDC
+      self.JDCName = self.JDC.nom = nom
+      if label_onglet == None :
+          # On veut un nouvel onglet
+          label_onglet = self.GetLabelJDC()
+          self.nb.add(label_onglet,tab_text = nom,tab_width=20)
+          new = 'oui'
+      else :
+          new = 'non'
+      self.JDCDisplay_courant=JDCDISPLAY(self.JDC,nom,appli=self.appli,parent=self.nb.page(label_onglet))
+      if new == 'oui':
+          self.liste_JDCDisplay.append(self.JDCDisplay_courant)
+      self.JDCDisplay_courant.modified='n'
+      if enregistre != "non" :
+         self.JDCDisplay_courant.fichier=self.fileName
+      else :
+         self.initialdir = self.appli.CONFIGURATION.rep_user
+      self.nb.selectpage(label_onglet)
+      self.nb.setnaturalsize()
+      self.nb.bind_all("<Key-Next>",lambda e,s=self:s.selectArbreDown())
+      self.nb.bind_all("<Key-Prior>",lambda e,s=self:s.selectArbreUp())
+      self.nb.bind_all("<Insert>",lambda e,s=self:s.deplieReplieNode())
+      texte = "Jeu de commandes :" + self.JDCName+" ouvert"
+      CONNECTOR.Connect(JDC,"close",self.onClose,(self.JDCDisplay_courant,))
+      self.appli.affiche_infos(texte)
+
+   def onClose(self,jdcdisplay):
+      #print "onClose",jdcdisplay
+      self.closeJDCDISPLAY(jdcdisplay)
+
+   def closeJDCDISPLAY(self,jdc):
+      """
+        Ferme le jdcdisplay specifie par l'argument jdc
+      """
+      if jdc is self.JDCDisplay_courant:
+         # on ferme le jdcdisplay courant
+         self.closeSelectedJDC()
+      else:
+         # on ferme un autre jdcdisplay que le courant
+         old_JDCDisplay=self.JDCDisplay_courant
+         old_page=self.nb.getcurselection()
+
+         self.JDCDisplay_courant=jdc
+         self.JDC=jdc.jdc
+         numero_jdc=self.liste_JDCDisplay.index(jdc)
+         self.nb.selectpage(numero_jdc)
+         #print numero_jdc
+      
+         self.closeSelectedJDC()
+         self.JDCDisplay_courant=old_JDCDisplay
+         self.JDC=old_JDCDisplay.jdc
+         self.nb.selectpage(old_page)
+
+   def closeJDC (self,event=None) :
+      """
+          Ferme le JDC associe au JDCDISPLAY selectionne
+      """
+      if self.JDCDisplay_courant :
+         self.JDCDisplay_courant.jdc.close()
+
+   def closeSelectedJDC (self) :
+      """
+      Ferme le JDC courant et detruit l'onglet associe dans le notebook self.nb
+      """
+      if self.JDCDisplay_courant.modified == 'o' :
+          message = "Voulez-vous sauvegarder le jeu de commandes "+self.JDC.nom+" courant ?"
+          reponse = askyesno(title="Sauvegarde du jdc courant",
+                             message=message)
+          if reponse :
+              test = self.saveJDC()
+              if test == 0 :
+                  self.appli.affiche_infos("Sauvegarde impossible")
+                  return
+
+      CONNECTOR.Disconnect(self.JDCDisplay_courant.jdc,"close",self.onClose,(self.JDCDisplay_courant,))
+      self.JDCDisplay_courant.supprime()
+      self.JDCDisplay_courant.jdc.supprime()
+      self.liste_JDCDisplay.remove(self.JDCDisplay_courant)
+      # Active le mecanisme de selection du notebook (selectJDC)
+      self.nb.delete(self.nb.getcurselection())
+
+      try:
+          index = self.nb.index(self.nb.getcurselection())
+          self.JDCDisplay_courant = self.liste_JDCDisplay[index]
+          self.JDC = self.JDCDisplay_courant.jdc
+      except:
+          self.JDC = None
+          self.JDCDisplay_courant = None
+          self.appli.toolbar.inactive_boutons()
+
+   def visuCRJDC(self,event=None):
+      return self.visuCR(mode='JDC')
+
+   def visuCR(self,mode):
+      """
+      Methode permettant l'affichage du rapport de validation
+      """
+      if mode == 'JDC':
+          if not hasattr(self,'JDC') : return
+          if self.JDC == None : return
+          titre="rapport de validation du jeu de commandes courant"
+          cr = self.JDC.report()
+          #self.update_jdc_courant()
+      elif mode == 'CATA':
+          from Noyau.N_CR import CR
+          cr = CR()
+          cr.debut = "Debut rapport de validation du catalogue"
+          cr.fin = "Fin rapport de validation du catalogue"
+          titre="rapport de validation du catalogue"
+          if hasattr(self,'cata_ordonne_cr') :
+              cr.add(self.cata_ordonne_cr)
+          if hasattr(self,'cata_dev_ordonne_cr') :
+              cr.add(self.cata_dev_ordonne_cr)
+          for cata in self.cata:
+              if hasattr(cata,'JdC'):
+                  cr.add(cata.JdC.report())
+      texte_cr = str(cr)
+      self.visu_texte_cr = Fenetre(self.appli,titre=titre,texte=texte_cr)
+
+   def openJDC(self,event=None,file=None,units=None,enregistre="oui"):
+      """
+          Demande a l'utilisateur quel JDC existant il veut ouvrir
+      """
+      if self.code == 'ASTER':
+          filetypes = ( ("format "+self.appli.format_fichier.get(), ".com*"),("Tous",'*'))
+      elif self.code == 'HOMARD' :
+          filetypes = ( ("format "+self.appli.format_fichier.get(), ".py"),("Tous",'*'))
+      elif self.code == 'OPENTURNS' :
+          filetypes = ( ("format "+self.appli.format_fichier.get(), ".com*"),("Tous",'*'))
+      else:
+          filetypes = ( ("format "+self.appli.format_fichier.get(), ".py"),)
+      if not hasattr(self,'initialdir'):
+         self.initialdir = self.appli.CONFIGURATION.initialdir
+
+      if not file :
+          file = askopenfilename(title="Ouverture d'un fichier de commandes Aster",
+                                 defaultextension=".comm",
+                                 filetypes = filetypes,
+                                 initialdir = self.initialdir)
+      if file :
+          self.fileName = file
+          e=extension_fichier(file)
+          self.JDCName=stripPath(file)
+          self.initialdir = os.path.dirname(os.path.abspath(file))
+      else :
+          return
+
+      # Il faut convertir le contenu du fichier en fonction du format
+      format=self.appli.format_fichier.get()
+      if convert.plugins.has_key(format):
+         # Le convertisseur existe on l'utilise
+         p=convert.plugins[format]()
+         p.readfile(file)
+         text=p.convert('exec',self.appli)
+         if not p.cr.estvide(): 
+            self.appli.affiche_infos("Erreur a la conversion")
+            Fenetre(self.appli,
+                    titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier",
+                    texte = str(p.cr)).wait()
+            return
+         if enregistre == "oui" :
+            self.appli.listeFichiers.aOuvert(file)
+      else:
+         # Il n'existe pas c'est une erreur
+         self.appli.affiche_infos("Type de fichier non reconnu")
+         showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")
+         return
+
+      # On se met dans le repertoire ou se trouve le fichier de commandes
+      # pour trouver les eventuels fichiers include ou autres
+      # localises a cote du fichier de commandes
+      os.chdir(self.initialdir)
+      CONTEXT.unset_current_step()
+      J=self.cata[0].JdC(procedure=text,appli=self.appli,
+                         cata=self.cata,cata_ord_dico=self.cata_ordonne_dico,
+                         nom = self.JDCName,
+                         rep_mat=self.appli.CONFIGURATION.rep_mat,
+                         )
+      if units is not None:
+         J.recorded_units=units
+         J.old_recorded_units=units
+
+      J.analyse()
+      txt_exception = J.cr.get_mess_exception()
+      if txt_exception :
+          # des exceptions ont ete levees a la creation du JDC 
+          # --> on affiche les erreurs mais pas le JDC
+          self.JDC=J
+          self.appli.affiche_infos("Erreur fatale au chargement de %s" %file)
+          if self.appli.test == 0 :
+             showerror("Erreur fatale au chargement d'un fichier",txt_exception)
+      else:
+          self.ShowJDC(J,self.JDCName,enregistre=enregistre)
+          self.appli.toolbar.active_boutons()
+          # si le JDC ne contient rien (vide), on retourne ici
+          if len(self.JDC.etapes) == 0 : return
+          # dans le cas ou le JDC est invalide, on affiche son CR
+          if not self.JDC.isvalid():
+             self.appli.top.update()
+             self.visuCR(mode='JDC')
+      return J
+
+   def deplieReplieNode(self):
+       self.JDCDisplay_courant.tree.tree.deplieReplieNode()
+
+   def selectArbreDown(self):
+       self.JDCDisplay_courant.tree.tree.canvas.focus_set()
+       self.JDCDisplay_courant.tree.tree.mot_down_force()
+
+   def selectArbreUp(self):
+       self.JDCDisplay_courant.tree.tree.canvas.focus_set()
+       self.JDCDisplay_courant.tree.tree.mot_up_force()
+
+   def GetLabelJDC(self,nb_jdc = 'absent'):
+      """
+      Retourne le label de l'onglet du NoteBook associe au JDC a afficher
+      """
+      if nb_jdc == 'absent':
+          nb_jdc = len(self.nb.pagenames())
+      nb_jdc = nb_jdc+1
+      label_onglet = 'JDC'+`nb_jdc`
+      if label_onglet not in self.nb.pagenames() :
+          return label_onglet
+      else :
+          return self.GetLabelJDC(nb_jdc)
+
+   def saveasJDC(self,event=None):
+      """ 
+           Sauvegarde le JDC courant en demandant imperativement a l'utilisateur de
+           donner le nom du fichier de sauvegarde 
+      """
+      self.saveJDC(echo='oui')
+
+   def saveJDC(self,echo='non'):
+      """ 
+          Sauvegarde le JDC courant.
+          Retourne 1 si la sauvegarde s'est bien faite, 0 sinon.
+
+            - Si echo = 'oui' : interactif (l'utilisateur donne le nom sous lequel il 
+                            veut sauver le JDC
+            - Si echo = 'non' : muet (sauvegarde le JDC dans JDC.procedure)
+      """
+      ok = 0
+      if not hasattr(self,'JDC') : return 0
+      format=self.appli.format_fichier.get()
+      if generator.plugins.has_key(format):
+         # Le generateur existe on l'utilise
+         g=generator.plugins[format]()
+         jdc_formate=g.gener(self.JDC,format='beautifie')
+         if format == 'homard':
+            self.jdc_homard=g.get_homard()
+        elif format == 'openturns' :
+           self.jdc_openturn_xml=g.getOpenturnsXML()
+           self.jdc_openturn_std=g.getOpenturnsSTD()
+         if not g.cr.estvide():
+            self.appli.affiche_infos("Erreur a la generation")
+            showerror("Erreur a la generation","EFICAS ne sait pas convertir ce JDC")
+            return
+      else:
+         # Il n'existe pas c'est une erreur
+         self.appli.affiche_infos("Format %s non reconnu" % format)
+         showerror("Format %s non reconnu" % format,"EFICAS ne sait pas convertir le JDC")
+         return
+      self.jdc_fini = string.replace(jdc_formate,'\r\n','\n')
+
+      if echo =='oui' or self.JDCDisplay_courant.fichier == None:
+         ok = self.asknomsauvegardeJDC()
+      elif self.JDCDisplay_courant.fichier != None :
+         # le JDC a deja un nom : on sauvegarde directement sans demander
+         # un autre nom au developpeur
+         if not save_in_file(self.JDCDisplay_courant.fichier,self.jdc_fini,self.appli.dir) :
+              showinfo("Erreur","Probleme a la sauvegarde du fichier :" + `self.JDCDisplay_courant.fichier`)
+              #return 0
+              ok = 0
+         else :
+              if self.appli.format_fichier.get() == 'homard':
+                  self.save_homard(self.JDCDisplay_courant.fichier,self.jdc_homard)
+              elif self.appli.format_fichier.get() == 'openturns':
+                 self.save_openturns(self.JDCDisplay_courant.fichier[0:-3],
+                 self.jdc_openturn_xml,
+                 self.jdc_openturn_std)
+              self.JDCDisplay_courant.stop_modif()
+              self.appli.affiche_infos("sauvegarde de "+`self.JDCDisplay_courant.fichier`+" effectuee")
+              ok = 1
+
+      if ok and self.appli.salome:
+         # eficas a ete lance a partir deSalome
+         #1)ajout dans l'arbre d'etude du nom du jdc
+         if self.appli.salome==0 : return 0
+         ok, msg = self.appli.addJdcInSalome( self.JDCDisplay_courant.fichier )
+
+         #2)CS_pbruno ??
+         from panelsSalome import SALOME_UNIQUE_BASE_Panel
+         if len(SALOME_UNIQUE_BASE_Panel.dict_fichier_unite) > 0 :
+            print 'CS_pbruno if len(SALOMchier_unite) > 0 :???????'
+            self.appli.creeConfigTxt( self.appli.CONFIGURATION.initialdir, SALOME_UNIQUE_BASE_Panel.dict_fichier_unite )
+
+         #3)creation/mise a jours d'un maillage dans Salome
+        if self.code == 'ASTER':
+            self.appli.createOrUpdateMesh()
+      return ok
+
+   def asknomsauvegardeJDC(self):
+      """ Demande a l'utilsateur le nom sous lequel il veut sauvegarder le JDC courant """
+      titre = "Sauvegarde d'un fichier de commandes "+self.code
+      if dict_defext.has_key(self.code) :
+         defext = dict_defext[self.code]
+         filtyp = dict_filtyp[self.code]
+      else :
+         defext = ".py"
+         filtyp = ( (self.code, ".py"),)
+      sauvegarde = asksaveasfilename(title=titre,
+                                     defaultextension=defext,
+                                     filetypes = filtyp,
+                                     initialdir = self.initialdir)
+                            #initialdir = self.appli.CONFIGURATION.initialdir)
+                            #initialdir = self.appli.CONFIGURATION.rep_user)
+      if sauvegarde :
+          if not save_in_file(sauvegarde,self.jdc_fini,None) :
+              showinfo("Erreur","Probleme a la sauvegarde du fichier "+`sauvegarde`)
+              return 0
+          else :
+              if self.appli.format_fichier.get() == 'homard':
+                  self.save_homard(sauvegarde,self.jdc_homard)
+              elif self.appli.format_fichier.get() == 'openturns':
+                  self.save_openturns(sauvegarde,
+                                      self.jdc_openturn_xml,
+                                      self.jdc_openturn_std)
+              self.JDCDisplay_courant.stop_modif()
+              self.appli.affiche_infos("Sauvegarde effectuee")
+              if sauvegarde != self.JDCDisplay_courant.fichier :
+                  # l'utilisateur a sauvegarde le JDC sous un autre nom
+                  self.JDCDisplay_courant.fichier = sauvegarde
+                  self.JDCName = self.JDC.nom = stripPath(sauvegarde)
+                  self.JDC.changefichier(sauvegarde)
+                  self.changeNomPage()
+              return 1
+      else :
+          return 0
+
+   def changeNomPage(self):
+      """ Change le nom de l'onglet contenant le JDC courant : en fait detruit l'actuel
+          et recree un autre onglet a la même place avec le bon nom 
+      """
+      nom = self.JDCName
+      self.JDCDisplay_courant.jdc.nom = nom
+      nom_page = self.nb.getcurselection()
+      num_page = self.nb.index(nom_page)
+      tab = self.nb.tab(num_page)
+      tab.configure(text = nom)
+
+   def exitEFICAS(self,event=None):
+      """
+          Permet de sortir d'EFICAS en demandant a l'utilisateur
+          s'il veut sauvegarder les modifications en cours
+      """
+      liste = self.GetListeJDCaSauvegarder()
+      if liste != [] :
+          # Certains fichiers n'ont pas ete sauvegardes ...
+          if askyesno("Enregistrer modifications","Enregistrer les modifications ?") :
+              test = self.saveall(liste)
+              if test != 1 :
+                  return
+      if askyesno ("Quitter","Voulez-vous vraiment quitter l'application ?") :
+          for JDCDisplay in self.liste_JDCDisplay:
+              JDCDisplay.jdc.supprime()
+          self.appli.quit()
+          return
+
+   def GetListeJDCaSauvegarder(self) :
+      """ Retourne parmi la liste de tous les JDC ouverts la liste de ceux qui ont ete modifies """
+      if not self.JDCDisplay_courant : return []
+      if len(self.liste_JDCDisplay) == 0 : return l
+      l = []
+      for JDCDisplay in self.liste_JDCDisplay:
+          if JDCDisplay.modified == 'o' :
+              l.append(JDCDisplay)
+      return l
+
+   def copy(self,event=None):
+      """
+          Lance la copie sur le JDC courant
+      """
+      if self.JDCDisplay_courant : self.JDCDisplay_courant.doCopy()
+
+   def paste(self,event=None):
+      """
+           Lance le collage sur le JDC courant
+      """
+      if self.JDCDisplay_courant : self.JDCDisplay_courant.doPaste()
+
+   def cut(self,event=None):
+      """
+         Lance le cut sur le JDC courant
+      """
+      if self.JDCDisplay_courant: self.JDCDisplay_courant.doCut()
+
+   def delete(self):
+      """
+          Lance la suppression du noeud courant
+      """
+      if not self.JDCDisplay_courant : return
+      self.JDCDisplay_courant.init_modif()
+      self.JDCDisplay_courant.node_selected.delete()
+
+   def visuJDC_py(self,event=None):
+      """ 
+          Methode permettant d'afficher dans une fenêtre a part l'echo au 
+          format python du jdc courant 
+      """
+      if not hasattr(self,'JDC') : return
+      jdc_fini = self.get_text_JDC('python')
+      if jdc_fini == None : return
+      Fenetre(self.appli,
+              titre = 'fichier '+ self.JDCName + ' a la syntaxe Python',
+              texte = jdc_fini)
+
+   def visuJDC(self):
+      """ 
+          Methode permettant d'afficher dans une fenêtre a part l'echo au 
+          format .comm ou .py du jdc courant 
+      """
+      if not hasattr(self,'JDC') : return
+      titre = 'fichier '+ self.JDCName + ' a la syntaxe '+ self.code
+      format=self.appli.format_fichier.get()
+      self.jdc_fini = self.get_text_JDC(format)
+      if self.jdc_fini == None : return
+      self.visu_fichier_cmd = Fenetre(self.appli,titre=titre,texte = self.jdc_fini)
+
+   def get_text_JDC(self,format):
+      if generator.plugins.has_key(format):
+         # Le generateur existe on l'utilise
+         g=generator.plugins[format]()
+         jdc_formate=g.gener(self.JDC,format='beautifie')
+         if not g.cr.estvide():
+            self.appli.affiche_infos("Erreur a la generation")
+            showerror("Erreur a la generation","EFICAS ne sait pas convertir ce JDC")
+            return
+         else:
+            return jdc_formate
+      else:
+         # Il n'existe pas c'est une erreur
+         self.appli.affiche_infos("Format %s non reconnu" % format)
+         showerror("Format %s non reconnu" % format,"EFICAS ne sait pas convertir le JDC en format %s "% format)
+         return
+
+   def view_doc(self):
+      """
+          Permet d'ouvrir le fichier doc U de la commande au format pdf avec Acrobat Reader
+          - Ne fonctionne pas sous UNIX (chemin d'acces Acrobat Reader)
+          - indication du chemin d'acces aux fichiers pdf a revoir : trop statique
+      """
+      if not self.JDCDisplay_courant : return
+      try:
+          cle_doc = self.JDCDisplay_courant.node_selected.item.get_docu()
+          if cle_doc == None : return
+          cle_doc = string.replace(cle_doc,'.','')
+          cle_doc = string.replace(cle_doc,'-','')
+          commande = self.appli.CONFIGURATION.exec_acrobat
+          nom_fichier = cle_doc+".pdf"
+          fichier = os.path.abspath(os.path.join(self.appli.CONFIGURATION.path_doc,nom_fichier))
+          if os.name == 'nt':
+              os.spawnv(os.P_NOWAIT,commande,(commande,fichier,))
+          elif os.name == 'posix':
+              script ="#!/usr/bin/sh \n%s %s&" %(commande,fichier)
+              pid = os.system(script)
+      except AttributeError:
+          traceback.print_exc()
+          pass
+
+   def visu_a_plat(self,event=None):
+      """ 
+          Methode permettant d'afficher dans une fenêtre a part l'echo 'a plat' du jdc courant 
+      """
+      if not hasattr(self,'JDC') : return
+      titre = 'fichier '+ self.JDCName + ' a plat '
+      self.jdc_fini = self.get_text_JDC('aplat')
+      if self.jdc_fini == None : return
+      self.visu_fichier_cmd = Fenetre(self.appli,titre=titre,texte = self.jdc_fini)
+
+   def visu_txt_brut_JDC(self,event=None):
+      """
+           Methode permettant d'afficher le jeu de commandes tel qu'il a ete passe au JDC
+      """
+      if not hasattr(self,'JDC') : return
+      titre = "fichier de commandes utilisateur"
+      #texte = self.JDC.procedure
+      #if texte == None:
+      if self.JDCDisplay_courant.fichier == None:
+            self.appli.affiche_infos("Pas de fichier initial")
+            showerror("Impossible de visualiser le fichier initial",
+                      "EFICAS ne peut visualiser le fichier initial.\nIl s'agit d'un nouveau JDC")
+            return
+      os.chdir(self.appli.dir)
+      f=open(self.JDCDisplay_courant.fichier,'r')
+      texte=f.read()
+      f.close()
+      self.visu_texte_JDC = Fenetre(self.appli,titre=titre,texte=texte)
+
+   def affichage_fichier_ini(self):
+      """
+           Affichage des valeurs des parametres relus par Eficas
+      """
+      self.appli.CONFIGURATION.affichage_fichier_ini()
+
+   def saveall(self,liste):
+      """ 
+           Sauvegarde tous les JDC contenus dans liste 
+      """
+      test = 1
+      for JDCDisplay in liste :
+          self.JDCDisplay_courant=JDCDisplay
+          self.JDC = JDCDisplay.jdc
+          test = test * self.saveJDC(echo = 'non')
+      return test
+
+   def save_homard(self,nom,texte):
+       file_homard=nom+'.conf_homard'
+       try:
+           f=open(file_homard,'w')
+           for ligne in texte:
+               f.write(ligne)
+               f.write('\n')
+           f.close()
+       except:
+           print "Pb a la sauvegarde sous le format homard"
+       if self.appli.salome:
+           import eficasEtude
+           self.appli.salome.rangeInStudy(file_homard,"_CONF")
+
+   def save_openturns(self,nom,texteXML,texteSTD):
+       nomSansSuf=nom[:nom.rfind(".")]
+       fileXML=nomSansSuf + '.xml'
+       fileSTD=nomSansSuf + '_Std.py'
+       try:
+           f=open(fileXML,'w')
+           f.write(texteXML)
+           f.close()
+       except:
+           print "Pb sauvegarde openturns pour le format xml"
+       try:
+           #print texteSTD
+           if nomSansSuf.rfind("/") > 0 :
+              nomSansSuf=nomSansSuf[nomSansSuf.rfind("/")+1:]
+           texteSTD=re.sub('XXXXXX',nomSansSuf,texteSTD)
+           #print texteSTD
+           f=open(fileSTD,'w')
+           f.write(texteSTD)
+           f.close()
+       except:
+           print "Pb sauvegarde openturns pour le format STD"
+       if self.appli.salome == 1:
+           ok, msg = self.appli.addJdcInSalome( fileSTD )
+           ok, msg = self.appli.addJdcInSalome( fileXML )
+
+# ---------------------------------------------------------------------------
+#                             Methodes liees aux mots-cles inconnus
+# ---------------------------------------------------------------------------
+
+   def mc_inconnus(self):
+      l_mc = self.JDCDisplay_courant.jdc.get_liste_mc_inconnus()
+      o = fenetre_mc_inconnus(l_mc)
+      l = o.wait_new_list()
+      #print "mc_inconnus_new_list: ",l
+      #CCAR: Il n' y a pas de retour vers le JDC
+
+   def aideEFICAS(self,event=None):
+      AIDE.go(master=self.parent)
+
+   def update_jdc_courant(self):
+      self.JDCDisplay_courant.update()
+
+   def TraduitFichier(self,event=None):
+      directory = self.appli.CONFIGURATION.rep_user
+      FichieraTraduire = askopenfilename(title="Nom du  Fichier a Traduire",
+                                 defaultextension=".comm",
+                                 initialdir = directory 
+                                 )
+      if (FichieraTraduire == "" or FichieraTraduire == () ) : return
+      i=FichieraTraduire.rfind(".")
+      Feuille=FichieraTraduire[0:i]
+      FichierTraduit=Feuille+"v8.comm"
+      log=self.initialdir+"/convert.log"
+      os.system("rm -rf "+log)
+      os.system("rm -rf "+FichierTraduit)
+      Pmw.showbusycursor()
+      traduitV7V8.traduc(FichieraTraduire,FichierTraduit,log)
+      Pmw.hidebusycursor()
+      Entete="Fichier Traduit : "+FichierTraduit +"\n\n"
+      titre = "conversion de "+ FichieraTraduire
+
+      if  os.stat(log)[6] != 0L :
+          f=open(log)
+          texte_cr= f.read()
+          f.close()
+      else :
+          texte_cr = Entete  
+          commande="diff "+FichieraTraduire+" "+FichierTraduit+" >/dev/null"
+          try :
+            if os.system(commande) == 0 :
+               texte_cr = texte_cr + "Pas de difference entre le fichier V7 et le fichier traduit"
+          except :
+               pass
+
+      cptrendu = FenetreSurLigneWarning(self.appli,titre=titre,texte=texte_cr)
+
diff --git a/InterfaceTK/catabrowser.py b/InterfaceTK/catabrowser.py
new file mode 100644 (file)
index 0000000..7ce303e
--- /dev/null
@@ -0,0 +1,398 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import os
+import sys
+import types
+import string
+import Pmw
+from Tkinter import *
+
+# Modules Eficas
+import fontes
+from treewidget import Tree
+from Editeur.Objecttreeitem import TreeItem
+from Accas import AsException
+from Noyau.N_CR import justify_text
+from Accas import OPER,PROC,MACRO,FORM
+from Accas import FACT,BLOC,SIMP
+
+#
+__version__="$Name: V1_14 $"
+__Id__="$Id: catabrowser.py,v 1.1.4.3.4.1 2008-10-10 13:46:35 pnoyret Exp $"
+#
+class Tableau:
+  incr = 10
+  def __init__(self,parent,colonnes):
+    self.parent = parent
+    self.colonnes = colonnes
+    self.init()
+
+  def init(self):
+    # recherche du nombre maxi de lignes et de colonnes....
+    for col in self.colonnes :
+      nb_l = 0
+      if len(col) > nb_l : nb_l = len(col)
+    self.nb_lignes = nb_l
+    self.nb_colonnes = len(self.colonnes)
+    # initialisation des coordonnées dans le canvas
+    self.x0 = self.incr
+    self.y0 = self.incr
+    self.x = self.x0 + self.incr
+    self.y = self.y0 + self.incr
+
+  def affiche(self):    
+    self.scrolledcanvas=Pmw.ScrolledCanvas(self.parent,
+                                           hull_width=1.,
+                                           hull_height=1.,
+                                           borderframe=1)
+    Pmw.Color.changecolor(self.scrolledcanvas.component('canvas'),background='gray95')
+    self.scrolledcanvas.pack(padx=10,pady=10,expand=1, fill="both")
+    self.canvas = self.scrolledcanvas.component('canvas')
+    self.affiche_colonnes()
+
+  def affiche_colonnes(self):
+    for i in range(self.nb_lignes):
+      self.affiche_ligne(i)
+    self.aligne_colonnes()
+    self.trace_traits()
+    self.scrolledcanvas.resizescrollregion()
+
+  def get_xy_max(self):
+    try:
+      x0,y0,xmax,ymax = self.canvas.bbox(ALL)
+      return xmax,ymax
+    except:
+      return None,None
+    
+  def trace_traits(self):
+    xmax,ymax = self.get_xy_max()
+    if not xmax : return
+    xmax = xmax+self.incr
+    ymax = ymax+self.incr
+    # trace les traits horizontaux
+    for i in range(self.nb_lignes):
+      tag_lig = 'ligne_'+`i`
+      l_id = self.canvas.find_withtag(tag_lig)
+      x0,y0,x1,y1 = self.bbox(l_id)
+      self.canvas.create_line(x0-self.incr,y0-self.incr,xmax,y0-self.incr)
+    self.canvas.create_line(self.x0,ymax,xmax,ymax)  
+    # trace les traits verticaux
+    for j in range(self.nb_colonnes):
+      tag_col = 'colonne_'+`j`
+      l_id = self.canvas.find_withtag(tag_col)
+      x0,y0,x1,y1 = self.bbox(l_id)
+      self.canvas.create_line(x0-self.incr,y0-self.incr,x0-self.incr,ymax)
+    self.canvas.create_line(xmax,self.y0,xmax,ymax)
+    
+  def bbox(self,l_id):
+    x0,y0,x1,y1 = self.canvas.bbox(l_id[0])
+    for id in l_id[1:]:
+      x2,y2,x3,y3 = self.canvas.bbox(id)
+      x0 = min(x2,x0)
+      y0 = min(y2,y0)
+      x1 = max(x3,x1)
+      y1 = max(y3,y1)
+    return x0,y0,x1,y1
+  
+  def affiche_ligne(self,num_lig):
+    tag_lig = 'ligne_'+`num_lig`
+    num_col = 0
+    for col in self.colonnes:
+      tag_col = 'colonne_'+`num_col`
+      x = 100*num_col+self.x
+      id = self.canvas.create_text(x,self.y,
+                                   text = justify_text(col[num_lig],cesure=60),
+                                   tag=(tag_lig,tag_col),
+                                   anchor='nw',
+                                   font = fontes.canvas)
+      x0,y0,x1,y1 = self.canvas.bbox(id)
+      num_col = num_col+1
+    l_id = self.canvas.find_withtag(tag_lig)
+    x0,y0,x1,y1 = self.bbox(l_id)
+    self.y = y1 + 2*self.incr
+
+  def aligne_colonnes(self):
+    num_col = 0
+    for col in self.colonnes:
+      tag_col = 'colonne_'+`num_col`
+      l_id = self.canvas.find_withtag(tag_col)
+      if not l_id : continue
+      x0,y0,x1,y1 = self.bbox(l_id)
+      self.move(x1+self.incr,self.colonnes[num_col+1:],num_col+1)
+      num_col = num_col+1
+
+  def move(self,x,colonnes,num):
+    num_col = num
+    for col in colonnes:
+      tag_col = 'colonne_'+`num_col`
+      l_id = self.canvas.find_withtag(tag_col)
+      if not l_id : continue
+      x0,y0,x1,y1 = self.canvas.bbox(l_id[0])
+      self.canvas.move(tag_col,x+self.incr-x0,0)
+      num_col = num_col+1
+    
+class CATAPanel(Frame) :
+  """ Classe servant à créer le panneau représentant l'objet sélectionné dans l'arbre"""
+  def __init__(self,parent,panneau,node) :
+    self.parent=parent
+    self.panneau = panneau
+    self.node=node
+    Frame.__init__(self,self.panneau)
+    self.place(x=0,y=0,relheight=1,relwidth=1)
+    self.init()
+
+  def init(self):
+    # création du label initial
+    label = Label(self,
+                  text = 'Attributs de '+self.node.item.labeltext,
+                  font = fontes.standard_gras_souligne)
+    label.pack(side='top',pady=10)
+    # création des listes correspondant aux colonnes du tableau à afficher
+    colonne1,colonne2 = self.get_listes()
+    # affichage du tableau
+    self.tableau = Tableau(self,(colonne1,colonne2))
+    self.tableau.affiche()
+
+  def get_listes(self):    
+    self.node.item.get_dico_attributs()
+    l_cles_attributs = self.node.item.d_attributs.keys()
+    l_cles_attributs.sort()
+    ind=0
+    liste1 = []
+    liste2=[]
+    for nom_attr in l_cles_attributs :
+      valeur = self.node.item.d_attributs[nom_attr]
+      if type(valeur) == types.TupleType:
+        texte =''
+        for elem in valeur:
+          if type(elem) == types.ClassType:
+            texte = texte + elem.__name__
+          else:
+            texte = texte + str(elem)
+      elif type(valeur) == types.ClassType :
+        texte = valeur.__name__
+      else:
+        texte = str(valeur)
+      liste1.append(nom_attr)
+      liste2.append(texte)
+    return liste1,liste2
+
+class CATAItem(TreeItem):
+  panel = CATAPanel
+  def __init__(self,appli,labeltext,object,setfunction=None,objet_cata_ordonne = None):
+    self.appli = appli
+    self.labeltext = labeltext
+    self.object=object
+    self.setfunction = setfunction
+    self.objet_cata_ordonne = objet_cata_ordonne
+
+  def get_dico_fils(self):
+    d_fils = {}
+    if type(self.object) != types.TupleType:
+      for e in dir(self.object):
+        cmd = getattr(self.object,e)
+        if isCMD(cmd) :
+          d_fils[string.strip(cmd.nom)] = cmd
+    else:
+      for obj in self.object :
+        for e in dir(obj):
+          cmd = getattr(obj,e)
+          if isCMD(cmd) :
+            d_fils[string.strip(cmd.nom)] = cmd
+    self.d_fils = d_fils
+
+  def get_dico_attributs(self):
+    d_attributs ={}
+    if type(self.object) == types.TupleType :
+      self.d_attributs = d_attributs
+      return
+    l_noms_attributs = ['nom','op','sd_prod','reentrant','repetable','fr','docu','into','valide_vide','actif',
+                        'regles','op_init','niveau','definition','code','niveaux','statut',
+                        'defaut','min','max','homo','position','val_min','val_max','condition']
+    for nom_attribut in l_noms_attributs :
+      if hasattr(self.object,nom_attribut):
+        attr = getattr(self.object,nom_attribut)
+        d_attributs[nom_attribut] = attr
+    self.d_attributs = d_attributs
+
+  def get_liste_mc_ordonnee(self):
+    """ Retourne la liste ordonnée (suivant le catalogue) brute des fils
+    de l'entite courante """
+    if hasattr(self.objet_cata_ordonne,'ordre_mc'):
+      return self.objet_cata_ordonne.ordre_mc
+    else :
+      l=self.objet_cata_ordonne.keys()
+      l.sort()
+      return l
+      
+  def GetLabelText(self):
+    return self.labeltext,None,None
+
+  def get_fr(self):
+    return ''
+  
+  def isMCList(self):
+    return 0
+  
+  def GetSubList(self):
+    sublist=[]
+    if not hasattr(self,'d_fils'):
+      self.get_dico_fils()
+    # on classe les fils dans l'odre du catalogue ...
+    l_cles_fils = self.get_liste_mc_ordonnee()
+    for k in l_cles_fils :
+      if type(self.objet_cata_ordonne) == types.InstanceType :
+        objet_cata = self.objet_cata_ordonne.entites[k]
+      else :
+        objet_cata = self.objet_cata_ordonne.get(k,None)
+      item = make_objecttreeitem(self.appli,k + " : ",self.d_fils[k],
+                                 objet_cata_ordonne = objet_cata)
+      sublist.append(item)
+    return sublist
+
+  def GetIconName(self):
+    return 'ast-green-square'
+
+  def isactif(self):
+    return 1
+  
+class CMDItem(CATAItem):
+
+  def get_dico_fils(self):
+    self.d_fils = self.object.entites
+
+class SIMPItem(CATAItem):
+  d_fils={}
+  d_attributs={}
+
+  def GetIconName(self):
+    return 'ast-green-ball'
+
+  def IsExpandable(self):
+    return 0
+  
+class FACTItem(CMDItem):
+  def GetIconName(self):
+    return 'ast-green-los'
+
+class BLOCItem(FACTItem): pass
+
+class ATTRIBUTItem(SIMPItem):
+  def get_dico_attributs(self):
+    self.d_attributs = {}
+
+  def GetSubList(self):
+    return []
+
+  def IsExpandable(self):
+    return 0
+
+  def GetText(self):
+    return self.object
+
+  def GetIconName(self):
+    return 'aucune'  
+
+class CataBrowser:
+  def __init__(self,parent,appli,cata,item = None):
+    self.parent = parent
+    self.cata = cata
+    self.appli = appli
+    self.item = item
+    self.init()
+
+  def close(self):
+    self.top.destroy()
+
+  def init(self):
+    self.nodes={}
+    self.top = Pmw.Dialog(self.parent,
+                          title = "Visualisation d'un catalogue",
+                          buttons=('OK',),
+                          command = self.quit)
+    self.pane = Pmw.PanedWidget(self.top.component('dialogchildsite'),
+                                hull_width = 800,
+                                hull_height = 500,
+                                orient = 'horizontal')
+    self.pane.add('canvas',min = 0.4, max = 0.6, size = 0.5)
+    self.pane.add('panel',min = 0.4, max = 0.6, size = 0.5)
+    self.pane.pack(expand =1, fill = 'both')
+    self.scrolledcanvas = Pmw.ScrolledCanvas(self.pane.pane('canvas'),
+                                             hull_width=1.,
+                                             hull_height=1.,
+                                             borderframe=1)
+    Pmw.Color.changecolor(self.scrolledcanvas.component('canvas'),background='gray95')
+    self.scrolledcanvas.pack(padx=10,pady=10,expand=1, fill="both")
+    if self.item == None :
+      self.item = CATAItem(self.appli,"Catalogue",self.cata)
+    self.tree = Tree(self.appli,self.item,self.scrolledcanvas,command = self.select_node)
+    self.tree.draw()
+    self.node = self.tree.node_selected
+
+  def select_node(self,node):
+    self.nodes[node]=self.create_panel(node)
+
+  def create_panel(self,node):
+    if hasattr(node.item,"panel"):
+      return getattr(node.item,"panel")(self,self.pane.pane('panel'),node)
+      
+  def quit(self,nom_bouton) :
+    self.top.destroy()
+    
+  def settitle(self):
+    self.top.wm_title("Browser de catalogue " )
+    self.top.wm_iconname("CataBrowser")
+
+dispatch = {
+    OPER  : CMDItem,
+    PROC  : CMDItem,
+    MACRO  : CMDItem,
+    SIMP : SIMPItem,
+    FACT : FACTItem,
+    BLOC : BLOCItem,
+}
+
+def TYPE(o):
+  if isinstance(o,OPER):return OPER
+  elif isinstance(o,PROC):return PROC
+  elif isinstance(o,MACRO):return MACRO
+  elif isinstance(o,FORM):return MACRO
+  elif isinstance(o,SIMP):return SIMP
+  elif isinstance(o,FACT):return FACT
+  elif isinstance(o,BLOC):return BLOC
+  else:return type(o)
+
+def make_objecttreeitem(appli,labeltext, object, setfunction=None,objet_cata_ordonne=None):
+    t = TYPE(object)
+    if dispatch.has_key(t):
+      c = dispatch[t]
+    else:
+      #print 'on a un objet de type :',t,'  ',object
+      c = ATTRIBUTItem
+    return c(appli,labeltext, object, setfunction = setfunction,objet_cata_ordonne=objet_cata_ordonne)
+
+def isCMD(cmd):
+   return isinstance(cmd,OPER) or isinstance(cmd,PROC) or isinstance(cmd,MACRO) or isinstance(cmd,FORM)
+
+
+
diff --git a/InterfaceTK/cataediteur.py b/InterfaceTK/cataediteur.py
new file mode 100644 (file)
index 0000000..e7e4499
--- /dev/null
@@ -0,0 +1,975 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import os
+import sys
+import types
+import string
+import Pmw
+from widgets import showinfo
+from Tkinter import *
+
+# Modules Eficas
+import fontes
+from widgets import *
+from treewidget import Tree
+from Editeur.Objecttreeitem import TreeItem
+from Accas import AsException
+from Noyau.N_CR import justify_text
+
+from Accas import ASSD,GEOM
+import definition_cata
+
+#
+__version__="$Name: V1_14 $"
+__Id__="$Id: cataediteur.py,v 1.1.4.3.4.1 2008-10-10 13:47:11 pnoyret Exp $"
+#
+
+Fonte_Niveau = fontes.canvas_gras_italique
+
+class Panel(Frame) :
+  """ Classe servant de classe mère à toutes celles représentant les
+      panneaux à afficher en fonction de la nature de l'objet en cours
+      Elle est toujours dérivée."""
+  def __init__(self,parent,panneau,node) :
+      self.parent=parent
+      self.panneau = panneau
+      self.node=node
+      Frame.__init__(self,self.panneau)
+      self.place(x=0,y=0,relheight=1,relwidth=1)
+      #self.creer_boutons()
+      self.init()
+
+  def creer_boutons(self):
+      """ Méthode créant les boutons se trouvant dans la partie contextuelle d'EFICAS
+      (à droite sous les onglets ) """
+      self.fr_but = Frame(self,height=30)
+      self.fr_but.pack(side='bottom',fill='x')
+      self.bouton_com = Button(self.fr_but,
+                               text = 'Commentaire',
+                               command = self.ajout_commentaire,
+                               width=14)
+      self.bouton_sup = Button(self.fr_but,
+                               text = "Supprimer",
+                               command=self.supprimer,
+                               width=14)
+      self.bouton_doc = Button(self.fr_but,
+                               text="Documentation",
+                               command=self.visu_doc,
+                               width=14)
+      self.bouton_cata = Button(self.fr_but,
+                                text = "Catalogue",
+                                command = self.show_catalogue,
+                                width=14)
+      if self.parent.appli.CONFIGURATION.isdeveloppeur == 'OUI':
+          self.bouton_sup.place(relx=0.25,rely = 0.5,relheight = 0.8,anchor='w')
+          self.bouton_cata.place(relx=0.5,rely = 0.5,relheight = 0.8,anchor='w')
+          self.bouton_doc.place(relx=0.75,rely = 0.5,relheight = 0.8,anchor='w')
+      else:
+          self.bouton_sup.place(relx=0.3,rely = 0.5,relheight = 0.8,anchor='w')
+          self.bouton_doc.place(relx=0.7,rely = 0.5,relheight = 0.8,anchor='w')
+
+  def show_catalogue(self):
+      try:
+          genea = self.node.item.get_genealogie()
+          self.parent.appli.browser_catalogue_objet(genea)
+      except Exception,e:
+          traceback.print_exc()
+      
+  def efface(self):
+      self.node.efface()
+      
+  def ajout_commentaire(self,ind='after'):
+      """ Ajoute un commentaire à l'intérieur du JDC, par défaut après le noeud en cours"""
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      return self.node.append_brother("COMMENTAIRE",ind)
+    
+  def ajout_commentaire_first(self):
+      """ Ajoute un commentaire en début de JDC"""
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      return self.node.append_child("COMMENTAIRE",'first')
+        
+  def visu_doc(self):
+      """ Permet d'ouvrir le fichier doc U de la commande au format pdf avec Acrobat Reader
+        - Ne fonctionne pas sous UNIX (chemin d'accès Acrobat Reader)
+        - indication du chemin d'accès aux fichiers pdf à revoir : trop statique"""
+      cle_doc = self.parent.appli.get_docu(self.node)
+      if cle_doc == None : return
+      cle_doc = string.replace(cle_doc,'.','')
+      commande = self.parent.appli.CONFIGURATION.exec_acrobat
+      nom_fichier = cle_doc+".doc"
+      rep_fichier = cle_doc[0:2]
+      fichier = os.path.abspath(os.path.join(self.parent.appli.CONFIGURATION.path_doc,rep_fichier,nom_fichier))
+      print 'commande =',commande
+      print 'fichier =',fichier
+      print 'existe =',os.path.isfile(fichier)
+      if os.name == 'nt':
+          os.spawnv(os.P_NOWAIT,commande,(commande,fichier))
+      elif os.name == 'posix':
+          script ="#!/usr/bin/sh \n%s %s" %(commande,nom_fichier)
+          pid = os.system(script)
+      
+  def supprimer(self):
+      """ Suppression du noeud courant """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      pere = self.node.parent
+      self.node.delete()
+      pere.select()
+      
+  def affiche(self):
+      """ Force l'affichage des fenêtres en cours """
+      self.tkraise()
+
+  def selectMC(self,name):
+      """ On retrouve le mot-clé sous le curseur pour affichage du fr """
+      cmd=self.node.item.get_definition()
+      texte_infos = ''
+      for e in cmd.entites.keys() :
+          if e == name :
+              texte_infos=getattr(cmd.entites[e],'fr')
+              break
+      if texte_infos == '' : texte_infos="Pas d'infos disponibles"
+      self.parent.appli.affiche_infos(texte_infos)
+
+  def defMC(self,name):
+      """ On ajoute un mot-clé à la commande : subnode """
+      if name == SEPARATEUR:return
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      if name != "COMMENTAIRE":
+          self.node.append_child(name)
+      else :
+          self.ajout_commentaire()    
+
+  def selectFilsCmd(self,name):
+      pass
+          
+  def defFilsCmd(self,name):
+      pass
+    
+  def defCmdFirst(self,name):
+      """ On ajoute une commande ou un commentaire au début du fichier de commandes """
+      if name == SEPARATEUR:return
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      if name != "COMMENTAIRE":
+          new_node = self.node.append_child(name,'first')
+      else :
+          new_node = self.ajout_commentaire_first()
+
+  def add_commande_avant(self,event=None):
+    pass
+
+  def add_commande_apres(self,event=None):
+    pass          
+        
+class OngletPanel(Panel) :
+  """ Cette classe est virtuelle et doit être dérivée
+      Elle contient les principales méthodes d'affichage des différents onglets"""
+
+  def raisecmd(self,page):
+      self.nb.page(page).focus_set()
+      if page == 'Concept': self._any.focus()
+
+  def affiche(self):
+      page=self.nb.getcurselection()
+      self.nb.page(page).focus_set()
+      if page == 'Concept':self._any.component('entry').focus_set()
+      self.tkraise()
+
+  def makeConceptPage(self,page):
+      """ Crée la page de saisie du nom du concept """
+      self.label = Label(page,text='Nom du concept :')
+      self.label.place(relx=0.1,rely=0.4)
+      self._any = Entry(page,relief='sunken')
+      self._any.place(relx=0.35,rely=0.4,relwidth=0.5)
+      self._any.bind("<Return>",lambda e,s=self:s.execConcept())
+      self._any.bind("<KP_Enter>",lambda e,s=self:s.execConcept())
+      self._any.insert(0,self.node.item.GetText())
+      type_sd = self.node.item.object.get_type_sd_prod()
+      if type_sd :
+          txt = "L'opérateur courant retourne un objet de type %s" %type_sd
+          self.label = Label(page, text = txt)
+          self.label.place(relx=0.5,rely=0.55,anchor='n')
+      self._any.focus()
+          
+  def makeCommandePage(self,page):
+      """ Affiche la page d'ajout d'une commande relativement à l'objet commande sélectionné """
+      titre = "Où voulez-vous insérer une commande par rapport à %s" %self.node.item.object.nom
+      Label(page,text=titre).place(relx=0.5,rely=0.2,anchor='w')
+      b_avant = Button(page,text='AVANT',
+                       command = self.node.item.add_commande_avant)
+      b_apres = Button(page,text='APRES',
+                       command = self.node.item.add_commande_apres)
+      b_avant.place(relx=0.35,rely=0.5,anchor='w')
+      b_apres.place(relx=0.65,rely=0.5,anchor='w')
+
+  def deselectMC(self,name):
+      self.parent.appli.affiche_infos('')
+    
+  def get_liste_cmd(self):
+      listeCmd = self.node.item.object.niveau.definition.get_liste_cmd()
+      return listeCmd
+
+  def get_liste_fils_cmd(self):
+      return ['Mot-clé simple','Mot-clé facteur','Bloc']
+
+  def makeMoclesPage(self,page):
+      frame1 = Frame(page,height = 20)
+      frame1.pack(side='top',fill='x')
+      label = Label(frame1,text ="Le mot-clé choisi sera ajouté à la fin du catalogue")
+      label.pack(side='top')
+      frame2 = Frame(page)
+      frame2.pack(side='top',fill='both',expand=1)
+      liste_cmd = self.get_liste_fils_cmd()
+      liste_commandes = (("<Enter>",self.selectFilsCmd),
+                         ("<Leave>",self.deselectFilsCmd),
+                         ("<Double-Button-1>",self.defFilsCmd))
+      Liste = ListeChoix(self,frame2,liste_cmd,liste_commandes = liste_commandes,titre = "Mots-clés")
+      Liste.affiche_liste()
+
+  def deselectFilsCmd(self,name):
+      pass
+    
+  def makeJDCPage(self,page):
+      liste_cmd = self.get_liste_cmd()
+      liste_commandes = (("<Enter>",self.selectCmd),
+                         ("<Leave>",self.deselectCmd),
+                         ("<Double-Button-1>",self.defCmdFirst))
+      Liste = ListeChoix(self,page,liste_cmd,liste_commandes = liste_commandes,filtre='oui',titre = "Commandes")
+      Liste.affiche_liste()
+
+  def makeReglesPage(self,page) :
+    regles = []
+    regles = self.node.item.get_regles()
+    dictionnaire = self.node.item.get_mc_presents()
+    texte_regles = []
+    l_regles_en_defaut=[]
+    if len(regles) > 0:
+      i = 0
+      for regle in regles :
+        texte_regles.append(regle.gettext())
+        texte,test = regle.verif(dictionnaire)
+        if test == 0 : l_regles_en_defaut.append(i)
+        i = i+1
+    Liste = ListeChoix(self,page,texte_regles,liste_marques=l_regles_en_defaut,active='non',titre="Règles")
+    Liste.affiche_liste()
+    #self.afficheListe(page,texte_regles,self.selectRegle,self.execRegle)
+
+  def execConcept(self):
+      """ Nomme le concept SD retourné par l'étape """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      nom = self._any.get()
+      # Pourquoi node.etape ???
+      #test,mess = self.node.etape.item.nomme_sd(nom)
+      test,mess = self.node.item.nomme_sd(nom)
+      self.parent.appli.affiche_infos(mess)
+      self.node.racine.update()
+  
+  def changed(self):
+      pass
+
+  def makeAttributsPage(self,page):
+    l_attributs=self.node.item.object.attributs
+    d_defauts = self.node.item.object.attributs_defauts
+    for attribut in l_attributs :
+      attr = self.node.item.object.entites_attributs.get(attribut,None)
+      if attr.valeur is d_defauts[attribut] :
+        texte = attribut+' = '+repr(attr.valeur)+' (defaut)'
+      else:
+        texte = attribut+' = '+repr(attr.valeur)
+      Label(page,text=texte).pack(side='top')
+
+  def makeSimpPage(self,page):
+    texte = "Où voulez-vous ajouter un mot-clé simple ?"
+    Label(page,text=texte).place(relx=0.5,rely=0.3,anchor='center')
+    b1 = Button(page,text='AVANT '+self.node.item.object.nom,command=self.add_simp_avant)
+    b2 = Button(page,text='APRES '+self.node.item.object.nom,command=self.add_simp_apres)
+    b1.place(relx=0.5,rely=0.5,anchor='center')
+    b2.place(relx=0.5,rely=0.6,anchor='center')
+
+  def add_simp_avant(self,event=None):
+    """
+    Ajoute un mot-clé simple avant celui courant
+    """
+    self.node.append_brother('new_simp','before')
+    self.node.update()
+
+  def add_simp_apres(self,event=None):
+    """
+    Ajoute un mot-clé simple après celui courant
+    """
+    self.node.append_brother('new_simp','after')
+    self.node.update()    
+    
+class TYPEPanel(Frame):
+  def __init__(self,parent,panneau,node) :
+      self.parent=parent
+      self.panneau = panneau
+      self.node=node
+      Frame.__init__(self,self.panneau)
+      self.place(x=0,y=0,relheight=1,relwidth=1)
+      self.creer_texte()
+
+  def creer_texte(self):
+      texte = "Le noeud sélectionné correspond à un type\n"
+      self.label = Label(self,text=texte)
+      self.label.place(relx=0.5,rely=0.4,relwidth=0.8,anchor='center')
+
+class OPERPanel(OngletPanel):
+  def init(self):
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    
+    nb.pack(fill = 'both', expand = 1)
+    self.nb=nb
+    nb.add('Mocles', tab_text='Ajouter mots-clés')
+    nb.add('Commandes',tab_text='Ajouter une commande')
+    self.makeMoclesPage(nb.page("Mocles"))
+    self.makeCommandePage(nb.page("Commandes"))
+    nb.tab('Mocles').focus_set()
+    nb.setnaturalsize()
+    self.affiche()
+
+class SIMPPanel(OngletPanel):
+  def init(self):
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    nb.pack(fill = 'both', expand = 1)
+    self.nb=nb
+    nb.add('generaux', tab_text='Données générales')
+    nb.add('ihm',tab_text='Données IHM')
+    nb.add('mocle',tab_text='Ajouter un mot-cle simple')
+    self.makeAttributsGenerauxPage(nb.page("generaux"))
+    self.makeAttributsIHMPage(nb.page("ihm"))
+    self.makeSimpPage(nb.page('mocle'))
+    nb.tab('generaux').focus_set()
+    nb.setnaturalsize()
+    self.affiche()
+
+  def makeAttributsGenerauxPage(self,page):
+    fr1 = Frame(page,bd=1,relief='raised')
+    fr2 = Frame(page,bd=1,relief='raised')
+    fr3 = Frame(page,bd=1,relief='raised')
+    fr4 = Frame(page,bd=1,relief='raised')
+    fr5 = Frame(page,bd=1,relief='raised')
+    fr1.place(relheight=0.14,relwidth=1,rely=0)
+    fr2.place(relheight=0.14,relwidth=1,rely=0.14)
+    fr3.place(relheight=0.29,relwidth=1,rely=0.28)
+    fr4.place(relheight=0.14,relwidth=1,rely=0.57)
+    fr5.place(relheight=0.28,relwidth=1,rely=0.71)
+    # nom du mot-clé
+    Label(fr1,text = 'Nom :').place(relx=0.05,rely=0.3,anchor='w')
+    self.e_nom = Entry(fr1)
+    self.e_nom.place(relx=0.35,rely=0.3,relwidth=0.3,anchor='w')
+    self.e_nom.bind("<Return>",lambda e,s=self : s.set_valeur_attribut('nom',None))
+    self.e_nom.bind("<KP_Enter>",lambda e,s=self : s.set_valeur_attribut('nom',None))
+    self.e_nom.insert(0,self.get_valeur_attribut('nom'))
+    # Statut
+    Label(fr1,text='Statut : ').place(relx=0.05,rely=0.7,anchor='w')
+    self.statut=StringVar()
+    valeurs_statut=[('obligatoire','o'),
+                    ('facultatif','f'),
+                    ('caché','c')
+                    ]
+    self.statut.set(self.node.item.object.get_valeur_attribut('statut'))
+    i=0
+    for text,mode in valeurs_statut:
+      b=Radiobutton(fr1,text=text,variable=self.statut,value=mode,
+                    command = lambda s=self,m=mode : s.set_valeur_attribut('statut',m))
+      b.place(relx=0.25+i*0.25,rely=0.7,anchor='w')
+      i=i+1
+    # Type ...
+    Label(fr2,text='Type de la valeur : ').place(relx=0.05,rely=0.5,anchor='w')
+    self.e_type = Entry(fr2)
+    self.e_type.place(relx=0.35,rely=0.5,relwidth=0.5,anchor='w')
+    self.e_type.insert(0,self.node.item.object.get_valeur_attribut('type'))
+    # Domaine de validité
+    Label(fr3,text='Domaine de validité : ').place(relx=0.05,rely=0.2,anchor='w')
+    self.domaine = StringVar()
+    self.domaine.set(self.node.item.object.get_valeur_attribut('domaine_validité'))
+    b1=Radiobutton(fr3,text='continu',variable=self.domaine,value='continu',
+                   command=lambda s=self,f=fr3 :s.change_domaine(f))
+    b2=Radiobutton(fr3,text='discret',variable=self.domaine,value='discret',
+                   command=lambda s=self,f=fr3 :s.change_domaine(f))
+    b1.place(relx=0.35,rely=0.2,anchor='w')
+    b2.place(relx=0.65,rely=0.2,anchor='w')
+    self.change_domaine(fr3)
+    # Défaut ...
+    if self.domaine.get() == 'continu':
+      # le développeur peut donner la valeur qu'il souhaite, moyennant la vérification de type...
+      Label(fr4,text='Valeur par défaut : ').place(relx=0.05,rely=0.5,anchor='w')
+      self.e_defaut = Entry(fr4)
+      self.e_defaut.place(relx=0.35,rely=0.5,relwidth=0.5,anchor='w')
+      if self.node.item.object.get_valeur_attribut('defaut') :
+        self.e_defaut.insert(0,self.node.item.object.get_valeur_attribut('defaut'))
+      self.e_defaut.bind("<Return>",lambda e,s=self : s.set_valeur_attribut('defaut',None))
+      self.e_defaut.bind("<KP_Enter>",lambda e,s=self : s.set_valeur_attribut('defaut',None))
+    else :
+      # dans le cas discret, la valeur par défaut doit être dans l'ensemble des valeurs possibles (into)
+      liste = self.node.item.object.get_valeur_attribut('into')
+      if self.node.item.object.get_valeur_attribut('defaut') :
+        self.set_valeur_attribut('defaut',self.node.item.object.get_valeur_attribut('defaut'))
+      if liste == None : liste = []
+      self.e_defaut = Pmw.OptionMenu(fr4,labelpos='w',label_text = "Valeur par défaut : ",
+                                     items = self.node.item.object.get_valeur_attribut('into'),
+                                     menubutton_width=30)
+      self.e_defaut.configure(command = lambda e,s=self : s.set_valeur_attribut('defaut',None))
+      self.e_defaut.place(relx=0.05,rely=0.5,anchor='w')
+    # Liste de valeurs ?
+    Label(fr5,text='Liste de valeurs : ').place(relx=0.05,rely=0.2,anchor='w')
+    self.liste_valeurs = BooleanVar()
+    liste_valeurs = [('OUI',1),('NON',0)]
+    self.liste_valeurs.set(0)
+    i=0
+    for text,mode in liste_valeurs:
+      b=Radiobutton(fr5,text=text,variable=self.liste_valeurs,value=mode,
+                    command=lambda s=self,f=fr5 :s.change_liste_valeurs(f))
+      b.place(relx=0.35+i*0.2,rely=0.2,anchor='w')
+      i=i+1
+    self.change_liste_valeurs(fr5)
+
+  def makeAttributsIHMPage(self,page):
+    fr1 = Frame(page,height=100,bd=1,relief='raised')
+    fr2 = Frame(page,height=50,bd=1,relief='raised')
+    fr1.pack(side='top',fill='x')
+    fr2.pack(side='top',fill='x')
+    # Champ fr ...
+    Label(fr1,text='Champ fr : ').place(relx=0.05,rely=0.35,anchor='w')
+    self.e_fr = Entry(fr1)
+    self.e_fr.place(relx=0.35,rely=0.35,relwidth=0.6,anchor='w')
+    self.e_fr.insert(0,self.node.item.object.get_valeur_attribut('fr'))
+    # Champ ang ...
+    Label(fr1,text='Champ ang : ').place(relx=0.05,rely=0.70,anchor='w')
+    self.e_ang = Entry(fr1)
+    self.e_ang.place(relx=0.35,rely=0.70,relwidth=0.6,anchor='w')
+    self.e_ang.insert(0,self.node.item.object.get_valeur_attribut('ang'))
+    # Clé documentaire ...
+    Label(fr2,text='Clé documentaire : ').place(relx=0.05,rely=0.50,anchor='w')
+    self.e_docu = Entry(fr2)
+    self.e_docu.place(relx=0.35,rely=0.50,relwidth=0.6,anchor='w')
+    self.e_docu.insert(0,self.node.item.object.get_valeur_attribut('docu'))
+    
+  def detruit_widgets(self,l_widgets):
+    for nom_widg in l_widgets :
+      try:
+        widg = getattr(self,nom_widg)
+        widg.place_forget()
+        delattr(self,nom_widg)
+      except:
+        pass
+
+  def change_liste_valeurs(self,fr5):
+    valeur = self.liste_valeurs.get()
+    if valeur == 0 :
+      # pas de liste de valeurs
+      l_widgets=['l_homo','b1_homo','b2_homo','l_min','e_min','l_max','e_max']
+      self.detruit_widgets(l_widgets)
+    elif valeur == 1:
+      # pas de widgets à détruire ...
+      if hasattr(self,'l_homo') :
+        # on est déjà en mode 'liste' --> rien à faire
+        return 
+      # homo
+      self.l_homo = Label(fr5,text='Liste homogène : ')
+      self.l_homo.place(relx=0.05,rely=0.4,anchor='w')
+      self.homo = BooleanVar()
+      self.homo.set(self.node.item.object.get_valeur_attribut('homo'))
+      self.b1_homo=Radiobutton(fr5,text='OUI',variable=self.homo,value=1)
+      self.b2_homo=Radiobutton(fr5,text='NON',variable=self.homo,value=0)
+      self.b1_homo.place(relx=0.35,rely=0.4,anchor='w')
+      self.b2_homo.place(relx=0.65,rely=0.4,anchor='w')
+      # min ...
+      self.l_min = Label(fr5,text='Longueur minimale : ')
+      self.l_min.place(relx=0.05,rely=0.6,anchor='w')
+      self.e_min = Entry(fr5)
+      self.e_min.place(relx=0.4,rely=0.6,relwidth=0.3,anchor='w')
+      self.e_min.insert(0,self.node.item.object.get_valeur_attribut('min'))
+      # max ...
+      self.l_max = Label(fr5,text='Longueur maximale : ')
+      self.l_max.place(relx=0.05,rely=0.8,anchor='w')
+      self.e_max = Entry(fr5)
+      self.e_max.place(relx=0.4,rely=0.8,relwidth=0.3,anchor='w')
+      self.e_max.insert(0,self.node.item.object.get_valeur_attribut('max'))
+      
+  def change_domaine(self,fr3):
+    valeur = self.domaine.get()
+    if valeur == 'discret' :
+      l_widgets = ['l_val_min','l_val_max','e_val_min','e_val_max']
+      self.detruit_widgets(l_widgets)
+      # into
+      #self.l_into = Label(fr3,text='Ensemble de valeurs : ')
+      #self.l_into.place(relx=0.2,rely=0.5,anchor='w')
+      self.e_into = Pmw.ScrolledListBox(fr3,
+                                        items=self.node.item.object.get_valeur_attribut('into'),
+                                        labelpos='w',
+                                        label_text= 'Ensemble de valeurs : ',
+                                        listbox_height = 3,
+                                        dblclickcommand = self.change_into)
+      self.e_into.place(relx=0.05,rely=0.6,relwidth=0.9,anchor='w')
+      #self.e_into.insert(0,self.node.item.object.get_valeur_attribut('into'))
+    elif valeur == 'continu':
+      l_widgets = ['l_into','e_into']
+      self.detruit_widgets(l_widgets)
+      if hasattr(self,'l_val_min'):
+        # on est déjà en mode 'continu' --> rien à faire
+        return
+      # val_min
+      self.l_val_min = Label(fr3,text='Valeur minimale : ')
+      self.l_val_min.place(relx=0.05,rely=0.5,anchor='w')
+      self.e_val_min = Entry(fr3)
+      self.e_val_min.place(relx=0.35,rely=0.5,relwidth=0.5,anchor='w')
+      self.e_val_min.bind("<Return>",lambda e,s=self : s.set_valeur_attribut('val_min',None))
+      self.e_val_min.bind("<KP_Enter>",lambda e,s=self : s.set_valeur_attribut('val_min',None))
+      self.set_valeur_attribut('val_min',self.get_valeur_attribut('val_min'))
+      # val_max
+      self.l_val_max = Label(fr3,text='Valeur maximale : ')
+      self.l_val_max.place(relx=0.05,rely=0.8,anchor='w')
+      self.e_val_max = Entry(fr3)
+      self.e_val_max.place(relx=0.35,rely=0.8,relwidth=0.5,anchor='w')
+      self.e_val_max.bind("<Return>",lambda e,s=self : s.set_valeur_attribut('val_max',None))
+      self.e_val_max.bind("<KP_Enter>",lambda e,s=self : s.set_valeur_attribut('val_max',None))
+      self.set_valeur_attribut('val_max',self.get_valeur_attribut('val_max'))
+
+# ------------------------------------------------------------------
+# Méthodes de validation des entrées faites par l'utilisateur
+# ------------------------------------------------------------------
+
+  def get_valeur_attribut(self,nom_attr):
+    """
+    Demande à l'item de retourner la valeur de l'attribut nom_attr
+    """
+    return self.node.item.get_valeur_attribut(nom_attr)
+  
+  def set_valeur_attribut(self,nom_attr,new_valeur):
+    """
+    Affecte la valeur new_valeur à l'attribut nom_attr
+    Vérifie si celle-ci est valide, sinon restaure l'ancienne
+    """
+    if new_valeur is None :
+      widget = getattr(self,'e_'+nom_attr)
+      if hasattr(widget,'getcurselection'):
+        new_valeur = widget.getcurselection()
+      else:
+        new_valeur = widget.get()
+    print "on affecte %s a %s" %(str(new_valeur),nom_attr)
+    self.node.item.set_valeur_attribut(nom_attr,new_valeur)
+    self.node.update()
+
+  def change_into(self):
+    """
+    Méthode activée par double clic sur la ListBox d'affichage des valeurs discrètes possibles :
+    permet de changer la liste de ces valeurs
+    """
+    showinfo("Fonction non encore disponible",
+             "Vous ne pouvez pas encore modifier la liste into par cette IHM")
+    
+class OBJECTItem(TreeItem):
+  def __init__(self,appli,labeltext,object,setfunction=None,objet_cata_ordonne = None):
+    self.appli = appli
+    self.labeltext = labeltext
+    self.object=object
+    self.setfunction = setfunction
+    self.objet_cata_ordonne = objet_cata_ordonne
+    
+  def GetLabelText(self):
+    return self.labeltext,None,None
+
+  def get_fr(self):
+    return ''
+  
+  def isMCList(self):
+    return 0
+
+  def isactif(self):
+    return 1
+
+  def add_commande_avant(self):
+    pass
+
+  def add_commande_apres(self):
+    pass
+
+  def set_valeur_attribut(self,nom_attr,new_valeur):
+    """
+    Affecte la valeur new_valeur à l'attribut nom_attr
+    Vérifie si celle-ci est valide, sinon restaure l'ancienne
+    """
+    old_valeur = self.object.get_valeur_attribut(nom_attr)
+    self.object.set_valeur_attribut(nom_attr,new_valeur)
+    verificateur = 'verif_'+nom_attr
+    if hasattr(self.object,verificateur):
+      if not getattr(self.object,verificateur)():
+        # la nouvelle valeur de nom_attr n'est pas valide : on restaure l'ancienne (sans vérification)
+        self.object.set_valeur_attribut(nom_attr,old_valeur)
+        print 'changement de valeur refuse'
+        return
+    print 'changement de valeur accepte'
+    self.object.init_modif()
+
+  def get_valeur_attribut(self,nom_attr):
+    """
+    Retourne la valeur de l'attribut nom_attr
+    """
+    return self.object.get_valeur_attribut(nom_attr)
+        
+class CATAItem(OBJECTItem):
+  def GetSubList(self):
+    sublist=[]
+    for fils in self.object.entites_fils:
+      item = make_objecttreeitem(self.appli,fils.objet.label + " : ",fils,objet_cata_ordonne=self.objet_cata_ordonne)
+      sublist.append(item)
+    return sublist
+  
+  def GetIconName(self):
+    if self.object.isvalid():
+      return 'ast-green-square'
+    else:
+      return 'ast-red-square'
+
+  def GetText(self):
+    return "Catalogue %s" %self.appli.code
+
+  def add_commande_avant(self):
+    pass
+
+  def add_commande_apres(self):
+    pass
+
+     
+def transforme_liste_dico(liste):
+  d={}
+  for item in liste :
+    d[item.nom]=item
+  return d
+      
+class OPERItem(OBJECTItem):
+  panel = OPERPanel
+  def GetSubList(self):
+    sublist=[]
+    # on classe les fils dans l'ordre du catalogue ...
+    l_cles_fils = self.get_liste_mc_ordonnee()
+    # on crée les items fils ...
+    dico_fils = transforme_liste_dico(self.object.entites_fils)
+    for k in l_cles_fils :
+      typ = TYPE_COMPLET(dico_fils[k])
+      if type(self.objet_cata_ordonne) == types.InstanceType :
+        objet_cata = self.objet_cata_ordonne.entites[k]
+      else :
+        objet_cata = self.objet_cata_ordonne.get(k,None)
+      item = make_objecttreeitem(self.appli,typ + " : ",dico_fils[k],objet_cata_ordonne = objet_cata)
+      sublist.append(item)
+    return sublist
+
+  def GetText(self):
+    #return self.object.nom
+    return self.object.get_valeur_attribut('nom')
+
+  def get_liste_mc_ordonnee(self):
+    return self.objet_cata_ordonne.ordre_mc
+
+  def GetIconName(self):
+    if self.object.isvalid():
+      return 'ast-green-square'
+    else:
+      return 'ast-red-square'
+
+  def additem(self,name,pos):
+      if isinstance(name,TreeItem) :
+          cmd=self.object.addentite(name.getObject(),pos)
+      else :
+          cmd = self.object.addentite(name,pos)
+      typ = TYPE_COMPLET(cmd)
+      item = make_objecttreeitem(self.appli,typ + " : ", cmd)
+      return item
+
+  def get_attribut(self,nom):
+    if nom == 'nature': return 'OPERATEUR'
+
+  def get_liste_mc_presents(self):
+    return []
+
+  def verif_condition_regles(self,liste):
+    return []
+  
+class PROCItem(OPERItem):
+  panel = OPERPanel
+  
+class MACROItem(OPERItem):
+  panel = OPERPanel
+    
+class SIMPItem(OPERItem):
+  panel = SIMPPanel
+  
+  def GetIconName(self):
+    if self.object.isvalid():
+      return 'ast-green-ball'
+    else:
+      return 'ast-red-ball'
+
+  def IsExpandable(self):
+    return 0
+
+  def GetSubList(self):
+    return []
+  
+class FACTItem(OPERItem):
+  def GetIconName(self):
+    if self.object.isvalid():
+      return 'ast-green-los'
+    else:
+      return 'ast-red-los'
+
+class BLOCItem(FACTItem): pass
+
+class TYPEItem(SIMPItem):
+  panel = TYPEPanel
+  def get_dico_attributs(self):
+    self.d_attributs = {}
+
+  def GetSubList(self):
+    return []
+
+  def IsExpandable(self):
+    return 0
+
+  def GetText(self):
+    return self.object.nom
+
+class NIVEAUItem(OPERItem):
+  def IsExpandable(self):
+      return 1
+
+  def get_liste_mc_ordonnee(self):
+    l=[]
+    for fils in self.object.entites_fils:
+      l.append(fils.nom)
+    return l
+  
+  def GetSubList(self):
+    sublist=[]
+    # on classe les fils dans l'ordre du catalogue ...
+    l_cles_fils = self.get_liste_mc_ordonnee()
+    # on crꥠles items fils ...
+    dico_fils = transforme_liste_dico(self.object.entites_fils)
+    for k in l_cles_fils :
+      typ = TYPE_COMPLET(dico_fils[k])
+      if type(self.objet_cata_ordonne) == types.InstanceType :
+        objet_cata = self.objet_cata_ordonne.entites[k]
+      else :
+        objet_cata = self.objet_cata_ordonne.get(k,None)
+      item = make_objecttreeitem(self.appli,typ + " : ",dico_fils[k],objet_cata_ordonne = objet_cata)
+      sublist.append(item)
+    return sublist
+  
+  def GetLabelText(self):
+      """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+      """
+      return self.labeltext,Fonte_Niveau,'#00008b'
+    
+  def GetIconName(self):
+    if self.object.isvalid():
+      return "ast-green-text"
+    else:
+      return 'ast-red-text'
+
+  def additem(self,name,pos):
+      if isinstance(name,TreeItem) :
+          cmd=self.object.addentite(name.getObject(),pos)
+      else :
+          cmd = self.object.addentite(name,pos)
+      typ = TYPE_COMPLET(obj)
+      item = make_objecttreeitem(self.appli,typ+ " : ", cmd)
+      return item
+
+  def suppitem(self,item) :
+    # item = item de l'ETAPE à supprimer du JDC
+    # item.getObject() = ETAPE ou _C
+    # self.object = JDC
+    itemobject=item.getObject()
+    if self.object.suppentite(itemobject):
+       if isinstance(itemobject,_C):
+          message = "Commentaire supprimé"
+       else :
+          message = "Commande " + itemobject.nom + " supprimée"
+       self.appli.affiche_infos(message)
+       return 1
+    else:
+       self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet")
+       return 0
+
+  def GetText(self):
+      return ''
+    
+class ATTRIBUTItem(SIMPItem):
+  def get_dico_attributs(self):
+    self.d_attributs = {}
+
+  def GetSubList(self):
+    return []
+
+  def IsExpandable(self):
+    return 0
+
+  def GetText(self):
+    return self.object
+
+  def GetIconName(self):
+    return 'aucune' 
+
+class CataEditeur:
+  def __init__(self,parent,appli,cata):
+    self.parent = parent
+    self.cata = definition_cata.CATALOGUE(cata)
+    self.appli = appli
+    self.top = Toplevel()
+    self.top.geometry("800x500")
+    self.top.title("Edition d'un catalogue")
+    self.init()
+
+  def close(self):
+    self.top.destroy()
+
+  def init(self):
+    self.nodes={}
+    self.creerbarremenus()
+    self.pane = Pmw.PanedWidget(self.top,
+                                hull_width = 800,
+                                hull_height = 500,
+                                orient = 'horizontal')
+    self.pane.add('canvas',min = 0.4, max = 0.6, size = 0.45)
+    self.pane.add('panel',min = 0.4, max = 0.6, size = 0.55)
+    self.pane.pack(expand =1, fill = 'both')
+    self.scrolledcanvas = Pmw.ScrolledCanvas(self.pane.pane('canvas'),
+                                             hull_width=1.,
+                                             hull_height=1.,
+                                             borderframe=1)
+    Pmw.Color.changecolor(self.scrolledcanvas.component('canvas'),background='gray95')
+    self.scrolledcanvas.pack(padx=10,pady=10,expand=1, fill="both")
+    self.item = CATAItem(self.appli,"Catalogue",
+                           self.cata,
+                          objet_cata_ordonne = self.appli.readercata.cata_ordonne_dico)
+
+    self.tree = Tree(self.appli,self.item,self.scrolledcanvas,command = self.select_node)
+    self.tree.draw()
+    self.node = self.tree.node_selected
+
+  def creerbarremenus(self) :
+      self.menubar=Menu(self.top)
+      self.filemenu=Menu(self.menubar,tearoff=0)
+      self.filemenu.add_command(label='Quitter',command=self.quit)
+
+      self.editmenu=Menu(self.menubar,tearoff=0)
+      #self.editmenu.add_command(label='Copier',command=self.copy)
+      #self.editmenu.add_command(label='Couper',command=self.cut)
+      #self.editmenu.add_command(label='Coller',command=self.paste)
+
+      self.affichagemenu=Menu(self.menubar,tearoff=0)
+      self.affichagemenu.add_command(label='Rapport de validation',
+                                     command = self.visuCR)
+      self.affichagemenu.add_command(label='shell',command = self.shell)
+      #self.affichagemenu.add_command(label='Fichier ࡰlat',command=self.visu_a_plat)
+      #self.affichagemenu.add_command(label='Fichier .py',command =self.visuJDC_py)
+      #self.affichagemenu.add_command(label='Fichier source',command = self.visu_txt_brut_JDC)
+      #self.affichagemenu.add_command(label='Param鵲es Eficas',command=self.affichage_fichier_ini)
+      
+      #self.optionmenu=Menu(self.menubar,tearoff=0)
+      #self.optionmenu.add_command(label='Catalogue d귥loppeur',command=self.choix_cata_developpeur)
+
+      self.menubar.add_cascade(label='Fichier',menu=self.filemenu)
+      self.menubar.add_cascade(label='Edition',menu=self.editmenu)
+      self.menubar.add_cascade(label='Jeu de commandes',menu=self.affichagemenu)
+      #self.menubar.add_cascade(label='Browsers',menu=self.browsermenu)
+      #self.menubar.add_cascade(label='Catalogue',menu=self.cataloguemenu)
+      #self.menubar.add_cascade(label='Options',menu=self.optionmenu)
+      self.top.configure(menu=self.menubar)
+      self.top.protocol("WM_DELETE_WINDOW",self.quit)
+      self.top.minsize(900,500)
+      self.top.geometry("900x500")
+
+  def shell(self,event=None):
+      import Interp
+      d={'j':self.tree.item.getObject()}
+      Interp.InterpWindow(d,parent=self.parent)
+      
+  def visuCR(self,mode='Cata'):
+    txt = str(self.cata.report())
+    titre="Rapport de validation du catalogue"
+    Fenetre(self.appli,titre=titre,texte=txt)
+  
+  def select_node(self,node):
+    self.nodes[node]=self.create_panel(node)
+
+  def create_panel(self,node):
+    if hasattr(node.item,"panel"):
+      return getattr(node.item,"panel")(self,self.pane.pane('panel'),node)
+      
+  def quit(self) :
+    self.top.destroy()
+    
+  def settitle(self):
+    self.top.wm_title("Browser de catalogue " )
+    self.top.wm_iconname("CataBrowser")
+
+dispatch = {
+    'OPER'   : OPERItem,
+    'PROC'   : PROCItem,
+    'MACRO'  : MACROItem,
+    'SIMP'   : SIMPItem,
+    'FACT'   : FACTItem,
+    'BLOC'   : BLOCItem,
+    'TYPE'   : TYPEItem,
+    'NIVEAU' : NIVEAUItem
+}
+
+def TYPE(o):
+  if isinstance(o,definition_cata.OPER_CATA):return 'OPER'
+  elif isinstance(o,definition_cata.PROC_CATA):return 'PROC'
+  elif isinstance(o,definition_cata.MACRO_CATA):return 'MACRO'
+  elif isinstance(o,definition_cata.SIMP_CATA):return 'SIMP'
+  elif isinstance(o,definition_cata.FACT_CATA):return 'FACT'
+  elif isinstance(o,definition_cata.BLOC_CATA):return 'BLOC'
+  elif isinstance(o,definition_cata.TYPE_CATA):return 'TYPE'
+  elif isinstance(o,definition_cata.NIVEAU_CATA) : return 'NIVEAU'
+  else:return type(o)
+
+def TYPE_COMPLET(o):
+  if isinstance(o,definition_cata.OPER_CATA):return "OPERATEUR"
+  elif isinstance(o,definition_cata.PROC_CATA):return "PROCEDURE"
+  elif isinstance(o,definition_cata.MACRO_CATA):return "MACRO"
+  elif isinstance(o,definition_cata.SIMP_CATA):return "Mot-clé SIMPLE"
+  elif isinstance(o,definition_cata.FACT_CATA):return "Mot-clé FACTEUR"
+  elif isinstance(o,definition_cata.BLOC_CATA):return "BLOC"
+  elif isinstance(o,definition_cata.TYPE_CATA):return "Type"
+  elif isinstance(o,definition_cata.NIVEAU_CATA):return "Niveau"
+  else: return "Inconnu ("+`type(o)`+")"
+  
+def make_objecttreeitem(appli,labeltext, object, setfunction=None,objet_cata_ordonne=None):
+    t = TYPE(object)
+    if dispatch.has_key(t):
+      c = dispatch[t]
+    else:
+      print 'on a un objet de type :',type(object),'  ',object
+      c = ATTRIBUTItem
+    return c(appli,labeltext, object, setfunction = setfunction,objet_cata_ordonne=objet_cata_ordonne)
+
+
+
diff --git a/InterfaceTK/centerwindow.py b/InterfaceTK/centerwindow.py
new file mode 100644 (file)
index 0000000..4acca2e
--- /dev/null
@@ -0,0 +1,53 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+   Ce module contient la fonction utilitaire centerwindow
+   qui sert à centrer une fenetre
+"""
+import types
+
+def centerwindow(window,parent = 'avec'):
+    if parent =='avec':
+        parent = window.winfo_parent()
+        if type(parent) == types.StringType:
+            parent = window._nametowidget(parent)
+    # Find size of window.
+    window.update_idletasks()
+    width = window.winfo_width()
+    height = window.winfo_height()
+    if width == 1 and height == 1:
+        # If the window has not yet been displayed, its size is
+        # reported as 1x1, so use requested size.
+        width = window.winfo_reqwidth()
+        height = window.winfo_reqheight()
+    # Place in centre of screen:
+    if parent =='avec' :
+        x = (window.winfo_screenwidth() - width) / 2 - parent.winfo_vrootx()
+        y = (window.winfo_screenheight() - height) / 3 - parent.winfo_vrooty()
+    else:
+        x = (window.winfo_screenwidth() - width) / 2 
+        y = (window.winfo_screenheight() - height) / 3
+    if x < 0:
+        x = 0
+    if y < 0:
+        y = 0
+    window.geometry('+%d+%d' % (x, y))
+    
diff --git a/InterfaceTK/change_comm.py b/InterfaceTK/change_comm.py
new file mode 100755 (executable)
index 0000000..5fb5322
--- /dev/null
@@ -0,0 +1,166 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce module permet de lancer l'application EFICAS en affichant
+    un ecran Splash pour faire patentier l'utilisateur
+"""
+# Modules Python
+import sys
+import os
+
+# Modules Eficas
+from Editeur import import_code
+from Editeur import session
+import prefs
+import convert
+import generator
+import string
+from Editeur.utils import extension_fichier,stripPath, save_in_file
+
+class DUP :
+
+   def __init__(self,code):
+       """
+       """
+       self.format_fichier="python"
+       self.version_code=None
+       self.code=code
+
+       self.top=None
+       self.test=2
+       from Editeur import configuration
+       self.CONFIGURATION=configuration.make_config(self,prefs.REPINI)
+
+       self.load_readercata()
+       self.cata=self.readercata.cata
+
+       self.JDC=None
+       self.JDCName=""
+       self.J2=None
+
+   def load_readercata(self):
+       mname='readercata'
+       module=__import__(mname,globals(),locals())
+       factory=getattr(module,mname.upper())
+       appli_composant=factory(self,self.top)
+       setattr(self,mname,appli_composant)
+
+
+   def openJDC(self,fichier):
+      if fichier :
+          self.fichier = fichier
+          e=extension_fichier(fichier)
+          self.JDCName=stripPath(fichier)
+          self.initialdir = os.path.dirname(os.path.abspath(fichier))
+      else :
+          return
+
+      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(fichier)
+         text=p.convert('exec',self)
+         if not p.cr.estvide(): 
+            print ("Erreur à la conversion")
+            print str(p.cr)
+            return
+
+      # On se met dans le repertoire ou se trouve le fichier de commandes
+      # pour trouver les eventuels fichiers include ou autres
+      # localises a cote du fichier de commandes
+      os.chdir(self.initialdir)
+      CONTEXT.unset_current_step()
+      J=self.cata[0].JdC(procedure=text,appli=self,
+                         cata=self.cata,cata_ord_dico=self.readercata.cata_ordonne_dico,
+                         nom = self.JDCName,
+                         rep_mat=self.CONFIGURATION.rep_mat,
+                         )
+
+      J.analyse()
+
+      txt_exception = J.cr.get_mess_exception()
+      if txt_exception :
+          # des exceptions ont été levées à la création du JDC 
+          # --> on affiche les erreurs mais pas le JDC
+          self.JDC=J
+          print("Erreur fatale au chargement de %s" %file)
+      else :
+          self.JDC=J
+
+   def modifieJDC(self,texte):
+         if texte == None or texte == "" : return
+         format="python"
+         lignes=string.split(texte,";")
+         textedecoup=""
+         for l in lignes :
+            textedecoup=textedecoup+l+'\n'
+         if convert.plugins.has_key(format):
+            p=convert.plugins[format]()
+            p.settext(textedecoup)
+            text=p.convert('exec',self)
+         if not p.cr.estvide(): 
+            print ("Erreur à la conversion")
+            print str(p.cr)
+            return
+         self.J2=self.cata[0].JdC(procedure=text,appli=self,
+                         cata=self.cata,
+                         cata_ord_dico=self.readercata.cata_ordonne_dico,
+                         nom = self.JDCName+"2",
+                         rep_mat=self.CONFIGURATION.rep_mat,
+                         )
+         self.J2.definition.code = "MODIF"
+         self.J2.analyse()
+     
+
+   def saveJDC(self,fichierSortie):
+      """ 
+          Sauvegarde le JDC courant.
+          Retourne 1 si la sauvegarde s'est bien faite, 0 sinon.
+      """
+      if not hasattr(self,'JDC') : return 0
+
+      format="Modif"
+
+      if generator.plugins.has_key(format):
+         g=generator.plugins[format]()
+         jdc_formate=g.genermodifparam(self.JDC,self.J2)
+         if not g.cr.estvide():
+            self.affiche_infos("Erreur à la generation")
+            return 0
+      else:
+         self.affiche_infos("Format %s non reconnu" % format)
+         return 0
+
+      self.jdc_fini = string.replace(jdc_formate,'\r\n','\n')
+
+      if not save_in_file(fichierSortie,self.jdc_fini) :
+         self.affiche_infos("Problème à la sauvegarde du fichier")
+         return 0
+      else :
+         self.affiche_infos("sauvegarde effectuée")
+         return 1
+
+
+   def affiche_infos(self,mess):
+       print mess
+          
diff --git a/InterfaceTK/compobase.py b/InterfaceTK/compobase.py
new file mode 100644 (file)
index 0000000..a287b7d
--- /dev/null
@@ -0,0 +1,3 @@
+from Editeur import Objecttreeitem
+treeitem = Objecttreeitem.ObjectTreeItem
+objet = None
diff --git a/InterfaceTK/compobloc.py b/InterfaceTK/compobloc.py
new file mode 100644 (file)
index 0000000..e92d519
--- /dev/null
@@ -0,0 +1,42 @@
+# -*- 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.
+#
+#
+# ======================================================================
+from Tkinter import *
+import Pmw
+
+from Editeur import Objecttreeitem
+import compofact
+
+
+class BLOCTreeItem(compofact.FACTTreeItem):
+  panel = compofact.FACTPanel
+
+  def get_objet(self,name) :
+      for v in self.object.mc_liste:
+          if v.nom == name : return v
+      return None
+    
+  def iscopiable(self):
+    return 0
+
+
+import Accas
+treeitem = BLOCTreeItem
+objet = Accas.MCBLOC   
diff --git a/InterfaceTK/compocomm.py b/InterfaceTK/compocomm.py
new file mode 100644 (file)
index 0000000..949014c
--- /dev/null
@@ -0,0 +1,170 @@
+# -*- 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.
+#
+#
+# ======================================================================
+from Tkinter import *
+import Pmw
+import string
+
+from Editeur import Objecttreeitem
+import panels
+import fontes
+
+Fonte_Commentaire = fontes.standard_italique
+
+class COMMPanel(panels.OngletPanel):
+  
+  def init(self):
+    """
+    Initialise les frame des panneaux contextuels relatifs à un COMMENTAIRE
+    """
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    nb.pack(fill = 'both', expand = 1)
+    self.nb=nb
+    nb.add('TexteComm', tab_text='Texte Commentaire')
+    nb.add('Commande', tab_text='Nouvelle Commande')
+    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
+    self.makeCOMMPage(nb.page("TexteComm"))
+    self.makeCommandePage(nb.page("Commande"))
+    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
+    nb.tab('TexteComm').focus_set()
+    self.enlevebind()
+    self.creebind()
+    nb.setnaturalsize()
+    
+  def makeCOMMPage(self,page):
+    """
+    Crée la page qui permet d'afficher et d'éditer le texte du commentaire
+    """
+    self.frame_valeur = Frame(page)
+    self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
+    self.widget_text = Pmw.ScrolledText(self.frame_valeur,
+                                        borderframe=1,
+                                        labelpos='n',
+                                        label_text = 'Texte du commentaire\n ')
+    self.widget_text.pack(side='top',expand=1,fill='both')
+    self.widget_text.configure(hscrollmode='dynamic',
+                               vscrollmode='dynamic')
+    self.widget_text.component('text').configure(background = 'white')
+    self.make_buttons()
+    self.display_valeur()
+
+  def make_buttons(self):
+    """
+    Crée les boutons du panneau
+    """
+    #self.bouton_sup.place_forget()
+    #self.bouton_doc.place_forget()
+    #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
+    #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
+
+    #self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
+    #self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
+    #self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
+
+    self.bouton_sup.pack_forget()
+    self.bouton_doc.pack_forget()
+    self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur)
+    self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur)
+
+    self.bouton_val.pack(side='left',padx=5, pady=5)
+    self.bouton_ann.pack(side='left',padx=5, pady=5)
+    self.bouton_sup.pack(side='right',padx=5, pady=5)
+
+  def change_valeur(self):
+    """
+    Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du commentaire
+    """
+    if self.parent.modified == 'n' : self.parent.init_modif()
+    new_valeur = self.widget_text.get()
+    self.node.item.set_valeur(new_valeur)
+    self.node.update()
+
+  def display_valeur(self):
+    """
+    Affiche dans self.widget_text la valeur de l'objet commentaire
+    (annule d'éventuelles modifications faite par l'utilisateur)
+    """
+    t=self.node.item.get_valeur()
+    try:
+        self.widget_text.settext(unicode(t))
+    except:
+        # Si probleme avec unicode
+        self.widget_text.settext(t)
+    
+class COMMTreeItem(Objecttreeitem.ObjectTreeItem):
+    panel = COMMPanel
+
+    def init(self):
+      self.setfunction = self.set_valeur
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icône associée au noeud qui porte self,
+      dépendant de la validité de l'objet
+      NB : un commentaire est toujours valide ...
+      """
+      return "ast-white-percent"
+
+    def GetLabelText(self):
+        """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+        """
+        return 'commentaire',Fonte_Commentaire,None
+
+    def get_valeur(self):
+      """
+      Retourne la valeur de l'objet Commentaire cad son texte
+      """
+      return self.object.get_valeur() or ''
+    
+    def GetText(self):
+        texte = self.object.valeur
+        texte = string.split(texte,'\n')[0]
+        if len(texte) < 25 :
+            return texte
+        else :
+            return texte[0:24]
+
+    def set_valeur(self,valeur):
+      """
+      Afefcte valeur à l'objet COMMENTAIRE
+      """
+      self.object.set_valeur(valeur)
+      
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      """
+      return []
+
+
+    def get_objet_commentarise(self):
+       """
+           La méthode get_objet_commentarise() de la classe compocomm.COMMTreeItem
+           surcharge la méthode get_objet_commentarise de la classe Objecttreeitem.ObjectTreeItem
+           elle a pour but d'empecher l'utilisateur final de commentariser un commentaire.
+       """
+       raise Exception( 'Citoyen : tu peux "commentariser" une commande MAIS PAS UN COMMENTAIRE' )
+  
+import Extensions
+treeitem =COMMTreeItem
+objet = Extensions.commentaire.COMMENTAIRE    
diff --git a/InterfaceTK/compocommandecomm.py b/InterfaceTK/compocommandecomm.py
new file mode 100644 (file)
index 0000000..c7e55d7
--- /dev/null
@@ -0,0 +1,182 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+import traceback
+from Tkinter import *
+import Pmw
+import string
+from widgets import showerror
+
+from Editeur import Objecttreeitem
+import panels
+import fontes
+
+Fonte_Commentaire = fontes.standard_italique
+
+class COMMANDE_COMMPanel(panels.OngletPanel):
+  """
+  Classe servant à définir le panel associé à une commande commentarisée
+  """
+  def init(self):
+    """
+    Initialise les frame des panneaux contextuels relatifs à une commande commentarisée
+    """
+    panneau=Frame(self)
+    panneau.pack(expand=1,fill='both')
+    self.make_buttons()
+    self.makeCOMMPage(panneau)
+    self.enlevebind()
+
+  def makeCOMMPage(self,page):
+    """
+    Crée la page qui permet d'afficher et d'éditer le texte de la commande commentarisée
+    """
+    self.frame_valeur = Frame(page)
+    self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
+    self.widget_text = Pmw.ScrolledText(self.frame_valeur,
+                                        borderframe=1,
+                                        labelpos='n',
+                                        label_text = 'Texte de la commande\n ')
+    self.widget_text.pack(side='top',expand=1,fill='both')
+    self.widget_text.configure(hscrollmode='dynamic',
+                               vscrollmode='dynamic')
+    self.display_valeur()
+
+  def make_buttons(self):
+    """
+    Crée les boutons du panneau
+    """
+    #self.bouton_sup.place_forget()
+    #self.bouton_doc.place_forget()
+    #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
+    #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
+    #self.bouton_unc = Button(self.fr_but,text='Décommentariser',command=self.uncomment,width=14)
+
+    #self.bouton_val.place(relx=0.1,rely=0.5,relheight=1,relwidth=0.20,anchor='center')
+    #self.bouton_ann.place(relx=0.30,rely=0.5,relheight=1,relwidth=0.20,anchor='center')
+    #self.bouton_sup.place(relx=0.50,rely=0.5,relheight=1,relwidth=0.20,anchor='center')
+    #self.bouton_unc.place(relx=0.75,rely=0.5,relheight=1,relwidth=0.25,anchor='center')
+
+    self.bouton_sup.pack_forget()
+    self.bouton_doc.pack_forget()
+    self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur)
+    self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur)
+    self.bouton_unc = Button(self.fr_but,text='Décommentariser',command=self.uncomment)
+    self.bouton_val.pack(side='left',padx=5, pady=5)
+    self.bouton_ann.pack(side='left',padx=5, pady=5)
+    self.bouton_sup.pack(side='left',padx=5, pady=5)
+    self.bouton_unc.pack(side='right',padx=5, pady=5)
+
+  def change_valeur(self):
+    """
+    Stocke la nouvelle valeur donnée par l'utilisateur comme valeur de la commande commentarisée
+    """
+    if self.parent.modified == 'n' : self.parent.init_modif()
+    new_valeur = self.widget_text.get()
+    self.node.item.set_valeur(new_valeur)
+    self.node.update()
+
+  def display_valeur(self):
+    """
+    Affiche dans self.widget_text la valeur de la commande commentarisée
+    (annule d'éventuelles modifications faite par l'utilisateur)
+    """
+    self.widget_text.settext(self.node.item.get_valeur())
+
+  def uncomment(self):
+      """
+      Réalise la décommentarisation de self
+      """
+      try:
+          pos=self.node.parent.children.index(self.node)
+          commande,nom = self.node.item.uncomment()
+          self.node.parent.children[pos].select()
+      except Exception,e:
+          showerror("Erreur !",str(e))
+          return
+      #self.parent.appli.bureau.JDCDisplay_courant.ReplaceObjectNode(self.node,commande,nom)
+    
+class COMMANDE_COMMTreeItem(Objecttreeitem.ObjectTreeItem):
+    panel = COMMANDE_COMMPanel
+
+    def init(self):
+      self.setfunction = self.set_valeur
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icône associée au noeud qui porte self,
+      dépendant de la validité de l'objet
+      NB : une commande commentarisée est toujours valide ...
+      """
+      if self.isvalid():
+          return "ast-green-percent"
+      else:
+          return "ast-red-percent"
+
+    def GetLabelText(self):
+        """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+        """
+        return 'commande commentarisée',Fonte_Commentaire,None
+
+    def get_valeur(self):
+      """
+      Retourne la valeur de la commande commentarisée cad son texte
+      """
+      return self.object.get_valeur() or ''
+    
+    def GetText(self):
+        texte = self.object.valeur
+        texte = string.split(texte,'\n')[0]
+        if len(texte) < 25 :
+            return texte
+        else :
+            return texte[0:24]
+
+    def set_valeur(self,valeur):
+      """
+      Afefcte valeur à l'objet commande commentarisée
+      """
+      self.object.set_valeur(valeur)
+      
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      """
+      return []
+
+    def uncomment(self):
+      """
+      Demande à l'objet commande commentarisée de se décommentariser.
+      Si l'opération s'effectue correctement, retourne l'objet commande
+      et éventuellement le nom de la sd produite, sinon lève une exception
+      """
+      try:
+        commande,nom = self.object.uncomment()
+      except Exception,e:
+        traceback.print_exc()
+        raise e
+      return commande,nom
+  
+import Accas
+treeitem =COMMANDE_COMMTreeItem
+objet = Accas.COMMANDE_COMM    
diff --git a/InterfaceTK/compoerror.py b/InterfaceTK/compoerror.py
new file mode 100644 (file)
index 0000000..74e0c46
--- /dev/null
@@ -0,0 +1,45 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+from Tkinter import Label,Button
+
+#Modules Eficas
+from Noyau.N_OBJECT import ErrorObj
+from Editeur import Objecttreeitem
+import panels
+
+class ERRORPanel(panels.Panel_Inactif):
+    def creer_texte(self):
+        texte = """Le noeud sélectionné correspond à un objet erroné """
+        label = Label(self,text=texte,justify='center')
+        label.place(relx=0.5,rely=0.4,relwidth=0.8,anchor='center')
+        bouton = Button(self,text = "Supprimer", command=self.supprimer)
+        bouton.place(relx=0.5,rely=0.5,anchor='center')
+
+class ERRORTreeItem(Objecttreeitem.AtomicObjectTreeItem):
+    panel = ERRORPanel
+    def GetIconName(self):
+        return "ast-red-ball"
+
+
+treeitem =ERRORTreeItem
+objet = ErrorObj
+
diff --git a/InterfaceTK/compofact.py b/InterfaceTK/compofact.py
new file mode 100644 (file)
index 0000000..0d98438
--- /dev/null
@@ -0,0 +1,150 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+import Pmw
+from Editeur import Objecttreeitem
+import panels
+
+class FACTPanel(panels.OngletPanel) :
+  def init(self) :
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    nb.pack(fill = 'both', expand = 1) 
+    self.nb=nb
+    nb.add('Mocles', tab_text='Ajouter mots-clés')
+    panneau=Pmw.PanedWidget(nb.page("Mocles"),
+                            orient='horizontal')
+    panneau.add('left',min=0.4,max=0.6,size=0.5)
+    panneau.add('right',min=0.4,max=0.6,size=0.5)
+    panneau.pack(expand=1,fill='both')
+    self.makeMoclesPage(panneau.pane('left'))
+    self.makeReglesPage(panneau.pane('right'))
+    nb.tab('Mocles').focus_set()
+    nb.setnaturalsize()
+    self.enlevebind()
+    self.creebind()
+    self.affiche()
+
+import treewidget
+class Node(treewidget.Node):
+    def doPaste(self,node_selected):
+        objet_a_copier = self.item.get_copie_objet()
+        child=node_selected.doPaste_MCF(objet_a_copier)
+        return child
+
+    def doPaste_MCF(self,objet_a_copier):
+        child = self.parent.append_child(objet_a_copier,
+                                              pos=self.item,
+                                              retour='oui')
+        return child
+
+
+class FACTTreeItem(Objecttreeitem.ObjectTreeItem):
+  panel = FACTPanel
+  itemNode=Node
+  
+  def IsExpandable(self):
+    return 1
+
+  def GetText(self):
+      return  ''
+
+  def GetLabelText(self):
+      """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+      """
+      # None --> fonte et couleur par défaut
+      return self.object.getlabeltext(),None,None
+
+  def isvalid(self):
+    return self.object.isvalid()
+
+  def iscopiable(self):
+    return 1
+
+  def GetIconName(self):
+    if self.object.isvalid():
+      return "ast-green-los"
+    elif self.object.isoblig():
+      return "ast-red-los"
+    else:
+      return "ast-yel-los"
+
+  def keys(self):
+    keys=self.object.mc_dict.keys()
+    return keys
+
+  def GetSubList(self):
+      """
+         Reactualise la liste des items fils stockes dans self.sublist
+      """
+      liste=self.object.mc_liste
+      sublist=[None]*len(liste)
+      # suppression des items lies aux objets disparus
+      for item in self.sublist:
+         old_obj=item.getObject()
+         if old_obj in liste:
+            pos=liste.index(old_obj)
+            sublist[pos]=item
+         else:
+            pass # objets supprimes ignores
+      # ajout des items lies aux nouveaux objets
+      pos=0
+      for obj in liste:
+         if sublist[pos] is None:
+            # nouvel objet : on cree un nouvel item
+            def setfunction(value, object=obj):
+                object.setval(value)
+            item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
+            sublist[pos]=item
+         pos=pos+1
+
+      self.sublist=sublist
+      return self.sublist
+
+  def additem(self,name,pos):
+    #print "compofact.additem",name,pos
+    objet = self.object.addentite(name,pos)
+    return objet
+
+  def suppitem(self,item) :
+      """ 
+         Cette methode a pour fonction de supprimer l'item passé en argument
+         des fils de l'item FACT qui est son pere
+           - item = item du MOCLE à supprimer du MOCLE père
+           - item.getObject() = MCSIMP ou MCBLOC 
+      """
+      itemobject=item.getObject()
+      if itemobject.isoblig() :
+         self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
+         return 0
+
+      if self.object.suppentite(itemobject):
+         message = "Mot-clé " + itemobject.nom + " supprimé"
+         self.appli.affiche_infos(message)
+         return 1
+      else:
+         self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
+         return 0
+
+import Accas
+objet = Accas.MCFACT
+treeitem = FACTTreeItem
diff --git a/InterfaceTK/compoformule.py b/InterfaceTK/compoformule.py
new file mode 100644 (file)
index 0000000..e6f2279
--- /dev/null
@@ -0,0 +1,410 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+Ce module contient les classes permettant de définir les objets graphiques
+représentant un objet de type FORMULE, cad le panneau et l'item de l'arbre
+d'EFICAS
+"""
+
+# import modules Python
+from Tkinter import *
+import Pmw
+import string
+
+# import modules EFICAS
+import widgets
+import panels
+import fontes
+import compooper
+
+Fonte_TITRE = fontes.standard_gras_souligne
+
+
+class FORMULEPanel(panels.OngletPanel):
+  """
+  Classe servant à construire le panneau associé à un paramètre.
+  C'est au moyen de ce panneau que l'utilisateur peut accéder
+  aux nom et valeur du paramètre en vue éventuellement de les
+  modifier.
+  """
+
+  def init(self):
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    nb.pack(fill = 'both', expand = 1)
+    self.nb=nb
+    nb.add('Formule', tab_text='Définition Formule')
+    nb.add('Commande', tab_text='Nouvelle Commande')
+    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
+    self.makeFormulePage(nb.page("Formule"))
+    self.makeCommandePage(nb.page("Commande"))
+    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
+    nb.tab('Formule').focus_set()
+    self.enlevebind()
+    self.creebind()
+    nb.setnaturalsize()
+    
+  def makeFormulePage(self,page):
+    """
+    Crée la page qui permet d'afficher et d'éditer le texte de la FORMULE
+    """
+    self.frame_valeur = Frame(page)
+    self.frame_valeur.pack(fill='both',expand=1)
+    #self.frame_valeur.place(relwidth=0.95,relheight=0.95,relx=0.05,rely=0.05,anchor='nw')
+    #self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
+    # affichage du titre du panneau
+    self.titre = StringVar()
+    self.titre.set("FORMULE "+self.node.item.get_nom())
+
+    self.entry_nom = Entry(self.frame_valeur)
+    #Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.,anchor='n')
+    Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).grid(row=0,columnspan=2,padx=5,pady=5)
+    # création des labels et entries associés aux nom, type retourné, arguments et corps de la FORMULE
+    
+    #Label(self.frame_valeur,text= 'Nom de la formule : ').place(relx=0.,rely=0.1)
+    Label(self.frame_valeur,text= 'Nom de la formule : ').grid(row=1,sticky=W,padx=5,pady=5)
+    #Label(self.frame_valeur,text= 'Arguments : ').place(relx=0.,rely=0.40)
+    Label(self.frame_valeur,text= 'Arguments : ').grid(row=2,sticky=W,padx=5,pady=5)
+    self.entry_arg = Entry(self.frame_valeur)
+    #Label(self.frame_valeur,text= 'Expression : ').place(relx=0.,rely=0.65)
+    Label(self.frame_valeur,text= 'Expression : ').grid(row=4,sticky=W,padx=5,pady=5)
+    self.entry_exp = Entry(self.frame_valeur)
+
+    # binding sur les entries
+    self.entry_nom.bind("<Return>",self.verif_nom)
+    self.entry_nom.bind("<KP_Enter>",self.verif_nom)
+    self.entry_arg.bind("<Return>",self.verif_arguments)
+    self.entry_arg.bind("<KP_Enter>",self.verif_arguments)
+    self.entry_exp.bind("<Return>",self.verif_corps)
+    self.entry_exp.bind("<KP_Enter>",self.verif_corps)
+    # affichage des entries
+    #self.entry_nom.place(relx=0.35,rely=0.10,relwidth=0.2)
+    self.entry_nom.grid(row=1,column=1,sticky=W,padx=5,pady=5)
+    #self.entry_arg.place(relx=0.35,rely=0.40,relwidth=0.4)
+    self.entry_arg.grid(row=2,column=1,sticky=W,padx=5,pady=5)
+
+    # affichage d'une phrase d'aide pour les arguments
+    aide = """Entrer les arguments sous la forme
+de VARIABLES séparées par des virgules (,)
+Exemple X,Y,Z """
+    #Label(self.frame_valeur,text=aide, justify="l").place(relx=0.5,rely=0.47,anchor='n') 
+    Label(self.frame_valeur,text=aide, justify="l").grid(row=3,columnspan=2,padx=5,pady=5)
+
+    #self.entry_exp.place(relx=0.35,rely=0.65,relwidth=0.60)
+    self.entry_exp.grid(row=4,column=1,sticky=W,padx=5,pady=5)
+    # affichage d'une phrase d'aide pour l'expression
+    aide = """Un retour de chariot dans une zone de saisie vous permet de vérifier si
+la valeur que vous avez entrée est valide.
+Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
+valeurs seront effectivement prises en compte."""
+    #Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.75,anchor='n')
+    Label(self.frame_valeur,text=aide).grid(row=5,columnspan=2,padx=5,pady=5)
+    self.frame_valeur.columnconfigure(1,weight=1)
+
+    # affichage des nom, type retourné, arguments et corps de la FORMULE
+    self.display_valeur()
+    # affichage des boutons
+    self.make_buttons()
+    # entry_nom prend le focus
+    self.entry_nom.focus()
+
+  def make_buttons(self):
+    """
+    Crée les boutons du panneau
+    """
+    #self.bouton_sup.place_forget()
+    #self.bouton_doc.place_forget()
+    #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
+    #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
+
+    #self.bouton_val.place(relx=0.15,rely=0.5,relheight=0.8,anchor='center')
+    #self.bouton_ann.place(relx=0.40,rely=0.5,relheight=0.8,anchor='center')
+    #self.bouton_sup.place(relx=0.65,rely=0.5,relheight=0.8,anchor='center')
+    #self.bouton_doc.place(relx=0.90,rely=0.5,relheight=0.8,anchor='center')
+
+    self.bouton_sup.pack_forget()
+    self.bouton_doc.pack_forget()
+    self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur)
+    self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur)
+
+    self.bouton_val.pack(side='left',padx=5, pady=5)
+    self.bouton_ann.pack(side='left',padx=5, pady=5)
+    self.bouton_sup.pack(side='left',padx=5, pady=5)
+    self.bouton_doc.pack(side='right',padx=5, pady=5)
+
+  def change_valeur(self):
+    """
+    Stocke la nouvelle FORMULE décrite par l'utilisateur
+    """
+    if self.parent.modified == 'n' : self.parent.init_modif()
+    # on récupère les nouveaux nom, type retourné, arguments et corps de la FORMULE
+    new_nom = self.entry_nom.get()
+    new_typ="REEL" 
+    new_arg = self.entry_arg.get()
+    new_exp = self.entry_exp.get()
+    self.verif_arguments()
+    self.verif_corps()
+    # on essaie de les stocker
+    test,erreur = self.node.item.save_formule(new_nom,new_typ,new_arg,new_exp)
+    if test :
+        # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage
+        self.node.update()
+        self.display_valeur()
+        self.parent.appli.affiche_infos("FORMULE %s modifiée" %self.node.item.get_nom())
+    else:
+        # la formule est incorrecte : on affiche les erreurs
+        widgets.showerror("Formule incorrecte",erreur)
+        self.parent.appli.affiche_infos("FORMULE %s non modifiée" %self.node.item.get_nom())
+    
+  def display_valeur(self):
+    """
+    Affiche dans self.widget_text de la valeur de l'objet FORMULE
+    (annule d'éventuelles modifications faite par l'utilisateur)
+    """
+    # on efface tout texte affiché dans les entries
+    self.entry_nom.delete(0,END)
+    self.entry_arg.delete(0,END)
+    self.entry_exp.delete(0,END)
+    # on rafraîchit le titre du panneau
+    self.titre.set('FORMULE '+self.node.item.get_nom())
+    # on insére les nouveaux nom, type retourné, arguments et corps de la FORMULE
+    nom = self.node.item.get_nom()
+    if nom != '':
+        self.entry_nom.insert(END,nom)
+    args = self.node.item.get_args()
+    if args:
+        texte_args=""
+        for i in args :
+            if texte_args != "" :
+               texte_args = texte_args +","
+            texte_args=texte_args + i
+        self.entry_arg.insert(END,texte_args)
+    corps = self.node.item.get_corps()
+    if corps :
+        self.entry_exp.insert(END,self.node.item.get_corps())
+
+  def verif_nom(self,event=None):
+        """
+        Lance la vérification du nom présent dans entry_nom
+        """
+        nom = self.entry_nom.get()
+        if nom == '':
+            test,erreur = 0,"Aucun nom fourni !"
+        else:
+            test,erreur = self.node.item.verif_nom(nom)
+        if not test:
+            widgets.showerror("Nom invalide",erreur)
+            self.entry_nom.focus()
+            self.entry_nom.selection_range(0,END)
+            self.parent.appli.affiche_infos("%s n'est pas un nom valide pour une FORMULE" %nom)
+        else:
+            self.parent.appli.affiche_infos("%s est un nom valide pour une FORMULE" %nom)
+            self.entry_arg.focus()
+
+  def verif_arguments(self,event=None):
+        """
+        Lance la vérification des arguments présents dans entry_arg
+        """
+        arguments = self.entry_arg.get()
+        if arguments == '' :
+            test,erreur = 0,"Aucun argument fourni"
+        else:
+            test,erreur = self.node.item.verif_arguments(arguments)
+        if not test:
+            widgets.showerror("Argument(s) invalide(s)",erreur)
+            self.entry_arg.focus()
+            self.entry_arg.selection_range(0,END)
+            self.parent.appli.affiche_infos("Argument(s) invalide(s) pour une FORMULE")
+        else:
+            self.parent.appli.affiche_infos("Argument(s) valide(s) pour une FORMULE")
+            self.entry_exp.focus()
+
+  def verif_corps(self,event=None):
+        """
+        Lance la vérification du corps de formule présent dans entry_exp
+        """
+        new_nom = self.entry_nom.get()
+        new_typ="REEL"
+        new_arg = self.entry_arg.get()
+        new_exp = self.entry_exp.get()
+        if new_exp == '':
+            test,erreur = 0,"Aucune expression fournie !"
+        else:
+            test,erreur = self.node.item.verif_formule_python((new_nom,new_typ,new_arg,new_exp))
+        if not test:
+            widgets.showerror("Corps de FORMULE invalide",erreur)
+            self.entry_exp.focus()
+            self.entry_exp.selection_range(0,END)
+            self.parent.appli.affiche_infos("Corps de FORMULE invalide")
+        else:
+            self.parent.appli.affiche_infos("Corps de FORMULE valide")
+            
+class FORMULETreeItem(compooper.EtapeTreeItem):
+    """
+    Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
+    qui représente la FORMULE
+    """
+    panel = FORMULEPanel
+
+    def init(self):
+      self.setfunction = self.set_valeur
+
+# ---------------------------------------------------------------------------
+#                   API de FORMULE pour l'arbre 
+# ---------------------------------------------------------------------------
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      On considère que FORMULE n'a pas de fils
+      --> modification par rapport à MACRO classique
+      """
+      # dans EFICAS on ne souhaite pas afficher les mots-clés fils de FORMULE
+      # de façon traditionnelle
+      return []
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icône à afficher dans l'arbre
+      Ce nom dépend de la validité de l'objet
+      """
+      if self.object.isactif():
+        if self.object.isvalid():
+          return "ast-green-square"
+        else:
+          return "ast-red-square"
+      else:
+        return "ast-white-text"
+
+    def GetLabelText(self):
+      """ Retourne 3 valeurs :
+      - le texte à afficher dans le noeud représentant l'item
+      - la fonte dans laquelle afficher ce texte
+      - la couleur du texte
+      """
+      if self.object.isactif():
+        # None --> fonte et couleur par défaut
+        return self.labeltext,None,None
+      else:
+        return self.labeltext,fontes.standard_italique,None
+    
+# ---------------------------------------------------------------------------
+#       Méthodes permettant la modification et la lecture des attributs
+#       du paramètre = API graphique de la FORMULE pour Panel et EFICAS
+# ---------------------------------------------------------------------------
+
+    def get_nom(self):
+      """
+      Retourne le nom de la FORMULE
+      """
+      return self.object.get_nom()
+
+    def get_type(self):
+      """
+      Retourne le type de la valeur retournée par la FORMULE
+      """
+      return self.object.type_retourne
+
+    def get_args(self):
+      """
+      Retourne les arguments de la FORMULE
+      """
+      args=""
+      for mot in self.object.mc_liste:
+          if mot.nom == 'NOM_PARA':
+             args=mot.valeur
+             break
+      if args :
+          if args[0] == "(" and args[-1] ==")":
+             args=args[1:-1]
+          # transforme en tuple si ce n est pas déjà le casa
+          try :
+             args=string.split(args,',')
+          except :
+             pass
+      return args
+
+    def get_corps(self):
+      """
+      Retourne le corps de la FORMULE
+      """
+      corps=""
+      for mot in self.object.mc_liste:
+          if mot.nom == 'VALE':
+             corps=mot.valeur
+             break
+      return corps
+
+
+    def get_liste_types_autorises(self):
+      """
+         Retourne la liste des types autorises pour les valeurs de sortie 
+         d'une FORMULE
+      """
+      return self.object.l_types_autorises
+
+    def save_formule(self,new_nom,new_typ,new_arg,new_exp):
+      """
+      Vérifie si (new_nom,new_typ,new_arg,new_exp) définit bien une FORMULE 
+      licite :
+          - si oui, stocke ces paramètres comme nouveaux paramètres de la 
+            FORMULE courante et retourne 1
+          - si non, laisse les paramètres anciens de la FORMULE inchangés et 
+            retourne 0
+      """
+      test,erreur = self.object.verif_formule_python(formule=(new_nom,new_typ,new_arg,
+                                                       new_exp))
+      if test :
+          # la formule est bien correcte : on sauve les nouveaux paramètres
+          test=self.object.update_formule_python(formule=(new_nom,new_typ,new_exp,new_arg))
+      return test,erreur
+
+# ---------------------------------------------------------------------------
+#          Accès aux méthodes de vérification de l'objet FORM_ETAPE
+# ---------------------------------------------------------------------------
+
+    def verif_nom(self,nom):
+        """
+        Lance la vérification du nom passé en argument
+        """
+        return self.object.verif_nom(nom)
+
+    def verif_arguments(self,arguments):
+        """
+        Lance la vérification des arguments passés en argument
+        """
+        return self.object.verif_arguments('('+arguments+')')
+
+    def verif_formule(self,formule):
+        """
+        Lance la vérification de FORMULE passée en argument
+        """
+        return self.object.verif_formule(formule=formule)
+
+
+    def verif_formule_python(self,formule):
+        """
+        Lance la vérification de FORMULE passée en argument
+        """
+        return self.object.verif_formule_python(formule=formule)
+
+import Accas
+treeitem =FORMULETreeItem
+objet = Accas.FORM_ETAPE
diff --git a/InterfaceTK/compojdc.py b/InterfaceTK/compojdc.py
new file mode 100644 (file)
index 0000000..fb9b7d7
--- /dev/null
@@ -0,0 +1,168 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+import Pmw
+from Editeur import Objecttreeitem
+import panels
+
+from widgets import ListeChoix
+
+class JDCPanel(panels.OngletPanel):
+  def init(self):
+      """ Initialise les frame des panneaux contextuels relatifs à un JDC """
+      panneau=Pmw.PanedWidget(self,orient='horizontal')
+      panneau.add('left',min=0.4,max=0.6,size=0.5)
+      panneau.add('right',min=0.4,max=0.6,size=0.5)
+      panneau.pack(expand=1,fill='both')
+      self.bouton_com.pack_forget()
+      self.makeJDCPage(panneau.pane('left'))
+      self.makeReglesPage(panneau.pane('right'))
+      self.enlevebind()
+    
+  def makeReglesPage(self,page) :
+    regles = []
+    regles = self.node.item.get_regles()
+    texte_regles = []
+    l_regles_en_defaut=[]
+    if len(regles) > 0:
+      l_noms_etapes = self.node.item.get_l_noms_etapes()
+      i = 0
+      for regle in regles :
+        texte_regles.append(regle.gettext())
+        texte,test = regle.verif(l_noms_etapes)
+        if test == 0 : l_regles_en_defaut.append(i)
+        i = i+1
+    Liste = ListeChoix(self,page,texte_regles,liste_marques=l_regles_en_defaut,active='non',titre="Règles")
+    Liste.affiche_liste()
+    # aide associée au panneau
+    bulle_aide="""Ce panneau contient la liste des règles qui s'appliquent à l'objet
+    en cours d'édition.
+    - en noir : règles valides
+    - en rouge : règles violées"""
+    Liste.MCbox.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+    Liste.MCbox.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
+import treewidget
+class Node(treewidget.Node):
+    def doPaste_Commande(self,objet_a_copier):
+        """
+          Réalise la copie de l'objet passé en argument qui est nécessairement
+          une commande
+        """
+        #child = self.item.append_child(objet_a_copier,pos='first')
+        child = self.append_child(objet_a_copier,pos='first',retour='oui')
+        #if child is None : return 0
+        return child
+
+
+class JDCTreeItem(Objecttreeitem.ObjectTreeItem):
+  panel = JDCPanel
+  itemNode=Node
+  
+  def IsExpandable(self):
+    return 1
+
+  def GetText(self):
+      return  "    "
+
+  def GetLabelText(self):
+      # None --> fonte et couleur par défaut
+      return self.object.nom,None,None
+
+  def get_jdc(self):
+    """
+    Retourne l'objet pointé par self
+    """
+    return self.object
+  
+  def GetIconName(self):
+    if self.object.isvalid():
+      return "ast-green-square"
+    else:
+      return "ast-red-square"
+
+  def keys(self):
+      if self.object.etapes_niveaux != []:
+          return range(len(self.object.etapes_niveaux))
+      else:
+          return range(len(self.object.etapes))
+
+  def additem(self,name,pos):
+      cmd = self._object.addentite(name,pos)
+      return cmd
+
+  def suppitem(self,item) :
+    # item = item de l'ETAPE à supprimer du JDC
+    # item.getObject() = ETAPE ou COMMENTAIRE
+    # self.object = JDC
+    itemobject=item.getObject()
+    if self.object.suppentite(itemobject):
+       if itemobject.nature == "COMMENTAIRE" :
+          message = "Commentaire supprimé"
+       else :
+          message = "Commande " + itemobject.nom + " supprimée"
+       self.appli.affiche_infos(message)
+       return 1
+    else:
+       self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet")
+       return 0
+
+  def GetSubList(self):
+    """
+       Retourne la liste des items fils de l'item jdc.
+       Cette liste est conservee et mise a jour a chaque appel
+    """
+    if self.object.etapes_niveaux != []:
+        liste = self.object.etapes_niveaux
+    else:
+        liste = self.object.etapes
+    sublist=[None]*len(liste)
+    # suppression des items lies aux objets disparus
+    for item in self.sublist:
+       old_obj=item.getObject()
+       if old_obj in liste:
+          pos=liste.index(old_obj)
+          sublist[pos]=item
+       else:
+          pass # objets supprimes ignores
+    # ajout des items lies aux nouveaux objets
+    pos=0
+    for obj in liste:
+       if sublist[pos] is None:
+          # nouvel objet : on cree un nouvel item
+          item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj)
+          sublist[pos]=item
+       pos=pos+1
+
+    self.sublist=sublist
+    return self.sublist
+
+  def get_l_noms_etapes(self):
+      """ Retourne la liste des noms des étapes de self.object"""
+      return self.object.get_l_noms_etapes()
+
+  def get_liste_cmd(self):
+      #print "get_liste_cmd",self.object.niveau.definition
+      listeCmd = self.object.niveau.definition.get_liste_cmd()
+      return listeCmd
+
+import Accas
+treeitem =JDCTreeItem
+objet = Accas.JDC    
diff --git a/InterfaceTK/compomacro.py b/InterfaceTK/compomacro.py
new file mode 100644 (file)
index 0000000..e8f0505
--- /dev/null
@@ -0,0 +1,311 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import os,sys,string
+import types
+import Tkinter
+import Pmw
+import traceback
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import panels
+import fontes
+import compooper
+import convert
+from widgets import askopenfilename
+from widgets import Fenetre,FenetreYesNo
+from widgets import showinfo,showerror
+
+#
+__version__="$Name: V1_14 $"
+__Id__="$Id: compomacro.py,v 1.1.4.4.4.1 2008-10-10 13:47:11 pnoyret Exp $"
+#
+
+class MACROPanel(panels.OngletPanel):
+  def init(self):
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    nb.pack(fill = 'both', expand = 1)
+    self.nb=nb
+    nb.add('Mocles', tab_text='Ajouter mots-clés')
+    typsd=self.node.item.object.get_type_produit()
+    ficini = self.node.item.wait_fichier_init()
+    if typsd != None:
+      nb.add('Concept', tab_text='Nommer concept')
+    if ficini == 1:
+      nb.add('Fichierinit',tab_text = 'Fichier %s' %self.node.item.get_nom())
+    nb.add('Commande', tab_text='Nouvelle Commande')
+    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
+    panneau=Pmw.PanedWidget(nb.page("Mocles"),
+                            orient='horizontal')
+    panneau.add('left',min=0.4,max=0.6,size=0.5)
+    panneau.add('right',min=0.4,max=0.6,size=0.5)
+    panneau.pack(expand=1,fill='both')
+    self.makeCommandePage(nb.page("Commande"))
+    if typsd != None:
+      self.makeConceptPage(nb.page("Concept"))
+    if ficini == 1 :
+      self.makeFichierPage(nb.page('Fichierinit'))
+    self.makeMoclesPage(panneau.pane('left'))
+    self.makeReglesPage(panneau.pane('right'))
+    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
+    nb.tab('Mocles').focus_set()
+    nb.setnaturalsize()
+    self.enlevebind()
+    self.creebind()
+    self.affiche()
+
+  def makeFichierPage(self,page):
+    """
+    Affiche la page d'onglet correspondant au changement du fichier
+    dont a besoin la macro
+    """
+    titre = Tkinter.Label(page,text="La commande %s requiert un fichier " %self.node.item.get_nom())
+    titre.place(relx=0.5,rely=0.2,anchor='center')
+    frameMain=Tkinter.Frame(page)
+    frameMain.place(relx=0.5,rely=0.4,anchor='center',relwidth=1.)
+    Tkinter.Label(frameMain,text="Fichier :").pack(side='left',padx=5)
+    self.entry = Tkinter.Entry(frameMain,relief='sunken',bg='white')
+    self.entry.pack(side='left',padx=5,fill='x',expand=1)
+    frameButtons=Tkinter.Frame(page)
+    but1=Tkinter.Button(frameButtons,text='Valider',command = self.change_fichier_init)
+    but2=Tkinter.Button(frameButtons,text='Browse',command = self.browse_fichier_init)
+    but3=Tkinter.Button(frameButtons,text='Annuler',command = self.annule_fichier_init)
+    but1.grid(row=0,column=0,padx=5,pady=5)
+    but2.grid(row=0,column=1,padx=5,pady=5)
+    but3.grid(row=0,column=2,padx=5,pady=5)
+    frameButtons.place(relx=0.5,rely=0.6,anchor='center')
+
+    if hasattr(self.node.item.object,'fichier_ini'):
+      if self.node.item.object.fichier_ini :
+        self.entry.insert(0,self.node.item.object.fichier_ini)
+    self.entry.focus()
+
+  def convert_file(self,file):
+     """
+         Methode pour convertir le fichier file dans le format courant
+     """
+     format=self.parent.appli.format_fichier.get()
+     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.parent.appli.affiche_infos("Erreur à la conversion")
+            Fenetre(self,
+                    titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier",
+                    texte = str(p.cr))
+            return None
+         return text
+     else:
+         # Il n'existe pas c'est une erreur
+         self.parent.appli.affiche_infos("Type de fichier non reconnu")
+         showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")
+         return None
+
+  def change_fichier_init(self,event=None):
+    """ 
+        Effectue le changement de fichier d'initialisation s'il est valide 
+    """
+    new_fic = self.entry.get()
+    if not os.path.isfile(new_fic) :
+      showinfo("Fichier introuvable","Le fichier que vous avez saisi\n"+
+               "n'est pas un nom de fichier valide !")
+      self.parent.appli.affiche_infos("Fichier introuvable")
+      return
+    # On convertit le fichier
+    text=self.convert_file(new_fic)
+    # Si probleme a la lecture-conversion on arrete le traitement
+    if not text:
+       return
+
+    try:
+      self.node.item.object.change_fichier_init(new_fic,text)
+      self.parent.appli.affiche_infos("Fichier %s modifié" %self.node.item.get_nom())
+    except:
+      # Erreurs lors de l'evaluation de text dans un JDC auxiliaire
+      self.parent.appli.affiche_infos("Fichier invalide")
+      l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
+      f=FenetreYesNo(self.parent.appli,titre="Fichier invalide : voulez vous retablir l ancien fichier ?",
+                             texte="Erreur dans l'interprétation du nouveau fichier ...\n\n"+string.join(l),
+                             yes="Retablir",no="Changer")
+      f.wait()
+      reponse=f.result
+      if reponse:
+         # On retablit l'ancien fichier
+         self.entry.delete(0,Tkinter.END)
+         self.node.item.object.restore_fichier_init()
+         self.parent.appli.affiche_infos("Fichier invalide ... Ancien fichier restauré")
+         fic=self.node.item.object.fichier_ini
+         if fic:
+             self.entry.insert(0,fic)
+      else:
+         self.node.item.object.force_fichier_init()
+         self.parent.appli.affiche_infos("Fichier invalide ... Nouveau fichier mémorisé")
+
+  def annule_fichier_init(self,event=None):
+    """ Restaure dans self.entry le nom de fichier_init"""
+    self.entry.delete(0,Tkinter.END)
+    if self.node.item.object.fichier_ini:
+       self.entry.insert(0,self.node.item.object.fichier_ini)
+
+  def browse_fichier_init(self,event=None):
+    """ 
+         Propose à l'utilisateur une Bsf et retourne le fichier 
+         sélectionné dans self.entry 
+    """
+    file = askopenfilename(title="Choix du fichier %s" %self.node.item.get_nom())
+    if file :
+      self.entry.delete(0,Tkinter.END)
+      self.entry.insert(0,file)
+    
+  def update_panel(self):
+    if hasattr(self,"entry"):
+       self.annule_fichier_init()
+    
+class MACROTreeItem(compooper.EtapeTreeItem):
+  """ Cette classe hérite d'une grande partie des comportements
+      de la classe compooper.EtapeTreeItem
+  """
+  panel=MACROPanel
+
+class INCLUDETreeItemBase(MACROTreeItem):
+  rmenu_specs=[("View","makeView"),
+               ("Edit","makeEdit"),
+              ]
+
+  def __init__(self,appli, labeltext, object, setfunction):
+    MACROTreeItem.__init__(self,appli, labeltext, object, setfunction)
+
+  def iscopiable(self):
+      """
+      Retourne 1 si l'objet est copiable, 0 sinon
+      """
+      return 0
+
+  def makeEdit(self,appli,node):
+    #print "makeEdit",self.object,self.object.nom
+    #print "makeEdit",self.object.jdc_aux,self.object.jdc_aux.nom
+    #print "makeEdit",self.object.jdc_aux.context_ini
+    if self.object.text_converted == 0:
+        # Le texte du fichier inclus n'a pas pu etre converti par le module convert
+        msg="Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n"
+        msg=msg+self.object.text_error
+        Fenetre(self,titre="Include non editable",texte=msg,wrap='none')
+        return
+
+    if not hasattr(self.object,"jdc_aux") or self.object.jdc_aux is None:
+       #L'include n'est pas initialise
+       self.object.build_include(None,"")
+
+    # On cree un nouvel onglet dans le bureau
+    appli.bureau.ShowJDC(self.object.jdc_aux,self.object.jdc_aux.nom,
+                             label_onglet=None,
+                             JDCDISPLAY=macrodisplay.MACRODISPLAY)
+
+  def makeView(self,appli,node):
+    if not hasattr(self.object,"jdc_aux") or self.object.jdc_aux is None:
+         showerror("Include vide",
+                 "L'include doit etre correctement initialisé pour etre visualisé")
+         return
+
+    nom=self.object.nom
+    if hasattr(self.object,'fichier_ini'):
+       if self.object.fichier_ini is None:
+          nom=nom+' '+"Fichier non défini"
+       else:
+          nom=nom+' '+self.object.fichier_ini
+    macdisp=macrodisplay.makeMacroDisplay(appli,self,nom)
+
+class INCLUDEPanel(MACROPanel):
+  def makeFichierPage(self,page):
+    """
+    Affiche la page d'onglet correspondant au changement du fichier INCLUDE
+    """
+    if not hasattr(self.node.item.object,'fichier_ini'):
+       titre = Tkinter.Label(page,text="L'INCLUDE n'a pas de fichier associé\nIl faut d'abord choisir un numero d'unité " )
+       titre.place(relx=0.5,rely=0.5,anchor='center')
+    else:
+       MACROPanel.makeFichierPage(self,page)
+
+class INCLUDETreeItem(INCLUDETreeItemBase):
+   panel=INCLUDEPanel
+
+class POURSUITETreeItem(INCLUDETreeItemBase): 
+  def makeEdit(self,appli,node):
+    if self.object.text_converted == 0:
+        # Le texte du fichier inclus n'a pas pu etre converti par le module convert
+        msg="Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n"
+        msg=msg+self.object.text_error
+        Fenetre(self,titre="Poursuite non editable",texte=msg,wrap='none')
+        return
+
+    if not hasattr(self.object,"jdc_aux") or self.object.jdc_aux is None:
+       #La poursuite n'est pas initialisee
+       text="""DEBUT()
+FIN()"""
+       self.object.build_poursuite(None,text)
+
+    # On cree un nouvel onglet dans le bureau
+    appli.bureau.ShowJDC(self.object.jdc_aux,self.object.jdc_aux.nom,
+                             label_onglet=None,
+                             JDCDISPLAY=macrodisplay.MACRODISPLAY)
+
+  def makeView(self,appli,node):
+    if not hasattr(self.object,"jdc_aux") or self.object.jdc_aux is None:
+         showerror("Poursuite vide","Une POURSUITE doit etre correctement initialisée pour etre visualisée")
+         return
+    nom=self.object.nom
+    if hasattr(self.object,'fichier_ini'):
+       if self.object.fichier_ini is None:
+          nom=nom+' '+"Fichier non défini"
+       else:
+          nom=nom+' '+self.object.fichier_ini
+    macdisp=macrodisplay.makeMacroDisplay(appli,self,nom)
+
+class INCLUDE_MATERIAUTreeItem(INCLUDETreeItemBase):
+  rmenu_specs=[("View","makeView"),
+              ]
+  def iscopiable(self):
+      """
+      Retourne 1 si l'objet est copiable, 0 sinon
+      """
+      return 1
+
+
+def treeitem(appli, labeltext, object, setfunction=None):
+   """ Factory qui retourne l'item adapté au type de macro : 
+       INCLUDE, POURSUITE, MACRO
+   """
+   if object.nom == "INCLUDE_MATERIAU":
+      return INCLUDE_MATERIAUTreeItem(appli, labeltext, object, setfunction)
+   elif object.nom == "INCLUDE":
+      return INCLUDETreeItem(appli, labeltext, object, setfunction)
+   elif object.nom == "POURSUITE":
+      return POURSUITETreeItem(appli, labeltext, object, setfunction)
+   else:
+      return MACROTreeItem(appli, labeltext, object, setfunction)
+
+import Accas
+objet=Accas.MACRO_ETAPE
+    
+import macrodisplay
diff --git a/InterfaceTK/compomclist.py b/InterfaceTK/compomclist.py
new file mode 100644 (file)
index 0000000..ba3704c
--- /dev/null
@@ -0,0 +1,225 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+import types
+from Tkinter import *
+import Pmw
+
+from Noyau.N_OBJECT import ErrorObj
+from Editeur import Objecttreeitem
+import panels
+import traceback
+
+class MCLISTPanel(panels.Panel):
+    def init(self):
+        test_ajout = self.node.item.ajout_possible()
+        nom_mcfact = self.node.item.get_nom()
+        if test_ajout:
+            texte = "Pour ajouter une autre occurrence du mot-clé facteur %s, cliquez ci-dessous" %nom_mcfact
+        else:
+            texte = "Vous ne pouvez pas ajouter une autre occurrence du mot-clé facteur %s ?" %nom_mcfact
+        self.label = Label(self,text = texte)
+        self.label.place(relx=0.5,rely=0.4,anchor='center')
+        if test_ajout:
+            self.but=Button(self,text="AJOUTER",command=self.ajout_occurrence)
+            self.but.place(relx=0.5,rely=0.6,anchor='center')
+            #Button(self,text="NON",command=None).place(relx=0.6,rely=0.6,anchor='center')
+
+    def ajout_occurrence(self,event=None):
+        self.node.parent.append_child(self.node.item.get_nom())
+
+import compofact
+import compoerror
+import treewidget
+
+class Node(treewidget.Node):
+    def doPaste(self,node_selected):
+        objet_a_copier = self.item.get_copie_objet()
+        child=node_selected.doPaste_MCF(objet_a_copier)
+        #print "doPaste",child
+        return child
+
+    def doPaste_MCF(self,objet_a_copier):
+        if self.item.isMCList() :
+          # le noeud courant est une MCList
+          child = self.append_child(objet_a_copier,pos='first',retour='oui')
+          #child = self.parent.append_child(objet_a_copier,pos='first',retour='oui')
+        elif self.item.isMCFact() :
+          # le noeud courant est un MCFACT
+          if self.parent.item.isMCList():
+             # le noeud selectionne est un MCFACT dans une MCList
+             child = self.parent.append_child(objet_a_copier,
+                                              pos=self.item,
+                                              retour='oui')
+          else:
+             # le noeud MCFACT selectionne n'est pas dans une MCList
+             child = self.parent.append_child(objet_a_copier,retour='oui')
+        else:
+          showinfo("Copie impossible",
+                   "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
+          self.appli.affiche_infos("Copie refusée")
+          child=None
+        #print "doPaste_MCF",child
+        return child
+
+class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
+    """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
+        du noyau Accas instances de la classe MCLIST.
+        Elle adapte ces objets pour leur permettre d'etre intégrés en tant que
+        noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
+        Cette classe délègue les appels de méthode et les accès
+        aux attributs à l'objet du noyau soit manuellement soit 
+        automatiquement (voir classe Delegate et attribut object).
+    """
+    itemNode=Node
+
+    def init(self):
+        # Si l'objet Accas (MCList) a moins d'un mot cle facteur
+        # on utilise directement ce mot cle facteur comme delegue
+        self.updateDelegate()
+
+    def updateDelegate(self):
+        if len(self._object) > 1:
+           self.setdelegate(self._object)
+        else:
+           self.setdelegate(self._object.data[0])
+
+    def panel(self,jdcdisplay,pane,node):
+        """ Retourne une instance de l'objet panneau associe a l'item (self)
+            Si la liste ne contient qu'un mot clé facteur, on utilise le panneau
+            FACTPanel.
+            Si la liste est plus longue on utilise le panneau MCLISTPanel.
+        """
+        if len(self._object) > 1:
+           return MCLISTPanel(jdcdisplay,pane,node)
+        elif isinstance(self._object.data[0],ErrorObj):
+           return compoerror.ERRORPanel(jdcdisplay,pane,node)
+        else:
+           return compofact.FACTPanel(jdcdisplay,pane,node)
+
+    def IsExpandable(self):
+        if len(self._object) > 1:
+           return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
+        else:
+           return compofact.FACTTreeItem.IsExpandable(self)
+
+    def GetSubList(self):
+        self.updateDelegate()
+        if len(self._object) <= 1:
+           self._object.data[0].alt_parent=self._object
+           return compofact.FACTTreeItem.GetSubList(self)
+
+        liste=self._object.data
+        sublist=[None]*len(liste)
+        # suppression des items lies aux objets disparus
+        for item in self.sublist:
+           old_obj=item.getObject()
+           if old_obj in liste:
+              pos=liste.index(old_obj)
+              sublist[pos]=item
+           else:
+              pass # objets supprimes ignores
+        # ajout des items lies aux nouveaux objets
+        pos=0
+        for obj in liste:
+           if sublist[pos] is None:
+              # nouvel objet : on cree un nouvel item
+              def setfunction(value, object=obj):
+                  object=value
+              item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
+              sublist[pos]=item
+              #Attention : on ajoute une information supplementaire pour l'actualisation de 
+              # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
+              # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
+              # informations de validite. alt_parent permet de remedier a ce defaut.
+              obj.alt_parent=self._object
+           pos=pos+1
+
+        self.sublist=sublist
+        return self.sublist
+
+    def GetIconName(self):
+        if self._object.isvalid():
+            return "ast-green-los"
+        elif self._object.isoblig():
+            return "ast-red-los"
+        else:
+            return "ast-yel-los"
+
+    def get_docu(self):
+        """ Retourne la clé de doc de l'objet pointé par self """
+        return self.object.get_docu()    
+
+    def iscopiable(self):
+        if len(self._object) > 1:
+           return Objecttreeitem.SequenceTreeItem.iscopiable(self)
+        else:
+           return compofact.FACTTreeItem.iscopiable(self)
+
+    def isMCFact(self):
+        """
+        Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
+        """
+        return len(self._object) <= 1
+
+    def isMCList(self):
+        """
+        Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
+        """
+        return len(self._object) > 1
+        
+    def get_copie_objet(self):
+        return self._object.data[0].copy()
+
+    def additem(self,obj,pos):
+        #print "compomclist.additem",obj,pos
+        if len(self._object) <= 1:
+           return compofact.FACTTreeItem.additem(self,obj,pos)
+
+        o= self.object.addentite(obj,pos)
+        return o
+
+    def suppitem(self,item):
+        """
+        Retire un objet MCFACT de la MCList (self.object) 
+        """
+        #print "compomclist.suppitem",item
+        obj=item.getObject()
+        if len(self._object) <= 1:
+           return compofact.FACTTreeItem.suppitem(self,item)
+
+        if self.object.suppentite(obj):
+           if len(self._object) == 1: self.updateDelegate()
+           message = "Mot-clé " + obj.nom + " supprimé"
+           self.appli.affiche_infos(message)
+           return 1
+        else:
+           self.appli.affiche_infos('Impossible de supprimer ce mot-clé')
+           return 0
+
+            
+import Accas
+objet = Accas.MCList    
+
+def treeitem(appli,labeltext,object,setfunction):
+  """ Factory qui produit un objet treeitem adapte a un objet 
+      Accas.MCList (attribut objet de ce module)
+  """
+  return MCListTreeItem(appli,labeltext,object,setfunction)
diff --git a/InterfaceTK/componiveau.py b/InterfaceTK/componiveau.py
new file mode 100644 (file)
index 0000000..175a3e8
--- /dev/null
@@ -0,0 +1,133 @@
+# -*- 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.
+#
+#
+# ======================================================================
+
+from Tkinter import *
+import Pmw
+
+from Editeur import Objecttreeitem
+import panels
+import fontes
+from Extensions import commentaire 
+
+Fonte_Niveau = fontes.canvas_gras_italique
+Fonte_Niveau_inactif = fontes.canvas_italique
+
+class NIVEAUPanel(panels.OngletPanel):
+    def init(self):
+        """ Initialise les frame des panneaux contextuels relatifs à un JDC """
+        panneau=Pmw.PanedWidget(self,orient='horizontal')
+        panneau.add('left',min=0.4,max=0.6,size=0.5)
+        panneau.add('right',min=0.4,max=0.6,size=0.5)
+        panneau.pack(expand=1,fill='both')
+        self.bouton_com.pack_forget()
+        self.makeJDCPage(panneau.pane('left'))
+        self.enlevebind()
+
+
+import treewidget
+class Node(treewidget.Node):pass
+
+
+class NIVEAUTreeItem(Objecttreeitem.ObjectTreeItem):
+  panel = NIVEAUPanel
+  itemNode=Node
+
+  def isactif(self):
+      return self.object.isactif()
+    
+  def IsExpandable(self):
+      return 1
+    
+  def GetLabelText(self):
+      """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+      """
+      if self.isactif():
+          fonte = Fonte_Niveau
+      else :
+          fonte = Fonte_Niveau_inactif
+      return self.labeltext,fonte,'#00008b'
+    
+  def GetIconName(self):
+      if self.isactif():
+          if self.object.isvalid():
+              return "ast-green-text"
+          else:
+              return "ast-red-text"
+      else:
+          return "ast-white-text"
+  
+  def keys(self):
+      if self.object.etapes_niveaux != []:
+          return range(len(self.object.etapes_niveaux))
+      else:
+          return range(len(self.object.etapes))
+
+  def GetSubList(self):
+    sublist=[]
+    for key in self.keys():
+      if self.object.etapes_niveaux != []:
+          liste = self.object.etapes_niveaux
+      else:
+          liste = self.object.etapes
+      try:
+        value = liste[key]
+      except KeyError:
+        continue
+      def setfunction(value, key=key, object=liste):
+        object[key] = value
+      item =self.make_objecttreeitem(self.appli,value.ident() + " : ", value, setfunction)
+      sublist.append(item)
+    return sublist
+
+  def additem(self,name,pos):
+      if isinstance(name,Objecttreeitem.TreeItem) :
+          cmd=self.object.addentite(name.getObject(),pos)
+      else :
+          cmd = self.object.addentite(name,pos)
+      item = self.make_objecttreeitem(self.appli,cmd.nom + " : ", cmd)
+      return item
+
+  def suppitem(self,item) :
+    # item = item de l'ETAPE à supprimer du JDC
+    # item.getObject() = ETAPE ou COMMENTAIRE
+    # self.object = JDC
+    itemobject=item.getObject()
+    if self.object.suppentite(itemobject):
+       if isinstance(item.object,commentaire.COMMENTAIRE):
+          message = "Commentaire supprimé"
+       else :
+          message = "Commande " + itemobject.nom + " supprimée"
+       self.appli.affiche_infos(message)
+       return 1
+    else:
+       self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet")
+       return 0
+
+  def GetText(self):
+      return ''
+
+    
+import Accas
+treeitem = NIVEAUTreeItem
+objet = Accas.ETAPE_NIVEAU    
diff --git a/InterfaceTK/componuplet.py b/InterfaceTK/componuplet.py
new file mode 100644 (file)
index 0000000..474b643
--- /dev/null
@@ -0,0 +1,175 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import types
+import Tkinter
+import Pmw
+from repr import Repr
+from copy import copy,deepcopy
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import panels
+
+#
+__version__="$Name: V1_14 $"
+__Id__="$Id: componuplet.py,v 1.1.4.2.4.1 2008-10-10 13:47:11 pnoyret Exp $"
+#
+
+myrepr = Repr()
+myrepr.maxstring = 100
+myrepr.maxother = 100
+
+# Si Expandable vaut 1 les éléments du nuplet apparaissent dans l'arbre
+# Si Expandable vaut 0 les éléments n'apparaissent pas
+Expandable=1
+
+class NUPLETPanel(panels.OngletPanel):
+  def init(self):
+      """ Initialise les frame des panneaux contextuels relatifs \340 un NUPLET """
+      self.nb=Pmw.NoteBook(self,raisecommand=self.raisecmd)
+      self.nb.pack(fill = 'both', expand = 1)
+      self.nb.add("Valeurs",tab_text="Saisir valeurs")
+      self.makeValeurPage(self.nb.page('Valeurs'))
+      self.enlevebind()
+      self.creebind()
+      self.nb.setnaturalsize()
+    
+  def makeValeurPage(self,page):
+    label = Tkinter.Label(page,text='Valeurs :').pack(side=Tkinter.LEFT)
+    i=0
+    for obj in self.node.item.object.mc_liste:
+      frame_valeur=Tkinter.Frame(page)
+      frame_valeur.pack(side=Tkinter.LEFT)
+      if hasattr(obj,'definition'):
+         objet_mc=obj.definition
+      else:  
+         objet_mc=None
+      valeur=obj.valeur
+      if type(valeur) == types.InstanceType :
+        valeur=obj.getval()
+      aide=self.gen_aide(obj)
+      if objet_mc.into != None :
+        l_choix=list(objet_mc.into)
+        #obj.set_valeur(l_choix[0],evaluation='non')
+        obj.set_valeur(l_choix[0])
+        option=Pmw.OptionMenu (frame_valeur,
+                items = l_choix,
+                menubutton_width = 10,
+                command = lambda e,obj=obj,s=self:s.record_valeur(val=e,obj=obj),
+        )
+        option.pack(side=Tkinter.LEFT,padx=1)
+      else :
+        entry = Tkinter.Entry(frame_valeur,relief='sunken',width=10)
+        entry.pack(side=Tkinter.LEFT,padx=1)
+        entry.bind("<Return>",
+                lambda e,obj=obj,s=self:s.valid_valeur(e,obj=obj))
+        entry.bind("<KP_Enter>",
+                lambda e,obj=obj,s=self:s.valid_valeur(e,obj=obj))
+        if i==0:entry.focus_set()
+        #aide = Tkinter.Label(frame_valeur, text = aide)
+        #aide.place(relx=0.5,rely=0.55,anchor='n')
+        if valeur != None :
+          entry.delete(0,Tkinter.END)
+          entry.insert(0,obj.getval())
+      i=i+1
+
+  def record_valeur(self,val=None,obj=None,mess='Valeur du mot-cl\351 enregistr\351e'):
+    """ 
+      Enregistre  val comme valeur de self.node.item.object SANS faire de 
+      test de validité
+    """
+    #obj.set_valeur(val,evaluation='non')
+    obj.set_valeur(val)
+    self.parent.appli.affiche_infos(mess)
+    #self.node.parent.verif()
+    #self.node.update()
+
+  def valid_valeur(self,e,obj=None,mess='Valeur du mot-cl\351 enregistr\351e'):
+    """ 
+      Enregistre  val comme valeur de self.node.item.object avec
+      test de validité
+    """
+    valeur=e.widget.get()
+    e.widget.delete(0,Tkinter.END)
+    anc_val=obj.getval()
+    if anc_val == None:anc_val=''
+    test=obj.set_valeur(valeur)
+    if test:
+      if obj.isvalid():
+          self.parent.appli.affiche_infos('Valeur du mot-cl\351 enregistr\351e')
+          e.widget.insert(0,obj.getval())
+      else:
+          #obj.set_valeur(anc_val,evaluation='non')
+          obj.set_valeur(anc_val)
+          self.parent.appli.affiche_infos("valeur du mot-cl\351 non autoris\351e")
+          e.widget.insert(0,anc_val)
+    else:
+      print "impossible d'\351valuer : %s " %valeur
+      print "test =",test
+      self.parent.appli.affiche_infos("valeur du mot-cl\351 non autoris\351e")
+      e.widget.delete(0,Tkinter.END)
+      e.widget.insert(0,anc_val)
+          
+    #self.node.parent.verif()
+    #self.node.update()
+
+  def gen_aide(self,obj):
+    return ""
+    
+
+class NUPLETTreeItem(Objecttreeitem.ObjectTreeItem):
+  panel=NUPLETPanel
+
+  def IsExpandable(self):
+    return Expandable
+
+  def GetText(self):
+      return  ''
+
+  def isvalid(self):
+    return self.object.isvalid()
+
+  def GetIconName(self):
+    if self.object.isvalid():
+      return "ast-green-los"
+    elif self.object.isoblig():
+      return "ast-red-los"
+    else:
+      return "ast-yel-los"
+
+  def GetSubList(self):
+    if not Expandable:return []
+    sublist=[]
+    for obj in self.object.mc_liste:
+      item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, None)    
+      sublist.append(item)
+    return sublist
+
+  def additem(self,name,pos):
+    raise "NUPLET"
+
+  def suppitem(self,item) :
+    raise "NUPLET"
+
+import Accas
+treeitem=NUPLETTreeItem
+objet=Accas.MCNUPLET
diff --git a/InterfaceTK/compooper.py b/InterfaceTK/compooper.py
new file mode 100644 (file)
index 0000000..0575053
--- /dev/null
@@ -0,0 +1,332 @@
+# -*- 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.
+#
+#
+# ======================================================================
+from Tkinter import *
+import Pmw
+import traceback
+from Editeur import Objecttreeitem
+import panels
+import fontes
+
+class OPERPanel(panels.OngletPanel):
+
+  def init(self):
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    nb.pack(fill = 'both', expand = 1)
+    self.nb=nb
+    nb.add('Mocles', tab_text='Nouveau mot-clé')
+    nb.add('Concept', tab_text='Nommer concept')
+    nb.add('Commande', tab_text='Nouvelle Commande')
+    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
+    panneau=Pmw.PanedWidget(nb.page("Mocles"),
+                            orient='horizontal')
+    panneau.add('left',min=0.4,max=0.60,size=0.50)
+    panneau.add('right',min=0.4,max=0.60,size=0.50)
+    panneau.pack(expand=1,fill='both')
+    panneau.setnaturalsize()
+    self.makeCommandePage(nb.page("Commande"))
+    self.makeConceptPage_oper(nb.page("Concept"))
+    self.makeMoclesPage(panneau.pane('left'))
+    self.makeReglesPage(panneau.pane('right'))
+    #self.makeCommentairePage(nb.page("Commentaire"))
+    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
+    nb.tab('Mocles').focus_set()
+    self.nb.setnaturalsize()
+    self.enlevebind()
+    self.creebind()
+    self.affiche()
+
+  def makeConceptPage_oper(self,page):
+      """ Crée la page de saisie du nom du concept """
+      if self.node.item.is_reentrant():
+          # commande obligatoirement reentrante
+          self.makeConceptPage_reentrant(page)
+      else:
+          # commande non reentrante ou facultativement reentrante
+          self.makeConceptPage(page)
+
+  def makeConceptPage_reentrant(self,page):
+      """ Crée la page de saisie du nom de concept pour un opérateur reentrant
+      cad propose dans la liste des SD utilisées dans la commande celle(s) dont le
+      type est compatible avec celui que retourne l'opérateur """
+      liste_noms_sd = self.node.item.get_noms_sd_oper_reentrant()
+      self.listbox = Pmw.ScrolledListBox(page,
+                                         items=liste_noms_sd,
+                                         labelpos='n',
+                                         label_text="Structure(s) de données à enrichir par l'opérateur courant :",
+                                         listbox_height = 6,
+                                         selectioncommand=self.select_valeur_from_list,
+                                         dblclickcommand=lambda s=self,c=self.execConcept : s.choose_valeur_from_list(c))
+      self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
+      Label(page,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6)
+      self.valeur_choisie = StringVar()
+      self.label_valeur = Label(page,textvariable=self.valeur_choisie)
+      self.label_valeur.place(relx=0.45,rely=0.6)
+      if len(liste_noms_sd) == 1 :
+          self.valeur_choisie.set(liste_noms_sd[0])
+
+  def select_valeur_from_list(self):
+      try:
+          choix = self.listbox.getcurselection()[0]
+          self.valeur_choisie.set(choix)
+      except:
+          traceback.print_exc()
+          
+
+  def choose_valeur_from_list(self,command):
+      try:
+          choix = self.listbox.getcurselection()[0]
+          self.valeur_choisie.set(choix)
+          apply(command,(),{})
+      except:
+          traceback.print_exc()
+
+import treewidget
+class Node(treewidget.Node):
+    def doPaste(self,node_selected):
+        """
+            Déclenche la copie de l'objet item avec pour cible
+            l'objet passé en argument : node_selected
+        """
+        objet_a_copier = self.item.get_copie_objet()
+        child=node_selected.doPaste_Commande(objet_a_copier)
+        return child
+
+    def doPaste_Commande(self,objet_a_copier):
+        """
+          Réalise la copie de l'objet passé en argument qui est nécessairement
+          une commande
+        """
+        parent=self.parent
+        #child = parent.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 doPaste_MCF(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',retour='oui')
+        return child
+
+
+class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
+  """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
+      Accas. Elle leur permet d'etre affichés comme des noeuds
+      d'un arbre graphique.
+      Cette classe a entre autres deux attributs importants :
+        - _object qui est un pointeur vers l'objet du noyau
+        - object qui pointe vers l'objet auquel sont délégués les
+          appels de méthode et les accès aux attributs
+      Dans le cas d'une ETAPE, _object et object pointent vers le 
+      meme objet.
+  """
+  panel = OPERPanel
+  itemNode=Node
+  
+  def IsExpandable(self):
+      return 1
+
+  def GetIconName(self):
+      """
+      Retourne le nom de l'icône à afficher dans l'arbre
+      Ce nom dépend de la validité de l'objet
+      """
+      if not self.object.isactif():
+         return "ast-white-square"
+      elif self.object.isvalid():
+         return "ast-green-square"
+      else:
+         valid=self.valid_child()
+         valid=valid * self.valid_regles("non")
+         if self.reste_val != {}:
+            valid=0
+         if valid==0  :
+            return "ast-red-square"
+         else :
+            return "ast-yellow-square"
+
+  def GetLabelText(self):
+      """ Retourne 3 valeurs :
+      - le texte à afficher dans le noeud représentant l'item
+      - la fonte dans laquelle afficher ce texte
+      - la couleur du texte
+      """
+      if self.object.isactif():
+        # None --> fonte et couleur par défaut
+        return self.labeltext,None,None
+      else:
+        return self.labeltext,fontes.standard_italique,None
+      
+  def get_objet(self,name) :
+      for v in self.object.mc_liste:
+          if v.nom == name : return v
+      return None
+      
+  def get_type_sd_prod(self):
+      """
+         Retourne le nom du type du concept résultat de l'étape
+      """
+      sd_prod=self.object.get_type_produit()
+      if sd_prod:
+         return sd_prod.__name__
+      else:
+         return ""
+
+  def additem(self,name,pos):
+      #print "compooper.additem",name,pos
+      mcent = self._object.addentite(name,pos)
+      return mcent
+
+  def suppitem(self,item) :
+      # item : item du MOCLE de l'ETAPE à supprimer
+      # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList 
+      itemobject=item.getObject()
+      if itemobject.isoblig() :
+          self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
+          return 0
+      if self.object.suppentite(itemobject):
+          message = "Mot-clé " + itemobject.nom + " supprimé"
+          self.appli.affiche_infos(message)
+          return 1
+      else :
+          self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
+          return 0
+
+  def GetText(self):
+      try:
+          return self.object.get_sdname()
+      except:
+          return ''
+
+  def keys(self):
+      keys=self.object.mc_dict.keys()
+      return keys
+
+  def GetSubList(self):
+      """
+         Reactualise la liste des items fils stockes dans self.sublist
+      """
+      if self.isactif():
+         liste=self.object.mc_liste
+      else:
+         liste=[]
+
+      sublist=[None]*len(liste)
+      # suppression des items lies aux objets disparus
+      for item in self.sublist:
+         old_obj=item.getObject()
+         if old_obj in liste:
+            pos=liste.index(old_obj)
+            sublist[pos]=item
+         else:
+            pass # objets supprimes ignores
+
+      # ajout des items lies aux nouveaux objets
+      pos=0
+      for obj in liste:
+         if sublist[pos] is None:
+            # nouvel objet : on cree un nouvel item
+            def setfunction(value, object=obj):
+                object.setval(value)
+            item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
+            sublist[pos]=item
+         pos=pos+1
+
+      self.sublist=sublist
+      return self.sublist
+
+  def isvalid(self):
+      return self.object.isvalid()
+
+  def iscopiable(self):
+      """
+      Retourne 1 si l'objet est copiable, 0 sinon
+      """
+      return 1
+
+  def update(self,item):
+      if item.sd and item.sd.nom:
+         self.nomme_sd(item.sd.nom)
+
+  def nomme_sd(self,nom):
+      """ Lance la méthode de nommage de la SD """
+      oldnom=""
+      if self.object.sd != None :
+         oldnom=self.object.sd.nom
+      test,mess= self.object.nomme_sd(nom)
+      if test:self.object.parent.reset_context()
+      if (test and self.appli.dict_reels.has_key(oldnom) ):
+              self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom]
+      return test,mess
+
+  def is_reentrant(self):
+      return self.object.is_reentrant()
+    
+  def get_noms_sd_oper_reentrant(self):
+      return self.object.get_noms_sd_oper_reentrant()
+
+  def get_objet_commentarise(self):
+      """
+          Cette méthode retourne un objet commentarisé
+          représentatif de self.object
+      """
+      # Format de fichier utilisé
+      format=self.appli.format_fichier.get()
+      return self.object.get_objet_commentarise(format)
+
+  def get_objet_commentarise_BAK(self):
+      """
+          Cette méthode retourne un objet commentarisé
+          représentatif de self.object
+      """
+      import generator,string,Accas
+      # Format de fichier utilisé
+      format=self.appli.format_fichier.get()
+      g=generator.plugins[format]()
+      texte_commande = g.gener(self.object,format='beautifie')
+      # Il faut enlever la première ligne vide de texte_commande que 
+      # rajoute le generator
+      rebut,texte_commande = string.split(texte_commande,'\n',1)
+      # on construit l'objet COMMANDE_COMM repésentatif de self mais non 
+      # enregistré dans le jdc
+      commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
+                                             parent=self.object.parent)
+      commande_comment.niveau = self.object.niveau
+      commande_comment.jdc = commande_comment.parent = self.object.jdc
+
+      pos=self.object.parent.etapes.index(self.object)
+      parent=self.object.parent
+      self.object.parent.suppentite(self.object)
+      parent.addentite(commande_comment,pos)
+
+      return commande_comment
+
+  def visu_3D(self,appli,node) :
+      import TroisDPal
+      troisD=TroisDPal.TroisDPilote(node.item,appli,node.parent)
+      troisD.envoievisu()
+
+import Accas
+treeitem = EtapeTreeItem
+objet = Accas.ETAPE    
+
diff --git a/InterfaceTK/compoparam.py b/InterfaceTK/compoparam.py
new file mode 100644 (file)
index 0000000..80094ad
--- /dev/null
@@ -0,0 +1,248 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+   Ce module contient les classes permettant de définir les objets graphiques
+   représentant un objet de type PARAMETRE, cad le panneau et l'item de l'arbre
+   d'EFICAS
+"""
+
+# import modules Python
+from Tkinter import *
+import Pmw
+import string
+
+# import modules EFICAS
+from Editeur import Objecttreeitem
+import panels
+import fontes
+
+
+Fonte_PARAMETRE = fontes.standard_italique
+Fonte_TITRE = fontes.standard_gras_souligne
+
+
+class PARAMPanel(panels.OngletPanel):
+  """
+  Classe servant à construire le panneau associé à un paramètre.
+  C'est au moyen de ce panneau que l'utilisateur peut accéder
+  aux nom et valeur du paramètre en vue éventuellement de les
+  modifier.
+  """
+
+  def init(self):
+    """
+    Initialise les frame des panneaux contextuels relatifs à un PARAMETRE
+    """
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    nb.pack(fill = 'both', expand = 1)
+    self.nb=nb
+    nb.add('Parametre', tab_text='Valeur Paramètre')
+    nb.add('Commande', tab_text='Nouvelle Commande')
+    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
+    self.makeParametrePage(nb.page("Parametre"))
+    self.makeCommandePage(nb.page("Commande"))
+    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
+    nb.tab('Parametre').focus_set()
+    nb.setnaturalsize()
+    self.make_buttons()
+    self.enlevebind()
+    self.creebind()
+    
+  def makeParametrePage(self,page):
+    """
+    Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE
+    """
+    self.frame_valeur = Frame(page)
+    #self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
+    self.frame_valeur.pack(expand=1)
+    # affichage du titre du panneau
+    self.titre = StringVar()
+    self.titre.set("PARAMETRE "+self.node.item.get_nom())
+    #Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n')
+    Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).grid(row=0,columnspan=2,padx=5,pady=5)
+    # création des labels et entries associés aux nom et valeur du paramètre
+    #Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3)
+    Label(self.frame_valeur,text= 'Nom du paramètre : ').grid(row=1,sticky=W,padx=5,pady=5)
+    self.entry_nom = Entry(self.frame_valeur)
+    #Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5)
+    Label(self.frame_valeur,text= 'Valeur du paramètre : ').grid(row=2,sticky=W,padx=5,pady=5)
+    self.entry_val = Entry(self.frame_valeur)
+    # binding sur entry_nom
+    self.entry_nom.bind("<Return>",lambda e,s=self : s.entry_val.focus())
+    self.entry_val.bind("<Return>",lambda e,s=self : s.change_valeur())
+    self.entry_nom.bind("<KP_Enter>",lambda e,s=self : s.entry_val.focus())
+    self.entry_val.bind("<KP_Enter>",lambda e,s=self : s.change_valeur())
+    # affichage des entries
+    #self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3)
+    self.entry_nom.grid(row=1,column=1,sticky=W,padx=5,pady=5)
+    #self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5)
+    self.entry_val.grid(row=2,column=1,sticky=W,padx=5,pady=5)
+    # affichage d'une phrase d'aide
+    aide = """
+    Un retour de chariot dans une zone de saisie vous permet de vérifier si
+    la valeur que vous avez entrée est valide.
+    Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
+    valeurs seront effectivement prises en compte
+    """
+    #Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n')
+    Label(self.frame_valeur,text=aide).grid(row=3,columnspan=2,padx=5,pady=5)
+    self.frame_valeur.columnconfigure(1,weight=1)
+    # affichage des nom et valeur du paramètre
+    self.display_valeur()
+    self.entry_nom.focus()
+
+  def make_buttons(self):
+    """
+    Crée les boutons du panneau
+    """
+    #self.bouton_sup.place_forget()
+    #self.bouton_doc.place_forget()
+    #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
+    #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
+    #self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
+    #self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
+    #self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
+
+    self.bouton_sup.pack_forget()
+    self.bouton_doc.pack_forget()
+    self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur)
+    self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur)
+    self.bouton_val.pack(side='left',padx=5, pady=5)
+    self.bouton_ann.pack(side='left',padx=5, pady=5)
+    self.bouton_sup.pack(side='right',padx=5, pady=5)
+
+  def change_valeur(self):
+    """
+    Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE
+    """
+    if self.parent.modified == 'n' : self.parent.init_modif()
+    new_nom = self.entry_nom.get()
+    new_val = self.entry_val.get()
+    self.node.item.set_nom(new_nom)
+    self.node.item.set_valeur(new_val)
+    self.node.update()
+    self.display_valeur()
+    
+  def display_valeur(self):
+    """
+    Affiche dans self.widget_text la valeur de l'objet PARAMETRE
+    (annule d'éventuelles modifications faite par l'utilisateur)
+    """
+    self.entry_nom.delete(0,END)
+    self.entry_val.delete(0,END)
+    self.titre.set('PARAMETRE '+self.node.item.get_nom())
+    self.entry_nom.insert(END,self.node.item.get_nom())
+    self.entry_val.insert(END,self.node.item.get_valeur())
+
+class PARAMTreeItem(Objecttreeitem.ObjectTreeItem):
+    """
+    Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
+    qui représente le PARAMETRE
+    """
+    panel = PARAMPanel
+
+    def init(self):
+      self.setfunction = self.set_valeur
+
+# ---------------------------------------------------------------------------
+#                   API du PARAMETRE pour l'arbre 
+# ---------------------------------------------------------------------------
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icône associée au noeud qui porte self,
+      dépendant de la validité de l'objet
+      NB : un PARAMETRE est toujours valide ...
+      """
+      if self.isactif():
+          if self.isvalid():
+              return "ast-green-square"
+          else:
+              return "ast-red-square"
+      else:
+          return "ast-white-square"
+
+    def GetLabelText(self):
+        """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+        """
+        return 'Paramètre',Fonte_PARAMETRE,None
+
+    def GetText(self):
+      """
+      Retourne le texte à afficher après le nom de la commande (ici après 'paramètre')
+      Ce texte est tronqué à 25 caractères
+      """
+      texte = repr(self.object)
+      texte = string.split(texte,'\n')[0]
+      if len(texte) < 25 :
+          return texte
+      else :
+          return texte[0:24]+'...'
+
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      """
+      return []
+    
+# ---------------------------------------------------------------------------
+#       Méthodes permettant la modification et la lecture des attributs
+#       du paramètre = API graphique du PARAMETRE pour Panel et EFICAS
+# ---------------------------------------------------------------------------
+
+    def get_valeur(self):
+      """
+      Retourne la valeur de l'objet PARAMETRE cad son texte
+      """
+      if self.object.valeur is None: return ''
+      else: return self.object.valeur 
+
+    def get_nom(self):
+      """
+      Retourne le nom du paramètre
+      """
+      return self.object.nom
+
+    def set_valeur(self,new_valeur):
+      """
+      Affecte valeur à l'objet PARAMETRE
+      """
+      self.object.set_valeur(new_valeur)
+
+    def set_nom(self,new_nom):
+      """
+      Renomme le paramètre
+      """
+      self.object.set_nom(new_nom)
+      #self.object.set_attribut('nom',new_nom)
+
+    def get_fr(self):
+      """
+      Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS
+      """
+      return "Définition d'un paramètre"
+    
+import Extensions.parametre
+treeitem =PARAMTreeItem
+objet = Extensions.parametre.PARAMETRE
diff --git a/InterfaceTK/compoparameval.py b/InterfaceTK/compoparameval.py
new file mode 100644 (file)
index 0000000..009473d
--- /dev/null
@@ -0,0 +1,311 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+Ce module contient les classes permettant de définir les objets graphiques
+représentant un objet de type PARAMETRE_EVAL, cad le panneau et l'item de l'arbre
+d'EFICAS
+"""
+
+# import modules Python
+from Tkinter import *
+import Pmw
+import string
+
+# import modules EFICAS
+import widgets
+from Editeur import Objecttreeitem
+import panels
+import fontes
+
+
+Fonte_PARAMETRE = fontes.standard_italique
+Fonte_TITRE = fontes.standard_gras_souligne
+
+
+class PARAM_EVALPanel(panels.OngletPanel):
+  """
+  Classe servant à construire le panneau associé à un paramètre.
+  C'est au moyen de ce panneau que l'utilisateur peut accéder
+  aux nom et valeur du paramètre en vue éventuellement de les
+  modifier.
+  """
+
+  def init(self):
+    """
+    Initialise les frame des panneaux contextuels relatifs à un PARAMETRE
+    """
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    nb.pack(fill = 'both', expand = 1)
+    self.nb=nb
+    nb.add('Parametre', tab_text='Paramètre EVAL')
+    nb.add('Commande', tab_text='Nouvelle Commande')
+    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
+    self.makeParametrePage(nb.page("Parametre"))
+    self.makeCommandePage(nb.page("Commande"))
+    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
+    nb.tab('Parametre').focus_set()
+    nb.setnaturalsize()
+    self.make_buttons()
+    
+  def makeParametrePage(self,page):
+    """
+    Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE
+    """
+    self.frame_valeur = Frame(page)
+    self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
+    # affichage du titre du panneau
+    self.titre = StringVar()
+    self.titre.set("PARAMETRE EVAL "+self.node.item.get_nom())
+    Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n')
+    # création des labels et entries associés aux nom et valeur du paramètre
+    Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3)
+    self.entry_nom = Entry(self.frame_valeur)
+    Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5)
+    self.entry_val = Entry(self.frame_valeur)
+    # binding sur entry_nom
+    self.entry_nom.bind("<Return>",lambda e,s=self : s.verif_nom())
+    self.entry_val.bind("<Return>",lambda e,s=self : s.verif_eval())
+    self.entry_nom.bind("<KP_Enter>",lambda e,s=self : s.verif_nom())
+    self.entry_val.bind("<KP_Enter>",lambda e,s=self : s.verif_eval())
+    # affichage des entries
+    self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3)
+    self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5)
+    # affichage d'une phrase d'aide
+    aide = """
+    Un retour de chariot dans une zone de saisie vous permet de vérifier si
+    la valeur que vous avez entrée est valide.
+    Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
+    valeurs seront effectivement prises en compte
+    """
+    Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n')
+    # affichage des nom et valeur du paramètre
+    self.display_valeur()
+    self.entry_nom.focus()
+
+  def make_buttons(self):
+    """
+    Crée les boutons du panneau
+    """
+    #self.bouton_sup.place_forget()
+    #self.bouton_doc.place_forget()
+    self.bouton_sup.pack_forget()
+    self.bouton_doc.pack_forget()
+    #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
+    #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
+    self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur)
+    self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur)
+    self.bouton_val.bind("<Return>",lambda e,s=self : s.bouton_val.invoke())
+    self.bouton_val.bind("<KP_Enter>",lambda e,s=self : s.bouton_val.invoke())
+    #self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
+    #self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
+    #self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
+    self.bouton_val.pack(side='left',padx=5, pady=5)
+    self.bouton_ann.pack(side='left',padx=5, pady=5)
+    self.bouton_sup.pack(side='left',padx=5, pady=5)
+
+  def change_valeur(self):
+    """
+    Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE
+    """
+    if self.parent.modified == 'n' : self.parent.init_modif()
+    new_nom = self.entry_nom.get()
+    new_val = self.entry_val.get()
+    #self.node.item.set_nom(new_nom)
+    #self.node.item.set_valeur(new_val)
+    #self.node.update()
+    #self.display_valeur()
+    # on essaie de stocker les noms et valeurs
+    test,erreur = self.node.item.save_parametre_eval(new_nom,new_val)
+    if test :
+        # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage
+        self.node.update()
+        self.display_valeur()
+        self.parent.appli.affiche_infos("Expression EVAL %s modifiée" %self.node.item.get_nom())
+    else:
+        # la formule est incorrecte : on affiche les erreurs
+        widgets.showerror("Expression EVAL incorrecte",erreur)
+        self.parent.appli.affiche_infos("Expression EVAL %s non modifiée" %self.node.item.get_nom())
+    
+  def display_valeur(self):
+    """
+    Affiche dans self.widget_text la valeur de l'objet PARAMETRE
+    (annule d'éventuelles modifications faite par l'utilisateur)
+    """
+    self.entry_nom.delete(0,END)
+    self.entry_val.delete(0,END)
+    self.titre.set('PARAMETRE '+self.node.item.get_nom())
+    self.entry_nom.insert(END,self.node.item.get_nom())
+    self.entry_val.insert(END,self.node.item.get_valeur())
+
+  def verif_nom(self):
+    """
+    Lance la vérification du nom donné par l'utilisateur dans entry_nom
+    """
+    nom = self.entry_nom.get()
+    test,erreur = self.node.item.verif_nom(nom)
+    if not test :
+        widgets.showerror("Nom invalide",erreur)
+        self.entry_nom.focus()
+        self.entry_nom.selection_range(0,END)
+        self.parent.appli.affiche_infos("Nom du paramètre refusé")
+    else:
+        self.parent.appli.affiche_infos("Nom du paramètre accepté")
+        
+  def verif_eval(self,event=None):
+    """
+    Lance la vérification de l'expression EVAL présente dans entry_val
+    """
+    exp_eval = self.entry_val.get()
+    test,erreur = self.node.item.verif_eval(exp_eval)
+    if not test:
+        widgets.showerror("Expression EVAL invalide",erreur)
+        self.entry_val.focus()
+        self.entry_val.selection_range(0,END)
+        self.parent.appli.affiche_infos("Expression EVAL refusée")
+    else:
+        self.parent.appli.affiche_infos("Expression EVAL acceptée")
+
+class PARAM_EVALTreeItem(Objecttreeitem.ObjectTreeItem):
+    """
+    Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
+    qui représente le PARAMETRE
+    """
+    panel = PARAM_EVALPanel
+
+    def init(self):
+      self.setfunction = self.set_valeur
+
+# ---------------------------------------------------------------------------
+#                   API du PARAMETRE pour l'arbre 
+# ---------------------------------------------------------------------------
+
+    def GetIconName(self):
+      """
+      Retourne le nom de l'icône associée au noeud qui porte self,
+      dépendant de la validité de l'objet
+      NB : un PARAMETRE est toujours valide ...
+      """
+      if self.isactif():
+          if self.isvalid():
+              return "ast-green-square"
+          else:
+              return "ast-red-square"
+      else:
+          return "ast-white-square"
+
+    def GetLabelText(self):
+        """ Retourne 3 valeurs :
+        - le texte à afficher dans le noeud représentant l'item
+        - la fonte dans laquelle afficher ce texte
+        - la couleur du texte
+        """
+        return 'EVAL',Fonte_PARAMETRE,None
+
+    def GetText(self):
+      """
+      Retourne le texte à afficher après le nom de la commande (ici après 'paramètre')
+      Ce texte est tronqué à 25 caractères
+      """
+      texte = repr(self.object)
+      texte = string.split(texte,'\n')[0]
+      if len(texte) < 25 :
+          return texte
+      else :
+          return texte[0:24]+'...'
+
+    def GetSubList(self):
+      """
+      Retourne la liste des fils de self
+      """
+      return []
+    
+# ---------------------------------------------------------------------------
+#       Méthodes permettant la modification et la lecture des attributs
+#       du paramètre = API graphique du PARAMETRE pour Panel et EFICAS
+# ---------------------------------------------------------------------------
+
+    def isvalid(self):
+      """
+      Indique si l'objet pointé par self est valide
+      """
+      return self.object.isvalid()
+    
+    def get_valeur(self):
+      """
+      Retourne une chaîne représentant la valeur de l'objet PARAMETRE
+      cad de l'objet class_eval.EVAL
+      """
+      return self.object.get_valeur() or ''
+
+    def get_nom(self):
+      """
+      Retourne le nom du paramètre
+      """
+      return self.object.get_nom()
+
+    def set_valeur(self,new_valeur):
+      """
+      Affecte new_valeur à l'objet PARAMETRE_EVAL
+      """
+      # on construit le texte de la nouvelle valeur
+      new_valeur = 'EVAL("""'+new_valeur+'""")'
+      # on affecte la nouvelle valeur à self.object
+      self.object.set_valeur(new_valeur)
+
+    def set_nom(self,new_nom):
+      """
+      Renomme le paramètre
+      """
+      self.object.set_nom(new_nom)
+
+    def get_fr(self):
+      """
+      Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS
+      """
+      return "Définition d'un paramètre de type EVAL"
+
+    def verif_nom(self,nom):
+      """
+      Lance la vérification de validité du nom passé en argument
+      """
+      return self.object.verif_nom(nom = nom)
+
+    def verif_eval(self,valeur):
+      """
+      Lance la vérification de validité de l'expression EVAL passée en argument
+      """
+      return self.object.verif_eval(exp_eval = valeur)
+
+    def save_parametre_eval(self,new_nom,new_val):
+      """
+      Vérifie si (new_nom,new_val) définit bien un EVAL licite :
+          - si oui, stocke ces paramètres comme nouveaux paramètres de l'EVAL courant et retourne 1
+          - si non, laisse les paramètres anciens de EVAL inchangés et retourne 0
+      """
+      test,erreur = self.object.verif_parametre_eval(param=(new_nom,new_val))
+      if test :
+          # la formule est bien correcte : on sauve les nouveaux paramètres
+          self.object.update(param=(new_nom,new_val))
+      return test,erreur
+      
+import Extensions.parametre_eval
+treeitem =PARAM_EVALTreeItem
+objet = Extensions.parametre_eval.PARAMETRE_EVAL
diff --git a/InterfaceTK/compoproc.py b/InterfaceTK/compoproc.py
new file mode 100644 (file)
index 0000000..3d3e906
--- /dev/null
@@ -0,0 +1,57 @@
+# -*- 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.
+#
+#
+# ======================================================================
+from Tkinter import *
+import Pmw
+
+from Editeur import Objecttreeitem
+import panels
+import fontes
+import compooper
+
+class PROCPanel(panels.OngletPanel):
+  def init(self):
+    nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+    self.nb=nb
+    nb.pack(fill = 'both', expand = 1)
+    nb.add('Mocles', tab_text='Ajouter mots-clés')
+    nb.add('Commande', tab_text='Nouvelle Commande')
+    nb.add('Commentaire',tab_text='Paramètre/Commentaire')
+    panneau=Pmw.PanedWidget(nb.page("Mocles"),
+                            orient='horizontal')
+    panneau.add('left',min=0.4,max=0.6,size=0.5)
+    panneau.add('right',min=0.4,max=0.6,size=0.5)
+    panneau.pack(expand=1,fill='both')
+    self.makeCommandePage(nb.page("Commande"))
+    self.makeMoclesPage(panneau.pane('left'))
+    self.makeReglesPage(panneau.pane('right'))
+    self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
+    nb.setnaturalsize()
+    self.enlevebind()
+    self.creebind()
+    self.affiche()
+
+class ProcEtapeTreeItem(compooper.EtapeTreeItem):
+  panel = PROCPanel
+  
+import Accas
+treeitem = ProcEtapeTreeItem
+objet = Accas.PROC_ETAPE    
+
diff --git a/InterfaceTK/composimp.py b/InterfaceTK/composimp.py
new file mode 100644 (file)
index 0000000..d278c16
--- /dev/null
@@ -0,0 +1,652 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from Editeur.utils import substract_list
+
+      
+class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
+  from newsimppanel import newSIMPPanel
+  panel = newSIMPPanel
+
+  def init(self) :
+      self.expandable = 0
+      self.affect_panel()
+
+
+  def affect_panel(self):
+      """
+      Cette méthode attribue le panel à l'objet pointé par self en fonction de la
+      nature de la valeur demandée pour cet objet
+      """
+      from uniquepanel import UNIQUE_Panel
+      from plusieurspanel import PLUSIEURS_Panel
+
+      #print "affect_panel : ",self.nom,self.is_list(),self.has_into()
+      # Attention l ordre des if est important
+
+      if self.wait_shell():
+          # l'objet attend un shell
+          from shellpanel import SHELLPanel
+          self.panel = SHELLPanel
+      elif self.has_into():
+          # l'objet prend sa (ses) valeur(s) dans un ensemble discret de valeurs
+          if self.is_list() :
+             from plusieursintopanel import PLUSIEURS_INTO_Panel
+             self.panel = PLUSIEURS_INTO_Panel
+          else:
+             from uniqueintopanel import UNIQUE_INTO_Panel
+             self.panel = UNIQUE_INTO_Panel
+      else:
+          # l'objet prend une ou des valeurs à priori quelconques
+          if self.is_list() :
+              # on attend une liste de valeurs mais de quel type ?
+              if self.wait_assd():
+                  # on attend une liste de SD
+                  from plusieursassdpanel import PLUSIEURS_ASSD_Panel
+                  self.panel = PLUSIEURS_ASSD_Panel
+              else:
+                  # on attend une liste de valeurs de types debase (entiers, réels,...)
+                  #from plusieursbasepanel import PLUSIEURS_BASE_OR_UNELISTE_Panel
+                  #self.panel = PLUSIEURS_BASE_OR_UNELISTE_Panel
+                  from plusieursbasepanel import PLUSIEURS_BASE_Panel
+                  self.panel = PLUSIEURS_BASE_Panel
+          else:
+              # on n'attend qu'une seule valeur mais de quel type ?
+              if self.wait_co():
+                  # on attend une SD ou un objet de la classe CO (qui n'existe pas encore)
+                  from uniquesdcopanel import UNIQUE_SDCO_Panel
+                  self.panel = UNIQUE_SDCO_Panel
+              elif self.wait_assd():
+                  # on attend une SD
+                  from uniqueassdpanel import UNIQUE_ASSD_Panel
+                  from uniqueassdpanel import UNIQUE_ASSD_Panel_Reel
+                  if 'R' in self.GetType():
+                     self.panel = UNIQUE_ASSD_Panel_Reel
+                  else :
+                     self.panel = UNIQUE_ASSD_Panel
+              else:
+                  # on attend une valeur d'un type de base (entier,réel,...)
+                  if self.wait_complex():
+                      # on attend un complexe
+                      from uniquecomppanel import UNIQUE_COMP_Panel
+                      self.panel = UNIQUE_COMP_Panel
+                  else:
+                      # on attend un entier, un réel ou une string
+                      from uniquebasepanel import UNIQUE_BASE_Panel
+                      self.panel = UNIQUE_BASE_Panel
+      # cas particulier des fonctions
+      genea = self.get_genealogie()
+      if "VALE" in genea or "VALE_C" in genea:
+         if "DEFI_FONCTION" in genea :
+            from fonctionpanel import FONCTION_Panel
+            self.panel=FONCTION_Panel
+      #---------------------------------------------------------
+      # PN ajout pour lancement de Salome
+      #---------------------------------------------------------
+      if self.appli.salome:
+          import panelsSalome
+
+          self.select_noeud_maille=0
+          self.clef_fonction="SALOME"
+          for i in range(0,len( genea )) :
+             self.clef_fonction=self.clef_fonction+"_"+ genea[i]
+             #if genea[i] == "GROUP_NO" or genea[i] == "GROUP_MA":
+          if "GROUP_NO" in genea[len(genea)-1] or "GROUP_MA" in genea[len(genea)-1]:
+             self.select_noeud_maille=1
+
+          recherche=panelsSalome.dict_classes_salome[self.panel]
+          if hasattr(recherche,self.clef_fonction):
+             self.panel=recherche
+          if self.select_noeud_maille==1 :
+             self.panel=recherche
+
+
+  #-----------------------------------------------
+  #
+  # Methodes liees aux informations sur le Panel
+  # ou au mot-clef simple
+  #
+  #-----------------------------------------------
+  # is_list
+  # get_into                a priori inutile --> commentee
+  # has_into
+  # wait_into                a priori inutile --> commentee
+  # GetMinMax
+  # GetMultiplicite
+  # GetIntervalle
+  # GetListeValeurs
+  # get_liste_possible
+
+  def is_list(self):
+      """
+          Cette méthode indique si le mot cle simple attend une liste (valeur de retour 1)
+          ou s'il n'en attend pas (valeur de retour 0)
+
+          Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
+          Dans le cas sans validateur, l'information est donnée par l'attribut max
+          de la definition du mot cle.
+          Dans le cas avec validateur, il faut combiner l'information précédente avec
+          celle issue de l'appel de la méthode is_list sur le validateur.On utilisera
+          l'operateur ET pour effectuer cette combinaison (AndVal).
+      """
+      is_a_list=0
+      min,max = self.GetMinMax()
+      assert (min <= max)
+      if max > 1 :
+                is_a_list=1
+      # Dans le cas avec validateurs, pour que le mot cle soit considéré
+      # comme acceptant une liste, il faut que max soit supérieur a 1
+      # ET que la méthode is_list du validateur retourne 1. Dans les autres cas
+      # on retournera 0 (n'attend pas de liste)
+      if self.definition.validators :
+         is_a_list= self.definition.validators.is_list() * is_a_list
+      return is_a_list 
+
+  #def get_into(self,liste_courante=None):
+  #    """
+  #        Cette méthode retourne la liste de choix proposée par le mot cle. Si le mot cle ne propose
+  #        pas de liste de choix, la méthode retourne None.
+  #        L'argument d'entrée liste_courante, s'il est différent de None, donne la liste des choix déjà
+  #        effectués par l'utilisateur. Dans ce cas, la méthode get_into doit calculer la liste des choix
+  #        en en tenant compte.
+  #        Cette méthode part du principe que la relation entre into du mot clé et les validateurs est
+  #        une relation de type ET (AndVal).
+  #    """
+  #    if not self.object.definition.validators :
+  #       return self.object.definition.into
+  #    else:
+  #       return self.object.definition.validators.get_into(liste_courante,self.definition.into)
+
+  def has_into(self):
+      """
+          Cette méthode indique si le mot cle simple propose un choix (valeur de retour 1)
+          ou s'il n'en propose pas (valeur de retour 0)
+
+          Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
+          Dans le cas sans validateur, l'information est donnée par l'attribut into
+          de la definition du mot cle.
+          Dans le cas avec validateurs, pour que le mot cle soit considéré
+          comme proposant un choix, il faut que into soit présent OU
+          que la méthode has_into du validateur retourne 1. Dans les autres cas
+          on retournera 0 (ne propose pas de choix)
+      """
+      has_an_into=0
+      if self.definition.into:
+               has_an_into=1
+      elif self.definition.validators :
+         has_an_into= self.definition.validators.has_into()
+      return has_an_into
+
+#  def wait_into(self):
+#      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+#      prend ses valeurs dans un ensemble discret (into), 0 sinon """
+#      if self.object.definition.into != None :
+#          return 1
+#      else:
+#          return 0
+
+  def GetMinMax(self):
+      """ Retourne les valeurs min et max de la définition de object """
+      return self.object.get_min_max()
+
+  def GetMultiplicite(self):
+      """ A préciser.
+          Retourne la multiplicité des valeurs affectées à l'objet
+          représenté par l'item. Pour le moment retourne invariablement 1.
+      """
+      return 1
+
+  def GetIntervalle(self):
+      """ 
+           Retourne le domaine de valeur attendu par l'objet représenté 
+           par l'item.
+      """
+      return self.object.getintervalle()
+
+  def GetListeValeurs(self) :
+      """ Retourne la liste des valeurs de object """
+      valeurs=self.object.get_liste_valeurs()
+      try :
+        if "R" in self.object.definition.type:
+           clef=self.object.GetNomConcept()
+           if self.appli.dict_reels.has_key(clef):
+              if type(valeurs) == types.TupleType:
+                 valeurs_reelles=[]
+                 for val in valeurs :
+                    if self.appli.dict_reels[clef].has_key(val) : 
+                       valeurs_reelles.append(self.appli.dict_reels[clef][val])
+                    else :
+                       valeurs_reelles.append(val)
+              else :
+                 if self.appli.dict_reels[clef].has_key(valeurs):
+                    valeurs_reelles=self.appli.dict_reels[clef][valeurs]
+              valeurs=valeurs_reelles
+      except :
+        pass
+      return valeurs
+    
+  def get_liste_possible(self,listeActuelle=[]):
+      if hasattr(self.definition.validators,'into'):
+         valeurspossibles = self.definition.validators.into 
+      else:
+         valeurspossibles = self.get_definition().into
+
+      #On ne garde que les items valides
+      listevalideitem=[]
+      for item in valeurspossibles:
+          encorevalide=self.valide_item(item)
+          if encorevalide :
+             listevalideitem.append(item)
+
+      #on ne garde que les choix possibles qui passent le test de valide_liste_partielle
+      listevalideliste=[]
+      for item in listevalideitem:
+          encorevalide=self.valide_liste_partielle(item,listeActuelle)
+          if encorevalide :
+              listevalideliste.append(item)
+      return listevalideliste
+
+  def get_liste_param_possible(self):
+      liste_param=[]
+      for param in self.object.jdc.params:
+          encorevalide=self.valide_item(param.valeur)
+          if encorevalide:
+             type_param=param.valeur.__class__.__name__
+             for typ in self.definition.type:
+                 if typ=='R':
+                     liste_param.append(param)
+                 if typ=='I' and type_param=='int':
+                     liste_param.append(param)
+                 if typ=='TXM' and type_param=='str':
+                     liste_param.append(repr(param))
+      return liste_param
+
+  #--------------------------------------------------
+  #
+  # Methodes liees a la validite des valeurs saisies
+  #
+  #---------------------------------------------------
+  # valide_item
+  # valide_liste_partielle
+  # valide_liste_complete
+  # info_erreur_item
+  # info_erreur_liste
+  # IsInIntervalle
+  # isvalid
+
+  def valide_item(self,item):
+      """
+        La validation est réalisée directement par l'objet
+      """
+      return self.object.valide_item(item)
+     
+  def valide_liste_partielle(self,item,listecourante):
+      #On protege la liste en entree en la copiant
+      valeur=listecourante[:]
+      valeur.append(item)
+      return self.object.valid_valeur_partielle(valeur)
+
+  def valide_liste_complete (self,valeur):
+      return self.object.valid_valeur(valeur)
+
+  def valide_val (self,valeur):
+      return self.object.valid_val(valeur)
+
+  def info_erreur_item(self) :
+      commentaire=""
+      if self.definition.validators :
+         commentaire=self.definition.validators.info_erreur_item()
+      return commentaire
+      
+  def aide(self) :
+      commentaire=""
+      if self.definition.validators :
+         commentaire=self.definition.validators.aide()
+      return commentaire
+
+  def info_erreur_liste(self) :
+      commentaire=""
+      if self.definition.validators :
+         commentaire=self.definition.validators.info_erreur_liste()
+      return commentaire
+
+  def IsInIntervalle(self,valeur):
+      """ 
+          Retourne 1 si la valeur est dans l'intervalle permis par
+          l'objet représenté par l'item.
+      """
+      return self.valide_item(valeur)
+
+  def isvalid(self):
+    valide=self.object.isvalid()
+    return valide
+
+  #--------------------------------------------------
+  #
+  # Autres ...
+  #
+  #---------------------------------------------------
+  # SetText         a priori inutilisee --> commentee
+  # GetIconName
+  # GetText
+  # getval     a  priori inutilisee --> commentee
+  # set_valeur_co
+  # get_sd_avant_du_bon_type
+  # verif        a  priori inutilisee --> commentee
+  # delete_valeur_co
+
+  #def SetText(self, text):
+  #  try:
+  #    value = eval(text)
+  #    self.object.setval(value)
+  #  except:
+  #    pass
+
+  def GetIconName(self):
+    if self.isvalid():
+      return "ast-green-ball"
+    elif self.object.isoblig():
+      return "ast-red-ball"
+    else:
+      return "ast-yel-ball"
+
+  def GetText(self):
+    """
+    Classe SIMPTreeItem
+    Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet
+    pointé par self 
+    """
+    text= self.object.GetText()
+    return text
+    
+  #def getval(self):
+  #    return self.object.getval()
+
+  def set_valeur_co(self,nom_co):
+      """
+      Affecte au MCS pointé par self l'objet de type CO et de nom nom_co
+      """
+      ret = self.object.set_valeur_co(nom_co)
+      #print "set_valeur_co",ret
+      return ret
+      
+  def get_sd_avant_du_bon_type(self):
+      """
+      Retourne la liste des noms des SD présentes avant l'étape qui contient
+      le MCS pointé par self et du type requis par ce MCS
+      """
+      a=self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type)
+      return a
+
+  def get_sd_avant_du_bon_type_pour_type_de_base(self):
+      a=self.object.jdc.get_sd_avant_du_bon_type_pour_type_de_base(self.object.etape,"LASSD")
+      return a
+
+
+
+  #def verif(self):
+  #    pass
+
+  def delete_valeur_co(self,valeur=None):
+      """
+           Supprime la valeur du mot cle (de type CO)
+           il faut propager la destruction aux autres etapes
+      """
+      if not valeur : valeur=self.object.valeur
+      # XXX faut il vraiment appeler del_sdprod ???
+      #self.object.etape.parent.del_sdprod(valeur)
+      self.object.etape.parent.delete_concept(valeur)
+
+  #-----------------------------------------------
+  #
+  # Methodes liees au type de l objet attendu
+  #
+  #-----------------------------------------------
+  # wait_co 
+  # wait_geom
+  # wait_complex
+  # wait_reel
+  # wait_shell
+  # wait_assd
+  # GetType
+
+  def wait_co(self):
+      """
+      Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un objet de type ASSD qui n'existe pas encore (type CO()),
+      0 sinon
+      """
+      return self.object.wait_co()
+
+  def wait_geom(self):
+      """
+      Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un objet GEOM, 0 sinon
+      """
+      return self.object.wait_geom()
+    
+  def wait_complex(self):
+      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un complexe, 0 sinon """
+      if 'C' in self.object.definition.type:
+          return 1
+      else:
+          return 0
+
+  def wait_reel(self):
+      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un réel, 0 sinon """
+      if 'R' in self.object.definition.type:
+          return 1
+      else:
+          return 0
+        
+  def wait_shell(self):
+      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un shell, 0 sinon """
+      if 'shell' in self.object.definition.type:
+          return 1
+      else:
+          return 0
+
+  def wait_assd(self):
+      """Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un objet de type ASSD ou dérivé, 0 sinon """
+      return self.object.wait_assd()
+    
+  def wait_assd_or_type_base(self) :
+      boo=0
+      if len(self.object.definition.type) > 1 :
+         if self.wait_reel() :
+            boo = 1
+         if 'I' in self.object.definition.type :
+            boo = 1
+      return boo
+
+   
+  def GetType(self):
+      """ 
+          Retourne le type de valeur attendu par l'objet représenté par l'item.
+      """
+      return self.object.get_type()
+
+  #-----------------------------------------------------
+  #
+  # Methodes liees  a l evaluation de la valeur saisie
+  #
+  #-----------------------------------------------------
+  # eval_valeur
+  # eval_valeur_item
+  # is_CO
+  # traite_reel
+
+  def eval_valeur(self,valeur):
+      """ Lance l'interprétation de 'valeur' (chaîne de caractères) comme valeur de self :
+             - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...)
+             - retourne 'valeur' (chaîne de caractères) sinon
+      """
+      newvaleur=self.eval_val(valeur)
+      return newvaleur,1
+
+  def eval_valeur_BAK(self,valeur):
+      """ Lance l'interprétation de 'valeur' (chaîne de caractères) comme valeur
+      de l'objet pointé par self :
+        - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...)
+        - retourne 'valeur' (chaîne de caractères) sinon
+        - retourne None en cas d invalidite
+        - retourne invalide si 1 des objets du tuple l est
+      """
+      validite=1
+      if type(valeur) in (types.ListType,types.TupleType) :
+         valeurretour=[]
+         for item in valeur :
+             newvaleur,validiteitem=self.eval_valeur_item(item)
+             valeurretour.append(newvaleur)
+             if validiteitem == 0:
+                validite=0
+      else :
+         valeurretour,validite= self.eval_valeur_item(valeur)
+      if validite == 0 :
+         valeurretour = None
+      return valeurretour,validite
+
+  def eval_valeur_item(self,valeur):
+      """ Lance l'interprétation de 'valeur' qui doit ne pas etre un tuple 
+          - va retourner la valeur de retour et la validite
+            selon le type de l objet attendu
+          - traite les reels et les parametres 
+      """ 
+      #print "eval_valeur_item",valeur
+      if valeur==None or valeur == "" :
+         return None,0
+      validite=1
+      if self.wait_reel():
+             valeurinter = self.traite_reel(valeur)
+             if valeurinter != None :
+                valeurretour,validite= self.object.eval_valeur(valeurinter)
+             else:
+                valeurretour,validite= self.object.eval_valeur(valeur)
+      elif self.wait_geom():
+             valeurretour,validite = valeur,1
+      else :
+             valeurretour,validite= self.object.eval_valeur(valeur)
+      #print "eval_valeur_item",valeurretour,validite
+
+      if validite == 0:
+         if type(valeur) == types.StringType and self.object.wait_TXM():
+            essai_valeur="'" + valeur + "'"
+            valeurretour,validite= self.object.eval_valeur(essai_valeur)
+
+      if hasattr(valeurretour,'__class__'):
+         #if valeurretour.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'):
+         if valeurretour.__class__.__name__ in ('PARAMETRE',):
+            validite=1
+
+      #if self.wait_co():
+         # CCAR : il ne faut pas essayer de creer un concept
+         # il faut simplement en chercher un existant ce qui a du etre fait par self.object.eval_valeur(valeur)
+         #try:
+            #valeurretour=Accas.CO(valeur)
+         #except:
+            #valeurretour=None
+            #validite=0
+      # on est dans le cas où on a évalué et où on n'aurait pas du
+      if self.object.wait_TXM() :
+          if type(valeurretour) != types.StringType:
+             valeurretour=str(valeur)
+             validite=1
+      return valeurretour,validite
+      
+  def is_CO(self,valeur=None):
+      """
+         Indique si valeur est un concept produit de la macro
+         Cette méthode n'a de sens que pour un MCSIMP d'une MACRO
+         Si valeur vaut None on teste la valeur du mot cle
+      """
+      # Pour savoir si un concept est un nouveau concept de macro
+      # on regarde s'il est présent dans l'attribut sdprods de l'étape
+      # ou si son nom de classe est CO.
+      # Il faut faire les 2 tests car une macro non valide peut etre
+      # dans un etat pas tres catholique avec des CO pas encore types
+      # et donc pas dans sdprods (resultat d'une exception dans type_sdprod)
+      if not valeur:valeur=self.object.valeur
+      if valeur in self.object.etape.sdprods:return 1
+      if type(valeur) is not types.InstanceType:return 0
+      if valeur.__class__.__name__ == 'CO':return 1
+      return 0
+
+  def is_param(self,valeur) :
+      for param in self.jdc.params:
+          if (repr(param) == valeur):
+             return 1
+      return 0
+
+  def traite_reel(self,valeur):
+      """
+      Cette fonction a pour but de rajouter le '.' en fin de chaîne pour un réel
+      ou de détecter si on fait référence à un concept produit par DEFI_VALEUR
+      ou un EVAL ...
+      """
+      valeur = string.strip(valeur)
+      liste_reels = self.get_sd_avant_du_bon_type()
+      if valeur in liste_reels:
+          return valeur
+      if len(valeur) >= 3 :
+          if valeur[0:4] == 'EVAL' :
+              # on a trouvé un EVAL --> on retourne directement la valeur
+              return valeur
+      if string.find(valeur,'.') == -1 :
+          # aucun '.' n'a été trouvé dans valeur --> on en rajoute un à la fin
+          if (self.is_param(valeur)):
+              return valeur
+          else:
+              if string.find(valeur,'e') != -1:
+                 # Notation scientifique ?
+                 try :
+                    r=eval(valeur)
+                    return valeur
+                 except :
+                    return None
+              else :
+                 return valeur+'.'
+      else:
+          return valeur
+        
+
+import Accas
+treeitem = SIMPTreeItem
+objet = Accas.MCSIMP
+
diff --git a/InterfaceTK/definition_cata.py b/InterfaceTK/definition_cata.py
new file mode 100644 (file)
index 0000000..156ea48
--- /dev/null
@@ -0,0 +1,462 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import types
+
+# Modules Eficas
+import Accas
+from Noyau.N_CR import CR
+
+class CATALOGUE:
+    def __init__(self,modules_cata):
+        self.modules_cata = modules_cata # tuple de modules...
+        self.cr = CR()
+        self.state='undetermined'
+        self.entites_attributs = {}
+        self.entites_fils = []
+        self.build_entites_attributs()
+        self.build_entites_fils()
+
+    def build_entites_attributs(self):
+        pass
+        
+    def build_entites_fils(self):
+        niv_types = Accas.NIVEAU(nom="types",label="Liste des types")
+        niv_commandes = Accas.NIVEAU(nom="commandes",label="Liste des commandes")
+        self.entites_fils.append(make_commande_cata(niv_types,self))
+        self.entites_fils.append(make_commande_cata(niv_commandes,self))
+        for module_cata in self.modules_cata:
+            for e in dir(module_cata):
+                obj = getattr(module_cata,e)
+                if isCMD(obj):
+                    self.entites_fils[1].register(make_commande_cata(obj,self.entites_fils[1]))
+                elif type(obj) == types.ClassType:
+                    if issubclass(obj,Accas.ASSD):
+                        self.entites_fils[0].register(TYPE_CATA(obj))
+
+    def init_modif(self):
+        self.state = 'modified'
+        
+    def report(self):
+      """ Classe CATALOGUE
+          Methode pour generation d un rapport de validite
+      """
+      self.cr.purge()
+      self.cr.debut="DEBUT CR validation : " 
+      self.cr.fin="FIN CR validation :"
+      self.state = 'modified'
+      self.isvalid(cr='oui')
+      for fils in self.entites_fils[1].entites :
+        self.cr.add(fils.report())
+      return self.cr
+
+    def isvalid(self,cr='non'):
+        if self.state != 'unchanged':
+            valid=1
+            for fils in self.entites_fils[1].entites_fils:
+                if not fils.isvalid():
+                    valid=0
+                    break
+            self.valid = valid
+            self.state='unchanged'
+        return self.valid
+    
+def make_commande_cata(objet,pere):
+    if isinstance(objet,Accas.OPER):
+        return OPER_CATA(objet,pere,objet.nom)
+    elif isinstance(objet,Accas.PROC):
+        return PROC_CATA(objet,pere,objet.nom)
+    elif isinstance(objet,Accas.MACRO):
+        return MACRO_CATA(objet,pere,objet.nom)
+    elif isinstance(objet,Accas.FORM):
+        return MACRO_CATA(objet,pere,objet.nom)
+    elif isinstance(objet,Accas.NIVEAU):
+        return NIVEAU_CATA(objet,pere,objet.nom)
+    else:
+        print "Erreur dans make_commande_cata : on cherche à évaluer un objet non référencé ",objet
+
+def make_mc_cata(objet,pere,nom=''):
+    if isinstance(objet,Accas.BLOC):
+        return BLOC_CATA(objet,pere,nom)
+    elif isinstance(objet,Accas.FACT):
+        return FACT_CATA(objet,pere,nom)
+    elif isinstance(objet,Accas.SIMP):
+        return SIMP_CATA(objet,pere,nom)
+    else:
+        print "Erreur dans make_mc_cata : on cherche à évaluer un objet non référencé ",objet
+
+class TYPE_CATA:
+    def __init__(self,objet):
+        self.objet = objet
+        self.nom = objet.__name__
+
+    def isvalid(self,cr='non'):
+        return 1
+
+    def get_valeur_attribut(self,nom_attr):
+        if nom_attr == 'nom':return self.nom
+        return None
+   
+class OBJET_CATA:
+    attributs=[]
+    attributs_defauts={}
+    def __init__(self,objet,pere,nom):
+        self.objet = objet
+        self.nom = nom
+        self.pere = pere
+        self.cr = CR()
+        self.state='undetermined'
+        self.entites_fils = []
+        self.entites_attributs = {}
+        self.build_entites_attributs()
+        self.build_entites_fils()
+
+    def __str__(self):
+        s=''
+        s=self.__class__.__name__+' : '+self.nom
+        return s
+    
+    def build_entites_attributs(self):        
+        for attribut in self.attributs:
+            if hasattr(self.objet,attribut):
+                self.entites_attributs[attribut]=ATTR_CATA(attribut,getattr(self.objet,attribut))
+            else:
+                if self.attributs_defauts.has_key(attribut):
+                    self.entites_attributs[attribut]=ATTR_CATA(attribut,self.attributs_defauts[attribut])
+                else:
+                    self.entites_attributs[attribut]=ATTR_CATA(attribut,None)
+
+    def build_entites_fils(self):
+        for k,v in self.objet.entites.items():
+            self.entites_fils.append(make_mc_cata(v,self,nom=k))
+
+    def get_valeur_attribut(self,nom_attr):
+        if nom_attr in self.entites_attributs.keys():
+            return self.entites_attributs[nom_attr].valeur
+        elif nom_attr in self.attributs_defauts.keys():
+            return self.attributs_defauts[nom_attr]
+        elif nom_attr == 'domaine_validité':
+            if self.entites_attributs['into'].valeur != None :
+                return 'discret'
+            else:
+                return 'continu'
+
+    def isvalid(self,cr='non'):
+        if self.state =='unchanged':
+            return self.valid
+        else:
+            valid = 1
+            if hasattr(self,'valid'):
+                old_valid = self.valid
+            else:
+                old_valid = None
+            # on teste self lui-meme
+            if self.nom == '' or self.nom == None : valid=0
+            # on teste les attributs
+            for attribut in self.entites_attributs.values():
+                if not attribut.isvalid() : valid =0
+                break
+            # on teste les fils
+            for fils in self.entites_fils:
+                if not fils.isvalid(): valid = 0
+                break
+        self.valid = valid
+        self.state = 'unchanged'
+        if old_valid:
+            if old_valid != self.valid : self.init_modif_up()
+        return self.valid
+
+    def init_modif_up(self):
+        self.pere.state='modified'
+      
+    def report(self):
+        self.cr.purge()
+        self.cr.debut="Debut "+self.__class__.__name__+' : '+self.nom
+        self.cr.fin = "Fin "+self.__class__.__name__+' : '+self.nom
+        self.isvalid(cr='oui')
+        for attribut in self.entites_attributs.values():
+            self.cr.add(attribut.report())
+        for fils in self.entites_fils :
+            self.cr.add(fils.report())
+        return self.cr
+        
+    def set_valeur_attribut(self,nom_attr,valeur):
+        """
+        Affecte la valeur 'valeur' à l'attribut de nom 'nom-attr'
+        """
+        # il faudra être prudent sur les changements de nom : interdire de changer
+        # le nom d'un mot-clé qui serait utilisé dans une règle ???
+        self.entites_attributs[nom_attr].valeur = valeur
+        
+    def addentite(self,name,pos):
+        """
+        Permet d'ajouter un nouveau fils a self
+        """
+        self.init_modif()
+        if name == 'new_simp':
+            objet = Accas.SIMP(typ=('bidon',))
+        objet_cata = make_mc_cata(objet,self)
+        self.entites_fils.insert(pos,objet_cata)
+        return objet_cata
+
+    def init_modif(self):
+        self.state = 'modified'
+        if hasattr(self,'pere'):
+            self.pere.init_modif()
+
+    def verif_nom(self,cr='non'):
+        """
+        Méthode appelée par EFICAS et ACCAS
+        Booléenne : retourne 1 si l'attribut nom est valide, 0 sinon
+        """
+        if self.entites_attributs['nom'].valeur == '':
+            if cr == 'oui' : self.cr.fatal("L'objet de type %s n'est pas nommé" %self.__class__.__name__)
+            return 0
+        return 1
+    
+    def verif_defaut(self,cr='non'):
+        """
+        Méthode de vérification de validité du défaut
+        """
+        defaut = self.get_valeur_attribut('defaut')
+        if self.get_valeur_attribut('domaine_validite') == 'discret' :
+            if defaut not in self.get_valeur_attribut('into'):
+                if cr == 'oui' : self.cr.fatal("La valeur %s n'est pas autorisée" %str(defaut))
+                return 0
+            return 1
+        else:
+            if defaut == None : return 1
+            typ = self.get_valeur_attribut('type')
+            # on attend un TXM ?
+            if 'TXM' in typ :
+                if type(defaut) == types.StringType : return 1
+            val_min = self.get_valeur_attribut('val_min')
+            val_max = self.get_valeur_attribut('val_max')
+            # on attend un reel ?
+            if 'R' in typ :
+                if type(defaut) == types.StringType:
+                    try :
+                        nb = string.atof(defaut)
+                    except:
+                        nb=None
+                else:
+                    nb = defaut
+                if nb != None :
+                    test = 1
+                    if val_min != '**' : test = (nb >= val_min)
+                    if val_max != '**' : test = test*(nb <= val_max)
+                    if test : return 1
+            # on attend un entier ?
+            if 'I' in typ :
+                if type(defaut)==types.StringType:
+                    try:
+                        nb = string.atoi(defaut)
+                    except:
+                        pass
+                else:
+                    nb = defaut
+                if nb != None :
+                    test = 1
+                    if val_min != '**' : test = (nb >= val_min)
+                    if val_max != '**' : test = test*(nb <= val_max)
+                    if test : return 1
+            # si on passe par là, c'est que l'on n'a pas su évaluer defaut
+            if cr == 'oui' : self.cr.fatal("La valeur %s n'est pas une valeur permise" %str(defaut))
+            return 0
+
+    def verif_val_min(self,cr='non'):
+        """
+        Méthode de vérification de val_min.
+        Booléenne : retourne 1 si val_min est valide, 0 sinon
+        """
+        val_min = self.get_valeur_attribut('val_min')
+        if not val_min :
+            if cr == 'oui' : self.cr.fatal('val_min ne peut valoir None')
+            return 0
+        if val_min == '**': return 1
+        # val_min doit à ce stade être :
+        # - soit un entier ou un réel
+        # - soit une chaîne de caractères représentant un entier ou un réel (provient d'EFICAS)
+        if type(val_min) == types.StringType :
+            try :
+                val_min = string.atoi(val_min)
+            except:
+                try:
+                    val_min = string.atof(val_min)
+                except:
+                    if cr == 'oui' : self.cr.fatal("%s n'est ni un entier ni un réel" %str(val_min))
+                    return 0
+        # A ce stade, val_min doit être un entier ou un réel : on vérifie ...
+        if type(val_min) not in (types.IntType,types.FloatType) :
+            if cr == 'oui' : self.cr.fatal("%s n'est pas d'un type autorisé" %str(val_min))
+            return 0
+        # A ce stade valeur est un entier ou un réel : on peut comparer à val_max
+        val_max = self.get_valeur_attribut('val_max')
+        if val_max == '**' or val_min < val_max : return 1
+        # erreur : val_min est supérieur à val_max !!!
+        if cr == 'oui' : self.cr.fatal("%s n'est pas inférieur à %s" %(str(val_min),str(val_max)))
+        return 0
+
+    def verif_val_max(self,cr='non'):
+        """
+        Méthode de vérification de val_max.
+        Booléenne : retourne 1 si val_max est valide, 0 sinon
+        """
+        val_max = self.get_valeur_attribut('val_max')
+        if not val_max :
+            if cr == 'oui' : self.cr.fatal('val_max ne peut valoir None')
+            return 0
+        if val_max == '**': return 1
+        # val_max doit à ce stade être :
+        # - soit un entier ou un réel
+        # - soit une chaîne de caractères représentant un entier ou un réel (provient d'EFICAS)
+        if type(val_max) == types.StringType :
+            try :
+                val_max = string.atoi(val_max)
+            except:
+                try:
+                    val_max = string.atof(val_max)
+                except:
+                    if cr == 'oui' : self.cr.fatal("%s n'est ni un entier ni un réel" %str(val_max))
+                    return 0
+        # A ce stade, val_max doit être un entier ou un réel : on vérifie ...
+        if type(val_max) not in (types.IntType,types.FloatType) :
+            if cr == 'oui' : self.cr.fatal("%s n'est pas d'un type autorisé" %str(val_max))
+            return 0
+        # A ce stade valeur est un entier ou un réel : on peut comparer à val_max
+        val_min = self.get_valeur_attribut('val_min')
+        if val_min == '**' or val_min < val_max : return 1
+        # erreur : val_min est supérieur à val_max !!!
+        if cr == 'oui' : self.cr.fatal("%s n'est pas supérieur à %s" %(str(val_max),str(val_min)))
+        return 0
+    
+class OPER_CATA(OBJET_CATA):
+    attributs = ['ang','docu','fr','niveau','nom','op','op_init','reentrant','regles','repetable','sd_prod']
+  
+class PROC_CATA(OBJET_CATA):
+    attributs = ['ang','docu','fr','niveau','nom','op','op_init','regles','repetable']
+
+class MACRO_CATA(OBJET_CATA):
+    attributs = ['ang','docu','fr','niveau','nom','op','op_init','reentrant','regles','repetable','sd_prod']
+    
+class BLOC_CATA(OBJET_CATA):
+    attributs = ['ang','condition','docu','fr','nom','regles']
+
+class FACT_CATA(OBJET_CATA):
+    attributs=['ang','defaut','docu','fr','max','min','nom','regles','statut']
+
+class SIMP_CATA(OBJET_CATA):
+    attributs=['ang','defaut','docu','fr','homo','into','max','min','nom','position','statut','type','val_min','val_max']
+    attributs_defauts={'ang':'','defaut':None,'fr':'','homo':1,'into':None,'max':1,'min':1,'nom' : '','position':'local',
+                       'regles':None,'statut':'f','type':None,'val_min':'**','val_max':'**','docu':''}
+                
+    def build_entites_fils(self):
+        pass
+
+    def isvalid(self,cr='non'):
+        """
+        Mde appelpar l'externe (EFICAS et ACCAS).
+        Boolne : retourne 1 si l'objet est valide, 0 sinon
+        """
+        if self.state == 'unchanged':
+            return self.valid
+        else:
+            valid = 1
+            valid = valid*self.verif_nom(cr=cr)
+            valid = valid*self.verif_defaut(cr=cr)
+            valid = valid*self.verif_val_min(cr=cr)*self.verif_val_max(cr=cr)
+            if hasattr(self,'valid'):
+                old_valid = self.valid
+            else:
+                old_valid = None
+            self.valid = valid
+            self.state='unchanged'
+            if old_valid :
+                if old_valid != self.valid : self.init_modif_up()
+            return self.valid
+
+class NIVEAU_CATA(OBJET_CATA):
+  def __init__(self,objet,pere,nom):
+    self.pere = pere
+    self.nom = nom
+    self.state = 'undetermined'
+    self.cr = CR()
+    self.objet = objet
+    self.entites_fils=[]
+    self.entites_attributs = {}
+
+  def register(self,fils):
+    """ 
+        Enregistre la commande 굡pe :
+         - si editmode = 0 : on est en mode relecture d'un fichier de commandes
+         auquel cas on ajoute etape ࡬a fin de la liste self.etapes
+         - si editmode = 1 : on est en mode ajout d'굡pe depuis eficas auquel cas
+         cette mode ne fait rien, c'est addentité enregistre etape à¡¬a bonne place
+         dans self.etapes 
+    """
+    self.entites_fils.append(fils)
+
+  def unregister(self,etape):
+    self.entites_fils.remove(etape)
+
+  def isvalid(self,cr='non'):
+    """ Mode boolne qui retourne 0 si le niveau est invalide, 1 sinon """
+    if self.state == 'unchanged':
+        return self.valid
+    else:
+        valid = 1
+        if len(self.entites_fils) == 0:
+            #valid = self.Accas.valide_vide
+            valid = 1
+        else:
+            for commande in self.entites_fils :
+                if hasattr(commande,'isvalid'):
+                    if not commande.isvalid() :
+                        valid = 0
+                        break
+                else:
+                    print str(commande)," n'a pas de methode isvalid"
+        if hasattr(self,'valid'):
+            old_valid = self.valid
+        else:
+            old_valid = None
+        self.valid = valid
+        self.state='unchanged'
+        if old_valid:
+            if old_valid != self.valid : self.init_modif_up()
+        return self.valid
+            
+
+class ATTR_CATA(OBJET_CATA):
+    def __init__(self,nom,valeur=None):
+        self.nom = nom
+        self.valeur = valeur
+        self.cr = CR()
+        self.state='undetermined'
+        self.entites_attributs={}
+        self.entites_fils=()
+
+    def isvalid(self,cr='non'):
+        return 1
+
+def isCMD(cmd):
+   return isinstance(cmd,Accas.OPER) or isinstance(cmd,Accas.PROC) or isinstance(cmd,Accas.MACRO) or isinstance(cmd,Accas.FORM)
+
diff --git a/InterfaceTK/eficas.py b/InterfaceTK/eficas.py
new file mode 100644 (file)
index 0000000..caf47fb
--- /dev/null
@@ -0,0 +1,143 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce module contient la classe EFICAS qui est l'application
+    proprement dite. Elle est dérivée de la classe APPLI
+"""
+# Modules Python
+import string
+from Tkinter import Label
+import Pmw
+import traceback
+
+# Modules Eficas
+from widgets import showerror
+from widgets import askopenfilename
+import patches
+import appli
+from widgets import Fenetre
+
+class EFICAS(appli.APPLI):
+
+  try:
+     from prefs import appli_composants
+  except:
+     appli_composants=['readercata','bureau','browser','options']
+
+  def get_texte_infos(self):
+     texte=appli.APPLI.get_texte_infos(self)
+     texte = texte + 'Catalogue utilisé : %s\n' %  self.bureau.fic_cata
+     return texte
+
+  def exitEFICAS(self):
+     self.bureau.exitEFICAS()
+
+  def getBureau(self):
+      return self.bureau
+      
+  def browse(self,result):
+      if result == 'Browse':
+        self.ulfile = askopenfilename(parent=self.dialog.component('hull'),title="Choix fichier :")
+        self._ulfile.setentry(self.ulfile)
+      elif result == 'OK':
+        self.ulfile = self._ulfile.get()
+        # On utilise le convertisseur défini par format_fichier
+        source=self.get_source(self.ulfile)
+        if source:
+           # On a réussi à convertir le fichier self.ulfile
+           self.dialog.deactivate(result)
+           self.text=source
+        else:
+           # Une erreur a été rencontrée
+           self.text=''
+      elif result == 'Cancel':
+        self._ulfile.setentry('')
+        self.dialog.deactivate(result)
+        self.ulfile = None
+        self.text=""
+
+  def get_file(self,unite=None,fic_origine = ''):
+      """ 
+          Retourne le nom du fichier correspondant a l unite logique unite (entier)
+      """
+      if unite :
+          titre = "Choix unite %d " %unite
+      else:
+          titre = "Choix d'un fichier de poursuite"
+      self.dialog=Pmw.Dialog(self.top,
+                             title = titre,
+                             buttons = ('OK', 'Browse','Cancel'),
+                             defaultbutton='OK',
+                             command=self.browse,
+                             )
+      self.dialog.withdraw()
+      if 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
+      else:
+          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'
+      if self.test == 1: raise Exception("Erreur: "+texte)
+      w = Label(self.dialog.interior(),
+                text = texte)
+      w.pack(padx = 10, pady = 10)
+      if unite != None :
+          labeltexte = 'Fichier pour unite %d :' % unite
+      else:
+          labeltexte = 'Fichier à poursuivre :'
+      self._ulfile=Pmw.EntryField(self.dialog.interior(),
+                                  labelpos = 'w',
+                                  label_text = labeltexte,
+                                  )
+      self._ulfile.pack(fill='x', expand=1, padx=10, pady=5)
+      self._ulfile.component('entry').focus_set()
+      self.dialog.activate(geometry='centerscreenalways')
+      return self.ulfile,self.text
+
+  def get_source(self,file):
+      import convert
+      format=self.format_fichier.get()
+      # 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 à la conversion")
+            Fenetre(self,
+                    titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier",
+                    texte = str(p.cr)).wait()
+            return text
+         return text
+      else:
+         # Il n'existe pas c'est une erreur
+         self.affiche_infos("Type de fichier non reconnu")
+         showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")
+         return None
+
+  def affiche_texte(self,entete,texte):
+      """Cette methode ouvre une fenetre modale dans laquelle on affiche un texte
+      """
+      self.affiche_infos(entete)
+      f=Fenetre(self, titre=entete, texte = texte)
+      f.wait()
+
diff --git a/InterfaceTK/eficas_go.py b/InterfaceTK/eficas_go.py
new file mode 100644 (file)
index 0000000..e6b00c5
--- /dev/null
@@ -0,0 +1,63 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce module permet de lancer l'application EFICAS en affichant
+    un ecran Splash pour faire patienter l'utilisateur
+"""
+# Modules Python
+import sys
+import Tkinter
+
+# Modules Eficas
+import prefs
+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
+
+import styles
+from Editeur import import_code
+import splash
+from Editeur import session
+
+def lance_eficas(code=None,fichier=None):
+    """
+        Lance l'appli EFICAS
+    """
+    # Analyse des arguments de la ligne de commande
+    if code !=None : prefs.code=code
+    if code !=None  :
+       sys.argv.append("-k")
+       sys.argv.append(code)
+    options=session.parse(sys.argv)
+    code=options.code
+
+    root = Tkinter.Tk()
+    splash.init_splash(root,code=code,titre="Lancement d'EFICAS pour %s" %code)
+    splash._splash.configure(text="Chargement d'EFICAS en cours.\n Veuillez patienter ...")
+    import eficas
+    eficas.EFICAS(root,code=code,ihm="TK")
+
+    root.mainloop()
+
diff --git a/InterfaceTK/eficas_test.py b/InterfaceTK/eficas_test.py
new file mode 100644 (file)
index 0000000..2a5230c
--- /dev/null
@@ -0,0 +1,105 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce module permet de lancer l'application EFICAS en affichant
+    un ecran Splash pour faire patentier l'utilisateur
+"""
+# Modules Python
+import sys
+import Tkinter
+
+# Modules Eficas
+from Editeur import import_code
+from Editeur import session
+
+def lance_eficas(code,fichier=None):
+    """
+        Lance l'appli EFICAS
+    """
+    options=session.parse(sys.argv)
+    root = Tkinter.Tk()
+    import eficas
+    if fichier :
+        a=eficas.EFICAS(root,code=code,fichier = fichier,test=1)
+        bureau=a.getBureau()
+    else:
+        eficas.EFICAS(root,code=code)
+
+    print bureau.JDC.report()
+    bureau.closeJDC()
+
+def duplique_fichier(code,fichier=None,root=None):
+    print code
+    print fichier
+    if root == None :
+       root = Tkinter.Tk()
+    import eficas
+    import convert
+    import generator
+    import Editeur.utils
+    import string
+
+    if fichier != None :
+       options=session.parse(sys.argv+[fichier])
+    else :
+       options=session.parse(sys.argv)
+
+    appli=eficas.EFICAS(root,code=code,fichier = fichier,test=1)
+    format='homard'
+    if convert.plugins.has_key(format):
+       p=convert.plugins[format]()
+       p.readfile(fichier)
+       text=p.convert('exec',appli)
+       print text
+       text2=convertir(text)
+       print text2
+       cata=appli.readercata.cata
+       J=cata[0].JdC(procedure=text2,cata=cata)
+       J.analyse()
+       fileName=fichier+"_init"
+       if generator.plugins.has_key(format):
+          g=generator.plugins[format]()
+          jdc_formate=g.gener(J,format='beautifie')
+          jdc_fini = string.replace(jdc_formate,'\r\n','\n')
+          utils.save_in_file(fileName+".comm",jdc_fini,None)
+
+def convertir(texte):
+    import re
+    dict_change={"FICHIER_MED_MAILLAGE_N=":"FICHIER_MED_MAILLAGE_NP1","NOM_MED_MAILLAGE_N=":"NOM_MED_MAILLAGE_NP1"}
+    for mot in dict_change.keys():
+        if( re.search(mot,texte)):
+          indicenouveau=re.search(mot,texte).end()
+          indicefinnouveau= texte.find(",",indicenouveau)
+          avant=dict_change[mot]
+          if( re.search(avant,texte)):
+             indiceancien=re.search(avant,texte).end()+1
+             indicefinancien= texte.find(",",indiceancien)
+             valeur=texte[indiceancien:indicefinancien]
+             texte=texte[0:indicenouveau]+valeur+texte[indicefinnouveau:]
+    liste_mot_clef_None=['CRIT_RAFF_ABS','CRIT_RAFF_REL','CRIT_RAFF_PE','CRIT_DERA_ABS','CRIT_DERA_REL','CRIT_DERA_PE','NITER','NOM_MED_MAILLAGE_NP1','FICHIER_MED_MAILLAGE_NP1']
+
+    for mot in liste_mot_clef_None:
+        if( re.search(mot,texte)):
+           indice=re.search(mot,texte).end()+1
+           indicefin= texte.find(",",indice)
+           texte=texte[0:indice]+"None"+texte[indicefin:]
+    return texte
+        
diff --git a/InterfaceTK/faq.py b/InterfaceTK/faq.py
new file mode 100644 (file)
index 0000000..30764b5
--- /dev/null
@@ -0,0 +1,52 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+   Ce module sert a afficher le texte du FAQ EFICAS
+   et à attendre l'acquittement par l'utilisateur
+"""
+# Modules Python
+import os
+import Pmw
+from Tkinter import END
+
+# Modules Eficas
+import prefs
+import fontes
+
+class FAQ:
+   def __init__(self,parent):
+      self.parent=parent
+      self.Dialog = Pmw.Dialog(parent,
+                               buttons=('Lu',),
+                               title="FAQs et limitations d'EFICAS",
+                               command = self.lu_FAQ)
+      txt = open(os.path.join(prefs.INSTALLDIR,'Editeur','faqs.txt'),'r').read()
+      Texte = Pmw.ScrolledText(self.Dialog.interior(),
+                               text_font=fontes.standard)
+      Texte.insert(END,txt)
+      Texte.pack(expand=1,fill='both')
+      self.Dialog.activate(geometry = 'centerscreenalways')
+
+   def lu_FAQ(self,event=None):
+      self.Dialog.destroy()
+
+def affiche(parent):
+   FAQ(parent)
diff --git a/InterfaceTK/fenetre_mc_inconnus.py b/InterfaceTK/fenetre_mc_inconnus.py
new file mode 100644 (file)
index 0000000..35b118a
--- /dev/null
@@ -0,0 +1,223 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+"""
+# Modules Python
+from Tkinter import *
+import copy
+
+# Modules Eficas
+from centerwindow import centerwindow
+
+class fenetre_mc_inconnus :
+    """
+       Cette classe sert à construire la fenêtre qui apparaît dans EFICAS 
+       lorsque des mots-clés inconnus ont été trouvés dans le fichier de 
+       commandes que l'on est en train de lire
+    """
+    def __init__(self,l_mc):
+       self.l_mc = l_mc
+       self.fenetre = Toplevel()
+       self.fenetre.withdraw()
+       self.fenetre.geometry("400x400+0+0")
+       self.fenetre.title("Mots-clés inconnus dans le fichier de commandes")
+       self.init()
+       self.init_frames()
+       self.init_label()
+       self.init_liste_mc()
+       self.init_boutons()
+       centerwindow(self.fenetre)
+       self.fenetre.deiconify()
+
+    def init(self) :
+       """
+       Initialise les structures de données
+       """
+       self.new_l_mc = []
+       for mc in self.l_mc :
+           self.new_l_mc.append(copy.copy(mc))
+       self.mc_courant = None
+       self.var_quit = IntVar(0)
+       self.entry_courante = None
+               
+    def init_frames(self):
+       """
+       Création des 2 frames devant contenir le label et la liste des MC inconnus 
+       """
+       self.frame1 = Frame(self.fenetre)
+       self.frame2 = Frame(self.fenetre)
+       self.frame3 = Frame(self.fenetre)
+       self.frame1.place(relx=0,rely=0,relheight=0.2,relwidth=1)
+       self.frame2.place(relx=0,rely=0.2,relheight=0.6,relwidth=1)
+       self.frame3.place(relx=0,rely=0.8,relheight=0.2,relwidth=1)
+    
+    def init_label(self):
+       """
+       Affichage du label dans la zone concernée
+       """
+       txt = " Un ou plusieurs mots-clés inconnus ont été trouvés dans le fichier de commandes."
+       #txt = txt + "En cliquant sur leur nom, vous pourrez soit corriger l'orthographe soit supprimer ce mot-clé"
+       self.fenetre.update_idletasks()
+       Label(self.frame1,
+             text = txt,
+             wraplength = int(self.frame1.winfo_width()*0.8),
+             justify = 'center').place(relx=0.5,rely=0.5,anchor='center')   
+    
+    
+    def init_liste_mc(self):
+       """
+       Affiche les mots-clés à modifier ou supprimer  
+       """
+       i=0
+       self.widgets=[]
+       for mc in self.l_mc :
+           # mc est une liste :
+           # mc contient comme premiers arguments l'étape et éventuellement les blocs, mcfact ...
+           # et contient comme 2 derniers éléments le nom du mot-clé et sa valeur
+           path_mc = self.get_path(mc[0:-2])
+           nom_mc  = mc[-2]
+           lab=Label(self.frame2,text = path_mc)
+           lab.grid(row=i,column=1,sticky=W)
+           e = Entry(self.frame2)
+           e.grid(row=i,column=0,sticky=W)
+           e.insert(END,nom_mc)
+           #e.bind("<Button-1>",lambda event,en=e,m=mc,s=self : s.select_mc(m,en))
+           #e.bind("<Return>",lambda e,s=self : s.modifie_mc())
+           e.configure(relief='flat',state='disabled')
+           self.widgets.append((e,lab))
+           i=i+1
+
+    def init_boutons(self):
+        """
+        Construit les boutons Modifier,Supprimer et Fermer 
+        Les deux premiers sont inactifs tant qu'aucun mot-clé n'est sélectionné
+        """
+        self.b_mod = Button(self.frame3,
+                            text = "Modifier",
+                            disabledforeground = 'grey35',
+                            state='disabled',
+                            command = self.modifie_mc)
+        self.b_sup = Button(self.frame3,
+                            text = "Supprimer",
+                            disabledforeground = 'grey35',
+                            state='disabled',
+                            command = self.supprime_mc)
+        self.b_quit = Button(self.frame3,
+                            text = "Fermer",
+                            command = self.quit)
+        #self.b_mod.place(relx=0.25,rely=0.5,anchor='center')
+        #self.b_sup.place(relx=0.50,rely=0.5,anchor='center')
+        #self.b_quit.place(relx=0.75,rely=0.5,anchor='center')
+        self.b_quit.place(relx=0.50,rely=0.5,anchor='center')
+                                
+    def wait_new_list(self):
+        """
+        Cette méthode rend cette toplevel bloquante.
+        Dès que la variable var_quit est modifiée, on continue l'exécution de cette
+        méthode (et on quitte)
+        """
+        self.fenetre.wait_variable(self.var_quit)
+        self.fenetre.destroy()
+        return self.new_l_mc
+                           
+    def get_path(self,l_o):
+        """
+        Construit la chaîne de caractère contenant le chemin d'accès complet du mot-clé
+        """
+        txt = ''
+        for o in l_o :
+           txt = txt + o.nom+'/'
+        # on enlève le dernier slash en trop
+        txt = txt[0:-1]
+        return txt    
+    
+    def select_mc(self,mc,entry):
+        """
+        Enregistre le mot-clé passé en argument comme mot-clé courant
+        Active les boutons Modifier et Supprimer
+        """
+        self.desactive_entry()
+        self.mc_courant     = mc
+        self.entry_courante = entry
+        self.active_boutons()
+        self.active_entry()
+
+    def modifie_mc(self):
+        """
+        Modifie le nom du mot-clé en prenant la nouvelle valeur lue dans entry_courante
+        """
+        new_nom_mc = self.entry_courante.get()
+        index = self.l_mc.index(self.mc_courant)
+        new_mc = self.new_l_mc[index]
+        new_mc[-2] = new_nom_mc
+        objet_pere = self.mc_courant[-3]
+        
+        self.desactive_boutons()
+        self.desactive_entry()
+
+    def supprime_mc(self):
+        """
+        Supprime le mot-clé courant de la liste
+        """
+        index = self.l_mc.index(self.mc_courant)
+        self.new_l_mc[index] = None
+        e,lab=self.widgets[index]
+        e.grid_remove()
+        lab.grid_remove()
+        self.desactive_boutons()
+        self.desactive_entry()        
+        
+    def desactive_boutons(self):
+        """
+        Désactive les boutons Modifier et Supprimer
+        """
+        self.b_mod.configure(state='disabled')
+        self.b_sup.configure(state='disabled')
+                
+    def active_boutons(self):
+        """
+        Active les boutons Modifier et Supprimer
+        """
+        self.b_mod.configure(state='normal')
+        self.b_sup.configure(state='normal')
+
+    def desactive_entry(self):
+        """
+        Désactive l'entry courante si elle existe
+        """
+        if self.entry_courante :
+           self.entry_courante.configure(state='disabled',relief='flat')
+           
+    def active_entry(self):
+        """
+        Active l'entry courante si elle existe
+        """
+        if self.entry_courante :
+           self.entry_courante.configure(state='normal',relief='sunken')
+                      
+    def quit(self):
+        """
+        Permet de fermer la fenêtre
+        """
+        self.var_quit.set(1)
+
+if __name__ == '__main__':
+   fenetre_mc_inconnus(('toto','titi'))
diff --git a/InterfaceTK/fonctionpanel.py b/InterfaceTK/fonctionpanel.py
new file mode 100644 (file)
index 0000000..b17704d
--- /dev/null
@@ -0,0 +1,293 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+from widgets import askopenfilename
+from widgets import showinfo
+
+from Noyau.N_CR import justify_text
+from Editeur.utils import substract_list
+from plusieursbasepanel import PLUSIEURS_BASE_Panel
+
+
+class FONCTION_Panel(PLUSIEURS_BASE_Panel):
+  def makeValeurPage(self,page):
+      """
+      Crée la page de saisie d'une liste de valeurs à priori quelconques,
+      cad qui ne sont  pas à choisir dans une liste prédéfinie
+      """
+      genea=self.node.item.get_genealogie()
+      if "VALE" in genea:
+        self.nb_valeurs=2
+      if "VALE_C" in genea:
+        self.nb_valeurs=3
+      # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste),
+      # et la liste des valeurs déjà affectées à l'objet courant
+      bulle_aide=self.get_bulle_aide()
+      objet_mc = self.node.item.get_definition()
+      aide = self.get_aide()
+      aide = justify_text(texte=aide)
+      min,max = self.node.item.GetMinMax()
+      l_valeurs = self.node.item.GetListeValeurs()
+      l2_valeurs=self.decoupeListeValeurs(l_valeurs)
+
+      # création des frames globales
+      self.frame1 = Frame(page,relief='groove',bd=2)
+      self.frame2 = Frame(page)
+      self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85)
+      self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15)
+      self.frame_right = Frame(self.frame1)
+      self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.)
+
+      # création des frames internes
+      self.frame_valeurs = Frame(self.frame1)
+      self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95)
+      self.frame_boutons_fleches = Frame(self.frame_right)
+      self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.5)
+      self.frame_choix = Frame(self.frame_right)
+      self.frame_choix.place(relx=0.2,rely=0.2,relwidth=0.7,relheight=0.5)
+      self.frame_aide = Frame(self.frame_right)
+      self.frame_aide.place(relx=0.1,rely=0.7,relwidth=0.8,relheight=0.3)
+      self.frame_boutons = Frame(self.frame2)
+      self.frame_boutons.place(relx=0.35,rely=0.,relwidth=0.5,relheight=1.)
+      for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs,
+                 self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons):
+          fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+          fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
+      # création des objets dans les frames
+      liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
+                                 ("<Button-3>",self.deselectValeur),
+                                 ("<Double-Button-1>",self.afficheValeurListe))
+      self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l2_valeurs,liste_commandes = liste_commandes_valeurs,
+                                      titre="Valeur(s) actuelle(s)")
+
+      # Création de l'entry ou de la liste des SD
+      self.label = Label(self.frame_choix,text="Valeur :")
+      self.make_entry(frame = self.frame_choix,command = self.add_double_valeur_plusieurs_base)
+      self.label.place(relx=0.05,rely=0.5)
+
+      # Création d'un bouton "Importer ..." sur le panel.
+      bouton_valeurs_fichier = Button(self.frame_choix,
+                                      text="Importer ...",
+                                      command=self.select_in_file)
+      bouton_valeurs_fichier.place(relx=0.28,rely=0.7,relwidth=0.6)
+      self.ajout_valeurs = None
+
+      # boutons Ajouter et Supprimer
+      self.bouton_add = Button(self.frame_boutons_fleches,
+                          image = images.get_image('arrow_left'),
+                          command = self.add_double_valeur_plusieurs_base)
+      self.bouton_sup = Button(self.frame_boutons_fleches,
+                          image = images.get_image('arrow_right'),
+                          command = self.sup_valeur_sans_into)
+      self.bouton_add.place(relx=0.3,rely=0.35)
+      self.bouton_sup.place(relx=0.3,rely=0.65)
+      # affichage de l'aide
+      self.frame_aide.update()
+      self.aide = Label(self.frame_aide,
+                        text = aide,
+                        justify='center',
+                        anchor='center',
+                        wraplength=int(self.frame_aide.winfo_width()*0.8))
+      self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
+      self.Liste_valeurs.affiche_liste()
+      # boutons Accepter et Annuler
+      self.bouton_accepter = Button(self.frame_boutons,
+                               text='Valider',
+                               command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur_recolle(m,M))
+      self.bouton_annuler = Button(self.frame_boutons,
+                              text = 'Annuler',
+                              command = self.annule_modifs_valeur)
+      for but in (self.bouton_accepter,self.bouton_annuler):
+          but.pack(side='left',padx=4)
+
+
+  def afficheValeurListe(self,name):
+      self.display_valeur(name)
+
+  def decoupeListeValeurs(self,liste):
+      #decoupe la liste des valeurs en n ( les x puis les y)
+      nb=self.nb_valeurs
+      l_valeurs=[]
+      if (len(liste)%nb != 0):
+          message="La cardinalité n'est pas correcte, la dernière valeur est ignorée"
+          showinfo("Problème",message)
+      for i in range(len(liste)/nb) :
+          if (nb==2):
+              t=(liste[i*nb], liste[i*nb+1])
+          else:
+              t=(liste[i*nb], liste[i*nb+1], liste[i*nb+2])
+          l_valeurs.append(t)
+      return l_valeurs
+
+
+  def accepte_modifs_valeur_recolle(self,min,max):
+      l_valeurs=[]
+      l1_valeurs = self.Liste_valeurs.get_liste()
+      for val in l1_valeurs :
+          for item in val :
+             l_valeurs.append(item) 
+      self.accepte_modifs_valeur(min,max,l_valeurs)
+
+
+  def add_double_valeur_plusieurs_base(self):
+      # on verifie qu'il s agit bien d un tuple
+      # on enleve les parentheses eventuelles
+      #doublevaleur_entree,validite,commentaire=self.get_valeur_double()
+      doublevaleur_entree= self.entry.get()
+      try:
+        if doublevaleur_entree[0]=='(' :
+           doublevaleur_entree=doublevaleur_entree[1:-1]
+        if doublevaleur_entree[-1]==')' :
+           doublevaleur_entree=doublevaleur_entree[0:-2]
+        val1=doublevaleur_entree.split(',')[0] 
+        val2=doublevaleur_entree.split(',')[1] 
+        saisie=(val1,val2)
+        if (self.nb_valeurs==3):
+            val3=doublevaleur_entree.split(',')[2] 
+            saisie=(val1,val2,val3)
+        self.entry.delete(0,END)
+      except :
+        commentaire = "%s n est pas un tuple de la forme (x,y)" %`doublevaleur_entree`
+        if (self.nb_valeurs==3):
+            commentaire = "%s n est pas un tuple de la forme (x,y,z)" %`doublevaleur_entree`
+        self.parent.appli.affiche_infos(commentaire)
+        return
+
+      # et seulement d un tuple
+      try:
+        val=doublevaleur_entree.split(',')[self.nb_valeurs]
+        commentaire = "%s n est pas un tuple de la forme (x,y)" %`doublevaleur_entree`
+        if (self.nb_valeurs==3):
+            commentaire = "%s n est pas un tuple de la forme (x,y,z)" %`doublevaleur_entree`
+        self.parent.appli.affiche_infos(commentaire)
+        self.parent.appli.affiche_infos(commentaire)
+        return
+      except :
+        # c est la le cas normal
+        pass
+
+      # on verifie la validite des valeurs sont correctes
+      valeur,validite=self.node.item.eval_valeur(saisie)
+      if not validite :
+        commentaire = "impossible d'évaluer : %s " %`doublevaleur_entree`
+        self.parent.appli.affiche_infos(commentaire)
+        return
+
+      # on verifie la validite de la liste
+      liste=[]
+      l1_valeurs = self.Liste_valeurs.get_liste()
+      for val in l1_valeurs :
+          for item in val :
+             liste.append(item) 
+      validite_liste=self.node.item.valide_liste_partielle(valeur[0],liste)
+      if not validite_liste:
+        commentaire = "impossible d'ajouter %s a la liste " %`doublevaleur_entree`
+        self.parent.appli.affiche_infos(commentaire)
+        return
+      # liste a deja ete modifiee par l appel precedent a valide_liste_partielle 
+      # et contient deja valeur[0]
+      validite_liste=self.node.item.valide_liste_partielle(valeur[1],liste)
+      if not validite_liste:
+        commentaire = "impossible d'ajouter %s a la liste " %`doublevaleur_entree`
+        self.parent.appli.affiche_infos(commentaire)
+        return
+     
+      # si une valeur est selectionnee on insere apres 
+      # sinon on ajoute la valeur à la fin
+      if (self.Liste_valeurs.selection != None):
+         ligne=self.Liste_valeurs.cherche_selected_item()
+         if self.nb_valeurs==2:
+            l1_valeurs.insert(ligne,(valeur[0],valeur[1]))
+         else :
+            l1_valeurs.insert(ligne,(valeur[0],valeur[1],valeur[2]))
+      else :
+         if self.nb_valeurs==2:
+            l1_valeurs.append((valeur[0],valeur[1]))
+         else :
+            l1_valeurs.append((valeur[0],valeur[1],valeur[2]))
+      i = 0
+      while i < self.nb_valeurs : 
+         self.set_valeur_texte(saisie[i])
+         i=i+1
+      self.Liste_valeurs.put_liste(l1_valeurs)
+      self.Liste_valeurs.affiche_liste()
+
+
+  def display_valeur(self,val=None):
+      """
+      Affiche la valeur passée en argument dans l'entry de saisie.
+      Par défaut affiche la valeur du mot-clé simple
+      Doit être redéfinie pour un pb avec les parametres dans un tuple
+      """
+      if not val :
+          valeur = self.node.item.object.getval()
+      else:
+          valeur = val
+      if not valeur : return
+
+      try:
+        affiche="("
+        separe=""
+        for val in valeur:
+            affiche=affiche+separe+str(val)
+            separe=","
+        affiche=affiche+")"
+        self.entry.delete(0,END)
+        self.entry.insert(0,affiche)
+      except :
+        self.entry.delete(0,END)
+
+# Surcharge de select in file pour prendre en compte la saisie de tuple
+  def select_in_file(self):
+      """ Permet d'ouvrir un fichier choisi par l'utilisateur. """
+      nom_fichier = askopenfilename(title="Choix fichier :")
+
+      if not nom_fichier:
+          return
+
+      try:
+          f = open(nom_fichier, "rb")
+          selection_texte = f.read()
+          f.close()
+          self.add_double_valeur_plusieurs_base = FenetreDeSelection(self,
+                                                  self.node.item,
+                                                  self.parent.appli,
+                                                  titre="Sélection de valeurs",
+                                                  texte=selection_texte,
+                                                  cardinal = self.nb_valeurs)
+      except:
+          traceback.print_exc()
+          showinfo("Erreur de fichier","impossible d'ouvir le fichier "+nom_fichier)
+
diff --git a/InterfaceTK/fontes.py b/InterfaceTK/fontes.py
new file mode 100644 (file)
index 0000000..8e15892
--- /dev/null
@@ -0,0 +1,36 @@
+# -*- 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.
+#
+#
+# ======================================================================
+standard = ("Times",10)
+standard_italique = ("Times",10,'italic')
+standard_gras = ("Times",10,'bold')
+standard_gras_souligne = ("Times",10,'bold','underline')
+
+canvas = ('times',8)
+canvas_italique = ('times',8,'italic')
+canvas_gras = ("Times",8,'bold')
+canvas_gras_italique = ("Times",10,'bold','italic')
+
+standard12 = ("Times",12)
+standard12_gras = ("Times",12,'bold')
+standard12_gras_italique = ( "times",12,'bold','italic')
+
+standardcourier10 = ("Courier",10)
+
diff --git a/InterfaceTK/images.py b/InterfaceTK/images.py
new file mode 100644 (file)
index 0000000..a6f0a74
--- /dev/null
@@ -0,0 +1,67 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce module joue le role de cache pour les images stockées
+    dans le repertoire ICONDIR
+"""
+
+import os
+import Tkinter
+
+if __name__ == '__main__':
+   # Programme de test
+   import sys
+   import images
+   root=Tkinter.Tk()
+   frame = Tkinter.Frame(root)
+   frame.pack(expand=1,fill='both')
+
+   for name in ('About24','Save24'):
+      Tkinter.Label(frame, image=images.get_image(name)).pack(side=Tkinter.TOP)
+
+   root.mainloop()
+   sys.exit()
+
+try:
+   import prefs
+   ICONDIR=prefs.ICONDIR
+except:
+   # Par defaut on utilise le repertoire local icons
+   ICONDIR=os.path.join(os.path.abspath(os.path.dirname(__file__)),'/Editeur/icons')
+
+
+dico_images={}
+
+def get_image(name):
+    if dico_images.has_key(name):
+        return dico_images[name]
+    else : 
+        fic_image = os.path.join(ICONDIR,name)
+        if not os.path.isfile(fic_image):
+           file, ext = os.path.splitext(fic_image)
+           fic_image = file + '.gif'
+        image = Tkinter.PhotoImage(file=fic_image)
+        dico_images[name]=image
+        return image
+
+def update_cache():
+   dico_images.clear()
+
diff --git a/InterfaceTK/jdcdisplay.py b/InterfaceTK/jdcdisplay.py
new file mode 100644 (file)
index 0000000..fd0ac82
--- /dev/null
@@ -0,0 +1,285 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+   Ce module contient la classe JDCDISPLAY qui réalise l'affichage
+   du jeu de commandes sous la forme d'un arbre et de panneaux qui portent
+   les informations attachées au noeud de l'arbre sélectionné
+"""
+# Modules Python
+import types,sys
+import traceback
+import Tkinter
+import Pmw
+
+# Modules Eficas
+import panels
+from treeitemincanvas import TREEITEMINCANVAS
+from widgets import showinfo,showerror
+
+class CONFIG:
+   isdeveloppeur='NON'
+
+class JDCDISPLAY:
+   """
+       Cette classe ajoute à la class TREEITEMINCANVAS l'affichage des infos
+       attachées au noeud sélectionné dans un notebook
+       L'objet item associé au jdc est créé par la classe TREEITEMINCANVAS
+   """
+   def __init__(self,jdc,nom_jdc,appli=None,parent=None):
+      self.jdc=jdc
+      self.nom_jdc=nom_jdc
+      self.fichier=None
+      self.panel_courant=None
+
+      if not appli:
+         class Appli:
+            def __init__(self):
+               self.CONFIGURATION=CONFIG()
+            def affiche_infos(self,message):
+               print message
+               return
+
+            def efface_aide(self,event):
+               return
+
+            def affiche_aide(self,event,aide):
+               print aide
+               return
+
+         appli=Appli()
+      self.appli=appli
+
+      if not parent:
+         parent=Tkinter.Tk()
+         Pmw.initialise(parent)
+      self.parent=parent
+      self.node_selected = None
+      self.modified='n'
+
+      self.pane=Pmw.PanedWidget(self.parent,orient='horizontal')
+      self.pane.add('treebrowser',min=0.4,size=0.5)
+      self.pane.add('selected',min=0.4)
+      self.pane.pack(expand=1,fill='both')
+      self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'),
+                 self.appli,self.select_node,self.make_rmenu)
+
+   def make_rmenu(self,node,event):
+      if hasattr(node.item,'rmenu_specs'):
+         rmenu = Tkinter.Menu(self.pane.pane('treebrowser'), tearoff=0)
+         #node.select()
+         self.cree_menu(rmenu,node.item.rmenu_specs,node)
+         rmenu.tk_popup(event.x_root,event.y_root)
+
+   def cree_menu(self,menu,itemlist,node):
+      """
+            Ajoute les items du tuple itemlist
+            dans le menu menu
+      """
+      number_item=0
+      radio=None
+      for item in itemlist:
+         number_item=number_item + 1
+         if not item :
+            menu.add_separator()
+         else:
+            label,method=item
+            if type(method) == types.TupleType:
+                 # On a un tuple => on cree une cascade
+                 menu_cascade=Tkinter.Menu(menu)
+                 menu.add_cascade(label=label,menu=menu_cascade)
+                 self.cree_menu(menu_cascade,method,node)
+            elif method[0] == '&':
+                 # On a une chaine avec & en tete => on cree un radiobouton
+                 try:
+                    command=getattr(node.item,method[1:])
+                    menu.add_radiobutton(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n))
+                    if radio == None:radio=number_item
+                 except:pass
+            else:
+                 try:
+                    command=getattr(node.item,method)
+                    menu.add_command(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n))
+                 except:pass
+      # Si au moins un radiobouton existe on invoke le premier
+      if radio:menu.invoke(radio)
+
+   def select(self):
+      return
+
+   def unselect(self):
+      return
+
+   def select_node(self,node):
+      """
+          Cette méthode est appelée à chaque fois qu'un noeud est sélectionné
+          dans l'arbre.
+          Elle permet l'affichage du panneau correspondant au noeud sélectionné
+      """
+      if node is not self.node_selected :
+         #ATTENTION: il faut affecter l'attribut node_selected avant d'appeler 
+         # create_panel pour eviter une recursion infinie entre create_panel, 
+         # Emit, onValid, select_node
+         self.node_selected = node
+         self.create_panel(node)
+      elif self.panel_courant:
+         self.panel_courant.update_panel()
+
+   def create_panel(self,node):
+      """
+         Lance la génération du panneau contextuel de l'objet sélectionné 
+         dans l'arbre
+      """
+      if self.panel_courant:
+          # On detruit le panneau
+          self.panel_courant.destroy()
+          o=self.panel_courant
+          self.panel_courant=None
+          # Mettre à 1 pour verifier les cycles entre objets
+          # pour les panneaux
+          withCyclops=0
+          if withCyclops:
+             from Misc import Cyclops
+             z = Cyclops.CycleFinder()
+             z.register(o)
+             del o
+             z.find_cycles()
+             z.show_stats()
+             z.show_cycles()
+
+      if node is None:
+          self.panel_courant=None
+          return self.panel_courant
+
+      if node.item.isactif():
+          if hasattr(node.item,"panel"):
+              self.panel_courant=node.item.panel(self,self.pane.pane('selected'),node)
+          else:
+              raise Exception("Le noeud sélectionné n'a pas de panel associé")
+      else:
+          self.panel_courant = panels.Panel_Inactif(self,self.pane.pane('selected'),node)
+      return self.panel_courant
+
+   def init_modif(self):
+      """
+          Met l'attribut modified à 'o' : utilisé par Eficas pour savoir 
+          si un JDC doit être sauvegardé avant destruction ou non
+      """
+      self.modified = 'o'
+
+   def stop_modif(self):
+      """
+          Met l'attribut modified à 'n' : utilisé par Eficas pour savoir 
+          si un JDC doit être sauvegardé avant destruction ou non
+      """
+      self.modified = 'n'
+
+   def mainloop(self):
+      self.parent.mainloop()
+
+   def ReplaceObjectNode(self,node,new_object,nom_sd=None):
+      """
+      Cette méthode sert à remplacer l'objet pointé par node par
+      new_object.
+      Si nom_sd : on remplace un OPER et on essaie de renommer la
+      nouvelle sd par nom_sd
+      """
+      child = node.append_brother(new_object,retour='oui')
+      if child == 0:
+          self.appli.affiche_infos("Impossible de remplacer l'objet du noeud courant")
+      else:
+          self.init_modif()
+          node.delete()
+          #if nom_sd:
+              #child.item.nomme_sd(nom_sd)
+          child.select()
+          #child.update()
+
+   def doCut(self):
+      """
+      Stocke dans Eficas.noeud_a_editer le noeud à couper
+      """
+      if not self.node_selected.item.iscopiable():
+          showinfo("Copie impossible",
+                   "Cette version d'EFICAS ne permet que la copie d'objets de type 'Commande' ou mot-clé facteur")
+          return
+      self.appli.edit="couper"
+      self.appli.noeud_a_editer = self.node_selected
+
+   def doCopy(self):
+      """
+      Stocke dans Eficas.noeud_a_editer le noeud à copier
+      """
+      if not self.node_selected.item.iscopiable():
+          showinfo("Copie impossible",
+                   "La copie d'un tel objet n'est pas permise")
+          return
+      self.appli.edit="copier"
+      self.appli.noeud_a_editer = self.node_selected
+
+   def doPaste(self):
+      """
+      Lance la copie de l'objet placé dans self.appli.noeud_a_editer
+      Ne permet que la copie d'objets de type Commande ou MCF
+      """
+      try:
+         child=self.appli.noeud_a_editer.doPaste(self.node_selected)
+      except:
+         #traceback.print_exc()
+         showinfo("Action de coller impossible",
+                  "L'action de coller apres un tel objet n'est pas permise")
+         return
+
+      if child == 0:
+          if self.appli.message != '':
+             showerror("Copie refusée",self.appli.message)
+             self.appli.message = ''
+          self.appli.affiche_infos("Copie refusée")
+          return
+
+      # il faut déclarer le JDCDisplay_courant modifié
+      self.init_modif()
+      # suppression éventuelle du noeud sélectionné
+      # si possible on renomme l objet comme le noeud couper
+      if self.appli.edit == "couper":
+         #nom = self.appli.noeud_a_editer.item.object.sd.nom
+         item=self.appli.noeud_a_editer.item
+         self.appli.noeud_a_editer.delete()
+         child.item.update(item)
+         #test,mess = child.item.nomme_sd(nom)
+         child.select()
+      # on rend la copie à nouveau possible en libérant le flag edit
+      self.appli.edit="copier"
+
+   def update(self):
+      """Cette methode est utilisee par le JDC associe pour 
+         signaler des modifications globales du JDC
+      """
+      self.tree.update()
+
+   def supprime(self):
+      #print "supprime",self
+      self.select_node(None)
+      self.tree.supprime()
+      self.tree=None
+      self.pane.destroy()
+
+   #def __del__(self):
+   #   print "__del__",self
diff --git a/InterfaceTK/listeFichiers.py b/InterfaceTK/listeFichiers.py
new file mode 100644 (file)
index 0000000..908bfe2
--- /dev/null
@@ -0,0 +1,81 @@
+import string
+
+class listeFichiers :
+
+    def __init__(self,appli):
+       self.appli=appli
+       self.premiere=1
+       self.nbfich=0
+       self.rep=self.appli.CONFIGURATION.rep_user
+       self.menuFichier=self.appli.menubar.menudict['Fichier']
+       self.monFichier=self.rep+"/listefichiers_"+self.appli.code
+       self.liste_Fichiers=[] 
+       self.init_Fichier()
+       self.traite_liste()
+
+    def init_Fichier(self):
+        index=0
+        try :
+            f=open(self.monFichier)
+            while ( index < 5) :
+              ligne=f.readline()
+              if ligne != "" :
+                 l=(ligne.split("\n"))[0]
+                 self.liste_Fichiers.append(l)
+              index=index+1
+        except :
+             pass
+        try :
+            f.close()
+        except :
+             pass
+
+    def sauve_Fichier(self):
+        try :
+            if len(self.liste_Fichiers) == 0 :
+              return
+            f=open(self.monFichier,'w')
+            index=0
+            while ( index <  len(self.liste_Fichiers)):
+              ligne=self.liste_Fichiers[index]+"\n"
+              f.write(ligne)
+              index=index+1
+        except :
+             pass
+        try :
+            f.close()
+        except :
+             pass
+
+    def traite_liste(self):
+        index=0
+        for  index in range(self.nbfich):
+           self.menuFichier.delete(9)
+        self.nbfich = 0
+        index = 0
+        while( index < len(self.liste_Fichiers)) :
+            self.ajout_item(index)
+            index=index+1
+           
+    def ajout_item(self,index):
+        if self.premiere and (len(self.liste_Fichiers)!=0):
+           self.premiere=0
+           self.menuFichier.add_separator()
+        label=self.liste_Fichiers[index]
+        self.menuFichier.insert_command(8,label=label,command= lambda self=self, l=label:self.coucou (l));
+        self.nbfich=self.nbfich+1
+
+    def coucou(self,label):
+        self.appli.bureau.openJDC(file=label) 
+
+    def aOuvert(self,file):
+         if file not in self.liste_Fichiers :
+            if (len(self.liste_Fichiers) > 4) :
+               f=self.liste_Fichiers[0]
+               self.liste_Fichiers.remove(f)
+            self.liste_Fichiers.insert(len(self.liste_Fichiers),file)
+         else:
+            self.liste_Fichiers.remove(file)
+            self.liste_Fichiers.insert(len(self.liste_Fichiers),file)
+         self.traite_liste()
+         self.sauve_Fichier()
diff --git a/InterfaceTK/listePatronsTK.py b/InterfaceTK/listePatronsTK.py
new file mode 100644 (file)
index 0000000..350749b
--- /dev/null
@@ -0,0 +1,27 @@
+import os
+import re
+import Tkinter
+
+
+from Editeur import listePatrons
+
+class listePatronsTK(listePatrons.listePatrons) :
+
+    def __init__(self,appli):
+       self.appli=appli
+       listePatrons.listePatrons.__init__(self)
+       self.ajout_menu()
+
+    def ajout_menu(self):
+        menuFichier=self.appli.menubar.menubar
+        menu_cascade=Tkinter.Menu(menuFichier,tearoff=0)
+        menuFichier.add_cascade(label="Patrons",menu=menu_cascade)
+        for ss_menu in self.liste.keys():
+           ssmenu=Tkinter.Menu(menu_cascade,tearoff=0)
+           menu_cascade.add_cascade(label=ss_menu,menu=ssmenu)
+           for fichier in self.liste[ss_menu]:
+               ssmenu.add_command(label=fichier,command= lambda self=self, l=fichier:self.ouvre(l));
+
+    def ouvre(self,label):
+        fichier=self.rep_patrons+"/"+label
+        self.appli.bureau.openJDC(file=fichier,enregistre="non") 
diff --git a/InterfaceTK/macrodisplay.py b/InterfaceTK/macrodisplay.py
new file mode 100644 (file)
index 0000000..a0e7e8d
--- /dev/null
@@ -0,0 +1,165 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+   Ce module contient la classe MacroDisplay qui realise l'affichage 
+   des sous commandes d'une macro sous forme d'arbre
+"""
+# Modules Python
+import types,sys
+import Tkinter,Pmw
+
+# Modules EFICAS
+import images
+import tooltip
+from Editeur import Objecttreeitem
+import compojdc
+import treewidget
+from widgets import Fenetre
+from Ihm import CONNECTOR
+
+class MACRO2TreeItem(compojdc.JDCTreeItem):
+      pass
+
+class MacroDisplay:
+  def __init__(self,appli,macroitem,nom_jdc):
+    self.fenetre = Tkinter.Toplevel()
+    self.fenetre.configure(width = 800,height=500)
+    self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
+    self.fenetre.title("Visualisation Macro_Etape")
+    self.macroitem=macroitem
+    self.jdc=macroitem.object.jdc_aux
+    self.nom_jdc=nom_jdc
+    self.appli=appli
+    self.barre=Tkinter.Frame(self.fenetre,relief="ridge",bd=2)
+    self.barre.pack(expand=0,fill=Tkinter.X)
+    if self.macroitem.object.fichier_text is not None:
+      b=Tkinter.Button(self.barre,image=images.get_image("Zoom24"),command=self.visufile)
+      b.pack(side='left')
+      tp=tooltip.TOOLTIP(b,"View file")
+    self.mainPart=Pmw.ScrolledCanvas(self.fenetre,
+                                     hull_width=600,
+                                     hull_height=500,
+                                     borderframe=1)
+    self.canvas=self.mainPart.component('canvas')
+    Pmw.Color.changecolor(self.canvas,background='gray95')
+    self.mainPart.pack(padx=10,pady=10,fill = 'both', expand = 1)
+    self.item=MACRO2TreeItem(self.appli,nom_jdc,self.jdc)
+    self.tree = treewidget.Tree(self.appli,self.item,self.mainPart,command=None,rmenu=self.make_rmenu)
+    self.tree.draw()
+    CONNECTOR.Connect(self.jdc,"close",self.onCloseView,())
+
+  def onCloseView(self):
+    self.quit()
+
+  def visufile(self):
+    Fenetre(self.appli,titre="Source du fichier inclus",texte=self.macroitem.object.fichier_text)
+
+  def make_rmenu(self,node,event):
+      if hasattr(node.item,'rmenu_specs'):
+         rmenu = Tkinter.Menu(self.canvas, tearoff=0)
+         self.cree_menu(rmenu,node.item.rmenu_specs,node)
+         rmenu.tk_popup(event.x_root,event.y_root)
+
+  def cree_menu(self,menu,itemlist,node):
+      """
+            Ajoute les items du tuple itemlist
+            dans le menu menu
+      """
+      number_item=0
+      radio=None
+      for item in itemlist:
+         number_item=number_item + 1
+         if not item :
+            menu.add_separator()
+         else:
+            label,method=item
+            if type(method) == types.TupleType:
+                 # On a un tuple => on cree une cascade
+                 menu_cascade=Tkinter.Menu(menu)
+                 menu.add_cascade(label=label,menu=menu_cascade)
+                 self.cree_menu(menu_cascade,method,node)
+            elif method[0] == '&':
+                 # On a une chaine avec & en tete => on cree un radiobouton
+                 try:
+                    command=getattr(node.item,method[1:])
+                    menu.add_radiobutton(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n))
+                    if radio == None:radio=number_item
+                 except:pass
+            else:
+                 try:
+                    command=getattr(node.item,method)
+                    menu.add_command(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n))
+                 except:pass
+      # Si au moins un radiobouton existe on invoke le premier
+      if radio:menu.invoke(radio)
+
+  def quit(self):
+    #print "quit",self
+    self.tree.supprime()
+    self.tree=None
+    self.fenetre.destroy()
+
+  #def __del__(self):
+  #  print "__del__",self
+
+def makeMacroDisplay(appli,macroitem,nom_item):
+  return MacroDisplay(appli,macroitem,nom_item)
+
+import treeitemincanvas
+
+class TREEITEMINCANVAS(treeitemincanvas.TREEITEMINCANVAS):
+   def __init__(self,object,nom="",parent=None,appli=None,sel=None,rmenu=None):
+      #print "TREEITEMINCANVAS",object
+      self.object=object
+      self.nom=nom
+      self.appli=appli
+      self.parent=parent
+
+      self.item=MACRO2TreeItem(self.appli,self.nom,self.object)
+      self.canvas=Pmw.ScrolledCanvas(self.parent,borderframe=1,canvas_background='gray95')
+      self.canvas.pack(padx=10,pady=10,fill = 'both', expand = 1)
+      if not sel:
+         def sel(event=None):
+            return
+      self.tree=treewidget.Tree(self.appli,self.item,self.canvas,command=sel,rmenu=rmenu)
+      self.tree.draw()
+
+import jdcdisplay
+
+class MACRODISPLAY(jdcdisplay.JDCDISPLAY):
+   def __init__(self,jdc,nom_jdc,appli=None,parent=None):
+      #print "MACRODISPLAY",jdc
+      self.jdc=jdc
+      self.nom_jdc=nom_jdc
+      self.fichier=None
+      self.panel_courant=None
+      self.appli=appli
+      self.parent=parent
+      self.node_selected = None
+      self.modified='n'
+
+      self.pane=Pmw.PanedWidget(self.parent,orient='horizontal')
+      self.pane.add('treebrowser',min=0.4,size=0.5)
+      self.pane.add('selected',min=0.4)
+      self.pane.pack(expand=1,fill='both')
+      self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'),
+                 self.appli,self.select_node,self.make_rmenu)
+
diff --git a/InterfaceTK/menubar.py b/InterfaceTK/menubar.py
new file mode 100644 (file)
index 0000000..119bbdf
--- /dev/null
@@ -0,0 +1,46 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+"""
+from Tkinter import Menu
+
+class MENUBAR:
+   def __init__(self,appli,parent):
+      # L'attribut appli pointe vers l'objet application qui détient la menubar et les autres composants
+      self.appli=appli
+      # L'attribut parent pointe vers l'objet graphique parent de la menubar
+      self.parent=parent
+      self.menubar=Menu(self.parent)
+      self.parent.configure(menu=self.menubar)
+      self.init()
+
+   try:
+      from prefs import labels
+   except:
+      labels= ('Fichier','Edition','Jeu de commandes','Catalogue','Options','Aide','Traduction')
+
+   def init(self):
+      self.menudict={}
+      for label in self.labels:
+         menu=Menu(self.menubar,tearoff=0)
+         self.menudict[label]=menu
+         self.menubar.add_cascade(label=label,menu=menu)
+
diff --git a/InterfaceTK/newsimppanel.py b/InterfaceTK/newsimppanel.py
new file mode 100644 (file)
index 0000000..77ca83a
--- /dev/null
@@ -0,0 +1,196 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import prefs
+import panels
+import images
+import composimp
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from Editeur.utils import substract_list
+
+
+class newSIMPPanel(panels.OngletPanel):
+  """
+  Classe virtuelle servant de classe mère à toutes les classes Panel
+  servant à afficher et récupérer la valeur d'un mot-clé simple.
+  Le panel est différent suivant le type de la valeur attendu
+  """
+  def init(self):
+      """
+      Méthode appelée par le constructeur de OngletPanel :
+      construit le notebook à 2 onglets utilisé par tous les panels de
+      tous les mots-clés simples
+      """
+      nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
+      nb.pack(fill = 'both', expand = 1)
+      self.nb=nb
+      nb.add('Valeur', tab_text='Saisir valeur')
+      self.makeValeurPage(nb.page('Valeur'))
+      self.enlevebind()
+      self.creebind()
+      nb.setnaturalsize()
+      
+# ----------------------------------------------------------------------------------------
+#   Méthodes utilisées pour l'affectation de la valeur donnée par l'utilisateur
+#    au mot-clé courant
+# ----------------------------------------------------------------------------------------
+
+  def reset_old_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
+      """
+          Enregistre  val comme valeur de self.node.item.object SANS 
+          faire de test de validité ni ré-évaluer l'ancienne valeur
+          permet de rester avec des valeurs non entrees et de ne pas 
+          ré-évaluer des entiers par exemple
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      self.node.item.set_valeur(name)
+      self.parent.appli.affiche_infos(mess)
+
+  def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
+      """
+          Enregistre  val comme valeur de self.node.item.object  
+          en evaluant l item et en le validant 
+          Si name n'est pas renseigné, la valeur 
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      if name != None:
+          valeur = name
+          validite = 1
+      else :
+          valeurentree= self.entry.get()
+          self.entry.delete(0,END)
+          if valeurentree == '': valeurentree=None
+          valeur,validite=self.node.item.eval_valeur(valeurentree)
+          if not validite :
+                  valeur= self.entry.get()
+                  commentaire = "impossible d'évaluer : %s " %`valeurentree`
+                  self.parent.appli.affiche_infos(commentaire)
+                
+      if validite : 
+          validite,commentaire=self.node.item.valide_val(valeur)
+      if validite :
+          self.node.item.set_valeur(valeur)
+          self.parent.appli.affiche_infos(mess)
+      else :
+          self.parent.appli.affiche_infos(commentaire)
+
+# ----------------------------------------------------------------------------------------
+#   Méthodes utilisées pour la manipulation des items dans les listes de choix
+# ----------------------------------------------------------------------------------------
+  def selectValeur(self,name):
+      self.selected_valeur = name
+
+  def deselectValeur(self,name):
+      self.selectValeur = None
+
+  def sup_valeur(self,name=None):
+      """
+      Supprime la valeur selectionnée de la liste des valeurs et la rajoute
+      à la liste des choix possibles
+      """
+      if hasattr(self,'selected_valeur') :
+         if ( self.selected_valeur != None and self.selected_valeur != ''):
+            liste_valeurs = self.Liste_valeurs.get_liste()
+            liste_valeurs.remove(self.selected_valeur)
+            self.Liste_valeurs.put_liste(liste_valeurs)
+            listeActuelle=self.Liste_valeurs.get_liste()
+            liste_choix=self.node.item.get_liste_possible(listeActuelle)
+            self.Liste_choix.put_liste(liste_choix)
+            self.selected_valeur = None
+
+  def add_choix(self,name=None):
+      """
+      Ajoute le choix selectionné à la liste des valeurs et le retire
+      de la liste des choix possibles
+      """
+      
+      if hasattr(self,'selected_choix') :
+         if (self.selected_choix != None and self.selected_choix != ''):
+            min,max = self.node.item.GetMinMax()
+            liste_valeurs = self.Liste_valeurs.get_liste()
+            if len(liste_valeurs) >= max :
+                self.parent.appli.affiche_infos("La liste ne peut pas avoir plus de %d éléments" %max)
+                return
+            if (self.Liste_valeurs.selection != None):
+                ligne=self.Liste_valeurs.cherche_selected_item()
+                liste_valeurs.insert(ligne,self.selected_choix)
+            else :
+                liste_valeurs.append(self.selected_choix)
+            self.Liste_valeurs.put_liste(liste_valeurs)
+            listeActuelle=self.Liste_valeurs.get_liste()
+            liste_choix=self.node.item.get_liste_possible(listeActuelle)
+            self.Liste_choix.put_liste(liste_choix)
+            self.selected_choix = None
+
+  def selectChoix(self,name):
+      self.selected_choix = name
+
+  def deselectChoix(self,name):
+      self.selectChoix = None
+      
+  def raisecmd(self,page):
+      try:
+         self.entry.focus()
+      except:
+         pass
+
+# ----------------------------------------------------------------------------------------
+#   Méthodes utilisées pour la manipulation des items en notation scientifique
+# ----------------------------------------------------------------------------------------
+  def set_valeur_texte(self,texte_valeur) :
+      """ Sert à mettre à jour la notation scientifique"""
+      try :
+        if "R" in self.node.item.object.definition.type:
+            if texte_valeur[0] != "'":
+               clef=eval(texte_valeur)
+               if str(clef) != str(texte_valeur) :
+                  self.node.item.object.init_modif()
+                  clefobj=self.node.item.object.GetNomConcept()
+                  if not self.parent.appli.dict_reels.has_key(clefobj):
+                     self.parent.appli.dict_reels[clefobj] = {}
+                  self.parent.appli.dict_reels[clefobj][clef]=texte_valeur
+                  self.parent.appli.dict_reels[clefobj]
+                  self.node.item.object.fin_modif()
+      except:
+        pass
+
+
+  def get_valeur_texte(self,valeur) :
+     valeur_texte=""
+     if "R" in self.node.item.object.definition.type:
+        clefobj=self.node.item.object.GetNomConcept()
+        if self.parent.appli.dict_reels.has_key(clefobj):
+           if self.parent.appli.dict_reels[clefobj].has_key(valeur):
+              valeur_texte=self.parent.appli.dict_reels[clefobj][valeur]
+     return valeur_texte
diff --git a/InterfaceTK/options.py b/InterfaceTK/options.py
new file mode 100644 (file)
index 0000000..9d0da1e
--- /dev/null
@@ -0,0 +1,132 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+"""
+# Modules Python
+import os,string
+
+# Modules Eficas
+from widgets import askopenfilename
+import panels
+
+# l'option affichage_commandes peut prendre les valeurs "groupes" ou "alphabetic"
+affichage_commandes="alphabetic"
+
+class OPTIONS:
+
+   menu_defs=[
+        ('Options',[
+                   ("Affichage commandes",(("alphabétique",'&affichage_alpha'),("groupes",'&affichage_grp'))),
+                   #("Couleur",(("fond",'change_fond'),("barre",'change_barre'))),
+                   # ("Catalogue développeur",'choix_cata_developpeur'),
+                   ('Paramètres Eficas','affichage_fichier_ini'),
+                   ('Paramètres Affichage','affichage_style_ini'),
+                      
+                   ]
+        )
+             ]
+
+   button_defs=[]
+
+   def __init__(self,appli,parent):
+      self.appli=appli
+      self.parent=parent
+
+
+   def affichage_grp(self):
+      global affichage_commandes
+      affichage_commandes="groupes"
+      if hasattr(panels,'panneauCommande'):
+         panel=panels.panneauCommande
+         parent=panel.parent
+         if parent != None :
+            parent.create_panel(parent.node_selected)
+            # si on a un panel avec plusieurs onglets
+            # on affiche Commande
+            try :
+              parent.panel_courant.nb.selectpage("Commande")
+            except :
+              pass
+
+   def affichage_alpha(self):
+
+      global affichage_commandes
+      affichage_commandes="alphabetic"
+      if hasattr(panels,'panneauCommande'):
+         panel=panels.panneauCommande
+         parent=panel.parent
+         if parent != None :
+            parent.create_panel(parent.node_selected)
+            # si on a un panel avec plusieurs onglets
+            # on affiche Commande
+            try :
+              parent.panel_courant.nb.selectpage("Commande")
+            except :
+              pass
+
+   def change_fond(self):
+      from tkColorChooser import askcolor
+      #nouvelle=askcolor(self.appli.background)
+      nouvelle=askcolor('grey')
+
+   def change_barre(self):
+       pass
+
+   def choix_cata_developpeur(self):
+      """ 
+          Cette méthode demande à l'utilisateur-développeur d'indiquer quel catalogue
+          il veut utiliser en remplacement du catalogue standard du code
+          NB : il faut que le développeur ait les droits d'écriture dans le répertoire où
+          se trouve le catalogue 
+      """
+      file = askopenfilename(title="Choix d'un catalogue personnel",
+                             defaultextension=".py",
+                             filetypes = ( ("Catalogue", "cata*.py"),))
+      if file :
+          self.parent.update_idletasks()
+          self.appli.reset_affichage_infos()
+          rep_fic = os.path.dirname(file)
+          nom_fic = string.split(os.path.basename(file),'.')[0]
+          rep_courant = os.getcwd()
+          os.chdir(rep_fic)
+          self.cata = __import__(nom_fic)
+          self.code = self.cata.CODE
+          os.chdir(rep_courant)
+          self.fic_cata = file
+          fic_cata_p = nom_fic+'_pickled.py'
+          self.fic_cata_p = os.path.join(rep_fic,fic_cata_p)
+          pile_erreurs = self.cata.erreurs_cata
+          if pile_erreurs.existe_message() :
+              messages = pile_erreurs.retourne_messages()
+              print messages
+          else :
+              # XXX ne doit pas fonctionner
+              self.catalo = catabrowser.CataItem(cata=self.cata)
+              self.Retrouve_Ordre_Cata('personnel')
+          pile_erreurs.efface()
+
+
+   def affichage_fichier_ini(self):
+       self.appli.CONFIGURATION.affichage_fichier_ini()
+
+
+   def affichage_style_ini(self):
+       self.appli.CONFIGStyle.affichage_style_ini()
diff --git a/InterfaceTK/panels.py b/InterfaceTK/panels.py
new file mode 100644 (file)
index 0000000..b84a569
--- /dev/null
@@ -0,0 +1,587 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+import string
+import os
+from Tkinter import *
+import Pmw
+import time
+import traceback
+
+import widgets
+from widgets import ListeChoix
+from widgets import ListeChoixParGroupes
+import prefs
+import options
+
+SEPARATEUR = '-'*30
+
+
+class Panel(Frame) :
+  """
+  Classe servant de classe mère à toutes celles représentant les
+  panneaux à afficher en fonction de la nature de l'objet en cours
+  Elle est toujours dérivée.
+  """
+  def __init__(self,parent,panneau,node) :
+      # Le parent d'un panel est un objet de la classe JDCDISPLAY ou derivee
+      # ou un objet qui a les attributs : appli (de classe APPLI ou derivee),
+      # modified et la methode init_modif
+      self.parent=parent
+      self.panneau = panneau
+      self.node=node
+      Frame.__init__(self,self.panneau)
+      self.place(x=0,y=0,relheight=1,relwidth=1)
+      self.creer_boutons()
+      self.init()
+      global panneauCommande
+      panneauCommande=self
+
+  #def __del__(self):
+  #    print "__del__",self
+
+  def update_panel(self):
+      """Methode appele pour demander une mise a jour du panneau"""
+
+  def destroy(self):
+      Frame.destroy(self)
+      self.panneau=None
+      self.parent=None
+      # Because on herite de Frame
+      self.master=None
+      # On supprime explicitement les references aux objets Tk
+      self.nb=None
+      self.fr_but=None
+      self.bouton_cata=None
+      self.bouton_doc=None
+      self.bouton_com=None
+      self.bouton_sup=None
+      #self.frame_eval=None
+      self.label=None
+      self.frame_boutons=None
+      self.frame_comment=None
+      self.frame_param=None
+      # On termine la suppression de facon brutale (objets Tk et non Tk)
+      for k in self.__dict__.keys():
+         # il est plus prudent de ne pas détruire le lien sur le Node
+         # si on voulait mettre l'attribut node à None, il faudrait
+         # que tous les appels à node.parent.select() apparaissent après
+         # toutes les autres actions liées au panel (node.item.isglobal(), ...)
+         if k != 'node' : setattr(self,k,None)
+
+  def creer_boutons(self):
+      """
+      Méthode créant les boutons se trouvant dans la partie contextuelle d'EFICAS
+      (à droite sous les onglets )
+      """
+      self.fr_but = Frame(self,height=30)
+      self.fr_but.pack(side='bottom')
+      self.bouton_com = Button(self.fr_but, text = 'Commentariser', command = self.ajout_commentaire)
+      self.bouton_sup = Button(self.fr_but, text = "Supprimer", command=self.supprimer)
+      self.bouton_doc = Button(self.fr_but, text="Documentation", command=self.visu_doc)
+      self.bouton_cata = Button(self.fr_but, text = "Catalogue", command = self.show_catalogue)
+
+      if self.parent.appli.CONFIGURATION.isdeveloppeur == 'OUI':
+          self.bouton_sup.pack(side='left',padx=5, pady=5)
+          self.bouton_cata.pack(side='left',padx=5, pady=5)
+          self.bouton_doc.pack(side='right',padx=5, pady=5)
+          #self.bouton_sup.place(relx=0.25,rely = 0.5,relheight = 0.8,anchor='center')
+          #self.bouton_cata.place(relx=0.5,rely = 0.5,relheight = 0.8,anchor='center')
+          #self.bouton_doc.place(relx=0.75,rely = 0.5,relheight = 0.8,anchor='center')
+      else:
+          self.bouton_sup.pack(side='left',padx=5, pady=5)
+          self.bouton_doc.pack(side='right',padx=5, pady=5)
+          #self.bouton_sup.place(relx=0.3,rely = 0.5,relheight = 0.8,anchor='center')
+          #self.bouton_doc.place(relx=0.7,rely = 0.5,relheight = 0.8,anchor='center')
+
+  def show_catalogue(self):
+      try:
+          genea = self.node.item.get_genealogie()
+          self.parent.appli.browser_catalogue_objet(genea)
+      except Exception,e:
+          traceback.print_exc()
+      
+  def efface(self):
+      self.node.efface()
+
+# ------------------------------------------------------------------------
+#     Méthodes permettant d'ajouter des commentaires, des paramètres
+#                     et des objets EVAL.
+#       Ces méthodes sont utilisées par les panneaux des JDC,ETAPE,
+#                 COMMENTAIRE et PARAMETRE
+# ------------------------------------------------------------------------
+
+  def ajout_commentaire(self,ind='after'):
+      """
+      Ajoute un commentaire à l'intérieur du JDC :
+      - si ind='after'  : l'ajoute après l'objet courant
+      - si ind='before' : l'ajoute avant.
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      return self.node.append_brother("COMMENTAIRE",ind)
+    
+  def ajout_commentaire_first(self):
+      """
+      Ajoute un commentaire en début de JDC
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      return self.node.append_child("COMMENTAIRE",'first')
+
+  def ajout_parametre(self,ind='after'):
+      """
+      Ajoute un parametre à l'intérieur du JDC :
+      - si ind='after'  : l'ajoute après l'objet courant
+      - si ind='before' : l'ajoute avant.
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      return self.node.append_brother("PARAMETRE",ind)
+    
+  def ajout_parametre_first(self):
+      """
+      Ajoute un parametre en début de JDC
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      return self.node.append_child("PARAMETRE",'first')
+
+#  def ajout_parametre_eval(self,ind='after'):
+#      """
+#      Ajoute un paramètre EVAL à l'intérieur du JDC :
+#      - si ind='after'  : l'ajoute après l'objet courant
+#      - si ind='before' : l'ajoute avant.
+#      """
+#      if self.parent.modified == 'n' : self.parent.init_modif()
+#      return self.node.append_brother("PARAMETRE_EVAL",ind)
+    
+#  def ajout_parametre_eval_first(self):
+#      """
+#      Ajoute un paramètre EVAL en début de JDC
+#      """
+#      if self.parent.modified == 'n' : self.parent.init_modif()
+#      return self.node.append_child("PARAMETRE_EVAL",'first')
+    
+# ------------------------------------------------------------------------
+   
+  def visu_doc(self):
+      """ Permet d'ouvrir le fichier doc U de la commande au format pdf avec Acrobat Reader
+        - Ne fonctionne pas sous UNIX (chemin d'accès Acrobat Reader)
+        - indication du chemin d'accès aux fichiers pdf à revoir : trop statique"""
+      cle_doc = self.node.item.get_docu()
+      if cle_doc == None : return
+      cle_doc = string.replace(cle_doc,'.','')
+      cle_doc = string.replace(cle_doc,'-','')
+      commande = self.parent.appli.CONFIGURATION.exec_acrobat
+      nom_fichier = cle_doc+".pdf"
+      fichier = os.path.abspath(os.path.join(self.parent.appli.CONFIGURATION.path_doc,
+                                       nom_fichier))
+      if os.name == 'nt':
+          os.spawnv(os.P_NOWAIT,commande,(commande,fichier,))
+      elif os.name == 'posix':
+          script ="#!/usr/bin/sh \n%s %s&" %(commande,fichier)
+          pid = os.system(script)
+      
+  def supprimer(self):
+      """
+      Suppression du noeud courant
+      """
+      # On signale au parent du panel (le JDCDisplay) une modification 
+      self.parent.init_modif()
+      self.node.delete()
+      
+  def affiche(self):
+      """ Force l'affichage des fenêtres en cours """
+      self.tkraise()
+
+  def selectMC(self,name):
+      """ On retrouve le mot-clé sous le curseur pour affichage du fr """
+      cmd=self.node.item.get_definition()
+      texte_infos = ''
+      for e in cmd.entites.keys() :
+          if e == name :
+              texte_infos=getattr(cmd.entites[e],prefs.lang)
+              break
+      if texte_infos == '' : texte_infos="Pas d'infos disponibles"
+      self.parent.appli.affiche_infos(texte_infos)
+
+  def defMC(self,name):
+      """ On ajoute un mot-clé à la commande : subnode """
+      if name == SEPARATEUR:return
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      if name != "COMMENTAIRE":
+          self.node.append_child(name)
+      else :
+          self.ajout_commentaire()    
+
+  def selectCmd(self,name):
+      """ On retrouve la commande sous le curseur pour affichage du fr """
+      if name != 'COMMENTAIRE' and name != SEPARATEUR:
+          texte_infos=getattr(self.parent.jdc.get_cmd(name),prefs.lang)
+          self.parent.appli.affiche_infos(texte_infos)
+          
+  def defCmd(self,name):
+      """
+      On ajoute une commande après la commande selectionnée : after
+      ou bien on ajoute un commentaire
+      """
+      if name == SEPARATEUR:return
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      if name != "COMMENTAIRE":
+          #parent=self.node.parent
+          #new_obj = parent.item.append_child(name,self.node.item.getObject())
+          #parent.children[parent.children.index(self.node)+1].select()
+          new_node = self.node.append_brother(name,'after')
+      else :
+          new_node = self.ajout_commentaire()
+
+  def defCmdFirst(self,name):
+      """ On ajoute une commande ou un commentaire au début du fichier de commandes """
+      if name == SEPARATEUR:return
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      if name != "COMMENTAIRE":
+          #new_obj = self.node.item.append_child(name,'first')
+          #self.node.children[0].select()
+          new_node = self.node.append_child(name,'first')
+      else :
+          new_node = self.ajout_commentaire_first()
+        
+class OngletPanel(Panel) :
+  """ Cette classe est virtuelle et doit être dérivée
+      Elle contient les principales méthodes d'affichage des différents onglets"""
+
+  global panelbind
+
+  def raisecmd(self,page):
+      self.nb.page(page).focus_set()
+      if page == 'Concept':
+          try:
+              self._any.focus()
+          except:
+              pass
+      elif page == 'Commande':
+          try:
+              self.command_entry.component('entry').focus()
+          except:
+              pass
+
+  def creebind(self):
+       self.nb.bind_all("<F1>",lambda e,s=self,num=0:s.commande_up(num))
+       self.nb.bind_all("<F2>",lambda e,s=self,num=1:s.commande_up(num))
+       self.nb.bind_all("<F3>",lambda e,s=self,num=2:s.commande_up(num))
+       self.nb.bind_all("<F4>",lambda e,s=self,num=3:s.commande_up(num))
+       OngletPanel.panelbind=self.nb
+
+  def enlevebind(self):
+       if not hasattr(OngletPanel,"panelbind"):
+          return
+       if OngletPanel.panelbind == None:
+          return
+       try:
+           OngletPanel.panelbind.unbind_all("<F1>")
+           OngletPanel.panelbind.unbind_all("<F2>")
+           OngletPanel.panelbind.unbind_all("<F3>")
+           OngletPanel.panelbind.unbind_all("<F4>")
+       except:
+           pass
+       OngletPanel.panelbind = None
+
+  def commande_up(self,num):
+      #print "commande_up de panels pour ", num
+      try :
+        OngletPanel.panelbind.selectpage(num)
+        pageNew=OngletPanel.panelbind.page(num)
+        pageNew.focus_set()
+      except :
+        pass
+
+  def affiche(self):
+      page=self.nb.getcurselection()
+      self.nb.page(page).focus_set()
+      if page == 'Concept':
+          try:
+#              _any est un pointeur sur entry
+#              component est une methode de pmw 
+#              a priori, jamais ok
+              self._any.component('entry').focus_set()
+          except:
+              pass
+      self.tkraise()
+
+# ------------------------------------------------------------------------
+#     Méthodes permettant d'afficher des pages partagées par différents
+#           types d'objets (règles,mots-clés,concept,...)
+# ------------------------------------------------------------------------
+
+  def makeConceptPage(self,page):
+      """
+      Crée la page de saisie du nom du concept
+      """
+      self.label = Label(page,text='Nom du concept :')
+      self.label.place(relx=0.1,rely=0.4)
+      self._any = Entry(page,relief='sunken')
+      self._any.place(relx=0.35,rely=0.4,relwidth=0.5)
+      self._any.bind("<Return>",lambda e,s=self:s.execConcept())
+      self._any.bind("<KP_Enter>",lambda e,s=self:s.execConcept())
+      self._any.insert(0,self.node.item.GetText())
+      self.but_ok=Button(page,text = "Valider",command=self.execConcept)
+      self.but_ok.place(relx=0.35,rely=0.8, relwidth=0.35)
+      type_sd = self.node.item.get_type_sd_prod()
+      if type_sd :
+          txt = "L'opérateur courant retourne un objet de type %s" %type_sd
+          self.label = Label(page, text = txt)
+          self.label.place(relx=0.5,rely=0.55,anchor='n')
+      self._any.focus()
+      # aide associée au panneau
+      bulle_aide="""Tapez dans la zone de saisie le nom que vous voulez donner
+      au concept retounré par l'opérateur courant et pressez <Return> pour valider"""
+      page.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      page.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+        
+
+  def makeMoclesPage(self,page):
+      """
+      Crée la page qui affiche la liste des mots-clés que l'on peut
+      encore ajouter
+      """
+      genea =self.node.item.get_genealogie()
+      jdc = self.node.item.get_jdc()
+      liste_mc=self.node.item.get_liste_mc_ordonnee(genea,jdc.cata_ordonne_dico)
+      liste_commandes = (("<Enter>",self.selectMC),
+                         ("<Leave>",self.deselectMC),
+                         ("<Double-Button-1>",self.defMC))
+      Liste = ListeChoix(self,page,liste_mc,liste_commandes = liste_commandes,titre = "Mots-clés permis",optionReturn="oui")
+      Liste.affiche_liste()
+      # aide associée au panneau
+      bulle_aide="""Double-cliquez sur le mot-clé que vous voulez ajouter à
+      la commande en cours d'édition"""
+      Liste.MCbox.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      Liste.MCbox.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+      if len(liste_mc) > 0 :
+         Liste.surligne(liste_mc[0])
+      self.Liste=Liste
+
+  def makeCommentairePage(self,page):
+      label = Label(page,text = "Insérer un commentaire :")
+      label.grid(column = 0, row = 2)
+      but_avant = Button(page,text = "AVANT",command = lambda s=self :s.ajout_commentaire(ind = 'before'))
+      but_apres = Button(page,text = "APRES",command = self.ajout_commentaire)
+      but_avant.grid(column = 1,row =2)
+      but_apres.grid(column = 1,row =3)
+      
+  def makeCommandePage(self,page):
+      """
+         Cree l'onglet
+      """
+      frame1 = Frame(page,height = 20)
+      frame1.pack(side='top',fill='x')
+      label = Label(frame1,text ="La commande choisie sera ajoutée\n APRES la commande courante")
+      label.pack(side='top')
+      frame2 = Frame(page)
+      frame2.pack(side='top',fill='both',expand=1)
+      liste_commandes = (("<Enter>",self.selectCmd),
+                         ("<Leave>",self.deselectCmd),
+                         ("<Double-Button-1>",self.defCmd))
+      if options.affichage_commandes == "alphabetic":
+         liste_cmd = self.get_liste_cmd()
+         Liste = ListeChoix(self,frame2,liste_cmd,liste_commandes = liste_commandes,
+                                   filtre='oui',titre = "Commandes",optionReturn="oui")
+      else:
+         liste_commandes=liste_commandes+(("<Return>",self.defCmd),)
+         liste_groupes,dict_groupes=self.get_groups()
+         Liste = ListeChoixParGroupes(self,frame2,liste_groupes,dict_groupes,
+                                      liste_commandes = liste_commandes,
+                                      filtre='oui',titre = "Commandes",optionReturn="oui")
+      Liste.affiche_liste()
+      self.command_entry=Liste.entry
+      # aide associée au panneau
+      bulle_aide="""Double-cliquez sur la commande que vous voulez ajouter au jeu de commandes"""
+      Liste.MCbox.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      Liste.MCbox.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+      self.liste_command=Liste
+      global panneauCommande
+      panneauCommande=self
+
+  def makeJDCPage(self,page):
+      """
+      Crée la page correspondant à un objet de type JDC
+      """
+      liste_commandes = (("<Enter>",self.selectCmd),
+                         ("<Leave>",self.deselectCmd),
+                         ("<Double-Button-1>",self.defCmdFirst))
+      if options.affichage_commandes == "alphabetic":
+         liste_cmd = self.get_liste_cmd()
+         Liste = ListeChoix(self,page,liste_cmd,liste_commandes = liste_commandes,
+                            filtre='oui',titre = "Commandes",optionReturn="oui")
+      else:
+         liste_commandes=liste_commandes+(("<Return>",self.defCmdFirst),)
+         liste_groupes,dict_groupes=self.get_groups()
+         Liste = ListeChoixParGroupes(self,page,liste_groupes,dict_groupes,
+                                      liste_commandes = liste_commandes,
+                                      filtre='oui',titre = "Commandes",optionReturn="oui")
+      Liste.affiche_liste()
+       # aide associée au panneau
+      bulle_aide="""Double-cliquez sur la commande que vous voulez ajouter au jeu de commandes"""
+      Liste.MCbox.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      Liste.MCbox.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
+  def makeReglesPage(self,page) :
+      """
+      Crée la page qui affiche la liste des règles avec celle qui ne sont
+      pas respectées en rouge
+      """
+      regles = []
+      regles = self.node.item.get_regles()
+      dictionnaire = self.node.item.get_mc_presents()
+      texte_regles = []
+      l_regles_en_defaut=[]
+      if len(regles) > 0:
+        i = 0
+        for regle in regles :
+          texte_regles.append(regle.gettext())
+          texte,test = regle.verif(dictionnaire)
+          if test == 0 : l_regles_en_defaut.append(i)
+          i = i+1
+      Liste = ListeChoix(self,page,texte_regles,liste_marques=l_regles_en_defaut,active='non',titre="Règles")
+      Liste.affiche_liste()
+      # aide associée au panneau
+      bulle_aide="""Ce panneau contient la liste des règles qui s'appliquent à l'objet
+      en cours d'édition.
+      - en noir : règles valides
+      - en rouge : règles violées"""
+      Liste.MCbox.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      Liste.MCbox.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
+  def makeParamCommentPage_for_etape(self,page):
+      """
+      Crée la page qui offre le choix à l'utilisateur d'ajouter un commentaire
+      ou un paramètre, avant ou après le noeud courant dans l'arbre.
+      Cette page est destinée aux objets de niveau ETAPE cad à toutes les CMD,
+      les commentaires inter commandes et les paramètres
+      """
+      # les frame ...
+      self.frame_comment = Frame(page,bd=1,relief='raised')
+      self.frame_param   = Frame(page,bd=1,relief='raised')
+      self.frame_boutons = Frame(page,bd=1,relief='raised')
+      self.frame_comment.place(relx=0,rely=0,relwidth=1,relheight=0.40)
+      self.frame_param.place(relx=0,rely=0.40,relwidth=1,relheight=0.40)
+      self.frame_boutons.place(relx=0,rely=0.84,relwidth=1,relheight=0.16)
+      # remplissage de la frame commentaire
+      Label(self.frame_comment,text = "Insérer un commentaire :").place(relx=0.1,rely=0.5,anchor='w')
+      but_comment_avant = Button(self.frame_comment,
+                                 text = "AVANT "+self.node.item.get_nom(),
+                                 command = lambda s=self :s.ajout_commentaire(ind = 'before'))
+      but_comment_apres = Button(self.frame_comment,
+                                 text = "APRES "+self.node.item.get_nom(),
+                                 command = self.ajout_commentaire)
+      but_comment_avant.place(relx=0.45,rely=0.3,anchor='w',relwidth=0.45)
+      but_comment_apres.place(relx=0.45,rely=0.7,anchor='w',relwidth=0.45)
+      # remplissage de la frame paramètre
+      Label(self.frame_param,text = "Insérer un paramètre :").place(relx=0.1,rely=0.5,anchor='w')
+      but_param_avant = Button(self.frame_param,
+                                 text = "AVANT "+self.node.item.get_nom(),
+                                 command = lambda s=self :s.ajout_parametre(ind = 'before'))
+      but_param_apres = Button(self.frame_param,
+                                 text = "APRES "+self.node.item.get_nom(),
+                                 command = self.ajout_parametre)
+      but_param_avant.place(relx=0.45,rely=0.3,anchor='w',relwidth=0.45)
+      but_param_apres.place(relx=0.45,rely=0.7,anchor='w',relwidth=0.45)
+      # remplissage de la frame boutons
+      Button(self.frame_boutons,
+             text="Commentariser toute la commande",
+             command = self.comment_commande).place(relx=0.5,rely=0.5,anchor='center')
+    
+  def deselectMC(self,name):
+      self.parent.appli.affiche_infos('')
+    
+  def get_groups(self):
+      jdc=self.node.item.object.get_jdc_root()
+      return jdc.get_groups()
+
+  def get_liste_cmd(self):
+      #print "get_liste_cmd",self.node.item.object
+      jdc=self.node.item.object.get_jdc_root()
+      listeCmd = jdc.get_liste_cmd()
+      return listeCmd
+
+  def deselectCmd(self,name):
+      self.parent.appli.affiche_infos('')
+    
+  def execConcept(self):
+      """
+      Nomme le concept SD retourné par l'étape
+      """
+      if not hasattr(self,'valeur_choisie'):
+          nom = self._any.get()
+      else:
+          nom = self.valeur_choisie.get()
+      nom = string.strip(nom)
+      if nom == '' : return # si pas de nom, on ressort sans rien faire ...
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      test,mess = self.node.item.nomme_sd(nom)
+      #self.node.verif()
+      #self.node.racine.update()
+      self.parent.appli.affiche_infos(mess)
+  
+  def changed(self):
+      pass
+
+  def comment_commande(self):
+    """
+    Cette méthode a pour but de commentariser la commande pointée par self.node
+    """
+    # On traite par une exception le cas où l'utilisateur final cherche à désactiver
+    # (commentariser) un commentaire.
+    try :
+        pos=self.node.parent.children.index(self.node)
+        commande_comment = self.node.item.get_objet_commentarise()
+        # On signale au parent du panel (le JDCDisplay) une modification
+        self.parent.init_modif()
+        self.node.parent.children[pos].select()
+    except Exception,e:
+        traceback.print_exc()
+        widgets.showerror("TOO BAD",str(e))
+    return
+
+      
+class Panel_Inactif(Panel):
+  """
+     Cette classe sert à définir un panneau dans lequel on dit que le noeud 
+     sélectionné n'est pas actif
+  """
+  def __init__(self,parent,panneau,node) :
+      self.parent=parent
+      self.panneau = panneau
+      self.node=node
+      Frame.__init__(self,self.panneau)
+      self.place(x=0,y=0,relheight=1,relwidth=1)
+      self.creer_texte()
+
+  def creer_texte(self):
+      texte = "Le noeud sélectionné ne correspond pas à un objet actif\n"
+      texte = texte + "Seules les commandes placées entre \nDEBUT/POURSUITE et FIN sont actives"
+      longueur = int(self.panneau.winfo_width()*0.8)
+      self.label = Label(self,text=texte,wraplength=longueur,justify='center')
+      self.label.place(relx=0.5,rely=0.4,relwidth=0.8,anchor='center')
+      self.bouton_sup = Button(self,
+                               text = "Supprimer",
+                               command=self.supprimer,
+                               width=14)
+      self.bouton_sup.place(relx=0.5,rely=0.8,anchor='center')
+
+
+if __name__ == "__main__" : pass
diff --git a/InterfaceTK/panelsSalome.py b/InterfaceTK/panelsSalome.py
new file mode 100644 (file)
index 0000000..800848e
--- /dev/null
@@ -0,0 +1,286 @@
+# -*- coding: utf-8 -*-
+
+from Tkinter import *
+from widgets import ListeChoix
+from widgets import showerror
+
+from fonctionpanel      import FONCTION_Panel
+from shellpanel         import SHELLPanel
+from plusieursintopanel import PLUSIEURS_INTO_Panel
+from plusieursassdpanel import PLUSIEURS_ASSD_Panel
+from plusieursbasepanel import PLUSIEURS_BASE_Panel
+from plusieursbasepanel import PLUSIEURS_BASE_OR_UNELISTE_Panel
+from uniquesdcopanel    import UNIQUE_SDCO_Panel
+from uniqueassdpanel    import UNIQUE_ASSD_Panel
+from uniqueintopanel    import UNIQUE_INTO_Panel
+from uniquecomppanel    import UNIQUE_COMP_Panel
+from uniquebasepanel    import UNIQUE_BASE_Panel
+from uniqueassdpanel    import UNIQUE_ASSD_Panel_Reel
+
+from Noyau.N_CR import justify_text
+
+import traceback
+import images
+
+
+
+# 2 types de commandes vont etre particularisees dans Salome
+#
+# - un cas general : 
+# Toutes les commandes possedant GROUP_NO ou GROUP_MA
+# seront surchargees d office
+# pour cela on va utiliser le dictionnaire dict_classes_salome
+# qui va permettre de changer la classe de la commande
+# ainsi si un panel en dehors de salome a pour classe PLUSIEURS_BASE_Panel
+# la classe de ce panel devient alors SALOME_PLUSIEURS_BASE_Panel
+# (pour cela voir composimp)
+
+# des commandes "autres" ne pouvant pas etre identifiées par leur nom 
+# il suffit de creer dans la classe SALOME de la commande
+# une fonction portant son nom 
+# Exemple de particularisation d un panel :
+# Supposons que l on veuille particulariser la commande
+#        - LIRE_MAILLAGE_UNITE 
+# le panel initial a pour classe UNIQUE_BASE_Panel
+# il suffit d'ajouter dans la classe derivée SALOME_UNIQUE_BASE_Panel
+# une fonction  SALOME_LIRE_MAILLAGE_UNITE
+# la classe de ce panel devient alors SALOME_UNIQUE_BASE_Panel
+# on peut surcharger les methodes nécessaires (affichage par exemple)  
+
+
+class SALOME_SHELLPanel (SHELLPanel):
+        ""
+
+class SALOME_FONCTION_Panel (FONCTION_Panel):
+        ""
+
+class SALOME_PLUSIEURS_INTO_Panel (PLUSIEURS_INTO_Panel):
+        ""
+
+class SALOME_PLUSIEURS_ASSD_Panel (PLUSIEURS_ASSD_Panel):
+        ""
+
+class SALOME_UNIQUE_INTO_Panel (UNIQUE_INTO_Panel):
+        ""
+
+class SALOME_UNIQUE_SDCO_Panel (UNIQUE_SDCO_Panel):
+        ""
+
+class SALOME_UNIQUE_ASSD_Panel (UNIQUE_ASSD_Panel):
+        ""
+
+class SALOME_UNIQUE_COMP_Panel (UNIQUE_COMP_Panel):
+        ""
+
+class SALOME_UNIQUE_ASSD_Panel_Reel (UNIQUE_ASSD_Panel_Reel):
+        ""
+
+# ------------------------------------------------------------------------------#
+# classe SALOME_PLUSIEURS_BASE_Panel
+#
+# Commandes modifiées  :  
+#        - AFFE_CHAR_MECA_DDL_IMPO_GROUP_NO
+# Methodes surchargées :  
+#        - makeValeurPage(self,page)
+#
+# ------------------------------------------------------------------------------#
+
+class SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel(PLUSIEURS_BASE_OR_UNELISTE_Panel):
+      ""        
+
+class SALOME_PLUSIEURS_BASE_Panel(PLUSIEURS_BASE_Panel):
+
+  def __init__(self,parent,panneau,node):
+      PLUSIEURS_BASE_Panel.__init__( self, parent, panneau, node )
+      #self.selected_valeur = None
+      
+  def add_valeur_plusieurs_base(self,name=None):
+      try: 
+        valeur,validite,commentaire=self.get_valeur()
+        if not valeur: # sélection dans salome        
+            strSelection = ''
+            
+            genea=self.node.item.get_genealogie()
+            kwType = None
+            for e in genea:
+                if "GROUP_NO" in e:
+                    kwType = "GROUP_NO"
+                if "GROUP_MA" in e:
+                    kwType = "GROUP_MA"            
+                
+            selection, msg = self.parent.appli.selectGroupFromSalome(kwType)
+            if selection:
+                for oneSelection in selection:
+                    strSelection +=str( oneSelection )
+                    strSelection +=','
+                            
+                strSelection = strSelection.rstrip(',')
+                self.display_valeur( strSelection )                
+                    
+        PLUSIEURS_BASE_Panel.add_valeur_plusieurs_base( self, name )
+        if msg:
+            self.parent.appli.affiche_infos(msg)
+        self.erase_valeur()
+      except:
+        print ' erreur  add_valeur_plusieurs_base' #CS_pbruno : afficher boite de dialogue ici ?          
+        
+  def makeValeurPage(self,page):
+      """
+      Crée la page de saisie d'une liste de valeurs à priori quelconques,
+      cad qui ne sont  pas à choisir dans une liste prédéfinie
+      """      
+      PLUSIEURS_BASE_Panel.makeValeurPage(self,page)
+      self.c = Button( self.frame_choix, text='Visualiser',command=self.displayInSalomeGeom )      
+      self.c.place( relx=0.3, rely=0.0,relwidth=0.55)
+      
+      
+  def displayInSalomeGeom( self ):
+      if self.selected_valeur:        
+        ok, msgError = self.parent.appli.displayShape( self.selected_valeur )
+        if not ok:
+            self.parent.appli.affiche_infos(msgError)
+      
+      
+
+
+# ------------------------------------------------------------------------------#
+# classe SALOME_UNIQUE_BASE_Panel
+#
+# Commandes modifiées  :  
+#        - LIRE_MAILLAGE_UNITE 
+# Methodes surchargées :  
+#        - makeValeurPage(self,page)
+#
+# ------------------------------------------------------------------------------#
+
+class SALOME_UNIQUE_BASE_Panel(UNIQUE_BASE_Panel):
+
+# ce dictionnaire va servir lors de la sortie d efficas
+# a creer le fichier qui sera integre au config.txt
+# pour relier une unite logique et un nom de fichier
+
+  dict_fichier_unite={}
+
+
+  def SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_N(self):
+      import salome 
+      entrychaine=salome.sg.getAllSelected()
+      if entrychaine != '':
+          self.entry2.delete(0,END)
+          try:
+              SO = salome.myStudy.FindObjectID(entrychaine[0])
+          except:
+              boo = 0
+              SO = None
+
+          FileName=''
+          if SO != None:
+              myBuilder = salome.myStudy.NewBuilder()
+              boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeFileType")
+              if boo:
+                 val=FileAttr.Value()
+                 if (val !="FICHIERMED" and val != "FICHIER_RESU_MED"):
+                     boo=0
+                     showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
+                 else:
+                     boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeExternalFileDef")
+              if boo :
+                FileName=FileAttr.Value()
+              else:
+                 showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
+          if FileName != '' :
+              self.entry.delete(0,END)
+              self.entry2.delete(0,END)
+              self.entry.insert(0,FileName)
+              self.entry2.insert(0,FileName)
+              self.valid_valeur()
+
+
+  def SALOME_DONNEES_HOMARD_TRAITEMENT_NOM_MED_MAILLAGE_N(self):
+      import salome 
+      EntryName=''
+      entrychaine=salome.sg.getAllSelected()
+      if entrychaine != '':
+          self.entry2.delete(0,END)
+          try:
+              SO = salome.myStudy.FindObjectID(entrychaine[0])
+          except:
+              boo = 0
+              SO = None
+
+          if SO is not None:
+             myBuilder = salome.myStudy.NewBuilder()
+             ok, AtName = myBuilder.FindAttribute(SO,"AttributeName")
+             if ok:
+                EntryName=AtName.Value()
+
+      if EntryName != '':
+          self.entry.delete(0,END)
+          self.entry2.delete(0,END)
+          self.entry.insert(0,EntryName)
+          self.entry2.insert(0,EntryName)
+          self.valid_valeur()
+
+  def SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_NP1(self):
+      self.SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_N()
+
+  def SALOME_DEFI_GROUP_CREA_GROUP_MA_GROUP_MA(self):
+      #try: 
+      if ( 1 == 1 ) :
+        selection, msg = self.parent.appli.selectGroupFromSalome()
+        if selection:
+           strSelection =str( selection )
+           UNIQUE_BASE_Panel.valid_valeur(self,strSelection)
+        if msg:
+            self.parent.appli.affiche_infos(msg)
+        self.erase_valeur()
+      #except:
+      else :
+        print ' erreur  '
+        
+
+  def redistribue_selon_simp(self):
+      genea = self.node.item.get_genealogie()
+      commande="SALOME"
+      for i in range(0,len( genea )) :
+        commande=commande+"_"+ genea[i]
+      # --------------------------------------------------------------
+      # on verifie que la methode n est pas particularise
+      # sinon on appelle SALOME_DEFI_GROUP_CREA_GROUP_MA_GROUP_MA qui
+      # sert comme methode par defaut 
+      # --------------------------------------------------------------
+      try :
+        SALOME_UNIQUE_BASE_Panel.__dict__[commande](self)
+      except :
+         SALOME_UNIQUE_BASE_Panel.SALOME_DEFI_GROUP_CREA_GROUP_MA_GROUP_MA(self)
+
+
+
+  def makeValeurPage(self,page):
+      """
+      Crée la page de saisie d'une valeur à priori quelconque,
+      cad qui ne sont  pas à choisir dans une liste prédéfinie
+      Ajout d'un bouton pour selectionner  à partir de Salome  
+      """      
+      UNIQUE_BASE_Panel.makeValeurPage(self,page)
+      self.b = Button(self.frame_valeur,text='Relier selection',command=self.redistribue_selon_simp)
+      self.b.place(relx=0.28,rely=0.4,relwidth=0.4)
+
+#---------------------------------------------------------------------------------------
+# Correspondances entre les classes eficas et les classes salome_eficas 
+#______________________________________________________________________________________
+dict_classes_salome = { SHELLPanel : SALOME_SHELLPanel, 
+                          FONCTION_Panel       : SALOME_FONCTION_Panel,
+                          PLUSIEURS_INTO_Panel : SALOME_PLUSIEURS_INTO_Panel,
+                          PLUSIEURS_ASSD_Panel : SALOME_PLUSIEURS_ASSD_Panel,
+                          PLUSIEURS_BASE_Panel : SALOME_PLUSIEURS_BASE_Panel,
+                          PLUSIEURS_BASE_OR_UNELISTE_Panel : SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel,
+                          UNIQUE_INTO_Panel :  SALOME_UNIQUE_INTO_Panel,
+                          UNIQUE_SDCO_Panel : SALOME_UNIQUE_SDCO_Panel,
+                          UNIQUE_ASSD_Panel : SALOME_UNIQUE_ASSD_Panel,
+                          UNIQUE_ASSD_Panel_Reel : SALOME_UNIQUE_ASSD_Panel_Reel,
+                          UNIQUE_COMP_Panel : SALOME_UNIQUE_COMP_Panel,
+                          UNIQUE_BASE_Panel : SALOME_UNIQUE_BASE_Panel}
+
+dict_geom_numgroupe = { }
+dict_geom_numface = { }
diff --git a/InterfaceTK/patches.py b/InterfaceTK/patches.py
new file mode 100644 (file)
index 0000000..0bd2fc4
--- /dev/null
@@ -0,0 +1,39 @@
+# -*- 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.
+#
+#
+# ======================================================================
+
+"""
+   Ce module contient des modifications mineures du comportement
+   du noyau ou de validation
+"""
+import string
+
+if __name__ == "__main__":
+   import Noyau.N_CR
+   print Noyau.N_CR.encadre_message(motif='!',
+texte="""- Il faut au moins un mot-clé parmi : ('DEBUT', 'POURSUITE')     
+- Il faut au moins un mot-clé parmi : ('FIN',)               
+- Il faut qu'au moins un objet de la liste : ('DEBUT', 'POURSUITE') soit suivi d'au moins un objet de la liste : ('FIN',) 
+ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,yyyyyyyyyyyyyyyy
+""")
+
+
+
diff --git a/InterfaceTK/plusieursassdpanel.py b/InterfaceTK/plusieursassdpanel.py
new file mode 100644 (file)
index 0000000..3e5eb99
--- /dev/null
@@ -0,0 +1,183 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from Editeur.utils import substract_list
+
+# Import des panels
+from plusieurspanel import PLUSIEURS_Panel 
+
+class PLUSIEURS_ASSD_Panel(PLUSIEURS_Panel):
+  """
+  Classe définissant le panel associé aux mots-clés qui demandent
+  à l'utilisateur de donner une liste de valeurs qui ne sont pas
+  à choisir dans une liste discrètes et qui sont de type dérivé d'ASSD
+  """
+  def makeValeurPage(self,page):
+      """
+      Génère la page de saisie de plusieurs noms de SD parmi un ensemble discret
+      de SD possibles, cad d'un type cohérent avec les types attendus par le mot-clé simple
+      """
+      # On récupère la bulle d'aide du panneau, l'objet, l'aide, min et max (cardinalité de la liste),
+      # la liste des valeurs déjà affectées à l'objet courant et la liste des SD du bon type
+      bulle_aide=self.get_bulle_aide()
+      self.ajout_valeurs=None
+      objet_mc = self.node.item.get_definition()
+      aide = self.get_aide()
+      aide = justify_text(texte=aide)
+      min,max = self.node.item.GetMinMax()
+      l_valeurs = self.node.item.GetListeValeurs()
+      l_choix=self.node.item.get_sd_avant_du_bon_type()
+      l_choix.sort()
+      # remplissage du panneau
+      self.frame_valeurs = Frame(page)
+      self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7)
+      self.frame_boutons_fleches = Frame(page)
+      self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7)
+      self.frame_choix = Frame(page)
+      self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7)
+      self.frame_boutons = Frame(page)
+      self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=0.5,relheight=0.1)
+      liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
+                                 ("<Button-3>",self.deselectValeur),
+                                 ("<Double-Button-1>",self.sup_valeur_sans_into))
+      liste_commandes_choix = (("<Button-1>",self.selectChoix),
+                               ("<Button-3>",self.deselectChoix),
+                               ("<Double-Button-1>",self.add_eval_valeur_sans_into))
+      self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
+                                      titre="Valeur(s) actuelle(s)")
+      self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,liste_commandes = liste_commandes_choix,
+                                    titre= "Valeurs possibles")
+      self.bouton_add = Button(self.frame_boutons_fleches,
+                          image = images.get_image('arrow_left'),
+                          command = self.add_eval_valeur_sans_into)
+      self.bouton_sup = Button(self.frame_boutons_fleches,
+                          image = images.get_image('arrow_right'),
+                          command = self.sup_valeur_sans_into)
+      self.bouton_accepter = Button(self.frame_boutons,
+                               text='Valider',
+                               command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
+      self.bouton_annuler = Button(self.frame_boutons,
+                              text = 'Annuler',
+                              command = self.annule_modifs_valeur)
+      self.bouton_add.place(relx=0.3,rely=0.35)
+      self.bouton_sup.place(relx=0.3,rely=0.65)
+      for but in (self.bouton_accepter,self.bouton_annuler):
+          but.pack(side='left',padx=4)
+      self.Liste_valeurs.affiche_liste()
+      if len(l_valeurs) > 0 :
+          liste_marque=l_valeurs[-1]
+          self.Liste_valeurs.surligne(liste_marque)
+      self.Liste_choix.affiche_liste()
+      for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
+          fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+          fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+  
+  def add_eval_valeur_sans_into(self,valeurentree=None):
+      if valeurentree == None:
+         valeurentree = self.get_valeur()
+      valeur,validite=self.node.item.eval_valeur(valeurentree)
+      if not validite :
+         commentaire = "impossible d'évaluer : %s " %`valeurentree`
+         self.parent.appli.affiche_infos(commentaire)
+         return
+      self.add_valeur_sans_into(valeur)
+
+  def get_bulle_aide(self):
+      """
+      Retourne la bulle d'aide associée au panneau
+      """
+      return """Un clic sur une valeur des deux listes la sélectionne.
+      - Un clic sur la flèche gauche stocke la valeur possible sélectionnée
+      dans la liste des valeurs que vous voulez affecter au mot-clé simple
+      - Un clic sur la flèche droite déstocke la valeur du mot-clé simple
+      sélectionnée (elle apparaît alors à nouveau comme choix possible
+      dans la liste des choix à droite)
+      - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées
+      au mot-clé simple courant
+      - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple
+      avant toute modification depuis le dernier 'Valider'"""
+
+  def get_aide(self):
+      """
+      Retourne la phrase d'aide indiquant de quel type doivent être les
+      valeurs que doit entrer l'utilisateur
+      """
+      commentaire=""
+      mc = self.node.item.get_definition()
+      type = mc.type[0].__name__  
+      if len(mc.type)>1 :
+          for typ in mc.type[1:] :
+              type = type + ' ou '+typ.__name__
+      if mc.min == mc.max:
+        commentaire="Une liste de "+`mc.min`+" objets de type "+type+" est attendue"
+      else :
+        commentaire="Une liste d'objets de type "+type+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
+      aideval=self.node.item.aide()
+      commentaire=commentaire +"\n"+ aideval
+      return commentaire
+
+    
+  def sup_valeur(self,name=None):
+      """
+      Supprime la valeur selectionnée de la liste des valeurs et la rajoute
+      à la liste des choix possibles
+      """
+      liste_valeurs = self.Liste_valeurs.get_liste()
+      liste_valeurs.remove(self.selected_valeur)
+      liste_choix = self.node.item.get_definition().into
+      liste_choix = substract_list(liste_choix,liste_valeurs)
+      self.Liste_valeurs.put_liste(liste_valeurs)
+      self.Liste_choix.put_liste(liste_choix)
+      self.selected_valeur = None      
+    
+  def erase_valeur(self):
+      pass
+
+  def get_valeur(self):
+      """
+      Retourne la valeur sélectionnée dans la liste des choix
+      """
+      return self.selected_choix
+
+  def display_valeur(self,val=None):
+      """
+         Affiche la valeur passée en argument dans l'entry de saisie.
+         Par défaut affiche la valeur du mot-clé simple
+      """
+      # Il n'y a pas d'entry pour ce type de panneau
+      return
+
+    
diff --git a/InterfaceTK/plusieursbasepanel.py b/InterfaceTK/plusieursbasepanel.py
new file mode 100644 (file)
index 0000000..34af53e
--- /dev/null
@@ -0,0 +1,542 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import showinfo
+from widgets import askopenfilename
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+from widgets import FenetreDeParametre
+
+from Noyau.N_CR import justify_text
+from Ihm.I_LASSD import LASSD
+from Extensions.parametre import PARAMETRE
+
+from Editeur.utils import substract_list
+from plusieurspanel import PLUSIEURS_Panel
+from uniqueassdpanel import UNIQUE_ASSD_Panel
+
+import fontes
+import math
+
+class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel):
+  """
+  Classe définissant le panel associé aux mots-clés qui demandent
+  à l'utilisateur de donner une liste de valeurs qui ne sont pas
+  à choisir dans une liste discrètes et qui sont de type de base :
+  entier, réel, string,...
+  """
+  def makeValeurPage(self,page):
+      """
+      Crée la page de saisie d'une liste de valeurs à priori quelconques,
+      cad qui ne sont  pas à choisir dans une liste prédéfinie
+      """
+      #print "Methode Utilisée par Salome"
+      # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste),
+      # et la liste des valeurs déjà affectées à l'objet courant
+      bulle_aide=self.get_bulle_aide()
+      objet_mc = self.node.item.get_definition()
+      aide = self.get_aide()
+      aide = justify_text(texte=aide)
+      min,max = self.node.item.GetMinMax()
+      l_valeurs = self.node.item.GetListeValeurs()
+
+      # création des frames globales
+      self.frame1 = Frame(page,relief='groove',bd=2)
+      self.frame2 = Frame(page)
+      self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85)
+      self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15)
+      self.frame_right = Frame(self.frame1)
+      self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.)
+
+      # création des frames internes
+      self.frame_valeurs = Frame(self.frame1)
+      self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95)
+      self.frame_boutons_fleches = Frame(self.frame_right)
+      self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.5)
+      self.frame_choix = Frame(self.frame_right)
+      self.frame_choix.place(relx=0.2,rely=0.2,relwidth=0.7,relheight=0.8)
+      self.frame_aide = Frame(self.frame_right)
+      self.frame_aide.place(relx=0.1,rely=0.8,relwidth=0.8,relheight=0.2)
+      self.frame_boutons = Frame(self.frame2)
+      self.frame_boutons.place(relx=0.2,rely=0.,relwidth=1,relheight=1.)
+      for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs,
+                 self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons):
+          fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+          fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
+      # création des objets dans les frames
+      liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
+                                 ("<Button-3>",self.deselectValeur),
+                                 ("<Double-Button-1>",self.sup_valeur_sans_into))
+      self.Liste_valeurs=ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
+                                      titre="Valeur(s) actuelle(s)")
+
+      # Création de l'entry ou de la liste des SD
+      # PN : pour ajouter les validators
+      self.label = Label(self.frame_choix,text="Valeur :")
+      self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base)
+      self.label.place(relx=0.05,rely=0.2)
+
+      # Création d'un bouton "Importer ..." et d'un bouton "Paramatres" sur le panel.
+      bouton_valeurs_fichier = Button(self.frame_choix,
+                                      text="Importer",
+                                      command=self.select_in_file)
+      bouton_valeurs_fichier.place(relx=0.28,rely=0.4,relwidth=0.6)
+      bouton_parametres = Button(self.frame_choix, text="Parametres", command=self.affiche_parametre)
+      bouton_parametres.place(relx=0.28,rely=0.6,relwidth=0.6)
+      self.ajout_valeurs = None
+
+      # boutons Ajouter et Supprimer
+      self.bouton_add = Button(self.frame_boutons_fleches,
+                          image = images.get_image('arrow_left'),
+                          command = self.add_valeur_plusieurs_base)
+      self.bouton_sup = Button(self.frame_boutons_fleches,
+                          image = images.get_image('arrow_right'),
+                          command = self.sup_valeur_sans_into)
+      self.bouton_add.place(relx=0.3,rely=0.35)
+      self.bouton_sup.place(relx=0.3,rely=0.65)
+      # affichage de l'aide
+      self.frame_aide.update()
+      self.aide = Label(self.frame_aide,
+                        text = aide,
+                        justify='center',
+                        anchor='center',
+                              wraplength=int(self.frame_aide.winfo_width()*0.8))
+      self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
+      self.Liste_valeurs.affiche_liste()
+      if len(l_valeurs) > 0 :
+          liste_marque=l_valeurs[-1]
+          self.Liste_valeurs.surligne(liste_marque)
+          self.selectValeur(liste_marque)
+      # boutons Accepter et Annuler
+      self.bouton_accepter = Button(self.frame_boutons,
+                               text='Valider',
+                               command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
+      self.bouton_annuler = Button(self.frame_boutons,
+                              text = 'Annuler',
+                              command = self.annule_modifs_valeur)
+      self.bouton_accepter.place(relx=0.2, rely=0.2,relwidth=0.25)
+      self.bouton_annuler.place(relx=0.5, rely=0.2,relwidth=0.25)
+
+  def affiche_parametre(self) :
+      if self.node.item.get_liste_param_possible() != [ ]:
+         txtparam=""
+         for param in self.node.item.get_liste_param_possible():
+            txtparam=txtparam+repr(param)+"\n"
+         if txtparam=="":
+            showerror("Aucun parametre ","Pas de parametre de ce type")
+         else :
+            try :
+                    self.self.fenetreparam.destroy()
+            except:
+                pass
+            self.fenetreparam=FenetreDeParametre( self, self.node.item, self.parent.appli, txtparam)
+
+  def valid_valeur(self):
+      self.add_valeur_plusieurs_base()
+
+  def add_valeur_plusieurs_base(self,name=None):
+      if name != None :
+         valeur = name
+      else:
+         valeur,validite,commentaire=self.get_valeur()
+         if not validite :
+            self.parent.appli.affiche_infos(commentaire)
+            return
+
+      atraiter=[]
+      if type(valeur)  in (types.ListType,types.TupleType) :
+         indice = 0
+         while (indice < len(valeur)):
+            v=valeur[indice]
+            if self.node.item.wait_complex :
+               if (v== 'RI' or v == 'MP'):
+                  try :
+                     t=tuple([v,valeur[indice+1],valeur[indice+2]])
+                     atraiter.append(t)
+                     indice=indice+3
+                  except :
+                     validite=0
+                     commentaire = "Veuillez entrer le complexe sous forme aster ou sous forme python"
+                     self.parent.appli.affiche_infos(commentaire)
+                     return
+               else :     # ce n'est pas un tuple à la mode aster
+                  atraiter.append(v)
+                  indice = indice + 1
+            else:  # on n'attend pas un complexe
+              atraiter.append(v)
+              indice=indice+1
+      else:
+         atraiter.append(valeur)
+         
+      for valeur in atraiter :
+         encorevalide=self.node.item.valide_item(valeur)
+         if encorevalide :
+            listecourante=self.Liste_valeurs.get_liste()
+            encorevalide=self.node.item.valide_liste_partielle(valeur,listecourante)
+            if not encorevalide : encorevalide = -1
+         self.add_valeur_sans_into(valeur,encorevalide)
+    
+  def select_in_file(self):
+      """ Permet d'ouvrir un fichier choisi par l'utilisateur. """
+      nom_fichier = askopenfilename(title="Choix fichier :")
+
+      if not nom_fichier:
+          return
+
+      try:
+          f = open(nom_fichier, "rb")
+          selection_texte = f.read()
+          f.close()
+          self.ajout_valeurs = FenetreDeSelection(self, 
+                                                  self.node.item,
+                                                  self.parent.appli,
+                                                  titre="Sélection de valeurs",
+                                                  texte=selection_texte)
+      except:
+          traceback.print_exc()
+          showinfo("Erreur de fichier","impossible d'ouvir le fichier "+nom_fichier)
+          
+  def get_bulle_aide(self):
+      """
+      Retourne l'aide associée au panneau courant
+      """
+      return """Taper dans la boîte de saisie de droite la valeur que
+      vous voulez affecter au mot-clé simple.
+      - Cliquez sur la flèche gauche ou pressez <Return> pour la faire glisser
+      dans la liste des valeurs que vous voulez affecter au mot-clé simple
+      - Un clic sur une valeur de la liste la sélectionne
+      - Un clic sur la flèche droite ou un double-clic retire la valeur
+      sélectionnée de la liste
+      - Cliquez sur 'Valider' pour que la nouvelle valeur désirée soit affectée
+      au mot-clé simple
+      - Cliquez sur 'Annuler' pour annuler toutes les modifications faites
+      depuis le dernier clic sur 'Valider'"""
+
+  def get_aide(self):
+      """
+      Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
+      que saisit l'utilisateur
+      """
+      commentaire=""
+      mc = self.node.item.get_definition()
+      d_aides = { 'TXM' : 'chaînes de caractères',
+                  'R'   : 'réels',
+                  'I'   : 'entiers',
+                  'C'   : 'complexes'}
+      type = mc.type[0]
+      if not d_aides.has_key(type) : return 'Type de base inconnu'
+      if mc.min == mc.max:
+          commentaire="Une liste de "+d_aides[type]+" de longueur " + `mc.min`  + " est attendue"
+      else :
+          commentaire="Une liste de "+d_aides[type]+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
+
+      aideval=self.node.item.aide()
+      commentaire=commentaire +"\n"+aideval
+      return commentaire
+
+  def make_entry(self,frame,command,x=0.28,y=0.2):
+      self.entry = Entry(frame,relief='sunken')
+      self.entry.place(relx=0.28,rely=y,relwidth=0.6)
+      self.entry.bind("<Return>",lambda e,c=command:c())
+      self.entry.bind("<KP_Enter>",lambda e,c=command:c())
+      self.entry.focus()
+
+  def get_valeur(self):
+      """
+      Retourne la valeur saisie par l'utilisateur dans self.entry
+      """
+      commentaire = ""
+      if hasattr(self,'entry'):
+         # Traitement d'une entree unique
+         valeurentree = self.entry.get()
+         if (valeurentree == None or valeurentree ==""):
+            return None,0,""
+
+         #On tente une evaluation globale (ne fait pas de vérification de validité
+         #seulement une transformation de la chaine en objet équivalent)
+         valeur,validite=self.node.item.eval_valeur(valeurentree)
+         if valeur == valeurentree:
+             #L'evaluation n'a rien donné : on a toujours la string
+             #on découpe la string sur le séparateur , si c'est possible
+             if valeurentree.find(',') != -1:
+                 valeur=[]
+                 for v in valeurentree.split(','):
+                     vsimple,validite=self.node.item.eval_valeur(v)
+                     valeur.append(vsimple)
+
+         return valeur,validite,commentaire
+
+
+        # if (valeurentree[0] != "(") and (valeurentree.find(',') < len(valeurentree)):
+        #    valeurs=[]
+        #    for v in valeurentree.split(','):
+        #      vsimple,validite=self.node.item.eval_valeur(v)
+              # Pn If ajoute  pour le panneau "double"
+              #if isinstance(vsimple,LASSD) : 
+              #         commentaire = "impossible de mélanger reels et liste prédéfinie"
+              #  validite = 0
+              #         break 
+        #      if validite :
+        #         valeurs.append(vsimple)
+        #      else:
+        #         commentaire = "impossible d'évaluer : %s " %`valeurentree`
+        #         break
+        #    valeur=valeurs
+        # else: 
+        #    valeur,validite=self.node.item.eval_valeur(valeurentree)
+        # if not validite and commentaire == "":
+        #    commentaire = "impossible d'évaluer : %s " %`valeurentree`
+        # return valeur,validite,commentaire
+      #else:
+      #   # Traitement d'une entree de type complexe
+      #   try:
+      #      valeur= (self.typ_cplx.get(),
+      #               string.atof(self.entry1.get()),
+      #               string.atof(self.entry2.get()))
+      #      return valeur,1,""
+      #   except:
+      #      #traceback.print_exc()
+      #      return None,0,"impossible d'évaluer la valeur d'entree"
+
+  def erase_valeur(self):
+      """
+      Efface la valeur donnée par l'utilisateur dans l'entry
+      """
+      if hasattr(self,'entry'):
+         self.entry.delete(0,END)
+      else:
+         self.typ_cplx.set('RI')
+         self.entry1.delete(0,END)
+         self.entry2.delete(0,END)
+
+        
+  def display_valeur(self,val=None):
+      """
+      Affiche la valeur passée en argument dans l'entry de saisie.
+      Par défaut affiche la valeur du mot-clé simple
+      """
+      if not val :
+          valeur = self.node.item.object.getval()
+      else:
+          valeur = val
+      if not valeur : return
+
+      if hasattr(self,'entry'):
+         # Traitement d'une entree unique
+         self.entry.delete(0,END)
+         self.entry.insert(0,str(valeur))
+      else:
+         # Traitement d'une entree de type complexe
+         typ_cplx,x1,x2=valeur
+         self.entry1.delete(0,END)
+         self.entry2.delete(0,END)
+         self.typ_cplx.set(typ_cplx)
+         self.entry1.setentry(x1)
+         self.entry2.setentry(x2)
+
+class PLUSIEURS_BASE_OR_UNELISTE_Panel(PLUSIEURS_BASE_Panel,UNIQUE_ASSD_Panel):
+
+  def makeValeurPage(self,page):
+      """
+      Crée la page de saisie d'une liste de valeurs à priori quelconques,
+      cad qui ne sont  pas à choisir dans une liste prédéfinie
+      """
+      # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste),
+      # et la liste des valeurs déjà affectées à l'objet courant
+      bulle_aide=self.get_bulle_aide()
+      objet_mc = self.node.item.get_definition()
+      aide = self.get_aide()
+      aide = justify_text(texte=aide)
+      aide2 = self.get_aide2()
+      aide2 = justify_text(texte=aide2)
+      min,max = self.node.item.GetMinMax()
+      l_valeurs = self.node.item.GetListeValeurs()
+      for i in l_valeurs:
+         if isinstance(i,LASSD) :
+            affiche_entry=l_valeurs
+            l_valeurs=()
+
+      # Il faut traiter ici pour avoir le choix entre une liste
+      # deja constituee (listr8aster) ou manuelle
+
+      # création des frames globales
+      self.frame1 = Frame(page,relief='groove',bd=2)
+      self.frame2 = Frame(page)
+      self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.9)
+      self.frame2.place(relx=0.,rely=0.9,relwidth=1,relheight=0.1)
+
+      # création des frames internes dans frame1
+      self.frame_valeurs = Frame(self.frame1)
+      self.frame_valeurs.place(relx=0.02,rely=0.55,relwidth=0.35,relheight=0.45)
+      self.frame_haut = Frame(self.frame1)
+      self.frame_haut.place(relx=0.02,rely=0.02,relwidth=0.98,relheight=0.45)
+      self.frame_bas = Frame(self.frame1)
+      self.frame_bas.place(relx=0.37,rely=0.55,relwidth=0.63,relheight=0.45)
+
+      # création des frames internes dans frame_right
+      self.frame_fleches = Frame(self.frame_bas)
+      self.frame_fleches.place(relx=0.,rely=0.4,relwidth=0.2,relheight=0.5)
+      self.frame_choix = Frame(self.frame_bas)
+      self.frame_choix.place(relx=0.2,rely=0.1,relwidth=0.75,relheight=1)
+
+      # affichage de l'aide
+      self.aide = Label(self.frame_haut, text = aide, justify='center', anchor='center',)
+      self.aide.place(relx=0.72,rely=0.25,anchor='center',relwidth=1)
+      self.aide2 = Label(self.frame2, text = aide2,)
+      self.aide2.place(relx=0.4,rely=0.01,relwidth=0.6)
+
+      # Création d'un bouton "Importer ..." et d'un bouton "Parametres" sur le panel.
+      bouton_valeurs_fichier = Button(self.frame_choix,
+                                      text="Importer",
+                                      command=self.select_in_file)
+      bouton_valeurs_fichier.place(relx=0.28,rely=0.0,relwidth=0.6)
+      bouton_parametres = Button(self.frame_choix, text="Parametres", command=self.affiche_parametre)
+      bouton_parametres.place(relx=0.28,rely=0.25,relwidth=0.6)
+      self.ajout_valeurs = None
+
+
+      # Création de la liste des SD
+      liste_noms_sd = self.node.item.get_sd_avant_du_bon_type_pour_type_de_base()
+      liste_noms_sd = self.tri(liste_noms_sd)
+      self.listbox = Pmw.ScrolledListBox(self.frame_haut,
+                        items=liste_noms_sd,
+                labelpos='n',
+                #label_text="Structures de données du type\n requis parl'objet courant :",
+                label_text="Listes du type\n requis parl'objet courant :",
+                listbox_height = 6,
+                dblclickcommand=lambda s=self,c=UNIQUE_ASSD_Panel.valid_valeur : s.choose_valeur_from_list(c))
+      self.listbox.place(relx=0.00,rely=0.00,relwidth=0.4)
+
+      # On eneleve le label pour gagner de la place 
+      #self.label = Label(self.frame_choix,text="Valeur :")
+      #self.label.place(relx=0.05,rely=0.85)
+      self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base,x=0.28,y=0.55)
+      
+      # boutons Ajouter et Supprimer
+      bouton_add = Button(self.frame_fleches, image = images.get_image('arrow_left'),
+                          command = self.add_valeur_plusieurs_base)
+      bouton_sup = Button(self.frame_fleches, image = images.get_image('arrow_right'),
+                          command = self.sup_valeur_sans_into)
+      bouton_add.place(relx=0.2,rely=0.25)
+      bouton_sup.place(relx=0.2,rely=0.70)
+
+
+      # boutons Accepter et Annuler dans frame2
+      bouton_accepter = Button(self.frame2, text='Valider',
+                               command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
+      bouton_annuler = Button(self.frame2, text = 'Annuler',
+                              command = self.annule_modifs_valeur)
+      for but in (bouton_accepter,bouton_annuler):
+          but.pack(side='left',padx=5)
+
+      # création des objets dans les frames
+      liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
+                                 ("<Button-3>",self.deselectValeur),
+                                 ("<Double-Button-1>",self.sup_valeur_sans_into))
+      self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,
+                                      liste_commandes = liste_commandes_valeurs,
+                                      titre="Valeur(s) non-prédéfinies(s)",
+                                      fonte_titre=None
+                                      )
+
+      for fram in (self.frame1,self.frame2,self.frame_bas,self.frame_haut,self.frame_valeurs,
+                 self.frame_fleches,self.frame_choix):
+          fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide: s.parent.appli.affiche_aide(e,a))
+          fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+
+      self.Liste_valeurs.affiche_liste()
+      if len(l_valeurs) > 0 :
+          liste_marque=l_valeurs[-1]
+          self.Liste_valeurs.surligne(liste_marque)
+      
+  def get_aide(self):
+      """
+      Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
+      saisies par l'utilisateur
+      """
+      commentaire="Ce motclef accepte soit un nom de liste déja définie soit une liste manuelle de valeurs"
+      return commentaire
+
+  def get_aide2(self):
+      min,max = self.node.item.GetMinMax()
+      aideval=self.node.item.aide()
+      commentaire="min : " + str(min) + ", max : " + str(max)
+      aideval=commentaire + aideval
+      return aideval
+
+  def choose_valeur_from_list(self,command):
+      """
+      Affecte à valeur choisie la sélection courante dans la liste des choix proposés
+      Exécute command
+      """
+      self.Liste_valeurs.liste=[]
+      self.Liste_valeurs.affiche_liste()
+      if len(self.listbox.get()) == 0 : return
+      choix = self.listbox.getcurselection()[0]
+      d={}
+      d["valeurentree"]=choix
+      apply(command,(self,),d)
+     
+
+
+  def tri(self,liste_noms_sd):
+      a=(3+8j)
+      d_types = { 'TXM' : type('A'),
+                  'R'   : type(3.),
+                  'I'   : type(0),
+                  'C'   : type(a)}
+
+      # On enleve seulement ceux qu'on peut
+      # Sur certaines listes, il est possible qu'on ne 
+      # sache pas déterminer le type
+      listefinale=[]
+      typespossibles=self.node.item.object.definition.type
+      typecherche = None
+      for t in typespossibles:
+          if t in d_types.keys() :
+             typecherche = d_types[t]
+             break
+      for liste in liste_noms_sd:
+          valeur,validite=self.node.item.eval_valeur(liste)
+          for mc in valeur.etape.mc_liste :
+              try :
+                 if type(mc.valeur)  in (types.ListType,types.TupleType) :
+                    typeliste=type(mc.valeur[0])
+                 else :
+                    typeliste=type(mc.valeur)
+                 if type(mc.valeur[0]) == typecherche:
+                    listefinale.append(liste)
+              except:
+                 listefinale.append(liste)
+      return listefinale
+
diff --git a/InterfaceTK/plusieursintopanel.py b/InterfaceTK/plusieursintopanel.py
new file mode 100644 (file)
index 0000000..d5ef1e1
--- /dev/null
@@ -0,0 +1,163 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from Editeur.utils import substract_list
+
+# Import des panels
+from plusieurspanel import PLUSIEURS_Panel
+
+class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel):
+  """
+  Classe servant à définir le panneau permettant d'afficher et de saisir une
+  liste de valeurs à choisir parmi une liste discrètes de valeurs possibles
+  """
+  def makeValeurPage(self,page):
+      """
+      Génère la page de saisie de plusieurs valeurs parmi un ensemble discret
+      de possibles
+      """
+      self.ajout_valeurs = None
+      # On récupère la bulle d'aide du panneau, l'objet, min et max (cardinalité de la liste),
+      # la liste des choix et la liste des valeurs
+      aide = self.get_aide()
+      aide = justify_text(texte=aide)
+      bulle_aide=self.get_bulle_aide()
+      objet_mc = self.node.item.get_definition()
+      min,max = self.node.item.GetMinMax()
+      #l_choix=list(objet_mc.into)
+      l_valeurs = self.node.item.GetListeValeurs()
+      l_choix= self.node.item.get_liste_possible(l_valeurs)
+      # reinitialisation de l_valeurs
+      l_valeurs = self.node.item.GetListeValeurs()
+
+      # remplissage du panneau
+      self.frame_valeurs = Frame(page)
+      self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7)
+      self.frame_boutons_fleches = Frame(page)
+      self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7)
+      self.frame_choix = Frame(page)
+      self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7)
+      self.frame_boutons = Frame(page)
+      self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=1,relheight=0.1)
+      self.frame_aide = Frame(page)
+      self.frame_aide.place(relx=0.1,rely=0.75,relwidth=1,relheight=0.15)
+      liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
+                                 ("<Button-3>",self.deselectValeur),
+                                 ("<Double-Button-1>",self.sup_valeur))
+      liste_commandes_choix = (("<Button-1>",self.selectChoix),
+                               ("<Button-3>",self.deselectChoix),
+                               ("<Double-Button-1>",self.add_choix))
+      self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,
+                                      l_valeurs,liste_commandes = liste_commandes_valeurs,
+                                      titre="Valeur(s) actuelle(s)")
+      self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,
+                                    liste_commandes = liste_commandes_choix,
+                                    titre= "Valeurs possibles")
+      self.bouton_add = Button(self.frame_boutons_fleches,
+                          #text="<--",
+                          image = images.get_image('arrow_left'),
+                          command = self.add_choix)
+      self.bouton_sup = Button(self.frame_boutons_fleches,
+                          #text="-->",
+                          image = images.get_image('arrow_right'),
+                          command = self.sup_valeur)
+      self.bouton_accepter = Button(self.frame_boutons,
+                               text='Valider',
+                               command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
+      self.bouton_annuler = Button(self.frame_boutons,
+                              text = 'Annuler',
+                              command = self.annule_modifs_valeur)
+      self.bouton_add.place(relx=0.3,rely=0.35)
+      self.bouton_sup.place(relx=0.3,rely=0.65)
+      for but in (self.bouton_accepter,self.bouton_annuler):
+          but.pack(side='left',padx=3)
+      self.Liste_valeurs.affiche_liste()
+      if len(l_valeurs) > 0 :
+          liste_marque=l_valeurs[-1]
+          self.Liste_valeurs.surligne(liste_marque)
+          self.selectValeur(l_valeurs[-1])
+      self.Liste_choix.affiche_liste()
+      for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
+          fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+          fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+      self.frame_aide.update()
+      self.aide = Label(self.frame_aide,
+                        text = aide,
+                        justify='center',
+                        anchor='center')
+                        #wraplength=int(self.frame_aide.winfo_width()*0.8))
+      self.aide.place(relx=0.3,rely=0.5,anchor='center',relwidth=1)
+
+  def get_aide(self):
+      """
+      Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
+      que saisit l'utilisateur
+      """
+      commentaire=""
+      mc = self.node.item.get_definition()
+      d_aides = { 'TXM' : 'chaînes de caractères',
+                  'R'   : 'réels',
+                  'I'   : 'entiers',
+                  'C'   : 'complexes'}
+      type = mc.type[0]
+      if not d_aides.has_key(type) : 
+         if mc.min == mc.max:
+            return str(mc.min)+" valeur(s) est(sont) attendue(s)"
+         else :
+            return "entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs"
+      if mc.min == mc.max:
+            commentaire="Une liste de "+str(mc.min)+" "+d_aides[type]+" est attendue"
+      else :
+            commentaire="Entre "+str(mc.min)+" et "+str(mc.max)+" valeurs de type  "+d_aides[type]+" sont attendues"
+      aideval=self.node.item.aide()
+      commentaire=commentaire + "\n" + aideval
+      return commentaire
+
+  def get_bulle_aide(self):
+      """
+      Retourne la bulle d'aide du panneau (affichée par clic droit)
+      """
+      return """Un clic sur une valeur des deux listes la sélectionne.
+      - Un clic sur la flèche gauche stocke la valeur possible sélectionnée
+      dans la liste des valeurs que vous voulez affecter au mot-clé simple
+      - Un clic sur la flèche droite déstocke la valeur du mot-clé simple
+      sélectionnée (elle apparaît alors à nouveau comme choix possible
+      dans la liste des choix à droite)
+      - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées
+      au mot-clé simple courant
+      - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple
+      avant toute modification depuis le dernier 'Valider'"""
+
diff --git a/InterfaceTK/plusieurspanel.py b/InterfaceTK/plusieurspanel.py
new file mode 100644 (file)
index 0000000..0a21907
--- /dev/null
@@ -0,0 +1,177 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from Editeur.utils import substract_list
+
+# Import des panels
+from  newsimppanel import newSIMPPanel
+
+
+class PLUSIEURS_Panel(newSIMPPanel):
+  """
+  Classe virtuelle servant de classe mère à toutes celles définissant
+  un panneau pour un mot-clé simple qui attend une liste de valeurs
+  """
+  def accepte_modifs_valeur(self,min,max,liste=None):
+      """
+      Méthode qui récupère la liste des valeurs donnée par l'utilisateur
+      et l'affecte au mot-clé courant.
+      le parametre None n'est pas rempli sauf par l appel a partir de fonctionpanel
+      """
+      if liste==None:
+         l1_valeurs = self.Liste_valeurs.get_liste()
+      else:
+         l1_valeurs = liste
+
+      #nettoyage de la liste
+      l_valeurs=[]
+      for  val in l1_valeurs :
+        if val != '' and val != None :
+           l_valeurs.append(val)
+    
+      longueur = len(l_valeurs)
+      if longueur < min or longueur > max :
+          self.parent.appli.affiche_infos("Valeur refusée : nombre d'éléments incorrect dans la liste")
+          return
+      if longueur > 1:
+         valeur = tuple(l_valeurs)
+      elif longueur == 1:
+         valeur = l_valeurs[0]
+      else:
+         valeur = None
+
+      self.parent.appli.affiche_infos("Valeur acceptée")
+      self.record_valeur(valeur)
+      # fermeture de la fenêtre de sélection
+      if self.ajout_valeurs:
+          self.ajout_valeurs.quit()
+          
+  def annule_modifs_valeur(self):
+      """
+      RAZ de la liste des valeurs (annule toutes les valeurs saisies par l'utilisateur)
+      """
+      self.node.select()
+      # fermeture de la fenêtre de sélection
+      if self.ajout_valeurs:
+          self.ajout_valeurs.quit()
+          
+  def add_valeur_sans_into(self,name=None,encorevalide=1):
+      """
+      Tente d'ajouter la valeur fournie (name) à la liste courante :
+        - si la valeur est acceptable, elle est ajoutée dans la liste des valeurs
+        - sinon elle est refusée
+
+      encorevalide peut prendre les valeurs suivantes :
+
+                   - valeur 1 si le validateur trouve l item et la liste correctes
+                   - valeur 0 si le validateur trouve la valeur de l item incorrecte
+                   - valeur -1 si le validateur trouve la liste incorrecte
+      """
+      valeur = name
+      commentaire="Valeur incorrecte : ajout à la liste refusé"
+      testvalide=1
+
+      # Pas de traitement des valeurs nulles ( a priori clic involontaire
+      if (valeur == None or valeur =="") :
+          commentaire = "Pas de saisie des valeurs nulles"
+          encorevalide = -2 
+          testtype=0
+      else :
+          testtype,comment = self.node.item.object.verif_type(valeur)
+          if not testtype :
+               commentaire =comment
+               encorevalide=-2
+                
+      if (encorevalide ==0) :
+         commentaire=self.node.item.info_erreur_item()
+      if (encorevalide == -1) :
+         commentaire=self.node.item.info_erreur_liste()
+         # On traite le cas ou la liste n est pas valide pour un pb de cardinalite
+         min,max = self.node.item.GetMinMax()
+         if len(self.Liste_valeurs.get_liste()) >= max : 
+            commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
+
+      if testvalide and (encorevalide == 1):
+         min,max = self.node.item.GetMinMax()
+
+         if testtype :
+            liste_valeurs = self.Liste_valeurs.get_liste()
+            if len(liste_valeurs) >= max :
+                commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
+            else :
+               if (self.Liste_valeurs.selection != None):
+                   ligne=self.Liste_valeurs.cherche_selected_item()
+                   liste_valeurs.insert(ligne,valeur)
+               else :
+                   liste_valeurs.append(valeur)
+               try :
+                  self.set_valeur_texte(str(self.entry.get()))
+               except :
+                  pass
+               self.Liste_valeurs.put_liste(liste_valeurs)
+               self.erase_valeur()
+               commentaire="Nouvelle valeur acceptée"
+         else :
+            commentaire ="Type de la valeur incorrecte"
+
+      self.parent.appli.affiche_infos(commentaire)
+
+  def sup_valeur_sans_into(self,name=None):
+      """
+      Méthode qui sert à retirer de la liste des valeurs la valeur sélectionnée
+      """
+      try:
+          self.Liste_valeurs.remove_selected_item()
+          self.display_valeur(self.selected_valeur)
+          self.selected_valeur = None      
+      except:
+          # la valeur sélectionnée n'est pas dans la liste
+          return
+
+  def display_valeur(self,val=None):
+      """
+      Affiche la valeur passée en argument dans l'entry de saisie.
+      Par défaut affiche la valeur du mot-clé simple
+      """
+      if not val :
+          #valeur = self.node.item.getval()
+          valeur = self.node.item.object.getval()
+      else:
+          valeur = val
+      self.entry.delete(0,END)
+      if not valeur : return
+      self.entry.insert(0,str(valeur))
+      
diff --git a/InterfaceTK/readercata.py b/InterfaceTK/readercata.py
new file mode 100644 (file)
index 0000000..b4d827e
--- /dev/null
@@ -0,0 +1,444 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce module sert à lire un catalogue et à construire
+    un objet CataItem pour Eficas.
+    Il s'appuie sur la classe READERCATA
+"""
+# Modules Python
+import time
+import os,sys,py_compile
+import traceback
+import cPickle
+import Pmw
+import re
+
+# Modules Eficas
+from Editeur import analyse_catalogue
+from Editeur import autre_analyse_cata
+from Editeur import uiinfo
+from Noyau.N_CR import CR
+from widgets import showinfo,showerror
+from widgets import Fenetre
+import fontes
+
+from Editeur.utils import init_rep_cata_dev
+
+
+class READERCATA:
+
+   menu_defs=[
+              ('Catalogue',[
+                           ("Rapport de validation catalogue",'visuCRCATA'),
+                         ]
+              )
+             ]
+
+   button_defs=[]
+
+   def __init__(self,appli,parent):
+      self.appli=appli
+      self.parent=parent
+      self.code=self.appli.code
+      self.appli.format_fichier.set('python')
+      self.version_code=self.appli.version_code
+      self.fic_cata=None
+      self.version_cata=None
+      self.OpenCata()
+      self.cataitem=None
+
+   def OpenCata(self):
+      """ 
+          Ouvre le catalogue standard du code courant, cad le catalogue présent
+          dans le répertoire Cata 
+      """
+      if self.appli.ihm == "TK" :
+         import splash
+      message1 = "Compilation des fichiers Eficas \n\n Veuillez patienter ..."
+      if self.appli.test == 0 and self.appli.ihm=="TK" :
+         splash._splash.configure(text = message1)
+      self.configure_barre(4)
+
+      liste_cata_possibles=[]
+      for catalogue in self.appli.CONFIGURATION.catalogues:
+          if catalogue[0] == self.code :
+             liste_cata_possibles.append(catalogue)
+
+      if len(liste_cata_possibles)==0:
+          showerror("Import du catalogue","Pas de catalogue defini pour le code %s" % self.code)
+          self.appli.quit()
+          sys.exit(1)
+
+      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.appli.format_fichier.set(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.appli.format_fichier.set(liste_cata_possibles[0][3])
+      else:
+          # plusieurs catalogues sont disponibles : il faut demander à l'utilisateur
+          # lequel il veut utiliser ...
+          self.ask_choix_catalogue()
+
+      if self.fic_cata == None :
+          print "Pas de catalogue pour code %s, version %s" %(self.code,self.version_code)
+          sys.exit(0)
+
+      # Determinination du repertoire materiau
+      v_codeSansPoint=self.version_code
+      v_codeSansPoint=re.sub("\.","",v_codeSansPoint)
+      chaine="rep_mat_"+v_codeSansPoint
+      if hasattr(self.appli.CONFIGURATION,chaine):
+          a=getattr(self.appli.CONFIGURATION,chaine)
+      else :
+          try :
+             a=self.appli.CONFIGURATION.dRepMat[self.version_code]
+          except :
+            if self.code == "ASTER" :
+                print "Probleme avec le repertoire materiau"
+             a='.'
+      self.appli.CONFIGURATION.rep_mat=a 
+
+      # détermination de fic_cata_c et fic_cata_p
+      self.fic_cata_c = self.fic_cata + 'c'
+      self.fic_cata_p = os.path.splitext(self.fic_cata)[0]+'_pickled.py'
+
+      # import du catalogue
+      if self.appli.test == 0 and self.appli.ihm=="TK" :
+         splash._splash.configure(text = "Debut import_cata: %d s" % time.clock())
+      self.cata = self.import_cata(self.fic_cata)
+      self.update_barre()
+      if self.appli.test == 0 and self.appli.ihm=="TK" :
+         splash._splash.configure(text = "Fin import_cata: %d s" % time.clock())
+      if not self.cata : 
+          showerror("Import du catalogue","Impossible d'importer le catalogue %s" %self.fic_cata)
+          self.appli.quit()
+          sys.exit(1)
+      #
+      # analyse du catalogue (ordre des mots-clés)
+      #
+      if self.appli.test == 0 and self.appli.ihm=="TK" :
+         splash._splash.configure(text = "Debut Retrouve_Ordre: %d s" % time.clock())
+      # Retrouve_Ordre_Cata_Standard fait une analyse textuelle du catalogue
+      # remplacé par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation
+      # des mots clés à la création
+      #self.Retrouve_Ordre_Cata_Standard()
+      self.Retrouve_Ordre_Cata_Standard_autre()
+      self.update_barre()
+      if self.appli.test == 0 and self.appli.ihm=="TK" :
+         splash._splash.configure(text = "Fin Retrouve_Ordre: %d s" % time.clock())
+      #
+      # analyse des données liées à l'IHM : UIinfo
+      #
+      uiinfo.traite_UIinfo(self.cata)
+      self.update_barre()
+
+      #
+      # traitement des clefs documentaires
+      #
+      self.traite_clefs_documentaires()
+
+      # chargement et analyse des catalogues développeur (le cas échéant)
+      #
+      if self.appli.CONFIGURATION.isdeveloppeur == 'OUI' :
+          init_rep_cata_dev(self.fic_cata,self.appli.CONFIGURATION.path_cata_dev)
+          fic_cata_dev = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py')
+          if os.path.isfile(fic_cata_dev):
+              # il y a bien un catalogue développeur : il faut récupérer le module_object associé ...
+              test = self.compile_cata(fic_cata_dev,fic_cata_dev+'c')
+              if not test :
+                  showinfo("Compilation catalogue développeur",
+                           "Erreur dans la compilation du catalogue développeur")
+                  self.cata = (self.cata,)
+              else:
+                  self.cata_dev =self.import_cata(fic_cata_dev)
+                  #self.Retrouve_Ordre_Cata_Developpeur()
+                  self.Retrouve_Ordre_Cata_Developpeur_autre()
+                  self.cata = (self.cata,self.cata_dev)
+          else:
+              self.cata = (self.cata,)
+      else:
+          self.cata = (self.cata,)
+      titreSuite=" avec le catalogue " + os.path.basename(self.fic_cata)
+      titre=self.appli.titre+titreSuite
+      if self.appli.top:
+        self.appli.top.title(titre)
+      self.appli.titre=titre
+
+       
+   def import_cata(self,cata):
+      """ 
+          Réalise l'import du catalogue dont le chemin d'accès est donné par cata
+      """
+      if self.appli.test == 0 and self.appli.ihm=="TK"  :
+         import splash
+         splash._splash.configure(text = "Chargement du catalogue")
+      nom_cata = os.path.splitext(os.path.basename(cata))[0]
+      rep_cata = os.path.dirname(cata)
+      sys.path[:0] = [rep_cata]
+      try :
+          o=__import__(nom_cata)
+          return o
+      except Exception,e:
+          traceback.print_exc()
+          return 0
+
+   def Retrouve_Ordre_Cata_Standard_autre(self):
+      """ 
+          Construit une structure de données dans le catalogue qui permet
+          à EFICAS de retrouver l'ordre des mots-clés dans le texte du catalogue.
+          Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui
+          contient le nom des mots clés dans le bon ordre
+      """ 
+      self.cata_ordonne_dico,self.appli.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata)
+
+   def Retrouve_Ordre_Cata_Standard(self):
+      """ 
+          Retrouve l'ordre des mots-clés dans le catalogue, cad :
+           - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer
+               l'ordre des mots-clés dans le catalogue
+           - s'il n'a pas été modifié, relie le fichier pickle 
+      """
+      time1 = os.path.getmtime(self.fic_cata)
+      try :
+          time2 = os.path.getmtime(self.fic_cata_p)
+      except:
+          time2 = 0
+      if time2 > time1 :
+          # l'objet catalogue n'a pas été modifié depuis le dernier "pickle"
+          self.Get_Ordre_Cata()
+      else :
+          # le catalogue a été modifié depuis le dernier "pickle" :
+          # il faut retrouver l'ordre du catalogue et refaire pickle
+          self.Get_Ordre_Cata(mode='cata')
+      self.appli.affiche_infos("Catalogue standard chargé")
+
+   def Retrouve_Ordre_Cata_Developpeur(self):
+      """ 
+          Retrouve l'ordre des mots-clés dans le catalogue, cad :
+          - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer
+            l'ordre des mots-clés dans le catalogue
+          - s'il n'a pas été modifié, relie le fichier pickle 
+      """
+      if self.code != 'ASTER' : return
+      fic_cata = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py')
+      message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev
+      if self.appli.test == 0 and self.appli.ihm=="TK" :
+         splash._splash.configure(text = message,barre='oui')
+      cata_dev_ordonne = analyse_cata.analyse_catalogue(self,self.fic_cata)
+      self.cata_dev_ordonne_cr = cata_dev_ordonne.cr
+      cata_dev_ordonne_dico = cata_dev_ordonne.entites
+      self.cata_ordonne_dico.update(cata_dev_ordonne_dico)
+      self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" )
+
+   def Retrouve_Ordre_Cata_Developpeur_autre(self):
+      """
+          Retrouve l'ordre des mots-clés dans le catalogue, cad :
+          - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer
+            l'ordre des mots-clés dans le catalogue
+          - s'il n'a pas été modifié, relie le fichier pickle
+      """
+      if self.code != 'ASTER' : return
+      message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev
+      if self.appli.test == 0  and self.appli.ihm=="TK":
+         splash._splash.configure(text = message,barre='oui')
+      cata_dev_ordonne_dico,self.appli.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata)
+      self.cata_ordonne_dico.update(cata_dev_ordonne_dico)
+      self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" )
+
+   def Get_Ordre_Cata(self,mode='pickle'):
+      """ 
+          Retrouve l'ordre du catalogue :
+            - mode='pickle ': tente de relire le fichier pickle et sinon lance l'analyse du catalogue
+            - mode='cata'   : force l'analyse du catalogue directement sans relire le pickle
+      """
+      if mode == 'pickle' :
+          try:
+              f = open(self.fic_cata_p)
+              u = cPickle.Unpickler(f)
+              if self.appli.test == 0 and self.appli.ihm=="TK" :
+                 splash._splash.configure(text = "Analyse du catalogue")
+              self.cata_ordonne_dico = u.load()
+              f.close()
+          except :
+              # on peut ne pas arriver à relire le fichier pickle s'il a été altéré
+              # ou (le plus probable) s'il a été créé sous un autre OS
+              self.Get_Ordre_Cata(mode='cata')
+      elif mode == 'cata':
+          if self.appli.test == 0 and self.appli.ihm=="TK" :
+              splash._splash.configure(text = "Analyse du catalogue",barre='oui')
+          cata_ordonne = analyse_catalogue.analyse_catalogue(self,self.fic_cata)
+          self.cata_ordonne_cr = cata_ordonne.cr
+          self.cata_ordonne_dico = cata_ordonne.entites
+          splash._splash.configure(text = "Sauvegarde des informations sur le catalogue")
+          f = open(self.fic_cata_p,'w+')
+          p = cPickle.Pickler(f)
+          p.dump(self.cata_ordonne_dico)
+          f.close()
+      else :
+          raise Exception("Appel à un mode inconnu de Get_Ordre_Cata : %s" % mode)
+          return
+
+   def ask_choix_catalogue(self):
+      """
+      Ouvre une fenêtre 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 = {}
+      defaut = None
+      for catalogue in self.appli.CONFIGURATION.catalogues:
+          if catalogue[0] == self.code :
+              self.dico_catalogues[catalogue[1]] = catalogue
+              if len(catalogue) == 5 :
+                  if catalogue[4]=='defaut' : defaut = catalogue[1]
+      liste_choix = self.dico_catalogues.keys()
+      liste_choix.sort()
+      # test si plusieurs catalogues ou non
+      if len(liste_choix) == 0:
+          showerror("Aucun catalogue déclaré pour %s" %self.code)
+          self.appli.quit()
+          sys.exit(1)
+      elif len(liste_choix) == 1:
+          self.fic_cata = self.dico_catalogues[liste_choix[0]][2]
+          self.version_code = liste_choix[0]
+          return
+      # création d'une boîte de dialogue modale
+      import splash
+      self.fenetre_choix_cata = Pmw.Dialog(splash._splash, #avec self.parent, ne marche pas sous Windows
+                                           buttons=('OK','ANNULER'),
+                                           defaultbutton = 'OK',
+                                           title = "Choix d'une version du code %s" %self.code,
+                                           command = self.chooseCata)
+      # construction des radioboutons
+      label = `len(liste_choix)`+' versions du code %s sont disponibles\n' %self.code
+      label = label + 'Veuillez choisir celle avec laquelle vous souhaitez travailler :'
+      self.radiobutton = Pmw.RadioSelect(self.fenetre_choix_cata.interior(),
+                                         buttontype='radiobutton',
+                                         labelpos = 'w',
+                                         label_text = label,
+                                         label_font =  fontes.standard,
+                                         orient='vertical')
+      for choix in liste_choix :
+          self.radiobutton.add(choix)
+      if defaut == None :
+          # aucun catalogue par défaut n'a été spécifié dans Accas/editeur.ini
+          defaut = liste_choix[0]
+      self.radiobutton.invoke(defaut)
+      self.radiobutton.pack(fill='x',padx=10,pady=10)
+      # centrage de la fenêtre
+      self.fenetre_choix_cata.activate(geometry='centerscreenalways')
+
+   def chooseCata(self,txt):
+      """ 
+          Méthode activée lorsque l'utilisateur a fait son choix et cliqué sur 'OK' ou sur 'ANNULER'
+      """
+      if txt == 'OK' :
+          version_cata = self.radiobutton.getcurselection()
+          self.fic_cata = self.dico_catalogues[version_cata][2]
+          self.version_code = version_cata
+          self.appli.format_fichier.set(self.dico_catalogues[version_cata][3])
+          self.fenetre_choix_cata.destroy()
+      else:
+          self.parent.destroy()
+
+   def compile_cata(self,cata,catac):
+      """ 
+           Teste si le catalogue a bien besoin d'être recompilé et si oui, le compile et
+           affiche un message dans le splash . Retourne 1 si la compilation s'est bien déroulée,
+           0 sinon.
+      """
+      time1 = os.path.getmtime(cata)
+      try:
+          time2 = os.path.getmtime(catac)
+      except:
+          time2 = 0
+      if time1 > time2:
+          try:
+              # le catalogue doit être recompilé avant d'être importé
+              if self.appli.test == 0 and self.appli.ihm=="TK" :
+                 splash._splash.configure(text="Compilation du catalogue\nCela peut prendre plusieurs secondes ...")
+              py_compile.compile(cata)
+          except:
+              return 0
+      return 1
+
+
+#--------------------------------------------------------------------------------
+# Méthodes concernant la barre de progression lors de l'analyse du catalogue
+#--------------------------------------------------------------------------------
+
+   def configure_barre(self,nbcommandes):
+      """ Configure la barre de progression en lui passant comme paramètre le
+          nombre de commandes du catalogue qui lui sert à déterminer la longueur de son incrément """
+      try:
+          if self.appli.test == 0 and self.appli.ihm=="TK" :
+             splash._splash.configure(barre='oui',ratio = nbcommandes)
+      except:
+          pass
+
+   def update_barre(self):
+      """ Update la position de la barre de progression : la fait progresser de son incrément """
+      try:
+          if self.appli.test == 0 and self.appli.ihm=="TK" :
+             splash._splash.update_barre()
+      except:
+          pass
+
+   def visuCRCATA(self):
+      """
+      Méthode permettant l'affichage du rapport de validation
+      """
+      cr = CR( debut = "Début rapport de validation du catalogue",
+               fin = "Fin rapport de validation du catalogue")
+      titre="rapport de validation du catalogue"
+      if hasattr(self,'cata_ordonne_cr') :
+          cr.add(self.cata_ordonne_cr)
+      if hasattr(self,'cata_dev_ordonne_cr') :
+          cr.add(self.cata_dev_ordonne_cr)
+      for cata in self.cata:
+          if hasattr(cata,'JdC'):
+              cr.add(cata.JdC.report())
+      texte_cr = str(cr)
+      self.visu_texte_cr = Fenetre(self.appli,titre=titre,texte=texte_cr)
+
+
+   def traite_clefs_documentaires(self):
+      try:
+        self.fic_cata_clef=os.path.splitext(self.fic_cata_c)[0]+'_clefs_docu'
+        f=open(self.fic_cata_clef)
+      except:
+        #print "Pas de fichier associé contenant des clefs documentaires"
+        return
+
+      dict_clef_docu={}
+      for l in f.readlines():
+          clef=l.split(':')[0]
+          docu=l.split(':')[1]
+          docu=docu[0:-1]
+          dict_clef_docu[clef]=docu
+      for oper in self.cata.JdC.commandes:
+           if dict_clef_docu.has_key(oper.nom):
+              oper.docu=dict_clef_docu[oper.nom]
diff --git a/InterfaceTK/shellpanel.py b/InterfaceTK/shellpanel.py
new file mode 100644 (file)
index 0000000..b768219
--- /dev/null
@@ -0,0 +1,96 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+#import prefs
+#import panels
+#import images
+#from widgets import ListeChoix
+#from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from Editeur.utils import substract_list
+from newsimppanel import newSIMPPanel
+
+
+class SHELLPanel(newSIMPPanel):
+  """
+  Classe Panel utilisé pour les mots-clés simples qui attendent un shell pour valeur
+  """
+
+  def makeValeurPage(self,page):
+      """ 
+      Affiche la page concernant l'objet pointé par self qui attend un shell
+      """
+      objet_mc = self.node.item.get_definition()
+      aide = self.gen_aide()
+      aide = justify_text(texte=aide)
+      self.frame = Frame(page)
+      self.frame.place(relx=0,rely=0,relwidth=1,relheight=1)
+      label_aide = Label(self.frame,text = aide)
+      label_aide.place(relx=0.5,rely=0.1,anchor='center')
+      self.text = Text(self.frame,bg='gray95')
+      self.text.place(relx=0.2,rely=0.2,relwidth=0.6,relheight=0.6)
+      but_val = Button(self.frame,text='Valider',command = self.valide_shell)
+      but_ann = Button(self.frame,text='Annuler',command = self.annule_shell)
+      but_val.place(relx=0.35,rely=0.9,anchor='center')
+      but_ann.place(relx=0.65,rely=0.9,anchor='center')
+      self.display_valeur()
+
+  def gen_aide(self):
+      """
+      Retourne une chaîne de caractères d'aide sur la valeur qu'attend l'objet
+      pointé par self
+      """
+      return "Un shell est attendu"
+    
+  def valide_shell(self,event=None):
+      """
+      Récupère la valeur saisie par l'utilisateur dans self.text
+      et la stocke dans l'objet MCSIMP courant
+      """
+      texte = self.text.get(1.0,END)
+      self.record_valeur(texte)
+
+  def annule_shell(self,event=None):
+      """
+      Annule toute saisie dans self.text
+      """
+      self.text.delete(0,END)
+
+  def display_valeur(self,val=None):
+      """
+      Affiche la valeur de l'objet pointé par self
+      """
+      if val != None :
+          valeur = val
+      else:
+          valeur = self.node.item.get_valeur()
+      if valeur == None  or valeur == '': return
+      self.text.insert(END,valeur)
+
diff --git a/InterfaceTK/splash.py b/InterfaceTK/splash.py
new file mode 100644 (file)
index 0000000..2918ddf
--- /dev/null
@@ -0,0 +1,150 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce module permet de créer, mettre à jour et détruire
+    un écran Splash
+"""
+from Tkinter import *
+
+from centerwindow import centerwindow
+from Tools.foztools.foztools import Slider
+import fontes
+import images
+
+_splash=None
+
+def init_splash(*pos,**args):
+   global _splash
+   _splash=SplashScreen(*pos,**args)
+
+def fini_splash():
+   global _splash
+   _splash.quit()
+   _splash=None
+
+class SplashScreen(Toplevel):
+    """ 
+        Provides a splash screen. Usage:
+        Subclass and override 'CreateWidgets()'
+        In constructor of main window/application call
+           - S = SplashScreen(main=self)        (if caller is Toplevel)
+           - S = SplashScreen(main=self.master) (if caller is Frame)
+           - S.quit()  after you are done creating your widgets etc.
+    """
+    def __init__(self, master=None,**args):
+        Toplevel.__init__(self, master, relief='groove',
+                          borderwidth=5)
+        self.main = master
+        if self.main != None :
+            self.main.iconify()
+        self.withdraw()
+        self.frame = Frame(self)
+        self.frame.pack(expand=1,fill='both')
+        self.init(args)
+        self.geometry("300x200")
+        self.resizable(0,0)
+        centerwindow(self)
+        self.CreateWidgets()
+        self.deiconify()
+
+    def init(self,args={}):
+        self.text = StringVar()
+        self.text.set('')
+        self.text2 = StringVar()
+        self.text2.set('')
+        self.icone = 'logo_edf.gif'
+        self.barre = 'non'
+        if args == {} : return
+        if args.has_key('text'):
+            self.text.set(args['text'])
+        if args.has_key('info'):
+            self.text2.set(args['info'])
+        if args.has_key('titre'):
+            self.title(args['titre'])
+        if args.has_key('code'):
+            self.code = args['code']
+        else:
+            self.code = 'inconnu'
+        if args.has_key('icone'):
+            self.icone = args['icone']
+        if self.code == 'ASTER' :
+            self.icone = 'code_aster.gif'
+        elif self.code == 'SATURNE':
+            self.icone = 'code_saturne.gif'
+        elif self.code == 'DESCARTES':
+            self.icone = 'code_descartes.gif'
+
+    def CreateWidgets(self):
+        self.catIcon = images.get_image(self.icone)
+        self.label = Label(self.frame, image=self.catIcon)
+        self.label.pack(side=TOP)
+        self.label = Label(self.frame, textvariable=self.text,font = fontes.standard_gras)
+        self.label.pack(side=TOP,expand=1,fill='both')
+        self.label2 = Label(self.frame, textvariable=self.text2,font = fontes.standard_italique)
+        self.label2.pack(side=TOP,expand=1,fill='both')
+        self.progress = Slider(self.frame,value=0,max=100,orientation='horizontal',
+                               fillColor='#00008b',width=200,height=30,
+                               background='white',labelColor='red')
+        centerwindow(self)
+
+    def update_barre(self,event=None):
+        """ Permet de faire avancer la barre de progression """
+        try:
+            self.progress.value = self.progress.value+self.increment
+            self.progress.update()
+        except:
+            pass
+
+    def configure_barre(self):
+        """ 
+             Calcule l'incrément de progression de la barre en fonction
+             du nombre d'opérations à effectuer afin que le compteur
+             soit à 100% à la fin des opérations
+        """
+        self.increment = 100./self.ratio
+        self.progress.update()
+
+    def configure(self,**args):
+        if args.has_key('text'):
+            self.text.set(args['text'])
+        if args.has_key('info'):
+            self.text2.set(args['info'])
+        if args.has_key('titre'):
+            self.title(args['titre'])
+        if args.has_key('barre'):
+            old = self.barre
+            self.barre = args['barre']
+            if self.barre == 'oui' and old == 'non':
+                self.progress.frame.pack(in_=self.frame,side='top')
+            elif self.barre == 'non' and old == 'oui':
+                self.progress.frame.pack_forget()
+        if args.has_key('ratio'):
+            self.ratio = args['ratio']
+            self.configure_barre()
+        self.update()
+
+    def quit(self):
+        self.progress = None
+        self.destroy()
+        if self.main:
+           centerwindow(self.main,parent='sans')
+           self.main.deiconify()
+
diff --git a/InterfaceTK/statusbar.py b/InterfaceTK/statusbar.py
new file mode 100644 (file)
index 0000000..e3b809b
--- /dev/null
@@ -0,0 +1,52 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+"""
+# Modules Python
+import Tkinter
+import types
+
+class STATUSBAR:
+   def __init__(self,parent,police):
+      self.parent=parent
+      self.police=police
+      self.frame = Tkinter.Frame(parent,bd=1, relief=Tkinter.RAISED)
+      self.frame.pack(side=Tkinter.BOTTOM, fill=Tkinter.X)
+      self.label = Tkinter.Label (self.frame,
+                                        fg='black',
+                                        text='',
+                                        justify='left',
+                                        relief='sunken',
+                                        height=3,
+                                        bg='gray95')
+      self.label.pack(side='left',expand=1,fill='both')
+
+   def affiche_infos(self,texte):
+      if len(texte)>150 :
+          texte_infos=texte[0:150]
+      else :
+          texte_infos=texte
+      self.label.configure(text=texte_infos,font=self.police)
+
+   def reset_affichage_infos(self):
+      """ Efface tout message présent dans le panneau en bas d'EFICAS """
+      self.affiche_infos('')
+
diff --git a/InterfaceTK/styles.py b/InterfaceTK/styles.py
new file mode 100644 (file)
index 0000000..2d5fc4a
--- /dev/null
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+import os
+import prefs
+import basestyle
+from basestyle import STYLE,style
+
+inistylefile=os.path.join(prefs.REPINI,"style.py")
+if os.path.isfile(inistylefile):
+   execfile(inistylefile)
+
+userstylefile=os.path.expanduser("~/Eficas_install/style.py")
+if os.path.isfile(userstylefile):
+   execfile(userstylefile)
+
+import fontes
+for attr in dir(style):
+   if attr[0]=='_':continue
+   if not hasattr(fontes,attr):continue
+   setattr(fontes,attr,getattr(style,attr))
+
+
diff --git a/InterfaceTK/toolbar.py b/InterfaceTK/toolbar.py
new file mode 100644 (file)
index 0000000..74248a0
--- /dev/null
@@ -0,0 +1,145 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+"""
+# Modules Python
+import string
+from Tkinter import *
+import Pmw
+
+# Modules Eficas
+import images
+
+class TOOLBAR:
+  def __init__(self,appli,parent):
+      # parent représente l'objet graphique parent
+      self.parent=parent
+      # appli représente l'objet application parent
+      self.appli=appli
+      self.balloon = None
+      self.l_boutons_a_activer = []
+      self.barreboutons=Frame(self.parent,relief='ridge',bd=2)
+      self.barreboutons.pack(anchor='nw',expand=0,fill=X)
+      # bouton Infos à l'extrême droite de la barre des boutons
+      b = Button(self.barreboutons,
+                 image = images.get_image('About24'),
+                 command = self.view_infos)
+      b.pack(side='right')
+      texte = "Infos EFICAS"
+      b.bind("<Enter>",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t,pos='right'))
+      b.bind("<Leave>", self.efface_balloon)
+
+  def appelle_commande(self,e,b,c):
+      try :
+         c()
+      except :
+         pass
+
+  def inactive_boutons(self):
+      """
+      Inactive les boutons de la liste self.l_boutons_a_activer
+      --> cette méthode est appelée dès qu'il n'y a pas de JDC courant
+      """
+      for but in self.l_boutons_a_activer:
+          but.configure(state='disabled')
+
+  def active_boutons(self):
+      """
+      Active les boutons de la liste self.l_boutons_a_activer
+      --> cette méthode est appelée dès qu'il y a un JDC courant
+      """
+      for but in self.l_boutons_a_activer:
+          but.configure(state='normal')
+
+  def affiche_balloon(self,event,bouton,bulle,pos='left'):
+      """
+      Affiche le balloon bulle associé au bouton bouton
+      """
+      etat = bouton.cget('state')
+      if etat != 'normal' : return
+      geom = bouton.winfo_geometry()
+      l_args = string.split(geom,'+')
+      x = eval(l_args[1])+event.x+10
+      self.balloon = Label(self.parent,
+                           text = bulle,
+                           background="yellow",
+                           borderwidth=2,
+                           relief='ridge')
+      if pos == 'left':
+          self.balloon.place(in_=self.parent,x=x,y=32)
+      else:
+          self.balloon.place(in_=self.parent,x=x,y=32,anchor='ne')
+
+  def efface_balloon(self,event=None):
+      """
+      Efface le balloon courant
+      """
+      if self.balloon :
+          self.balloon.destroy()
+          self.balloon = None
+
+  def view_infos(self):
+      """
+      Permet d'afficher des infos sur la session courante d'EFICAS
+      """
+      self.fen_infos = Pmw.Dialog(self.parent,
+                                  title = 'Informations session EFICAS',
+                                  buttons = ('Fermer',),
+                                  command = self.close_infos)
+      self.fen_infos.withdraw()
+      texte_infos = self.appli.get_texte_infos()
+      Label(self.fen_infos.interior(),
+            text = texte_infos,
+            anchor='center').pack(side='top',anchor='center')
+      self.fen_infos.activate(geometry = 'centerscreenalways')
+
+  def close_infos(self,lbl):
+      """
+      Ferme la fenêtre des infos
+      """
+      self.fen_infos.destroy()
+
+  def creer_boutons_appli_composant(self,l_boutons,appli_composant):
+      for bouton in l_boutons :
+          if not bouton :
+              # on veut afficher un bouton vide (=espace entre boutons)
+              Button(self.barreboutons,
+                     image = images.get_image('Sep'),
+                     state='disabled',
+                     relief = 'flat').pack(side='left')
+              continue
+          nom_fic,commande,texte,statut = bouton
+          commande=getattr(appli_composant,commande)
+          b = Button(self.barreboutons,
+                     image = images.get_image(nom_fic),
+                     command = commande,
+                     relief='flat')
+          b.pack(side='left')
+          b.bind("<Enter>",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t))
+          b.bind("<Leave>", self.efface_balloon)
+          b.bind("<Return>", lambda e,s=self,but=b,c=commande:s.appelle_commande(e,but,c))
+          if statut != 'always':
+              self.l_boutons_a_activer.append(b)
+
+      # inactive les boutons qui doivent l'être tant qu'aucun JDC courant
+      self.inactive_boutons()
+
+
diff --git a/InterfaceTK/tooltip.py b/InterfaceTK/tooltip.py
new file mode 100644 (file)
index 0000000..18fbabb
--- /dev/null
@@ -0,0 +1,127 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce module propose la classe TOOLTIP pour
+    mettre en oeuvre les bulles d'aide
+"""
+
+import Tkinter
+import types
+
+def destruct(obj):
+    # assist in breaking circular references
+    if obj is not None:
+        assert type(obj) is types.InstanceType
+        for k in obj.__dict__.keys():
+            obj.__dict__[k] = None
+            ##del obj.__dict__[k]
+
+def after(widget, ms, func, *args):
+    timer = apply(widget.after, (ms, func) + args)
+    command = widget._tclCommands[-1]
+    return (timer, command, widget)
+
+def after_cancel(t):
+    if t is not None:
+        t[2].after_cancel(t[0])
+        try:
+            t[2].deletecommand(t[1])
+        except Tkinter.TclError:
+            pass
+
+class TOOLTIP:
+    def __init__(self,widget,text=None):
+        self.widget=widget
+        self.text = text
+        self.timer = None
+        self.tooltip = None
+        self.label = None
+        self.bindings = []
+        self.bindings.append(self.widget.bind("<Enter>", self._enter))
+        self.bindings.append(self.widget.bind("<Leave>", self._leave))
+        self.bindings.append(self.widget.bind("<ButtonPress>", self._leave))
+        # user overrideable settings
+        self.time = 1000                    # milliseconds
+        self.relief = Tkinter.SOLID
+        self.justify = Tkinter.LEFT
+        self.fg = "#000000"
+        self.bg = "#ffffe0"
+        self.xoffset = 20
+        self.yoffset = 1
+
+    def setText(self, text):
+        self.text = text
+
+    def _unbind(self):
+        if self.bindings and self.widget:
+            self.widget.unbind("<Enter>", self.bindings[0])
+            self.widget.unbind("<Leave>", self.bindings[1])
+            self.widget.unbind("<ButtonPress>", self.bindings[2])
+            self.bindings = []
+
+    def destroy(self):
+        self._unbind()
+        self._leave()
+
+    def _enter(self, *event):
+        after_cancel(self.timer)
+        self.timer = after(self.widget, self.time, self._showTip)
+
+    def _leave(self, *event):
+        after_cancel(self.timer)
+        self.timer = None
+        if self.tooltip:
+            self.label.destroy()
+            destruct(self.label)
+            self.label = None
+            self.tooltip.destroy()
+            destruct(self.tooltip)
+            self.tooltip = None
+
+    def _showTip(self):
+        if self.tooltip or not self.text:
+            return
+        c = self.widget.__class__
+        if c in (Tkinter.Button,):
+            if self.widget["state"] == Tkinter.DISABLED:
+                return
+        x = self.widget.winfo_rootx()
+        y = self.widget.winfo_rooty() + self.widget.winfo_height()
+        x = x + self.xoffset
+        y = y + self.yoffset
+        self.tooltip = Tkinter.Toplevel()
+        self.tooltip.wm_iconify()
+        self.tooltip.wm_overrideredirect(1)
+        self.tooltip.wm_protocol("WM_DELETE_WINDOW", self.destroy)
+        self.label = Tkinter.Label(self.tooltip, text=self.text,
+                         relief=self.relief, justify=self.justify,
+                         fg=self.fg, bg=self.bg, bd=1, takefocus=0)
+        self.label.pack(ipadx=1, ipady=1)
+        self.tooltip.wm_geometry("%+d%+d" % (x, y))
+        self.tooltip.wm_deiconify()
+
+if __name__ == "__main__":
+   root=Tkinter.Tk()
+   label = Tkinter.Label(root, text="coucou")
+   label.pack()
+   tp=TOOLTIP(label,"texte d'aide")
+   root.mainloop()
+
diff --git a/InterfaceTK/treeitemincanvas.py b/InterfaceTK/treeitemincanvas.py
new file mode 100644 (file)
index 0000000..db38e98
--- /dev/null
@@ -0,0 +1,73 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+"""
+# Modules Python
+import Tkinter,Pmw
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import treewidget
+Objecttreeitem.TreeItem.itemNode=treewidget.Node
+
+class TREEITEMINCANVAS:
+   def __init__(self,object,nom="",parent=None,appli=None,sel=None,rmenu=None):
+      self.object=object
+      self.nom=nom
+
+      if not appli:
+         class Appli:
+            def affiche_infos(self,message):
+               pass
+         appli=Appli()
+      self.appli=appli
+
+      if not parent:
+         parent=Tkinter.Tk()
+         Pmw.initialise(parent)
+      self.parent=parent
+
+      self.item=Objecttreeitem.make_objecttreeitem(self.appli,self.nom,self.object)
+      self.canvas=Pmw.ScrolledCanvas(self.parent,borderframe=1,canvas_background='gray95')
+      self.canvas.pack(padx=10,pady=10,fill = 'both', expand = 1)
+      if not sel:
+         def sel(event=None):
+            return
+      self.tree=treewidget.Tree(self.appli,self.item,self.canvas,command=sel,rmenu=rmenu)
+      self.tree.draw()
+
+   def mainloop(self):
+      self.parent.mainloop()
+
+   def update(self):
+      """Cette methode est utilisee pour signaler une mise a jour des objets associes"""
+      self.tree.update()
+
+   def supprime(self):
+      #print "supprime",self
+      self.tree.supprime()
+      self.tree=None
+      self.canvas.destroy()
+      self.canvas=None
+
+   #def __del__(self):
+   #   print "__del__",self
+
diff --git a/InterfaceTK/treewidget.py b/InterfaceTK/treewidget.py
new file mode 100644 (file)
index 0000000..9768ada
--- /dev/null
@@ -0,0 +1,948 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+import os,sys,string,re,types,traceback
+from Tkinter import *
+
+
+import fontes
+import images
+from Ihm import CONNECTOR
+
+#
+__version__="$Name: V1_14 $"
+__Id__="$Id: treewidget.py,v 1.1.4.4.4.1 2008-10-10 13:47:11 pnoyret Exp $"
+#
+
+Fonte_Standard = fontes.standard
+
+class Tree :
+    def __init__(self,appli,jdc_item,scrolledcanvas,command = None,rmenu=None):
+        self.item = jdc_item
+        self.scrolledcanvas = scrolledcanvas
+        self.canvas = self.scrolledcanvas.component('canvas')
+        #resolution
+        resolution= self.canvas.winfo_screenwidth()/(self.canvas.winfo_screenmmwidth()/25.4*72)
+        self.DDY=max(20,resolution*(Fonte_Standard[1]+4))
+        self.id_up=self.canvas.bind("<F11>", self.page_up)
+        self.id_down=self.canvas.bind("<F12>", self.page_down)
+        self.id_um=self.canvas.bind("<Key-Left>", self.mot_up)
+        self.id_dm=self.canvas.bind("<Key-Right>", self.mot_down)
+        self.id_s=self.canvas.bind("<1>", self.canvas_select)             
+        self.tree = self
+        self.command = command
+        self.rmenu=rmenu
+        self.appli = appli
+        self.parent = None
+        self.racine = self
+        self.node_selected = None
+        self.build_children()
+
+    def canvas_select(self,event):
+        self.canvas.focus_set()
+
+    def page_up(self,event):
+        event.widget.yview_scroll(-1, "page")
+
+    def page_down(self,event):
+        event.widget.yview_scroll(1, "page")
+   
+    def unit_up(self,event):
+        event.widget.yview_scroll(-1, "unit")
+
+    def unit_down(self,event):
+        event.widget.yview_scroll(1, "unit")              
+
+    def mot_down(self,event):
+        self.select_next(None)
+        self.canvas.focus_set()
+
+    def mot_down_force(self):
+        self.select_next(None)
+        self.canvas.focus_set()
+
+    def mot_up(self,event):
+        self.node_selected.select_mot_previous()
+        self.canvas.focus_set()
+
+    def mot_up_force(self):
+        self.node_selected.select_mot_prev()
+        self.canvas.focus_set()
+
+    def deplieReplieNode(self):
+        self.node_selected.deplieReplieNode()
+
+    def build_children(self):
+        """ Construit la liste des enfants de self """
+        self.children = []
+        child = self.item.itemNode(self,self.item,self.command,self.rmenu)
+        self.children.append(child)
+        child.state='expanded'
+
+    def draw(self):
+        """ Dessine l'arbre """
+        lasty = 8
+        x = 5
+        for child in self.children:
+            child.draw(x,lasty)
+            lasty = child.lasty + 15
+        self.children[0].select()
+        self.resizescrollregion()
+
+    def deselectall(self):
+        """ déselectionne tous les éléments de l'arbre """
+        if self.node_selected :
+            self.node_selected.deselect()
+            
+    def update(self):
+        """ Update tous les éléments de l'arbre """
+        for child in self.children:
+            child.update()
+
+    def supprime(self):
+        """ supprime tous les éléments de l'arbre """
+        #print "supprime",self
+        self.canvas.unbind("<F11>",self.id_up)
+        self.canvas.unbind("<F12>",self.id_down)
+        self.canvas.unbind("<Key-Left>",self.id_um)
+        self.canvas.unbind("<Key-Right>",self.id_dm)
+        self.canvas.unbind("<1>",self.id_s)             
+        self.tree = None
+        self.racine = None
+        self.node_selected = None
+        self.item = None
+        self.scrolledcanvas = None
+        self.canvas = None
+        self.command = None
+        self.rmenu=None
+        for child in self.children:
+            child.supprime()
+        self.children=[]
+
+    def update_valid(self) :
+        """Cette methode a pour but de mettre a jour la validite du noeud
+           et de propager la demande de mise à jour à son parent
+        """
+        pass
+
+    def resizescrollregion(self):
+        x0,y0,x1,y1=self.canvas.bbox(ALL)
+        # On ajoute une marge approximativement de la moitié du canvas
+        y1=y1+self.canvas.winfo_height()/2
+        self.canvas.configure(scrollregion = (x0,y0,x1,y1))
+
+    def select_next(self,event):
+        self.node_selected.select_next()
+        self.canvas.focus_set()
+
+    def select_previous(self,event):
+        self.node_selected.select_previous()
+
+    def see(self,items):
+        x1, y1, x2, y2=apply(self.canvas.bbox, items)
+        while x2 > self.canvas.canvasx(0)+self.canvas.winfo_width():
+            old=self.canvas.canvasx(0)
+            self.canvas.xview_scroll( 1, 'units')
+            # avoid endless loop if we can't scroll
+            if old == self.canvas.canvasx(0):
+                break
+        while y2 > self.canvas.canvasy(0)+self.canvas.winfo_height():
+            old=self.canvas.canvasy(0)
+            self.canvas.yview_scroll( 1, 'units')
+            if old == self.canvas.canvasy(0):
+                break
+        # done in this order to ensure upper-left of object is visible
+        while x1 < self.canvas.canvasx(0):
+            old=self.canvas.canvasx(0)
+            self.canvas.xview_scroll( -1, 'units')
+            if old == self.canvas.canvasx(0):
+                break
+        while y1 < self.canvas.canvasy(0):
+            old=self.canvas.canvasy(0)
+            self.canvas.yview_scroll( -1, 'units')
+            if old == self.canvas.canvasy(0):
+                break
+
+    #def __del__(self):
+    #   print "__del__",self
+
+class Node :
+    def __init__(self,parent,item,command=None,rmenu=None):
+        self.parent = parent
+        self.item = item
+        self.connect()
+        self.command = command
+        self.rmenu=rmenu
+        self.tree = self.parent.tree
+        self.appli = self.parent.appli
+        self.canvas = self.parent.canvas
+        self.init()
+
+    def init(self):
+        self.state='collapsed'
+        self.displayed = 0
+        self.selected = 0
+        self.x = self.y  =None
+        self.lasty = 0
+        self.children = None
+        self.id = []
+        if self.parent is self.tree:
+           self.racine=self
+        else:
+           self.racine = self.parent.racine
+           
+    def connect(self):
+        self.item.connect("add",self.onAdd,())
+        self.item.connect("supp",self.onSupp,())
+        self.item.connect("valid",self.onValid,())
+
+    #def __del__(self):
+    #    print "__del__",self
+
+    def force_select(self):
+        if self.selected:
+           # le noeud est selectionné. On force la reconstruction du panel associé
+           if self.command:apply(self.command,(None,))
+           self.select()
+
+    def onValid(self):
+        #print "onValid : l'item a changé de validité ",self.item,self.item.object,self.item.object.isvalid()
+        self.update_node_valid()
+        self.update_node_label()
+        self.update_node_texte()
+        if self.selected and self.command:
+           self.command(self)
+
+    def onAdd(self,objet):
+        #print "onAdd : un objet a été ajouté aux fils de l'item ",self.item.object,objet
+        self.expand_node()
+        old_nodes=self.children
+        self.update_nodes()
+        self.redraw_children(old_nodes)
+        self.force_select()
+
+    def onSupp(self,objet):
+        #print "onSupp : un objet a été supprimé des fils de l'item ",self.item.object,objet
+        self.expand_node()
+        old_nodes=self.children
+        self.update_nodes()
+        self.redraw_children(old_nodes)
+        self.force_select()
+
+    def update_nodes(self):
+        #print "update_nodes",self
+        newnodes=[]
+        inodes=iter(self.children)
+        sublist=self.item._GetSubList()
+        iliste=iter(sublist)
+
+        while(1):
+           old_item=item=None
+           for node in inodes:
+              old_item=node.item
+              if old_item in sublist:break
+              #print "item supprime",old_item
+           for item in iliste:
+              if item is old_item:break
+              #print "item ajoute",item
+              child = item.itemNode(self,item,self.command,self.rmenu)
+              newnodes.append(child)
+
+           if old_item is None and item is None:break
+           if old_item is item:
+              #print "item conserve",item
+              newnodes.append(node)
+
+        self.children=newnodes
+        self.connect()
+
+    def supprime(self):
+        #print "supprime",self
+        self.efface_node()
+        self.racine = None
+        self.command = None
+        self.rmenu=None
+        if not self.children : return
+        for child in self.children:
+            child.supprime()
+        self.children=None
+
+    def redraw_children(self,old_nodes):
+        #print "redraw_children",old_nodes
+        #print self.children
+        y = self.y + self.tree.DDY
+        x = self.x + 15
+        supp_nodes=[]
+
+        inodes=iter(old_nodes)
+        iliste=iter(self.children)
+        # on parcourt la liste des anciens noeuds (node)
+        # et la liste des nouveaux noeuds (new_node) en parallele (iterateurs)
+
+        while(1):
+           new_node=node=None
+           for node in inodes:
+              #print "ancien noeud",node
+              if node in self.children:break # ancien noeud toujours present
+              #print "noeud supprime",node,node.item.GetLabelText()[0]
+              dy=node.y-node.lasty -self.tree.DDY
+              #print "deplacer noeuds",y,dy
+              node.move_nodes(y,dy)
+              node.supprime()
+              #supp_nodes.append(node)
+
+           for new_node in iliste:
+              #print "nouveau noeud",new_node
+              if new_node in old_nodes: break # nouveau noeud deja present
+              #print "noeud ajoute",new_node,new_node.item.GetLabelText()[0]
+              y=self.draw_node(new_node,x,y)
+
+           if node is None and new_node is None : break
+
+           if node is new_node: # ancien noeud
+              #print "noeud conserve",node
+              node.update_node_label()
+              y=y+node.lasty-node.y +self.tree.DDY
+
+        self.racine.update_coords()
+        self.canvas.delete('line')
+        self.racine.trace_ligne()
+        self.tree.resizescrollregion()
+        # Mettre à 1 pour verifier les cycles entre objets node
+        #withCyclops=0
+        #if withCyclops:
+           #from Misc import Cyclops
+           #z = Cyclops.CycleFinder()
+           #print supp_nodes
+           #for o in supp_nodes:
+             #z.register(o)
+           #del supp_nodes
+           #del o
+           #z.find_cycles()
+           #z.show_stats()
+           #z.show_cycles()
+
+    def tag_move_nodes(self,y):
+        """ Marque pour deplacement tous les noeuds au dela de l'ordonnée y """
+        #print "tag_move_nodes",y
+        self.canvas.dtag(ALL,'move')
+        # on marque tous les ids au dela de y
+        x0, y0, x1, y1 = self.canvas.bbox(ALL)
+        if y > y1: # pas d'objet a deplacer
+           return
+        self.canvas.addtag_overlapping('move',x0,y,x1,y1)
+
+    def move_nodes(self,y,dy):
+        """ Déplace de l'incrément dy les noeuds au dela de l'ordonnée y """
+        #print "move_nodes",y,dy
+        self.tag_move_nodes(y)
+        # on déplace tous les items de dy
+        self.canvas.move('move',0,dy)
+
+    def draw_node(self,new_node,x,y):
+        """ Dessine le noeud new_node en x,y en deplacant les noeuds existants
+            en y et au dela
+            Retourne la position du premier des noeuds deplaces
+        """
+        #print "draw_node",new_node,x,y
+        self.tag_move_nodes(y)
+        #if new_node.item.isactif():
+           #new_node.state = 'expanded'
+        new_node.state = 'expanded'
+        new_node.draw(x,y)
+        dy=(new_node.get_nb_children()+1)*self.tree.DDY
+        #print "deplacer noeuds",y,dy
+        self.canvas.move('move',0,dy)
+        return new_node.lasty+self.tree.DDY
+
+    def build_children(self):
+        """ Construit la liste des enfants de self """
+        self.children = []
+        sublist = self.item._GetSubList()
+        if not sublist : return
+        for item in sublist :
+            child = item.itemNode(self,item,self.command,self.rmenu)
+            self.children.append(child)
+            
+    #-----------------------------------------------
+    # Méthodes de sélection/déselection d'un noeud
+    #-----------------------------------------------
+    
+    def select(self, event=None):
+        """
+        Rend le noeud courant (self) sélectionné et déselectionne
+        tous les autres
+        """
+        #print "SELECT",self
+        if not self.children : self.build_children()
+        self.tree.deselectall()
+        self.selected = 1
+        self.tree.node_selected = self
+        if self.command:apply(self.command,(self,))
+        self.highlight()
+        self.make_visible()
+
+    def deselect(self, event=None):
+        """ Déselectionne self """
+        self.selected = 0
+        if self.displayed == 1 : self.dehighlight()
+            
+    def make_visible(self):
+        """ Rend l'objet self visible cad déplace le scroll pour que self 
+            soit dans la fenêtre de visu
+        """
+        lchild=self.last_child()
+        self.tree.see((self.image_id,lchild.image_id))
+        
+    def select_next(self,ind=0):
+        """ on doit chercher à sélectionner dans l'ordre:
+            - son premier fils s'il est affiché
+            - son frère cadet s'il existe
+            - son oncle (benjamin de son père)
+            - ... appel récursif ...
+        """
+        if self.state=='expanded' and len(self.children) > ind:
+            self.children[ind].select()
+        else :
+            index = self.parent.children.index(self) + 1
+            try :
+              if isinstance(self.parent,TREE) :
+                try:
+                    self.children[ind].select()
+                except:
+                    self.children[0].select()
+            except :
+              if self.parent is self.tree:
+                pass
+              else :
+                self.parent.select_next(index)
+
+    def select_mot_prev(self):
+        index = self.parent.children.index(self) - 1
+        try :
+           if index > -1  :
+              self.parent.children[index].select()
+              if self.parent.children[index].state=="expanded":
+                 print len(self.parent.children[index].children)
+                 if len(self.parent.children[index].children)!=0 :
+                    max=len(self.parent.children[index].children) - 1
+                    self.parent.children[index].children[max].select()
+                 else :
+                    self.parent.children[index].select()
+              else :
+                 self.parent.children[index].select()
+           elif self.parent is self.tree:
+              pass
+           else :
+              self.parent.select()
+        except:
+            if self.parent is self.tree:
+               pass
+            else :
+               self.parent.select_previous()
+
+        
+    def select_mot_previous(self):
+        index = self.parent.children.index(self) - 1
+        try :
+            if index > -1  :
+               self.parent.children[index].select()
+            elif self.parent is self.tree:
+               pass
+            else :
+               self.parent.select()
+        except:
+            if self.parent is self.tree:
+               pass
+            else :
+               self.parent.select_previous()
+
+    def select_previous(self):
+        """ on doit d'abord sélectionner(dans l'ordre) :
+             - son frère aîné
+             - son père
+        """
+        index = self.parent.children.index(self) - 1
+        try :
+            self.parent.children[index].select()
+        except:
+            #self.parent.select()
+            if self.parent is self.tree:
+               pass
+            else :
+               self.parent.select_previous()
+
+    def popup(self,event=None):
+        """
+            Declenche le traitement associé au clic droit de la souris
+            sur l'icone du Node
+        """
+        if not self.rmenu:return
+        apply(self.rmenu,(self,event))
+
+    #-----------------------------------------------
+    # Méthodes de recherche d'informations
+    #-----------------------------------------------
+    def geticonimage(self,name=None):
+        """
+        Retourne l'image qui doit être associée à self
+        """
+        if not name :
+            name = self.item.GetIconName()
+        if not name or name == 'aucune' :
+            return None
+        return images.get_image(name)
+
+    def get_nb_children(self):
+        """ Retourne le nombre d'enfants affichés de self """
+        nb = 0
+        if self.state =='collapsed' :  return nb
+        for child in self.children :
+            nb = nb + 1 + child.get_nb_children()
+        return nb
+
+    def get_liste_id(self):
+        """ Retourne la liste de tous les id (filiation comprise) de self """
+        liste = self.id
+        for child in self.children:
+            liste.extend(child.get_liste_id())
+        return liste
+
+    def get_node_fils(self,name) :
+        """ Retourne le fils de self de nom name s'il existe"""
+        for child in self.children:
+            if child.item.get_nom() == name: return child
+        return None
+
+    #-----------------------------------------------
+    # Méthodes d'affichage d'un noeud
+    #-----------------------------------------------
+    def draw(self,x,y):
+        """ Permet de tracer le noeud self """
+        # le début du noeud est en x,y
+        self.x = x
+        self.y = y
+        self.lasty = y
+        self.displayed = 1
+        self.id=[]
+        # choix de l'icone à afficher : + ou -
+        if self.item.IsExpandable():
+            if self.state == 'expanded':
+                iconname = "minusnode"
+                callback = self.collapse
+            else:
+                iconname = "plusnode"
+                callback = self.expand
+            image = self.geticonimage(name=iconname)
+            self.icone_id = self.canvas.create_image(self.x, self.y, image=image)
+            self.callback_id=self.canvas.tag_bind(self.icone_id, "<1>", callback)
+            self.id.append(self.icone_id)
+        # création de la ligne horizontale
+        self.ligne_id = self.canvas.create_line(self.x,self.y,self.x+10,self.y)
+        self.id.append(self.ligne_id)
+        self.canvas.tag_lower(self.ligne_id)
+        # affichage de l'icone (carre ,rond, ovale ...) de couleur
+        image = self.geticonimage()
+        if image != None :
+            self.image_id = self.canvas.create_image(self.x+15,self.y,image = image)
+            self.select_id2=self.canvas.tag_bind(self.image_id,"<1>",self.select)
+            self.popup_id2=self.canvas.tag_bind(self.image_id,"<3>",self.popup)
+            self.id.append(self.image_id)
+        else:
+            self.image_id = None
+        # affichage du texte : nom de l'objet (ETAPE ou MOT-CLE) et sa valeur
+        self.drawtext()
+        if self.state == 'expanded' :
+            if not self.children : self.build_children()
+            if len(self.children) > 0:
+                self.drawchildren()
+                self.lasty = self.children[-1].lasty
+   
+    def drawchildren(self):
+        """ Dessine les enfants de self """
+        y = self.y + self.tree.DDY
+        x = self.x + 15
+        for child in self.children:
+            child.draw(x,y)
+            nb = child.get_nb_children()
+            y = y + self.tree.DDY*(nb+1)
+        self.trace_ligne()
+
+    def drawtext(self):
+        """ Affiche les deux zones de texte après l'icône de couleur de l'objet """
+        if self.image_id != None :
+            textx = self.x + 30
+        else:
+            textx = self.x + 15
+        texty = self.y
+        # nom,fonte et couleur de l'objet du noeud à afficher
+        labeltext,fonte,couleur = self.item.GetLabelText()
+        if labeltext    == ''   : labeltext = '   '
+        if fonte        == None : fonte = Fonte_Standard
+        if couleur      == None : couleur = 'black'
+        # création du widget label
+        self.label = Label(self.canvas,
+                           text = labeltext,
+                           fg = couleur,
+                           bg = 'gray95',
+                           font=fonte)
+        self.label_id = self.canvas.create_window(textx,texty,window=self.label,anchor='w')
+        self.id.append(self.label_id)
+        # bindings sur le widget label
+        self.select_id=self.label.bind("<1>", self.select)
+        self.popup_id=self.label.bind("<3>", self.popup)
+        self.enter_id=self.label.bind("<Enter>",self.enter)
+        self.leave_id=self.label.bind("<Leave>",self.leave)
+        # valeur de cet objet à afficher
+        x0, y0, x1, y1 = self.canvas.bbox(self.label_id)
+        textx = max(x1, 200) + 10
+        text = self.item.GetText() or " "
+        self.text = Label(self.canvas, text=text,
+                            bd=0, padx=2, pady=2,background='gray95',
+                            font=fonte)
+        if self.selected:
+            self.highlight()
+        else:
+            self.dehighlight()
+        self.text_id = self.canvas.create_window(textx, texty,anchor="w", window=self.text)
+        self.id.append(self.text_id)
+        
+    def highlight(self,event=None):
+        """ Met en surbrillance self"""
+        if hasattr(self,'label'):
+            self.label.configure(fg='white',bg='#00008b')
+        if hasattr(self.item,'get_nom') and self.appli.salome :
+            if self.item.get_nom() == "AFFE_CARA_ELEM":
+               self.item.rmenu_specs=[("View3D", "visu_3D")]
+               self.tree.rmenu
+              
+            
+    def dehighlight(self,event=None):
+        """ Rétablit l'affichage normal de self"""
+        if hasattr(self,'label'):
+            self.label.configure(fg='black',bg='gray95')
+
+    def enter(self,event=None):
+        """ Met en surbrillance self et affiche le fr de l'objet """
+        self.highlight()
+        fr = self.item.get_fr()
+        self.appli.affiche_infos(fr)
+        
+    def leave(self,event=None):
+        """ Rétablit l'affichage normal de self et efface le fr de l'objet """
+        if not self.selected :
+            self.dehighlight()
+        self.appli.affiche_infos('')
+
+    def collapse_children(self):
+        """ Collapse récursivement tous les descendants de self """
+        if not self.children : return
+        for child in self.children:
+            child.state='collapsed'
+            child.collapse_children()
+
+    def deplieReplieNode(self):           
+        if self.state == 'expanded':
+           self.collapse()
+        else :
+           self.expand_node()
+
+    def collapse(self,event = None):
+        """ Collapse self et descendants et retrace self """
+        nb = self.get_nb_children()
+        self.state = 'collapsed'
+        self.collapse_children()
+        self.redraw(-nb)
+        self.select()
+   
+    def expand_node(self,event = None):
+        """ Expanse self et le retrace """
+        if self.state == 'expanded':return
+        #if not self.item.isactif() : return
+        if not self.children : self.build_children()
+        self.state = 'expanded'
+        nb = self.get_nb_children()
+        self.redraw(nb)
+
+    def expand(self,event = None):
+        """ Expanse self et le retrace """
+        self.expand_node()
+        self.select()
+
+    def redraw(self,nb):
+        """ Redessine self :  nb est le décalage à introduire
+            en dessous de self pour le redessiner """
+        # nb = nombre d'items de décalage
+        self.move(self.tree.DDY*nb)
+        # on efface self et on le redessine
+        self.efface()
+        self.draw(self.x,self.y)
+        # Il n'est pas nécessaire d'appeler update
+        # il suffit d'updater les coordonnees et de retracer les lignes
+        self.racine.update_coords()
+        self.racine.trace_ligne()
+        self.update_valid()
+        self.tree.resizescrollregion()
+        
+    def update_coords(self):
+        """ Permet d'updater les coordonnes de self et de tous ses enfants"""
+        if self.displayed == 0 : return
+        if self.image_id != None :
+            coords = self.canvas.coords(self.image_id)
+            self.x = coords[0]-15
+        else:
+            coords = self.canvas.coords(self.label_id)
+            self.x = coords[0]-15
+        self.y = coords[1]
+        self.lasty = self.y
+        if self.state == 'expanded' :
+            for child in self.children:
+                if child.displayed != 0:
+                    child.update_coords()
+                    self.lasty = child.lasty
+
+    def update_icone(self):
+        """ Met à jour les icônes de tous les noeuds : teste la validité de l'objet
+        Cette méthode est très lente, trop !!"""
+        if self.image_id != None :
+            image = self.geticonimage()
+            self.canvas.itemconfig(self.image_id,image=image)
+        if self.state == 'expanded':
+            for child in self.children:
+                if child.displayed != 0:
+                    child.update_icone()
+
+    def update_label_texte(self):
+        """ Met a jour le label du noeud et celui de tous ses fils ouverts """
+        self.update_node_label()
+        if self.state == 'expanded' :
+            for child in self.children:
+                if child.displayed != 0 : child.update_label_texte()
+
+    def update_texte(self):
+        """ Met à jour les noms des SD et valeurs des mots-clés """
+        self.update_node_texte()
+        if self.state == 'expanded' :
+            for child in self.children:
+                if child.displayed != 0 : child.update_texte()
+        
+    def update_node_label(self):
+        """ Met a jour le label du noeud """
+        if self.displayed == 0 : return
+        # nom,fonte et couleur de l'objet du noeud à afficher
+        labeltext,fonte,couleur = self.item.GetLabelText()
+        if labeltext    == ''   : labeltext = '   '
+        if fonte        == None : fonte = Fonte_Standard
+        if couleur      == None : couleur = 'black'
+        if hasattr(self,'label') and self.label:
+           self.label.configure(text=labeltext,font=fonte)
+
+    def update_node_texte(self):
+        """ Met à jour les noms des SD et valeurs des mots-clés """
+        if self.displayed == 0 : return
+        text = self.item.GetText()
+        if text == None : text = ''
+        if hasattr(self,'text') and self.text:
+           self.text.configure(text=text)
+
+    def update_node_valid(self) :
+        """Cette methode remet a jour la validite du noeud (icone)
+           Elle appelle isvalid
+        """
+        if self.displayed == 0 : return
+        if hasattr(self,'image_id'):
+           if self.image_id != None :
+              image = self.geticonimage()
+              self.canvas.itemconfig(self.image_id,image=image)
+
+    def update_valid(self) :
+        """Cette methode a pour but de mettre a jour la validite du noeud
+           et de propager la demande de mise à jour à son parent
+        """
+        self.update_node_valid()
+        self.parent.update_valid()
+
+    def update(self,event=None) :
+        """ Classe Node :
+            Cette méthode est appelée pour demander l update d un noeud 
+            d'un jeu de commandes
+            Cette demande est transmise au noeud racine (le JDC) qui update
+            tout l arbre représentant le jeu de commandes
+            Pendant cette mise à jour, on appelle la méthode isvalid qui
+            fera l update de tous les objets déclarés modifiés lors des
+            actions précédentes
+            La métode isvalid est en général appelée par l intermédiaire de
+            update_icone -> geticonimage -> GetIconName
+        """
+        #print "update",self
+        #traceback.print_stack()
+        self.racine.update_coords()
+        self.racine.trace_ligne()
+        self.racine.update_icone()
+        self.racine.update_texte()
+        self.racine.update_label_texte()
+        self.tree.resizescrollregion()
+
+    def efface_node(self):
+        if self.displayed != 0:
+           self.label.unbind("<1>", self.select_id)
+           self.label.unbind("<3>", self.popup_id)
+           self.label.unbind("<Enter>",self.enter_id)
+           self.label.unbind("<Leave>",self.leave_id)
+           self.canvas.tag_unbind(self.image_id,"<1>",self.select_id2)
+           self.canvas.tag_unbind(self.image_id,"<3>",self.popup_id2)
+           if self.item.IsExpandable():
+              self.canvas.tag_unbind(self.icone_id, "<1>", self.callback_id)
+           self.label.destroy()
+           self.text.destroy()
+
+        for id in self.id :
+            self.canvas.delete(id)
+        self.id=[]
+        self.label_id=None
+        self.text_id=None
+        self.image_id=None
+        self.icone_id=None
+        self.label=None
+        self.text=None
+        self.displayed=0
+
+    def efface(self):
+        """ Efface du canvas les id associés à self : cad les siens et ceux
+            de ses enfants """
+        self.efface_node()
+        if not self.children : return
+        for child in self.children:
+            child.efface()
+
+    def move(self,dy):
+        """ Déplace de l'incrément dy tous les id en dessous de self """
+        # il faut marquer tous les suivants de self
+        bbox1 = self.canvas.bbox(ALL)
+        self.canvas.dtag(ALL,'move')
+        self.canvas.delete('line')
+        try:
+            self.canvas.addtag_overlapping('move',bbox1[0],self.y +10,bbox1[2],bbox1[3])
+        except:
+            print "Erreur dans move :"
+            print self
+            print self.item
+            print self.item.getObject()
+            print self.item.getObject().definition.label
+            print 'y=',self.y
+            print 'dy=',dy
+        # on déplace tous les items de dy
+        self.canvas.move('move',0,dy)
+
+    def trace_ligne(self):
+        """ Dessine les lignes verticales entre frères et entre père et premier fils"""
+        if self.state=='collapsed' : return
+        if len(self.children)==0 : return
+        # on est bien dans le cas d'un noeud expansé avec enfants ...
+        # il faut rechercher l'ordonnée du dernier fils de self
+        y_end = self.children[-1].y
+        ligne = self.canvas.create_line(self.x+15,self.y,self.x+15,y_end,tags='line')
+        self.canvas.tag_lower(ligne)
+        for child in self.children :
+            try:
+                child.trace_ligne()
+            except:
+                print "Erreur dans trace_ligne :"
+                print child
+                print child.item.getObject()
+
+    def last_child(self):
+        lchild=self
+        if self.state == 'expanded' and self.children:
+           lchild= self.children[-1].last_child()
+        return lchild
+
+    #------------------------------------------------------------------
+    # Méthodes de création et destruction de noeuds
+    # Certaines de ces méthodes peuvent être appelées depuis l'externe
+    #------------------------------------------------------------------
+    def append_brother(self,name,pos='after',retour='non'):
+        """
+        Permet d'ajouter un objet frère à l'objet associé au noeud self
+        par défaut on l'ajoute immédiatement après 
+        Méthode externe
+        """
+        # on veut ajouter le frère de nom name directement avant ou après self
+        index = self.parent.children.index(self)
+        if pos == 'before':
+            index = index
+        elif pos == 'after':
+            index = index +1
+        else:
+            print str(pos)," n'est pas un index valide pour append_brother"
+            return 0
+        return self.parent.append_child(name,pos=index)
+
+    def append_child(self,name,pos=None,verif='oui',retour='non'):
+        """
+           Methode pour ajouter un objet fils à l'objet associé au noeud self.
+           On peut l'ajouter en début de liste (pos='first'), en fin (pos='last')
+           ou en position intermédiaire.
+           Si pos vaut None, on le place à la position du catalogue.
+        """
+        #print "append_child",self,self.children
+        if pos == 'first':
+            index = 0
+        elif pos == 'last':
+            index = len(self.children)
+        elif type(pos) == types.IntType :
+            # position fixee
+            index = pos
+        elif type(pos) == types.InstanceType:
+            # pos est un item. Il faut inserer name apres pos
+            index = self.item.get_index(pos) +1
+        elif type(name) == types.InstanceType:
+            index = self.item.get_index_child(name.nom)
+        else:
+            index = self.item.get_index_child(name)
+        obj=self.item.additem(name,index)
+        #print obj
+        if obj is None:obj=0
+        if obj == 0:return 0
+        #print "append_child",index,self.children
+        child=self.children[index]
+        child.select()
+        return child
+
+    def delete(self):
+        """ 
+            Méthode externe pour la destruction de l'objet associé au noeud
+            La mise à jour des noeuds est faite par onSupp sur notification
+        """
+        index = self.parent.children.index(self) - 1 
+        if index < 0 : index =0
+
+        parent=self.parent
+        ret=parent.item.suppitem(self.item)
+        if ret == 0:return
+
+        brothers=parent.children
+        if brothers:
+           toselect=brothers[index]
+        else:
+           toselect=parent
+        toselect.select()
+
diff --git a/InterfaceTK/uniqueassdpanel.py b/InterfaceTK/uniqueassdpanel.py
new file mode 100644 (file)
index 0000000..27edcd9
--- /dev/null
@@ -0,0 +1,219 @@
+# -*- coding: utf-8 -*-
+# ======================================================================
+# 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from Editeur.utils import substract_list
+
+# Import des panels
+from uniquepanel import UNIQUE_Panel
+
+
+class UNIQUE_ASSD_Panel(UNIQUE_Panel):
+  """
+  Classe servant à définir le panneau associé aux objets qui attendent une valeur unique
+  d'un type dérivé d'ASSD
+  """
+  def valid_valeur_automatique(self):
+      """
+         Réalise la validation d'un concept sans remonter dans le
+         node parent dans le cas ou il n'y a qu'un concept possible (liste de longueur 1)
+         Identique à valid_valeur moins appel de self.node.parent.select()
+         On pourrait supposer que le seul concept présent est valide et donc ne pas
+         réaliser tous les tests de vérification.
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      valeur = self.get_valeur()
+      self.erase_valeur()
+      anc_val = self.node.item.get_valeur()
+      valeur,validite=self.node.item.eval_valeur_item(valeur)
+      test = self.node.item.set_valeur(valeur)
+      if not test :
+          mess = "impossible d'évaluer : %s " %`valeur`
+          self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess)
+      elif self.node.item.isvalid() :
+          self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
+          #if self.node.item.get_position()=='global':
+              #self.node.etape.verif_all()
+          #elif self.node.item.get_position()=='global_jdc':
+              #self.node.racine.verif_all()
+          #else :
+              #self.node.parent.verif()
+          #self.node.update()
+      else :
+          cr = self.node.item.get_cr()
+          mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
+          self.reset_old_valeur(anc_val,mess=mess)
+
+  def makeValeurPage(self,page,reel="non"):
+      """
+          Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une 
+          SD de type dérivé d'ASSD
+      """
+      # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
+      # et de la liste des SD du bon type (constituant la liste des choix)
+      bulle_aide=self.get_bulle_aide()
+      aide=self.get_aide()
+      aide= justify_text(texte=aide)
+      liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
+
+      # Remplissage du panneau
+      self.valeur_choisie = StringVar()
+      self.valeur_choisie.set('')
+      min,max =  self.node.item.GetMinMax()
+      if (min == 1 and min == max and len(liste_noms_sd)==1 ):
+          if self.valeur_choisie.get() != liste_noms_sd[0]:
+            if ('R' not in self.node.item.get_type()) :
+                self.valeur_choisie.set(liste_noms_sd[0])
+                self.valid_valeur_automatique()
+         
+      self.frame_valeur = Frame(page)
+      self.frame_valeur.pack(fill='both',expand=1)
+      self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+      self.listbox = Pmw.ScrolledListBox(self.frame_valeur,
+                                         items=liste_noms_sd,
+                                         labelpos='n',
+                                         label_text="Structures de données du type\n requis par l'objet courant :",
+                                         listbox_height = 6,
+                                         selectioncommand=self.select_valeur_from_list,
+                                         dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c))
+      self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
+      Label(self.frame_valeur,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6)
+      Label(self.frame_valeur,textvariable=self.valeur_choisie).place(relx=0.5,rely=0.6)
+      self.but_val = Button(self.frame_valeur,text = "Valider",command= self.Choisir)
+      self.but_val.place(relx=0.3,rely=0.8,relwidth=0.35)
+
+      # affichage de la valeur courante
+      self.display_valeur()
+      if self.__class__.__name__ == 'UNIQUE_ASSD_Panel_Reel' :
+        Label(self.frame_valeur,text='Valeur Réelle').place(relx=0.1,rely=0.9)
+        self.entry = Entry(self.frame_valeur,relief='sunken')
+        self.entry.place(relx=0.28,rely=0.9,relwidth=0.6)
+        self.entry.bind("<Return>",lambda e,c=self.valid_valeur_reel:c())
+        self.entry.bind("<KP_Enter>",lambda e,c=self.valid_valeur_reel:c())
+
+
+
+  def get_bulle_aide(self):
+      """
+      Retourne l'aide associée au panneau
+      """
+      return "Double-cliquez sur la structure de donnée désirée pour valoriser le mot-clé simple courant"
+
+  def get_aide(self):
+      """
+      Retourne la phrase d'aide indiquant de quel type doit être la valeur à donner par l'utilisateur
+      """
+      mc = self.node.item.get_definition()
+      try :
+              type = mc.type[0].__name__  
+      except :
+        type = str(mc.type[0])
+      if len(mc.type)>1 :
+          for typ in mc.type[1:] :
+              try :
+                l=typ.__name__
+              except:
+                l=str(typ)
+              type = type + ' ou '+l
+      commentaire="Un objet de type "+type+" est attendu"
+      aideval=self.node.item.aide()
+      commentaire=commentaire +"\n"+ aideval
+      return commentaire
+
+    
+  def select_valeur_from_list(self):
+      """
+      Affecte à valeur choisie la sélection courante dans la liste des choix proposée
+      """
+      if len(self.listbox.get()) == 0 : return
+      if len(self.listbox.getcurselection()) == 0 : return
+      choix = self.listbox.getcurselection()[0]
+      self.valeur_choisie.set(choix)
+      self.listbox.component("listbox").focus_set()
+
+  def choose_valeur_from_list(self,command):
+      """
+      Affecte à valeur choisie la sélection courante dans la liste des choix proposée
+      Exécute command
+      """
+      if len(self.listbox.get()) == 0 : return
+      if len(self.listbox.getcurselection()) == 0 : return
+      choix = self.listbox.getcurselection()[0]
+      self.valeur_choisie.set(choix)
+      apply(command,(),{})
+
+  def Choisir(self) :
+      #Appeler par le bouton Valider
+      self.choose_valeur_from_list(self.valid_valeur)
+      
+  def get_valeur(self):
+      """
+      Retourne la valeur donnée par l'utilisateur au MCS
+      """
+      return self.valeur_choisie.get()
+    
+  def display_valeur(self):
+      """
+      Affiche la valeur de l'objet pointé par self
+      """
+      valeur = self.node.item.get_valeur()
+      if valeur == None or valeur == '' : return # pas de valeur à afficher ...
+      self.valeur_choisie.set(getattr(valeur,"nom","unknown"))
+
+  def erase_valeur(self):
+      pass
+
+  def appel_make(self,page):
+      self.makeValeurPage(page,reel="oui")
+      
+class UNIQUE_ASSD_Panel_Reel(UNIQUE_ASSD_Panel):
+  def valid_valeur_reel(self):
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      anc_val = self.node.item.get_valeur()
+      valeurentree = self.entry.get()
+      self.valeur_choisie.set(valeurentree)
+      self.valid_valeur()
+
+  def display_valeur(self):
+      valeur = self.node.item.get_valeur()
+      if valeur == None or valeur == '' : return # pas de valeur à afficher ...
+      if type(valeur) == types.FloatType :
+         self.valeur_choisie.set(valeur)
+      else :
+         self.valeur_choisie.set(valeur.nom)
+
+       
+
diff --git a/InterfaceTK/uniquebasepanel.py b/InterfaceTK/uniquebasepanel.py
new file mode 100644 (file)
index 0000000..b7a71be
--- /dev/null
@@ -0,0 +1,153 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+from Tkinter import Widget
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import FenetreDeParametre
+from widgets import showerror
+
+from Noyau.N_CR import justify_text
+from Editeur.utils import substract_list
+
+# Import des panels
+from uniquepanel import UNIQUE_Panel
+
+
+class UNIQUE_BASE_Panel(UNIQUE_Panel):
+  """
+  Classe servant à définir le panneau associé aux mots-clés simples qui attendent
+  une valeur d'un type de base (entier, réel ou string).
+  """
+  def makeValeurPage(self,page):
+      """
+      Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type
+      de base cad entier, réel, string ou complexe
+      """
+      # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
+      # et de la liste des SD du bon type (constituant la liste des choix)
+      bulle_aide=self.get_bulle_aide()
+      aide=self.get_aide()
+      aide= justify_text(texte=aide)
+      liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
+      # Remplissage du panneau
+      self.frame_valeur = Frame(page)
+      self.frame_valeur.pack(fill='both',expand=1)
+      self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+      self.label = Label(self.frame_valeur,text='Valeur :')
+      #self.label.place(relx=0.1,rely=0.2)
+      self.label.grid(row=0,padx=5,pady=5)
+      self.entry = Entry(self.frame_valeur,relief='sunken')
+      #self.entry.place(relx=0.28,rely=0.2,relwidth=0.6)
+      self.entry.grid(row=0,column=1,padx=5,pady=5)
+      self.entry.bind("<Return>",lambda e,c=self.valid_valeur:c())
+      self.entry.bind("<KP_Enter>",lambda e,c=self.valid_valeur:c())
+      # aide associée au panneau
+      self.frame_valeur.update()
+      self.aide = Label(self.frame_valeur, 
+                        text = aide,
+                        wraplength=int(self.frame_valeur.winfo_width()*0.8),
+                        justify='center')
+      #self.aide.place(relx=0.5,rely=0.9,anchor='n')
+      self.aide.grid(row=4,columnspan=2,padx=5,pady=5)
+      # bouton parametre
+      bouton_parametres = Button(self.frame_valeur, text="Parametres", command=self.affiche_parametre)
+      #bouton_parametres.place(relx=0.28,rely=0.5,relwidth=0.4)
+      bouton_parametres.grid(row=2,columnspan=2,padx=5,pady=5)
+      bouton_val = Button(self.frame_valeur, text="Valider", command=self.valide)
+      #bouton_val.place(relx=0.28,rely=0.6,relwidth=0.4)
+      bouton_val.grid(row=3,columnspan=2,padx=5,pady=5)
+      # affichage de la valeur du MCS
+      self.display_valeur()
+
+  def valide(self):
+      self.valid_valeur()
+
+  def affiche_parametre(self) :
+     if self.node.item.get_liste_param_possible() != [ ]:
+        txtparam=""
+        for param in self.node.item.get_liste_param_possible():
+           txtparam=txtparam+repr(param)+"\n"
+        if txtparam=="":
+           showerror("Aucun parametre ","Pas de parametre de ce type")
+        else :
+           try :
+                   self.fenetreparam.destroy()
+           except :
+                pass
+           self.fenetreparam=FenetreDeParametre( self, self.node.item, self.parent.appli, txtparam)
+
+  def destroy(self):
+      try :
+              self.fenetreparam.destroy()
+      except :
+        pass
+      Widget.destroy(self)
+
+  def get_aide(self):
+      """
+      Retourne la phrase d'aide indiquant de quel type doit être la valeur
+      du mot-clé simple fournie par l'utilisateur
+      """
+      mc = self.node.item.get_definition()
+      d_aides = { 'TXM' : "Une chaîne de caractères est attendue",
+                  'R'   : "Un réel est attendu",
+                  'I'   : "Un entier est attendu"}
+      type = mc.type[0]
+      commentaire=d_aides.get(type,"Type de base inconnu")
+      aideval=self.node.item.aide()
+      commentaire=commentaire +"\n"+ aideval
+      return commentaire
+
+  def get_bulle_aide(self):
+      """
+      Retourne la bulle d'aide associée au panneau et affichée par clic droit
+      """
+      return """Saisissez la valeur que vous voulez affecter au mot-clé simple
+      dans la zone de saisie et pressez <Return>"""
+      
+  def display_valeur(self):
+      """
+      Affiche la valeur de l'objet pointé par self
+      """
+      valeur = self.node.item.get_valeur()
+      if valeur == None or valeur == '' : # pas de valeur à afficher ...
+         self.entry.delete(0,END)
+         self.entry.focus()
+         return
+
+      valeur_texte=self.get_valeur_texte(valeur)
+      if valeur_texte != "":
+         valeur=valeur_texte
+      self.entry.delete(0,END)
+      self.entry.insert(0,valeur)
+      self.entry.focus()
+      
diff --git a/InterfaceTK/uniquecomppanel.py b/InterfaceTK/uniquecomppanel.py
new file mode 100644 (file)
index 0000000..80d9aa7
--- /dev/null
@@ -0,0 +1,171 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from Editeur.utils import substract_list
+
+# Import des panels
+from uniquepanel import UNIQUE_Panel
+
+      
+class UNIQUE_COMP_Panel(UNIQUE_Panel):
+  """
+  Classe servant à définir le panneau associé aux mots-clés simples
+  qui attendent une valeur de type complexe
+  """
+  def makeValeurPage(self,page):
+      """
+      Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type
+      de base cad entier, réel, string ou complexe
+      """
+      # Récupération de l'aide associée au panneau et de l'aide destinée à l'utilisateur
+      bulle_aide=self.get_bulle_aide()
+      aide=self.get_aide()
+      aide= justify_text(texte=aide)
+      # Remplissage du panneau
+      self.frame_valeur = Frame(page)
+      self.frame_valeur.pack(fill='both',expand=1)
+      self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+      self.label  = Label(self.frame_valeur,text='Complexe de la forme : a+bj')
+      self.label1 = Label(self.frame_valeur,text='Imaginaire')
+      self.label2 = Label(self.frame_valeur,text='Phase')
+      self.label3 = Label(self.frame_valeur,text='OU')
+      self.label.place (relx=0.15,rely=0.1)
+      self.label1.place(relx=0.6,rely=0.50)
+      self.label2.place(relx=0.6,rely=0.57)
+      self.label3.place(relx=0.15,rely=0.4)
+      self.typ_cplx=StringVar()
+      self.typ_cplx.set('RI')
+      rb1 = Radiobutton(self.frame_valeur, text='RI  : Réel',variable=self.typ_cplx,value='RI')
+      rb2 = Radiobutton(self.frame_valeur, text='MP  : Module',variable=self.typ_cplx,value='MP')
+      rb1.place(relx=0.15,rely = 0.50)
+      rb2.place(relx=0.15,rely = 0.57)
+      self.entry1 = Pmw.EntryField(self.frame_valeur,validate='real')
+      self.entry2 = Pmw.EntryField(self.frame_valeur,validate='real')
+      self.entry3 = Pmw.EntryField(self.frame_valeur)
+      self.entry1.component('entry').bind("<Return>",lambda e,s=self:s.entry2.component('entry').focus())
+      self.entry1.component('entry').bind("<KP_Enter>",lambda e,s=self:s.entry2.component('entry').focus())
+      self.entry2.component('entry').bind("<Return>",lambda e,c=self.valid_valeur:c())
+      self.entry2.component('entry').bind("<KP_Enter>",lambda e,c=self.valid_valeur:c())
+      self.entry3.component('entry').bind("<Return>",lambda e,c=self.valid_complexe:c())
+      self.entry3.component('entry').bind("<KP_Enter>",lambda e,c=self.valid_complexe:c())
+      self.entry1.place(relx=0.15,rely = 0.65,relwidth=0.35)
+      self.entry2.place(relx=0.60,rely = 0.65,relwidth=0.35)
+      self.entry3.place(relx=0.15,rely = 0.20,relwidth=0.60)
+      self.entry1.focus()
+      self.bouton_val=Button(self.frame_valeur,text="Valider",command=self.valider,width=14)
+      self.bouton_val.place(relx=0.4,rely=0.8)
+      self.frame_valeur.update()
+      self.aide = Label(self.frame_valeur,
+                        text = aide,
+                        wraplength=int(self.frame_valeur.winfo_width()*0.8),
+                        justify='center')
+      self.aide.place(relx=0.5,rely=0.9,anchor='n')
+      # affichage de la valeur du MCS
+      self.display_valeur()
+
+  def valider(self):
+      if ((self.entry3.get() != None) and (self.entry3.get() != "" )):
+         self.erase_valeur()
+         self.valid_complexe()
+      else :
+         self.valid_valeur()
+         
+
+  def display_valeur(self):
+      """
+      Affiche la valeur de l'objet pointé par self
+      """
+      valeur = self.node.item.get_valeur()
+      if valeur == None or valeur == '' : return # pas de valeur à afficher ...
+      self.entry1.delete(0,END)
+      self.entry2.delete(0,END)
+      self.entry3.delete(0,END)
+      if type(valeur) not in (types.ListType,types.TupleType) :
+         self.display_complexe()
+      else:
+         typ_cplx,x1,x2=valeur
+         self.typ_cplx.set(typ_cplx)
+         self.entry1.setentry(x1)
+         self.entry2.setentry(x2)
+
+  def display_complexe(self):
+      valeur = self.node.item.get_valeur()
+      self.entry3.setentry(valeur)
+
+  def get_bulle_aide(self):
+      """
+      Retourne la bulle d'aide du panneau
+      """
+      return """-Choisissez votre format de saisie du complexe :
+      \t 'RI' = parties réelle et imaginaire
+      \t 'MP' = module/phase (en degrés)
+      - Saisissez ensuite dans les deux zones de saisie les deux nombres attendus"""
+
+  def get_aide(self):
+      """
+      Retourne la phrase d'aide décrivant le type de la valeur que peut prendre
+      le mot-clé simple courant
+      """
+      commentaire='Un complexe est attendu'
+      aideval=self.node.item.aide()
+      commentaire=commentaire +"\n"+ aideval
+      return commentaire
+
+  def get_valeur(self):
+      """
+      Retourne le complexe saisi par l'utilisateur
+      """
+      l=[]
+      l.append(self.typ_cplx.get())
+      try :
+         l.append(string.atof(self.entry1.get()))
+         l.append(string.atof(self.entry2.get()))
+      except :
+         return None
+      return `tuple(l)`
+
+  def erase_valeur(self):
+      """
+      Efface les entries de saisie
+      """
+      self.typ_cplx.set('RI')
+      self.entry1.delete(0,END)
+      self.entry2.delete(0,END)
+      
+  def valid_complexe(self):
+      valeurentree=self.entry3.get()
+      self.valid_valeur(valeurentree=valeurentree)
diff --git a/InterfaceTK/uniqueintopanel.py b/InterfaceTK/uniqueintopanel.py
new file mode 100644 (file)
index 0000000..76133cd
--- /dev/null
@@ -0,0 +1,96 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from Editeur.utils import substract_list
+
+# Import des panels
+from uniquepanel import UNIQUE_Panel
+
+class UNIQUE_INTO_Panel(UNIQUE_Panel):
+  """
+  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 makeValeurPage(self,page):
+      """
+      Génère la page de saisie d'une seule valeur parmi un ensemble
+      discret de possibles
+      """
+      # récupération de la bulle d'aide et de l'objet mc
+      bulle_aide=self.get_bulle_aide()
+      objet_mc = self.node.item.get_definition()
+      # remplissage du panel
+      self.frame_valeur = Frame(page)
+      self.frame_valeur.pack(fill='both',expand=1)
+      self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : 
+                              s.parent.appli.affiche_aide(e,a))
+      self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+      #l_choix=list(objet_mc.into)
+      #l_choix.sort()
+      l_choix=self.node.item.get_liste_possible([])
+      self.label = Label(self.frame_valeur,text='Choisir une valeur :')
+      self.label.pack(side='top')
+      self.frame = Frame(page)
+      self.frame.place(relx=0.33,rely=0.2,relwidth=0.33,relheight=0.6)
+
+
+      liste_commandes = (("<Button-1>",self.selectChoix),
+                         ("<Button-3>",self.deselectChoix),
+                         ("<Double-Button-1>",self.record_valeur))
+      self.Liste_choix = ListeChoix(self,self.frame,l_choix,
+                                    liste_commandes = liste_commandes,
+                                    titre="Valeurs possibles",optionReturn="oui")
+      self.Liste_choix.affiche_liste()
+      if len(l_choix) == 1 :
+         self.Liste_choix.surligne(l_choix[0])
+      self.bouton_val = Button(self.frame_valeur,
+                               text = "Valider",
+                               command=self.record_valeur_ligne,
+                               width=14)
+      self.bouton_val.place(relx=0.33,rely=0.85)
+
+  def record_valeur_ligne(self):
+      valeur=self.Liste_choix.arg_selected
+      self.record_valeur(valeur)
+
+  def get_bulle_aide(self):
+      """
+      Retourne la bulle d'aide affectée au panneau courant (affichée par clic droit)
+      """
+      return """Double-cliquez sur la valeur désirée
+      pour valoriser le mot-clé simple courant"""
+
diff --git a/InterfaceTK/uniquepanel.py b/InterfaceTK/uniquepanel.py
new file mode 100644 (file)
index 0000000..90b3b9d
--- /dev/null
@@ -0,0 +1,93 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from Editeur.utils import substract_list
+
+# Import des panels
+from newsimppanel import newSIMPPanel
+
+    
+class UNIQUE_Panel(newSIMPPanel):
+  """
+  Classe virtuelle servant de classe mère à toutes celles définissant un panneau
+  permettant l'affichage et la saisie d'une valeur unique pour le mot-clé simple
+  """
+
+  def erase_valeur(self):
+      """
+      Efface l'entry de saisie
+      """
+      self.entry.delete(0,END)
+
+  def get_valeur(self):
+      """
+      Retourne la valeur donnée par l'utilisateur
+      """
+      return self.entry.get()
+    
+  
+  def valid_valeur(self,valeurentree=None):
+      """
+      Teste si la valeur fournie par l'utilisateur est une valeur permise :
+      - si oui, l'enregistre
+      - si non, restaure l'ancienne valeur
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      anc_val = self.node.item.get_valeur()
+      if valeurentree== None :
+         valeurentree = self.get_valeur()
+      valeur,validite=self.node.item.eval_valeur(valeurentree)
+      if not validite :
+             commentaire = "impossible d'évaluer : %s " %`valeurentree`
+             self.display_valeur()
+             self.parent.appli.affiche_infos(commentaire)
+             return
+   
+      test = self.node.item.set_valeur(valeur)
+      if test :
+          self.set_valeur_texte(str(valeurentree))
+       
+      if not test :
+          mess = "impossible d'évaluer : %s " %`valeur`
+          self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée : "+mess)
+      elif self.node.item.isvalid() :
+          self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
+      else :
+          cr = self.node.item.get_cr()
+          mess = "Valeur du mot-clé non autorisée "+cr.get_mess_fatal()
+          self.reset_old_valeur(anc_val,mess=mess)
+
+      self.display_valeur()
diff --git a/InterfaceTK/uniquesdcopanel.py b/InterfaceTK/uniquesdcopanel.py
new file mode 100644 (file)
index 0000000..a9e326c
--- /dev/null
@@ -0,0 +1,246 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+from Tkinter import *
+import Pmw
+from copy import copy,deepcopy
+import traceback
+
+# Modules Eficas
+from Editeur import Objecttreeitem
+import prefs
+import panels
+import images
+from widgets import ListeChoix
+from widgets import FenetreDeSelection
+
+from Noyau.N_CR import justify_text
+from Editeur.utils import substract_list
+
+# Import des panels
+from uniqueassdpanel import UNIQUE_ASSD_Panel
+
+
+class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel):
+  """
+  Classe servant à définir le panneau correspondant à un mot-clé simple
+  qui attend une valeur unique de type dérivé d'ASSD ou non encore
+  existante (type CO(...) utilisé dans les macros uniquement)
+  """
+  def makeValeurPage(self,page):
+      """
+      Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une SD de type dérivé
+      d'ASSD
+      """
+      # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
+      # et de la liste des SD du bon type (constituant la liste des choix)
+      bulle_aide=self.get_bulle_aide()
+      aide=self.get_aide()
+      aide= justify_text(texte=aide)
+      liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
+      # Remplissage du panneau
+      self.frame_valeur = Frame(page)
+      self.frame_valeur.pack(fill='both',expand=1)
+      self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
+      self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+      # affichage de la liste des SD existantes et du bon type
+      self.listbox = Pmw.ScrolledListBox(self.frame_valeur,
+                                         items=liste_noms_sd,
+                                         labelpos='n',
+                                         label_text="Structures de données du type\n requis par l'objet courant :",
+                                         listbox_height = 6,
+                                         selectioncommand=self.select_valeur_from_list,
+                                         dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c))
+      self.listbox.component("listbox").bind("<Return>",lambda e,s=self,c=self.valid_valeur : s.choose_valeur_from_list(c))
+      if liste_noms_sd != [] :
+         self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
+         self.b_co = Pmw.OptionMenu(self.frame_valeur,labelpos='w',label_text = "Nouveau concept : ", items = ('NON','OUI'),
+                                         menubutton_width=10)
+      else :
+         self.b_co = Pmw.OptionMenu(self.frame_valeur,labelpos='w',label_text = "Nouveau concept : ", items = ('OUI',),
+                                         menubutton_width=10)
+      # affichage du bouton 'Nouveau concept'
+      self.b_co.configure(command = self.ask_new_concept)
+      if liste_noms_sd != [] :
+         self.b_co.place(relx=0.05,rely=0.6,anchor='w')
+      else :
+         self.b_co.place(relx=0.05,rely=0.3,anchor='w')
+      self.label_co = Label(self.frame_valeur,text='Nom du nouveau concept :')
+      self.entry_co = Entry(self.frame_valeur)
+      self.entry_co.bind('<Return>',self.valid_nom_concept_co)
+      self.entry_co.bind('<KP_Enter>',self.valid_nom_concept_co)
+      # affichage du label de la structure de donnée choisie
+      self.l_resu = Label(self.frame_valeur,text='Structure de donnée choisie :')
+      self.valeur_choisie = StringVar()
+      self.label_valeur = Label(self.frame_valeur,textvariable=self.valeur_choisie)
+      self.frame_valeur.update()
+      self.aide = Label(self.frame_valeur,
+                        text = aide,
+                        wraplength=int(self.frame_valeur.winfo_width()*0.8),
+                        justify='center')
+      self.aide.place(relx=0.5,rely=0.85,anchor='n')
+
+      self.but_val = Button(self.fr_but,text = "Valider",command= self.valid_nom_concept_co)
+      self.but_val.pack(side='right',padx=5, pady=5)
+
+      # affichage de la valeur courante
+      self.display_valeur()
+      if liste_noms_sd == [] :
+          self.b_co.invoke('OUI')
+      
+  def get_bulle_aide(self):
+      """
+      Retourne la bulle d'aide du panneau
+      """
+      return """Double-cliquez sur la structure de donnée désirée
+      pour valoriser le mot-clé simple courant ou cliquez sur NOUVEAU CONCEPT pour
+      entrer le nom d'un concept non encore existant"""
+
+  def valid_valeur(self):
+      """
+      Teste si la valeur fournie par l'utilisateur est une valeur permise :
+      - si oui, l'enregistre
+      - si non, restaure l'ancienne valeur
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      valeur = self.get_valeur()
+      #print "valid_valeur",valeur
+
+      self.erase_valeur()
+      anc_val = self.node.item.get_valeur()
+      test_CO=self.node.item.is_CO(anc_val)
+      #PN essai pour bug dans MACRO_PROJ_BASE 
+      valeur,validite=self.node.item.eval_valeur(valeur)
+      test = self.node.item.set_valeur(valeur)
+      if not test :
+          mess = "impossible d'évaluer : %s " %`valeur`
+          self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess)
+          return
+      #PN essai pour bug dans MACRO_PROJ_BASE 
+      #elif self.node.item.isvalid() :
+      elif validite: 
+          self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
+          if test_CO:
+             # il faut egalement propager la destruction de l'ancien concept
+             self.node.item.delete_valeur_co(valeur=anc_val)
+             # et on force le recalcul des concepts de sortie de l'etape
+             self.node.item.object.etape.get_type_produit(force=1)
+             # et le recalcul du contexte
+             self.node.item.object.etape.parent.reset_context()
+          self.node.parent.select()
+      else :
+          cr = self.node.item.get_cr()
+          mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
+          self.reset_old_valeur(anc_val,mess=mess)
+          return
+
+  def valid_nom_concept_co(self,event=None):
+      """
+      Lit le nom donné par l'utilisateur au concept de type CO qui doit être
+      la valeur du MCS courant et stocke cette valeur
+      """
+      #print "valid_nom_concept_co"
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      anc_val = self.node.item.get_valeur()
+      if anc_val != None:
+          # il faut egalement propager la destruction de l'ancien concept
+          self.node.item.delete_valeur_co(valeur=anc_val)
+          # et on force le recalcul des concepts de sortie de l'etape
+          self.node.item.object.etape.get_type_produit(force=1)
+          # et le recalcul du contexte
+          self.node.item.object.etape.parent.reset_context()
+      nom_concept = self.entry_co.get()
+      #print "valid_nom_concept_co",nom_concept
+      test,mess=self.node.item.set_valeur_co(nom_concept)
+      if not test:
+          # On n'a pas pu créer le concept
+          self.parent.appli.affiche_infos(mess)
+          return
+      elif self.node.item.isvalid() :
+          self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
+          self.node.parent.select()
+      else :
+          cr = self.node.item.get_cr()
+          mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
+          self.reset_old_valeur(anc_val,mess=mess)
+          return
+
+  def ask_new_concept(self,tag):
+      """
+      Crée une entry dans le panneau d'un MCS qui attend un concept OU un CO() afin de
+      permettre à l'utilisateur de donner le nom du nouveau concept
+      """
+      new_concept = self.b_co.getcurselection()
+      if new_concept == 'OUI':
+          self.label_co.place(relx=0.05,rely=0.7)
+          self.entry_co.place(relx=0.45,rely=0.7,relwidth=0.25)
+          self.l_resu.place_forget()
+          self.label_valeur.place_forget()
+          self.entry_co.focus()
+      elif new_concept == 'NON':
+          # On est passe de OUI à NON, on supprime la valeur
+# PN correction de bug (on passe de non a non et cela supprime la valeur)
+# ajout du if de le ligne suivane
+          if self.node.item.is_CO():
+                self.node.item.delete_valeur_co()
+                self.record_valeur(name=None,mess="Suppression CO enregistrée")
+                self.label_co.place_forget()
+                self.entry_co.place_forget()
+                self.l_resu.place(relx=0.05,rely=0.7)
+                self.label_valeur.place(relx=0.45,rely=0.7)
+          
+  def display_valeur(self):
+      """
+      Affiche la valeur de l'objet pointé par self
+      """
+      valeur = self.node.item.get_valeur()
+      #print "display_valeur",valeur
+      if valeur == None or valeur == '': 
+         self.valeur_choisie.set('')
+         return # pas de valeur à afficher ...
+      # il faut configurer le bouton si la valeur est un objet CO
+      # sinon afficher le nom du concept dans self.valeur_choisie
+      if self.node.item.is_CO():
+          #print "display_valeur.is_CO"
+          self.b_co.invoke('OUI')
+          self.entry_co.insert(0,valeur.nom)
+      else:
+          self.valeur_choisie.set(valeur.nom)
+
+  def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
+      """
+      Enregistre  val comme valeur de self.node.item.object SANS faire de test de validité
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      if name != None:
+          valeur =name
+      else :
+          self.entry_co.delete(0,END)
+          valeur= self.entry_co.get()
+      self.node.item.set_valeur_co(valeur)
+      self.parent.appli.affiche_infos(mess)
+      # On met a jour le display dans le panneau
+      self.display_valeur()
+      if self.node.item.isvalid():
+          self.node.parent.select()
+
+
diff --git a/InterfaceTK/widgets.py b/InterfaceTK/widgets.py
new file mode 100644 (file)
index 0000000..c0dda77
--- /dev/null
@@ -0,0 +1,1388 @@
+# -*- 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.
+#
+#
+# ======================================================================
+# ----------------------------------------------------------
+#   Cette classe sert à définir les widgets utilisés par
+#          EFICAS
+# ----------------------------------------------------------
+
+import Tkinter
+from Tkinter import *
+import Pmw
+import os,sys,re,string
+import types,fnmatch
+import traceback
+from tkFileDialog import *
+from tkMessageBox import showinfo,askyesno,showerror,askretrycancel
+
+import fontes
+import prefs
+from Editeur.utils import save_in_file
+from centerwindow import centerwindow
+
+from Noyau.N_utils import repr_float
+from Accas import AsException
+
+# Surcharge de la fonction askyesno qui retourne un resultat errone en Python 2.3 avec Tk 8.4
+# et Tkinter.wantobject==1
+import tkMessageBox
+def askyesno(title=None, message=None, **options):
+    "Ask a question; return true if the answer is yes"
+    s = tkMessageBox._show(title, message, tkMessageBox.QUESTION, tkMessageBox.YESNO, **options)
+    if s == tkMessageBox.YES:return 1
+    if s == tkMessageBox.NO:return 0
+    if s:return 1
+    return 0
+
+    
+class Fenetre :
+    """ Cette classe permet de créer une fenêtre Toplevel dans laquelle
+        on peut afficher un texte et qui permet de le sauver"""
+    def __init__(self,appli,titre="",texte="",wrap=WORD,width=100,height=30):
+        self.appli=appli
+        if self.appli.test==1 : return
+        self.fenetre = Toplevel()
+        self.fenetre.withdraw()
+        #self.fenetre.configure(width = 800,height=500)
+        self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
+        self.fenetre.title("Visualisation du "+titre)
+        self.texte = string.replace(texte,'\r\n','\n')
+        self.titre = titre
+        fonte=fontes.standardcourier10
+        # définition des frames
+        self.frame_texte = Frame(self.fenetre)
+        self.frame_boutons = Frame(self.fenetre)
+        #self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.9)
+        #self.frame_boutons.place(relheight=0.1,relx=0,rely=0.9,relwidth=1.)
+        # définition de la zone texte et du scrollbar
+        self.zone_texte = Text(self.frame_texte,font=fonte,wrap=wrap,
+                               height=height,width=width)
+        self.zone_texte.bind("<Key-Prior>", self.page_up)
+        self.zone_texte.bind("<Key-Next>", self.page_down)
+        self.zone_texte.bind("<Key-Up>", self.unit_up)
+        self.zone_texte.bind("<Key-Down>", self.unit_down)
+        self.scroll_v = Scrollbar (self.frame_texte,command = self.zone_texte.yview)
+        #self.scroll_h = Scrollbar (self.frame_texte,command = self.zone_texte.xview)
+        self.scroll_v.pack(side='right',fill ='y')
+        #self.scroll_h.pack(side='bottom',fill ='x')
+        self.zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10)
+        self.zone_texte.configure(yscrollcommand=self.scroll_v.set)
+        # définition des boutons
+        self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit,
+                                default='active')
+        self.but_save = Button(self.frame_boutons,text = "Sauver",command = self.save)
+        #self.but_quit.place(relx=0.4,rely=0.5,anchor='center')
+        #self.but_save.place(relx=0.6,rely=0.5,anchor='center')
+        self.but_quit.pack(side='left',padx=25, pady=5)
+        self.but_save.pack(side='right',padx=25, pady=5)
+        self.frame_texte.pack(side='top',fill='both',expand=1)
+        self.frame_boutons.pack(side='bottom')
+        self.zone_texte.focus_set()
+        self.fenetre.bind('<Return>',self.quit) #dismiss window
+
+        # affichage du texte
+        self.affiche_texte(self.texte)
+        self.zone_texte.config(state=DISABLED)
+        centerwindow(self.fenetre)
+        self.fenetre.deiconify()
+
+    def page_up(self,event):
+        event.widget.yview_scroll(-1, "page")
+        return "break" #Pour eviter la propagation de l'evenement a la fenetre principale
+    def page_down(self,event):
+        event.widget.yview_scroll(1, "page")
+        return "break" #Pour eviter la propagation de l'evenement a la fenetre principale
+    def unit_up(self,event):
+        event.widget.yview_scroll(-1, "unit")
+        return "break" #Pour eviter la propagation de l'evenement a la fenetre principale
+    def unit_down(self,event):
+        event.widget.yview_scroll(1, "unit")
+        return "break" #Pour eviter la propagation de l'evenement a la fenetre principale
+
+    def wait(self):
+        self.fenetre.grab_set()
+        self.zone_texte.focus_set()
+        self.fenetre.wait_window(self.fenetre)
+
+    def quit(self,event=None):
+        self.fenetre.destroy()
+        return "break" #Pour eviter la propagation de l'evenement a la fenetre principale
+
+    def efface_scroll(self):
+        """ Efface le scroll lorsqu'il n'est pas nécessaire : ne marche pas"""
+        self.scroll_v.pack_forget()
+        #self.scroll_h.pack_forget()
+
+    def affiche_texte(self,texte):
+        """ Affiche le texte dans la fenêtre """
+        if texte != "" :
+            self.zone_texte.insert(END,texte)
+            try:
+                self.fenetre.update_idletasks()
+                x0,y0,x1,y1 = self.zone_texte.bbox(END)
+                if (y1-y0) < 300 : self.efface_scroll()
+            except:
+                pass
+
+    def save(self):
+        """ Permet de sauvegarder le texte dans un fichier dont on a demandé le nom
+        à l'utilisateur """
+        file = asksaveasfilename(parent=self.fenetre,defaultextension = '.comm',
+                               #initialdir = self.appli.CONFIGURATION.rep_user,
+                               initialdir = self.appli.CONFIGURATION.initialdir,
+                               title="Sauvegarde du "+self.titre)
+        if file :
+            if not save_in_file(file,self.texte,None) :
+                showerror("Sauvegarde impossible",
+                       "Impossible de sauvegarder le texte dans le fichier spécifié\n"+
+                          "Vérifiez les droits d'écriture",parent=self.fenetre)
+            else:
+                showinfo("Sauvegarde effectuée","Sauvegarde effectuée dans le fichier %s" %file,parent=self.fenetre)
+
+    def destroy(self):
+        try :
+           self.fenetre.destroy()
+        except :
+           pass
+
+class FenetreSurLigneWarning(Fenetre):
+
+    def affiche_texte(self,texte):
+        """ Affiche le texte dans la fenêtre """
+        ligne=0
+        if texte != "" :
+           texte_cr=texte.splitlines()
+           for l in texte_cr:
+                ligne=ligne+1
+                l=l+"\n"
+                self.zone_texte.insert(END,l)
+                if (l.find("WARNING") > -1) or (l.find("ERROR") > -1) : 
+                   self.zone_texte.tag_add( "Rouge", str(ligne)+".0", "end-1c" )
+                   self.zone_texte.tag_config("Rouge", foreground='red')
+           try:
+                self.fenetre.update_idletasks()
+                x0,y0,x1,y1 = self.zone_texte.bbox(END)
+                if (y1-y0) < 300 : self.efface_scroll()
+           except:
+                pass
+
+class FenetreYesNo(Fenetre):
+    def __init__(self,appli,titre="",texte="",yes="Yes",no="No"):
+        self.appli=appli
+        self.fenetre = Toplevel()
+        self.fenetre.configure(width = 800,height=500)
+        self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
+        self.fenetre.title(titre)
+        self.texte = string.replace(texte,'\r\n','\n')
+        self.titre = titre
+        fonte=fontes.standardcourier10
+        # définition des frames
+        self.frame_texte = Frame(self.fenetre)
+        self.frame_boutons = Frame(self.fenetre)
+        self.frame_boutons.place(relx=0,rely=0,    relwidth=1.,relheight=0.1)
+        self.frame_texte.place(  relx=0,rely=0.1,  relwidth=1, relheight=0.9)
+        # définition de la zone texte et du scrollbar
+        self.zone_texte = Text(self.frame_texte,font=fonte)
+        self.zone_texte.bind("<Key-Prior>", self.page_up)
+        self.zone_texte.bind("<Key-Next>", self.page_down)
+        self.zone_texte.bind("<Key-Up>", self.unit_up)
+        self.zone_texte.bind("<Key-Down>", self.unit_down)
+        self.scroll_v = Scrollbar (self.frame_texte,command = self.zone_texte.yview)
+        #self.scroll_h = Scrollbar (self.frame_texte,command = self.zone_texte.xview)
+        self.scroll_v.pack(side='right',fill ='y')
+        #self.scroll_h.pack(side='bottom',fill ='x')
+        self.zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10)
+        self.zone_texte.configure(yscrollcommand=self.scroll_v.set)
+        # définition des boutons
+        self.but_yes = Button(self.frame_boutons,text = yes,command=self.yes)
+        self.but_no = Button(self.frame_boutons,text = no,command = self.no)
+        self.but_yes.place(relx=0.4,rely=0.5,anchor='center')
+        self.but_no.place(relx=0.6,rely=0.5,anchor='center')
+        # affichage du texte
+        self.affiche_texte(self.texte)
+        centerwindow(self.fenetre)
+
+    def yes(self):
+        self.result=1
+        self.quit()
+
+    def no(self):
+        self.result=0
+        self.quit()
+
+class FenetreDeSelection(Fenetre):
+    """ Classe dérivée de Fenêtre permettant la récupération d'une zone de texte sélectionnée.
+        Cette classe est utilisée pour affecter une liste de valeurs à un mot-clé.
+    """
+    def __init__(self,panel,item,appli,titre="",texte="",cardinal=1):
+        Fenetre.__init__(self,appli,titre=titre,texte=texte)
+        self.frame_boutons.place_forget()
+        self.frame_texte.place_forget()
+        self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.8)
+        self.frame_boutons.place(relheight=0.2,relx=0,rely=0.8,relwidth=1.)
+
+        self.cardinal=cardinal
+        self.fenetre.configure(width = 320,height=400)
+        centerwindow(self.fenetre)
+        self.panel = panel
+        self.item = item
+        self.fenetre.title(titre)
+        self.but_save.configure(text="Ajouter",command=self.traite_selection)
+        # séparateur par défaut
+        self.separateur = ';'
+        # création de la zone de saisie du séparateur
+        l_separateurs_autorises = self.get_separateurs_autorises()
+        self.choix_sep = Pmw.ComboBox(self.frame_boutons,
+                                      label_text = "Séparateur :",
+                                      labelpos = 'w',
+                                      listheight = 100,
+                                      selectioncommand = self.choose_separateur,
+                                      scrolledlist_items = l_separateurs_autorises)
+        self.choix_sep.component('entry').configure(width=6)
+        self.choix_sep.place(relx=0.01,rely=0.5,anchor='w')
+        self.choix_sep.selectitem(self.separateur)
+        # Replacement
+        self.but_quit.place_forget()
+        self.but_save.place_forget()
+        self.but_all  = Button(self.frame_boutons,text = "Tout Sélectionner", command=self.tout)
+        self.but_save.place(relx=0.6,rely=0.6,anchor='center')
+        self.but_quit.place(relx=0.8,rely=0.6,anchor='center')
+        self.but_all.place(relx=0.7,rely=0.2,anchor='center')
+        self.choose_separateur('espace')
+     
+
+    def get_separateurs_autorises(self):
+        """
+        Retourne la liste des séparateurs autorisés
+        """
+        return ['espace',';',',']
+
+    def choose_separateur(self,nom_sep):
+        """
+        Affecte à self.separateur le caractère séparateur correspondant à nom_sep
+        """
+        if nom_sep == 'espace' :
+            self.separateur = ' '
+        else:
+            self.separateur = nom_sep
+        
+    def tout(self):
+        liste=[]
+        texte=self.texte.splitlines()
+        for l in texte :
+            for mot in string.split(l,self.separateur):
+               if mot != '' and mot != ' ' and mot != self.separateur :
+                  liste.append(mot)
+        self.traite_selection(liste)
+
+    def traite_selection(self,liste=None):
+        """ Cette méthode effectue tous les traitements nécessaires pour vérifier
+            et affecter la liste de valeurs à l'objet réprésenté par self.item
+        """
+        # Récupère la liste des chaines de caractères de la zone sélectionnée
+        message=""
+        if liste == None:
+           message,liste = self.recupere_liste()
+        if self.test_probleme(message,"Sélectionnez des données") == 0:
+            return
+        # Vérifie que le nombre de données est dans les limites attendues
+        message = self.verif_liste(liste)
+        if self.test_probleme(message,"Vérifiez le nombre de données") == 0:
+            return
+        # Crée une liste de valeurs du type attendu
+        message,liste_valeurs = self.creation_liste_valeurs(liste)
+        if self.test_probleme(message,"Vérifiez le type des données") == 0:
+            return
+        # Vérifie que chaque valeur est dans le domaine exigé
+        message = self.verif_valeurs(liste_valeurs)
+        if self.test_probleme(message,"Vérifiez le domaine des valeurs") == 0:
+            return
+        # Ajoute les valeurs dans la liste de valeurs du mot-clé
+        if self.cardinal != 1 :
+           nb=self.cardinal
+           l_valeurs=[]
+           # a ameliorer
+           if (len(liste_valeurs)%nb != 0):
+                message="La cardinalité n'est pas correcte"
+                self.test_probleme(message,"On attend des tuples")
+                return
+           for i in range(len(liste_valeurs)/nb) :
+               if (nb==2):
+                   t=(liste_valeurs[i*nb], liste_valeurs[i*nb+1])
+               elif (nb ==3):
+                   t=(liste_valeurs[i*nb], liste_valeurs[i*nb+1], liste_valeurs[i*nb+2])
+               else :
+                  print "probleme : prevenir la maintenance Eficas"
+                  return
+               l_valeurs.append(t)
+           liste_valeurs=l_valeurs
+        self.ajouter_valeurs(liste_valeurs)
+        self.appli.affiche_infos("Liste de valeurs acceptée")
+
+    def test_probleme(self, message, message_eficas):
+        """ Cette méthode affiche un message d'erreur si message != ''
+            et retourne 0, sinon retourne 1 sans rien afficher.
+        """
+        if message != "":
+            showinfo("Problème",message,parent=self.fenetre)
+            self.fenetre.tkraise()
+            self.appli.affiche_infos(message_eficas)
+            return 0
+        else:
+            return 1
+
+    def recupere_liste(self):
+        """ Cette méthode récupère le texte de la zone sélectionnée, construit et
+            retourne une liste avec les chaines qui se trouvent entre les séparateurs.
+            S'il n'y a pas de données selectionnées, elle retourne un message d'erreur
+            et une liste vide.
+        """
+        message = ""
+        try:
+            selection=self.fenetre.selection_get()
+        except:
+            message = "Pas de donnée sélectionnée"
+            return message,None
+        # les retours chariots doivent être interprétés comme des séparateurs
+        selection = string.replace(selection,'\n',self.separateur)
+        # on splitte la sélection suivant le caractère séparateur
+        liste_chaines = string.split(selection,self.separateur)
+        l_chaines = []
+        for chaine in liste_chaines:
+            chaine = string.strip(chaine)
+            if chaine != '' : l_chaines.append(chaine)
+        return message,l_chaines
+
+    def verif_liste(self, liste):
+        """ Cette méthode effectue des tests sur le nombre d'éléments de la liste
+            et retourne 1 si la liste est correcte, sinon 0 et le message d'erreur
+            correspondant.
+        """
+        message = ""
+        # nombre d'éléments sélectionnés
+        nombre_elements = len(liste)
+        # nombre d'éléments déja dans la liste du panel
+        nombre_in_liste = len(self.panel.Liste_valeurs.get_liste())
+        multiplicite = self.item.GetMultiplicite()
+        if (nombre_elements % multiplicite) != 0:
+            message = "Vous devez sélectionner "+str(multiplicite)+" * n données"
+            return message
+        nombre_valeurs = nombre_elements / multiplicite
+        cardinalite = self.item.GetMinMax()
+        if nombre_valeurs < cardinalite[0]:
+            message = "Vous devez sélectionner au moins "+str(cardinalite[0])+" valeurs"
+            return message
+        if cardinalite[1] != "**" and nombre_valeurs > (long(cardinalite[1])-nombre_in_liste):
+            message = "La liste ne peut avoir plus de "+str(cardinalite[1])+" valeurs"
+            return message
+
+        return message
+
+    def creation_liste_valeurs(self, liste):
+        """ Cette méthode crée et retourne une liste de valeurs du type attendu
+            par le mot-clé. La liste de valeurs est créée à partir de la liste
+            de chaines de caractères transmise.
+        """
+        type_attendu = self.item.GetType()[0]
+        if type_attendu == 'R':
+            return self.convertir(liste, f_conversion= float)
+        elif type_attendu == 'I':
+            return self.convertir(liste, f_conversion= int)
+        elif type_attendu == 'TXM':
+            return self.convertir(liste)
+        else:
+            message = "Seuls les entiers, les réels et les chaines de caractères sont convertis"
+            return message,None
+
+    def convertir(self, liste, f_conversion=None):
+        """ Cette méthode essaie de convertir les éléments de la liste avec la
+            fonction f_conversion si elle existe, et retourne la liste des
+            éléments dans le type voulu en cas de succès, sinon retourne None.
+        """
+        liste_valeurs = []
+        message = ""
+        for chaine in liste:
+            if f_conversion:
+                try:
+                    liste_valeurs.append(f_conversion(chaine))
+                except:
+                    message = "Impossible de convertir "+chaine+" dans le type attendu"
+                    return message,None
+            else:
+                liste_valeurs.append(chaine)
+        return message,liste_valeurs
+
+    def verif_valeurs(self, liste_valeurs):
+        """ Cette méthode teste la validité de tous les éléments de la liste,
+            retourne un message vide s'ils sont valides
+            ou un message non vide au premier élément non valide rencontré
+        """
+        message = ""
+        for valeur in liste_valeurs:
+            test,message = self.item.object.verif_type(valeur)
+            if test == 0: return message
+        return message
+
+    def ajouter_valeurs(self, liste_valeurs):
+        """ Cette méthode ajoute les nouvelles valeurs à la liste existante."""
+        liste = self.panel.Liste_valeurs.get_liste()
+        liste.extend(liste_valeurs)
+        self.panel.Liste_valeurs.put_liste(liste)
+
+class FenetreDeParametre(Fenetre) :
+    def __init__(self,parent,item,appli,texte):
+        self.parent=parent
+        self.appli=appli
+        self.fenetre = Toplevel()
+        self.fenetre.configure(width = 250,height=100)
+        self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
+        self.fenetre.title("Parametres")
+        self.titre = "Parametres"
+        self.texte = string.replace(texte,'\r\n','\n')
+        fonte=fontes.standardcourier10
+
+        # définition des frames
+        self.frame_texte = Frame(self.fenetre)
+        self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.7)
+        # définition de la zone texte et du scrollbar
+        self.zone_texte = Text(self.frame_texte,font=fonte)
+        self.zone_texte.bind("<Key-Prior>", self.page_up)
+        self.zone_texte.bind("<Key-Next>", self.page_down)
+        self.zone_texte.bind("<Key-Up>", self.unit_up)
+        self.zone_texte.bind("<Key-Down>", self.unit_down)
+        self.scroll_v = Scrollbar (self.frame_texte,command = self.zone_texte.yview)
+        self.scroll_v.pack(side='right',fill ='y')
+        self.zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10)
+        self.zone_texte.configure(yscrollcommand=self.scroll_v.set)
+        # affichage du texte
+        self.affiche_texte(self.texte)
+        self.zone_texte.config(state="disabled")
+
+        # définition des boutons
+        self.frame_boutons = Frame(self.fenetre)
+        self.frame_boutons.place(relheight=0.3,relx=0,rely=0.65,relwidth=1.)
+        self.label1 = Label(self.frame_boutons,text="surligner la")
+        self.label2 = Label(self.frame_boutons,text="ligne entière")
+        self.label1.place(relx=0.1,rely=0)
+        self.label2.place(relx=0.1,rely=0.5)
+        self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit)
+        self.but_save = Button(self.frame_boutons,text = "Choisir",command = self.Choisir)
+        self.but_save.place(relx=0.6,rely=0,relheight=1)
+        self.but_quit.place(relx=0.8,rely=0,relheight=1)
+
+
+    def Choisir(self):
+        try:
+            selection=self.zone_texte.selection_get()
+        except:
+            showerror("Pas de donnée sélectionnée",
+                       "Selectionner un parametre")
+        l_param = ""
+        for param in selection.splitlines():
+            nomparam=param[0:param.find("=")-1]
+            if nomparam != '' : 
+                l_param=l_param+nomparam+','
+        self.parent.entry.delete(0,Tkinter.END)
+        self.parent.entry.insert(0,l_param[0:-1])
+        self.parent.valid_valeur()
+        self.quit()
+
+class Formulaire:
+    """
+    Cette classe permet de créer une boîte Dialog dans laquelle
+    on affiche un formulaire à remplir par l'utilisateur
+    """
+    def __init__(self,fen_pere,obj_pere=None,titre="",texte="",items=(),mode='query',commande=None):
+        self.resultat=0
+        if items in ((),[]) : return
+        self.items = items
+        self.titre = titre
+        self.texte = texte
+        self.fen_pere = fen_pere
+        self.obj_pere = obj_pere
+        self.mode= mode
+        self.command = commande
+        self.display()
+
+    def display(self):
+        self.init_validateurs()
+        self.init_fenetre()
+        self.init_texte()
+        self.init_items_formulaire()
+        self.fenetre.activate(geometry='centerscreenalways')
+
+    def init_validateurs(self):
+        """
+        Crée le dictionnaire des validateurs des objets reconnus par le formulaire
+        """
+        self.d_validateurs = {}
+        self.d_validateurs['rep']  = self.repvalidator
+        self.d_validateurs['file'] = self.filevalidator
+        self.d_validateurs['cata']= self.catavalidator
+        self.d_validateurs['mot']= self.motvalidator
+        self.d_validateurs['mot2']= self.mot2validator
+        self.d_validateurs['mot3']= self.mot3validator
+        self.d_validateurs['mot4']= self.mot4validator
+        
+    def init_fenetre(self):
+        """
+        Crée la fenêtre Dialog
+        """
+        if self.mode == 'query':
+            buttons=('Valider','Annuler')
+            defaultbutton = 'Valider'
+        elif self.mode == 'display':
+            if self.command :
+                buttons=(self.command[0],'OK')
+                defaultbutton = 'OK'
+            else:
+                buttons=('OK')
+                defaultbutton = 'OK'
+        self.fenetre = Pmw.Dialog(self.fen_pere,
+                                  buttons=buttons,
+                                  defaultbutton = defaultbutton,
+                                  title = self.titre,
+                                  command = self.execute)
+        self.fenetre.withdraw()
+        
+    def init_texte(self):
+        """
+        Crée le label qui affiche le texte à l'intérieur du panneau
+        """
+        fonte=fontes.standard
+        fr_texte = Frame(self.fenetre.interior(),height=60)
+        fr_texte.pack(side='top',fill='x',expand=1)
+        Label(fr_texte,text = self.texte, font=fonte).place(relx=0.5,rely=0.5,anchor='center')
+
+    def init_items_formulaire(self):
+        """
+        Crée et affiche les items dans la boîte de dialogue
+        """
+        self.radiobut = 0
+        self.widgets = []
+        self.item_widgets = {}
+        length_maxi = 0
+        for item in self.items:
+            if len(item[0])>length_maxi : length_maxi = len(item[0])
+        window = self.fenetre.interior()
+        for item in self.items :
+            if len(item) == 4 :
+               label,nature,nom_var,defaut = item
+               chaine="Yes" 
+               chaine2="No"
+            else :
+               label,nature,nom_var,defaut,chaine,chaine2 = item
+          
+            # création de la frame
+            fr_item = Frame(window,height=40,width=700)
+            fr_item.pack(side='top',fill='x',expand=1)
+            # création du label
+            Label(fr_item,text = label).place(relx=0.05,rely=0.4)
+            if nature in ('rep','file','cata','mot','mot2','mot3','mot4'):
+                # création de l'entry
+                e_item = Entry(fr_item) 
+                e_item.place(relx=0.5,rely=0.4,relwidth=0.45)
+                self.widgets.append(e_item)
+                self.item_widgets[item] = e_item
+                if defaut : e_item.insert(0,str(defaut))
+            elif nature == 'YesNo':
+                # création de la StringVar
+                var = StringVar()
+                setattr(self,'item_'+nom_var,var)
+                var.set(defaut)
+                # création du radiobouton
+                rb1 = Radiobutton(fr_item,text=chaine,variable=var,value='OUI')
+                rb2 = Radiobutton(fr_item,text=chaine2,variable=var,value='NON')
+                rb1.place(relx=0.65,rely=0.5,anchor='center')
+                rb2.place(relx=0.80,rely=0.5,anchor='center')
+                self.widgets.append((rb1,rb2))
+                self.item_widgets[item] = var
+        # détermination de la méthode à appliquer sur les boutons
+        if self.mode == 'query':
+            function = self.active
+        elif self.mode == 'display':
+            function = self.inactive
+        else:
+            return
+        # on applique la méthode sur les boutons (activation ou désactivation)  
+        for widget in self.widgets :
+            if type(widget) == types.TupleType:
+                for widg in widget :
+                    apply(function,(widg,),{})
+            else:
+                apply(function,(widget,),{})
+
+    def active(self,widget):
+        """
+        Active le widget passé en argument
+        """
+        widget.configure(state='normal',bg='white')
+
+    def inactive(self,widget):
+        """
+        Inactive le widget passé en argument
+        """
+        if not isinstance(widget,Radiobutton) :
+            widget.configure(state='disabled',bg='gray95')
+        else :
+            widget.configure(state='disabled')
+
+# --------------------------------------------------------------------------------
+#       Validateurs des noms de répertoire, de fichiers et de catalogues
+# -------------------------------------------------------------------------------
+
+    def motvalidator(self,text):
+        text2="("+text+")"
+        return self.motlongueurvalidator(text2,1) 
+
+    def mot2validator(self,text):
+        return self.motlongueurvalidator(text,2) 
+
+    def mot3validator(self,text):
+        return self.motlongueurvalidator(text,3) 
+
+    def mot4validator(self,text):
+        return self.motlongueurvalidator(text,4) 
+
+    def motlongueurvalidator(self,text,longueur):
+        try :
+          if ((text[0] != "(") or (text[-1] != ")")) : return 0
+          if len(text.split(",")) != longueur : return 0
+          return 1
+        except :
+          return 0
+
+    def repvalidator(self,text):
+        """
+        Teste si text peut faire référence à un répertoire ou non
+        Retourne 1 si valide, 0 sinon
+        """
+        return os.path.isdir(text),'Répertoire introuvable : %s' %text
+
+    def filevalidator(self,text):
+        """
+        Teste si text peut faire référence à un fichier ou non
+        Retourne 1 si valide, 0 sinon
+        """
+        return os.path.isfile(text),'Fichier introuvable : %s' %text
+
+    def catavalidator(self,text):
+        """
+        Teste si  text est un chemin d'accès valide à un catalogue
+        Retourne 1 si valide, 0 sinon
+        """
+        return os.path.isfile(text),"Catalogue introuvable : %s" %text
+
+# --------------------------------------------------------------------------------
+#       Méthodes callbacks des boutons et de fin
+# --------------------------------------------------------------------------------
+        
+    def execute(self,txt):
+        """
+        Cette commande est activée à chaque clic sur un bouton.
+        Redirige l'action sur la bonne méthode en fonction du bouton activé
+        """
+        if txt == 'Valider':
+            self.fini()
+        elif txt in ('OK','Annuler'):
+            self.quit()
+        elif txt == 'Modifier':
+            self.resultat = apply(self.command[1],(),{})
+            self.fenetre.destroy()
+        else :
+            print "Nom de bouton inconnu"
+            self.quit()
+
+    def fini(self):
+        """
+        Commande qui termine le panneau et sauvegarde les nouvelles options
+        dans l'objet resultat (dictionnaire)
+        """
+        dico={}
+        for item,widget in self.item_widgets.items():
+            nom_var = item[2]
+            type_var = item[1]
+            valeur = widget.get()
+            if self.d_validateurs.has_key(type_var):
+                test = self.d_validateurs[type_var](valeur)
+                if not test :
+                    # une entrée n'est pas valide --> on la met en surbrillance et on quitte la méthode
+                    # sans tuer la fenêtre bien sûr
+                    widget.selection_range(0,END)
+                    return
+            dico[nom_var] = valeur
+        self.fenetre.destroy()    
+        self.resultat=dico
+        
+    def quit(self):
+        self.fenetre.destroy()
+        self.resultat=None
+        
+class ListeChoix :
+    """ Cette classe est utilisée pour afficher une liste de choix passée en paramètre
+        en passant les commandes à lancer suivant différents bindings """
+    def __init__(self,parent,page,liste,liste_commandes=[],liste_marques =[],active ='oui',filtre='non',titre='',
+                 optionReturn=None, fonte_titre=fontes.standard_gras_souligne):
+        self.parent = parent
+        self.page = page
+        self.liste = liste
+        self.dico_labels={}
+        self.dico_mots={}
+        self.nBlabel = 0
+        self.dico_place={}
+       self.dico_mots={}
+        self.selection = None
+        self.liste_commandes = liste_commandes
+        self.liste_marques = liste_marques
+        self.arg_selected=''
+        self.active = active
+        self.titre = titre
+        self.filtre = filtre
+        self.optionReturn = optionReturn
+        self.fonte_titre=fonte_titre
+        self.init()
+
+    def init(self):        
+        self.make_label_titre()
+        self.make_entry_filtre()
+        self.make_text_box()
+        try:
+            self.entry.component('entry').focus()
+        except:
+            pass
+
+    def make_label_titre(self):
+        """ Crée le label correspondant au titre """
+        if self.titre == '' : return
+        self.label = Label(self.page,
+                           text = self.titre,
+                           font = self.fonte_titre)
+        self.label.pack(side='top',pady=2)
+        
+    def make_entry_filtre(self):
+        """ Crée l'entry permettant à l'utilisateur d'entrer un filtre de sélection dans la liste """
+        if self.filtre != 'oui' : return
+        self.entry = Pmw.EntryField(self.page,labelpos='w',
+                                    label_text="Filtre :",
+                                    command=self.entry_changed)
+        self.entry.pack(side='top',pady=2)
+        
+    def make_text_box(self):
+        """ Crée la fenêtre texte dans laquelle sera affichée la liste """
+        self.MCbox = Text (self.page,relief='sunken',bg='gray95',bd=2)
+        self.MCscroll = Scrollbar (self.page,command = self.MCbox.yview)
+        self.MCscroll.pack(side='right',fill ='y',pady=2)
+        self.MCbox.pack(fill='y',expand=1,padx=2,pady=2)
+        self.MCbox.configure(yscrollcommand=self.MCscroll.set)
+
+
+    def affiche_liste(self):
+        """ Affiche la liste dans la fenêtre"""
+        liste_labels=[]
+        self.MCbox.config(state=NORMAL)
+        self.MCbox.delete(1.0,END)
+        self.nBlabel = 0
+        self.dico_place={}
+        for objet in self.liste :
+          if type(objet) == types.InstanceType:
+              try:
+                  mot = objet.nom
+              except:
+                  mot = str(objet)
+          elif type(objet) in (types.StringType,types.IntType):
+              mot = objet
+          elif type(objet) == types.FloatType :
+              mot = self.parent.get_valeur_texte(objet)
+              if mot == "" :
+                 mot = str(objet)
+          elif type(objet) == types.TupleType :
+              mot="("
+              premier=1
+              for val in objet:
+                 if (not premier):
+                   mot=mot+"," 
+                 else:
+                   premier=0
+                 valtexte = self.parent.get_valeur_texte(val)
+                 if valtexte != "" :
+                    mot=mot+valtexte
+                 else:
+                    mot=mot+str(val)
+              mot=mot+")"
+          elif string.find(str(type(objet)),".SD.") :
+              mot=objet.nom
+          else :
+              mot=`objet`
+          label = Label(self.MCbox,
+                        text = mot,
+                        fg = 'black',bg = 'gray95',justify = 'left')
+          self.dico_labels[mot]=label
+          self.dico_place[mot]=self.nBlabel
+         self.dico_mots[label]=mot
+          self.nBlabel=self.nBlabel+1
+          liste_labels.append(label)
+          self.MCbox.window_create(END,
+                                   window=label,
+                                   stretch = 1)
+          self.MCbox.insert(END,'\n')
+          if self.optionReturn != None :
+              label.bind("<Return>",lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitemsurligne(x,l,c))
+              label.bind("<KP_Enter>",lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitemsurligne(x,l,c))
+          label.bind("<Key-Right>",lambda e,s=self,x=objet,l=label : s.selectNextItem(x,l))
+          label.bind("<Key-Down>",lambda e, s=self,x=objet,l=label : s.selectNextItem(x,l))
+          label.bind("<Key-Left>" ,lambda e,s=self,x=objet,l=label  : s.selectPrevItem(x,l))
+          label.bind("<Key-Up>" ,lambda e,s=self,x=objet,l=label  : s.selectPrevItem(x,l))
+          if self.active == 'oui':
+              label.bind(self.liste_commandes[0][0],lambda e,s=self,c=self.liste_commandes[0][1],x=objet,l=label : s.selectitem(x,l,c))
+              label.bind(self.liste_commandes[1][0],lambda e,s=self,c=self.liste_commandes[1][1],x=objet,l=label : s.deselectitem(l,x,c))
+              label.bind(self.liste_commandes[2][0],lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitem(x,l,c))
+
+        for marque in self.liste_marques:
+           try:
+              self.markitem(liste_labels[marque])
+           except:
+              pass
+
+        self.MCbox.config(state=DISABLED)
+        self.selection = None
+        self.dontselect=0
+        for event,callback in self.liste_commandes:
+            if event == "<Enter>":
+               self.selection=None,None,callback
+               break
+
+    def clear_marque(self):
+        try:
+          self.dico_labels[self.arg_selected].configure(bg='gray95',fg='black')
+          self.arg_selected = ''
+        except :
+          pass
+
+    def surligne(self,marque):
+        try :
+           self.highlightitem(self.dico_labels[marque])
+           self.arg_selected = marque
+        except:
+           pass
+
+    def chooseitemsurligne(self,mot,label,commande):
+        """ Active la méthode de choix passée en argument"""
+        try:
+           mot=self.arg_selected
+           commande(mot)
+        except AsException,e:
+           raison=str(e)
+           showerror(raison.split('\n')[0],raison)
+
+    def chooseitem(self,mot,label,commande):
+        """ Active la méthode de choix passée en argument"""
+        try:
+           commande(mot)
+        except AsException,e:
+           raison=str(e)
+           showerror(raison.split('\n')[0],raison)
+
+    def afficheMot(self,mot):
+        """ Pour contourner le bug sur l index 
+            on commence par la methode dite normale     
+            puis par la methode de contournement     
+            puis rien du tout 
+        """
+        try:
+             labelsuivant=self.dico_labels[mot]
+             index = self.MCbox.index(labelsuivant)
+             self.MCbox.see(index)
+        except :
+             posmot=self.dico_place[mot]
+             totale=self.nBlabel + 0.0
+             self.MCbox.yview_moveto(posmot/totale)
+
+    def selectNextItem(self,mot,label):
+        index=self.liste.index(mot)
+        indexsuivant=index+1
+        if indexsuivant > len(self.liste) -1:
+           indexsuivant=0
+        motsuivant=self.liste[indexsuivant]
+        labelsuivant=self.dico_labels[motsuivant]
+        self.afficheMot(motsuivant)
+        self.selectthis(motsuivant,labelsuivant,self.selection[2],)
+        self.dontselect=1
+           
+    def selectPrevItem(self,mot,label):
+        index=self.liste.index(mot)
+        indexprec=index-1
+        motprec=self.liste[indexprec]
+        labelprec=self.dico_labels[motprec]
+        self.afficheMot(motprec)
+        self.selectthis(motprec,labelprec,self.selection[2],)
+        self.dontselect=1
+        
+    def selectthis(self,mot,label,commande) :
+        self.clear_marque()
+        if self.selection != None :
+            self.deselectitem(self.selection[1],self.selection[0],self.selection[2],)
+        self.highlightitem(label)
+        self.selection = (mot,label,commande)
+        self.arg_selected = mot
+        if commande : commande(mot)
+
+    def selectitem(self,mot,label,commande) :
+        """ Met l'item sélectionné (représenté par son label) en surbrillance
+            et lance la commande associée au double-clic"""
+        if self.dontselect:
+           self.dontselect=0
+           return
+        self.selectthis(mot,label,commande)
+
+    def highlightitem(self,label) :
+        """ Met l'item représenté par son label en surbrillance """
+        label.focus_set()
+        label.configure(bg='#00008b',fg='white')
+        
+    def markitem(self,label):
+        """ Met l'item (représenté par son label) en rouge """
+        label.configure(bg='gray95',fg='red')
+        
+    def deselectitem(self,label,mot='',commande=None) :
+        """ Remet l'item (représenté par son label) en noir"""
+        if label:label.configure(bg='gray95',fg='black')
+        self.arg_selected = ''
+        if commande and mot : commande(mot)
+
+    def cherche_selected_item(self):
+        try :
+           index=self.MCbox.index(self.selection[1])
+           lign,col=map(int,string.split(index,'.'))
+        except :
+          label=self.dico_labels[self.arg_selected]
+           mot=self.dico_mots[label] 
+           lign=self.dico_place[mot]+1
+        return lign
+
+    def remove_selected_item(self):
+        try :
+           index=self.MCbox.index(self.selection[1])
+           lign,col=map(int,string.split(index,'.'))
+        except :
+          label=self.dico_labels[self.arg_selected]
+           mot=self.dico_mots[label] 
+           lign=self.dico_place[mot]+1
+        del self.liste[lign-1]
+        self.affiche_liste()
+
+    def entry_changed(self,event=None):
+        """ Cette méthode est invoquée chaque fois que l'utilisateur modifie le contenu
+        de l'entry et frappe <Return>"""
+        if self.arg_selected != '' : self.deselectitem(self.dico_labels[self.arg_selected])
+        filtre = self.entry.get()+"*"
+        FILTRE = string.upper(filtre)
+        self.dontselect=0
+        for arg in self.liste :
+            if fnmatch.fnmatch(arg,filtre) or fnmatch.fnmatch(arg,FILTRE) :
+                label=self.dico_labels[arg]
+                self.afficheMot(arg)
+                self.selectitem(arg,label,self.selection[2])
+                break
+
+        #try :
+          #self.dico_labels[self.arg_selected].focus_set()
+        #except :
+          #pass
+
+
+    # PN attention à la gestion des paramétres
+    # cela retourne H = 1 , et ni H, ni 1
+    #            print repr(val)
+    #            print val.__class__.__name__
+    def get_liste(self):
+        l=[]
+        for val in self.liste:
+#            try:
+#                v = eval(val)
+#                    l.append(v)
+#            except:
+                l.append(val)
+        return l
+    
+    def put_liste(self,liste):
+        self.liste = liste
+        self.affiche_liste()
+
+class Affichage :
+  """ Cette classe permet d'afficher au lancement d'EFICAS le message
+      d'attente et la barre de progression"""
+  def __init__(self,master,message,barre ='oui'):
+      from Tools.foztools.foztools import Slider
+      fonte=fontes.standard12_gras
+      self.master=master
+      self.frame = Frame(self.master)
+      self.frame.pack(expand=1,fill='both')
+      self.mess = Label(self.frame,text=message,justify='center',
+                        bd=2,relief='groove',font=fonte)
+      self.mess.pack(in_ = self.frame,side='top',expand=1,fill='both')
+      self.progress = Slider(self.frame,value=0,max=100,orientation='horizontal',
+                             fillColor='#00008b',width=200,height=30,
+                             background='white',labelColor='red')
+      if barre == 'oui':
+          self.progress.frame.pack(in_=self.frame,side='top')
+      self.master.update()
+      if barre == 'oui':
+          self.progress.frame.after(1000,self.update)
+
+  def configure(self,**options):
+      if options.has_key('message'):
+          self.mess.configure(text=options['message'])
+      if options.has_key('barre'):
+          if options['barre'] == 'oui' :
+              self.progress.frame.pack(in_=self.frame,side='top')
+          elif options['barre'] == 'non' :
+              self.progress.frame.pack_forget()
+      self.master.update_idletasks()
+      
+  def quit(self):
+      self.frame.destroy()
+      self.master.update()
+
+  def update(self,event=None):
+      """ Permet de faire avancer la barre de progression """
+      try :
+          bar=self.progress
+          bar.value = bar.value+self.increment
+          bar.update()
+          self.master.after(100,self.update)
+      except:
+          pass
+
+  def configure_barre(self,nb):
+      """ Calcule l'incrément de progression de la barre en fonction
+          du nombre d'opérations à effectuer afin que le compteur
+          soit à 100% à la fin des opérations"""
+      self.increment = 100./nb
+      self.progress.update()
+
+class Ask_Format_Fichier :
+    """
+    Cette classe permet de créer une fenêtre Toplevel dans laquelle
+    on propose le choix du format de fichier de commandes à ouvrir
+    """
+    def __init__(self,appli):
+        self.fenetre = Toplevel()
+        self.fenetre.configure(width = 250,height=150)
+        self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
+        self.fenetre.title("Choix du format du fichier de commandes")
+        # définition des frames
+        self.frame_texte = Frame(self.fenetre)
+        self.frame_radioboutons = Frame(self.fenetre)
+        self.frame_bouton_ok = Frame(self.fenetre)
+        self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.3)
+        self.frame_radioboutons.place(relheight=0.5,relx=0,rely=0.3,relwidth=1.)
+        self.frame_bouton_ok.place(relheight=0.2,relx=0,rely=0.8,relwidth=1.)
+        # définition de la zone texte et du scrollbar
+        zone_texte = Label(self.frame_texte,text = "Format du fichier à ouvrir :")
+        zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10)
+        # définition des radioboutons
+        Radiobutton(self.frame_radioboutons,text='Format Aster (Code_Aster --> v5)',
+                    variable=appli.format_fichier,value='Aster').pack(anchor='n')
+        Radiobutton(self.frame_radioboutons,text='Format Python (Code_Aster v6-->)',
+                    variable=appli.format_fichier,value='Python').pack(anchor='n')
+        # création du bouton OK
+        Button(self.frame_bouton_ok,text='OK',command=self.quit).pack(anchor='n')
+        # centrage de la fenêtre
+        centerwindow(self.fenetre)
+
+    def quit(self):
+        self.fenetre.destroy()
+
+class BARRE_K2000(Toplevel):
+    def __init__(self,master=None,text = ""):
+        Toplevel.__init__(self,master,relief='groove')
+        self.master.iconify()
+        self.geometry("250x100+0+0")
+        self.protocol("WM_DELETE_WINDOW",self.quit)
+        # frame principale dans self (= Toplevel)
+        self.frame = Frame(self)
+        self.frame.place(relwidth=1,relheight=1)
+        # frame contenant le texte à afficher 
+        self.frame_text = Frame(self.frame)
+        self.frame_text.place(relwidth=1,relheight=0.75,rely=0)
+        # frame contenant le canvas de la barre
+        self.frame_canv = Frame(self.frame)
+        self.frame_canv.place(relwidth=1,relheight=0.25,rely=0.75)
+        # canvas dans lequel sera affichée la barre K2000
+        self.canvas = Canvas(self.frame_canv)
+        self.canvas.place(relx=0.5,rely=0.5,relheight=0.8,relwidth=0.8,anchor='center')
+        # on affiche le texte et la barre
+        self.build_text(text)
+        self.build_batons()
+        #self.overrideredirect(1)
+        # on active la barre ...
+        self.master.after(1000,self.launch)
+        # on centre la fenêtre
+        centerwindow(self)
+        self.focus()
+
+    def build_text(self,text):
+        """
+        Affichage de text dans frame_text
+        """
+        self.texte_var = StringVar()
+        self.texte_var.set(text)
+        Label(self.frame_text,textvariable=self.texte_var).place(relx=0.5,rely=0.5,anchor='center')
+        
+    def build_batons(self):
+        """
+        Construit la suite de bâtons dans le canvas
+        """
+        self.l_batons=[]
+        self.black = -1
+        self.sens = 'D'
+        self.quit = 0
+        for i in range(0,40):
+            id = self.canvas.create_rectangle(i*5,0,(i+1)*5,20,fill='gray90',outline='')
+            self.l_batons.append(id)
+
+    def launch(self):
+        """
+        Active la barre K2000 en affichant les bâtons avec des couleurs en dégradé
+        """
+        if self.quit == 1 :
+            self.destroy()
+            self.master.deiconify()
+            return
+        if self.sens == 'D':
+            self.black = self.black+1
+            l_bat = self.l_batons[0:self.black+1]
+            l_bat.reverse()
+        elif self.sens == 'G':
+            self.black = self.black-1
+            l_bat = self.l_batons[self.black:]
+        i=0
+        for bat in l_bat :
+            num_color = 5+i*10
+            if num_color < 10 : color = 'black'
+            elif num_color > 90 : color = 'white'
+            else: color = 'gray'+`num_color`
+            self.canvas.itemconfigure(bat,fill=color)
+            i=i+1
+        if self.black == len(self.l_batons) :
+            self.sens = 'G'
+        if self.black == 0 and self.sens == 'G':self.sens = 'D'
+        self.after(80,self.launch)
+
+    def update_text(self,new_text):
+        """
+        Remplace le texte affiché par new_text
+        """
+        self.texte_var.set(new_text)
+        
+    def quit(self):
+        self.quit = 1        
+
+class ListeChoixParGroupes(ListeChoix) :
+    """ 
+        Cette classe est utilisée pour afficher une liste de commandes classées par
+        groupes. L'utilisateur peut réaliser des actions de selection
+        qui déclenchent des actions spécifiées par les bindings contenus dans liste_commandes
+        Exemple de binding:
+           liste_commandes = (("<Enter>",self.selectCmd),
+                              ("<Leave>",self.deselectCmd),
+                              ("<Double-Button-1>",self.defCmd))
+        Il s'agit d'une liste de doublets dont le premier element est un evenement et le 
+        deuxieme un callback a appeler sur l'evenement en question.
+
+    """
+    def __init__(self,parent,page,liste_groupes,dict_groupes,liste_commandes=[],liste_marques =[],
+                      active ='oui',filtre='non',titre='',optionReturn=None,fonte_titre=fontes.standard_gras_souligne):
+        self.parent = parent
+        self.page = page
+        self.liste_groupes = liste_groupes
+        self.dict_groupes = dict_groupes
+        self.dico_labels={}
+        self.selection = None
+        self.liste_commandes = liste_commandes
+        self.liste_marques = liste_marques
+        self.arg_selected=''
+        self.active = active
+        self.titre = titre
+        self.filtre = filtre
+        self.optionReturn = optionReturn
+        self.fonte_titre=fonte_titre
+        self.init()
+
+    def affiche_liste(self):
+        """ Affiche la liste dans la fenêtre"""
+        liste_labels=[]
+       self.dico_mots={}
+        self.MCbox.config(state=NORMAL)
+        self.MCbox.delete(1.0,END)
+        for grp in self.liste_groupes:
+           # On itère sur les groupes
+           if grp == "CACHE":continue
+           liste_commandes=self.dict_groupes[grp]
+           text="GROUPE<<<<<<<< "+grp+" "
+           text=text+">"*max(0,30-len(text))
+           label = Label(self.MCbox,
+                        text = text,
+                        fg = 'black',bg = 'gray95',justify = 'left')
+           # On stocke la relation entre le nom de la commande et le label
+           self.dico_labels[grp]=label
+           liste_labels.append(label)
+           self.MCbox.window_create(END,
+                                   window=label,
+                                   stretch = 1)
+           self.MCbox.insert(END,'\n')
+           for cmd in liste_commandes:
+              label = Label(self.MCbox,
+                        text = cmd,
+                        fg = 'black',bg = 'gray95',justify = 'left')
+              # On stocke la relation entre le nom de la commande et le label
+              self.dico_labels[cmd]=label
+             self.dico_mots[label]=cmd
+              self.MCbox.window_create(END,
+                                   window=label,
+                                   stretch = 1)
+              self.MCbox.insert(END,'\n')
+
+              def null(*tp,**args): return
+
+              if self.active == 'oui':
+                  # Traitement par defaut des evenements
+                  label.bind("<Enter>",lambda e,s=self,c=null,x=cmd,l=label: s.selectitem(x,l,c))
+                  label.bind("<Leave>",lambda e,s=self,c=null,x=cmd,l=label: s.deselectitem(l,x,c))
+                  label.bind("<Double-Button-1>",lambda e,s=self,c=null,x=cmd,l=label: s.chooseitem(x,l,c))
+                  label.bind("<Return>",lambda e,s=self,c=null,x=cmd,l=label: s.chooseitem(x,l,c))
+                  label.bind("<KP_Enter>",lambda e,s=self,c=null,x=cmd,l=label: s.chooseitem(x,l,c))
+                  label.bind("<Key-Right>",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectNextItem(x,l,c,gr,x))
+                  label.bind("<Key-Down>",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectNextItem(x,l,c,gr,x))
+                  label.bind("<Key-Left>",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectPrevItem(x,l,c,gr,x))
+                  label.bind("<Key-Up>",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectPrevItem(x,l,c,gr,x))
+
+                  # Si des callbacks sont definis on les utilise
+                  for event,callback in self.liste_commandes:
+                      if event == "<Enter>":
+                         label.bind("<Enter>",lambda e,s=self,c=callback,x=cmd,l=label: s.selectitem(x,l,c))
+                      elif event == "<Leave>":
+                         label.bind("<Leave>",lambda e,s=self,c=callback,x=cmd,l=label: s.deselectitem(l,x,c))
+                      elif event == "<Double-Button-1>":
+                         label.bind("<Double-Button-1>",lambda e,s=self,c=callback,x=cmd,l=label: s.chooseitem(x,l,c))
+                      elif event == "<Return>":
+                         label.bind("<Return>",lambda e,s=self,c=callback,x=cmd,l=label: s.chooseitem(x,l,c))
+                      elif event == "<KP_Enter>":
+                         label.bind("<KP_Enter>",lambda e,s=self,c=callback,x=cmd,l=label: s.chooseitem(x,l,c))
+                      elif event == "<Key-Right>":
+                         label.bind("<Key-Right>",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectNextItem(x,l,c,gr,x))
+                      elif event == "<Key-Down>":
+                         label.bind("<Key-Down>",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectNextItem(x,l,c,gr,x))
+                      elif event == "<Key-Left>":
+                         label.bind("<Key-Left>",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectPrevItem(x,l,c,gr,x))
+                      elif event == "<Key-Up>":
+                         label.bind("<Key-Up>",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectPrevItem(x,l,c,gr,x))
+                      else:
+                         label.bind(event,lambda e,s=self,c=callback,x=cmd,l=label: c())
+
+        for marque in self.liste_marques:
+           try:
+              self.markitem(liste_labels[marque])
+           except:
+              pass
+
+        self.MCbox.config(state=DISABLED)
+        self.selection = None
+        self.dontselect=0
+        for event,callback in self.liste_commandes:
+            if event == "<Enter>":
+               self.selection=None,None,callback
+               break
+
+    def selectPrevItem(self,mot,label,callback,group,cmd):
+        g=self.liste_groupes.index(group)
+        liste_commandes=self.dict_groupes[group]
+        c=liste_commandes.index(cmd)
+        if c > 0:
+           co=liste_commandes[c-1]
+        else:
+           # debut de liste. On passe au groupe precedent
+           if g > 0:
+              gr=self.liste_groupes[g-1]
+              co=self.dict_groupes[gr][-1]
+           else:
+              # debut des groupes. On ne fait rien
+              return
+        # On a trouve l'item precedent
+        labelsuivant=self.dico_labels[co]
+        index = self.MCbox.index(labelsuivant)
+        self.MCbox.see(index)
+        self.selectthis(co,labelsuivant,self.selection[2],)
+        self.dontselect=1
+
+    def selectNextItem(self,mot,label,callback,group,cmd):
+        g=self.liste_groupes.index(group)
+        liste_commandes=self.dict_groupes[group]
+        c=liste_commandes.index(cmd)
+        try:
+           co=liste_commandes[c+1]
+        except:
+           # fin de liste. On passe au groupe suivant
+           try:
+              gr=self.liste_groupes[g+1]
+              co=self.dict_groupes[gr][0]
+           except:
+              # fin des groupes. On ne fait rien
+              return
+        # On a trouve l'item suivant
+        labelsuivant=self.dico_labels[co]
+        index = self.MCbox.index(labelsuivant)
+        self.MCbox.see(index)
+        self.selectthis(co,labelsuivant,self.selection[2],)
+        self.dontselect=1
+
+    def entry_changed(self,event=None):
+        """ 
+            Cette méthode est invoquée chaque fois que l'utilisateur modifie le contenu
+            de l'entry et frappe <Return>
+        """
+        if self.arg_selected != '' : self.deselectitem(self.dico_labels[self.arg_selected])
+
+        filtre = self.entry.get()+"*"
+        FILTRE = string.upper(filtre)
+        #
+        # On cherche d'abord dans les noms de groupe
+        # puis dans les noms de commande groupe par groupe
+        #
+        for grp in self.liste_groupes:
+            if fnmatch.fnmatch(grp,filtre) or fnmatch.fnmatch(grp,FILTRE) :
+                cmd=self.dict_groupes[grp][0]
+                label=self.dico_labels[cmd]
+                index = self.MCbox.index(label)
+                self.MCbox.see(index)
+                self.selectitem(cmd,label,self.selection[2])
+                # On a trouve un groupe on arrete la recherche
+                return
+
+        for grp in self.liste_groupes:
+           for cmd in self.dict_groupes[grp] :
+              if fnmatch.fnmatch(cmd,filtre) or fnmatch.fnmatch(cmd,FILTRE) :
+                 label=self.dico_labels[cmd]
+                 index = self.MCbox.index(label)
+                 self.MCbox.see(index)
+                 self.selectitem(cmd,label,self.selection[2])
+                 # On a trouve une commande  on arrete la recherche
+                 return
+
diff --git a/Misc/traced.py b/Misc/traced.py
new file mode 100644 (file)
index 0000000..cece5ac
--- /dev/null
@@ -0,0 +1,47 @@
+indent = 0
+indStr = '  '
+
+def srepr(*argl,**argd):
+  #parse the arguments and create a string representation
+  args = []
+  for item in argl:
+      args.append('%s' % str(item))
+  for key,item in argd.items():
+      args.append('%s=%s' % (key,str(item)))
+  argstr = ','.join(args)   
+  return argstr
+
+def logfunc(f):
+  def _method(*argl,**argd):
+    global indent
+    print indStr*indent+f.__module__+"."+f.__name__+"("+srepr(*argl,**argd)+")"
+    indent += 1
+    r=f(*argl,**argd)
+    indent -= 1
+    print indStr*indent+str(r)
+    return r
+  return _method
+
+def logmeth(f):
+  def _method(self,*argl,**argd):
+    global indent
+    print indStr*indent+str(self)+"."+f.__name__+"("+srepr(*argl,**argd)+")"
+    indent += 1
+    r=f(self,*argl,**argd)
+    indent -= 1
+    print indStr*indent+str(r)
+    return r
+  return _method
+
+if __name__ == "__main__":
+  @logfunc
+  def g(a,b):
+    return a
+  class A:
+    @logmeth
+    def h(self,a):
+      return g(a,a)
+
+  g(1,2)
+  a=A()
+  a.h(1)
index 92a3a4cbbe30e60ac4f82fb97e5284a8bd62cdf3..79e7dcdc9320d6c90282f1061d7c64783b69c3e6 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_ASSD Noyau  DATE 02/04/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_ASSD Noyau  DATE 02/06/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -56,7 +56,8 @@ class ASSD(object):
         self.id = self.parent.reg_sd(self)
       else :
         self.id = self.parent.o_register(self)
-      
+      # permet de savoir si le concept a été calculé (1) ou non (0)
+      self.executed = 0
       # initialise la partie "sd"
       super(ASSD, self).__init__(nomj='?&?&?&?&')
       
diff --git a/Noyau/N_CONVERT.py b/Noyau/N_CONVERT.py
new file mode 100644 (file)
index 0000000..9d3443d
--- /dev/null
@@ -0,0 +1,102 @@
+#@ MODIF N_CONVERT Noyau  DATE 30/11/2007   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  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.        
+# ======================================================================
+
+"""
+   Module de conversion des valeurs saisies par l'utilisateur après vérification.
+"""
+
+# -----------------------------------------------------------------------------
+def is_int(real):
+   """Est-ce que 'real' a une valeur entière ?
+   """
+   return abs(int(real) - real) < 1.e-12
+
+# -----------------------------------------------------------------------------
+class Conversion:
+   """Conversion de type.
+   """
+   def __init__(self, name, typ):
+      self.name = name
+      self.typ  = typ
+
+   def convert(self, obj):
+      """Filtre liste
+      """
+      in_type = type(obj)
+      if in_type not in (list, tuple):
+         obj = (obj,)
+      
+      result = []
+      for o in obj:
+         result.append(self.function(o))
+      
+      if in_type not in (list, tuple):
+         return result[0]
+      else:
+         # ne marche pas avec MACR_RECAL qui attend une liste et non un tuple
+         return tuple(result)
+
+   def function(self, o):
+      raise NotImplementedError, 'cette classe doit être dérivée'
+
+# -----------------------------------------------------------------------------
+class TypeConversion(Conversion):
+   """Conversion de type
+   """
+   def __init__(self, typ):
+      Conversion.__init__(self, 'type', typ)
+
+# -----------------------------------------------------------------------------
+class IntConversion(TypeConversion):
+   """Conversion en entier
+   """
+   def __init__(self):
+      TypeConversion.__init__(self, 'I')
+
+   def function(self, o):
+      if type(o) is float and is_int(o):
+         o = int(o)
+      return o
+
+# -----------------------------------------------------------------------------
+class FloatConversion(TypeConversion):
+   """Conversion de type
+   """
+   def __init__(self):
+      TypeConversion.__init__(self, 'R')
+
+   def function(self, o):
+      if type(o) in (int, float, long):
+         o = float(o)
+      return o
+
+# -----------------------------------------------------------------------------
+_convertI = IntConversion()
+_convertR = FloatConversion()
+
+def ConversionFactory(name, typ):
+   if name == 'type':
+      if 'I' in typ:
+         return _convertI
+      elif 'R' in typ:
+         return _convertR
+   return None
+
+
index 02c13ef48f1608a5295631bdde9b62f92c613090..5ac04bf748f40a48d1748f4d831eb65493a6b9ad 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_FONCTION Noyau  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_FONCTION Noyau  DATE 18/12/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -26,8 +26,6 @@
 from __future__ import division
 
 from N_ASSD import ASSD
-import string
-
 from asojb import AsBase
 
 class FONCTION(ASSD):pass
@@ -50,7 +48,7 @@ class formule(ASSD,AsBase):
        res=eval(self.expression,self.jdc.const_context, context)
       except :
        print 75*'!'
-       print '! '+string.ljust('Erreur evaluation formule '+self.nom,72)+'!'
+       print '! ' + '%-72s' % ('Erreur evaluation formule '+self.nom) + '!'
        print 75*'!'
        raise
       return res
@@ -67,7 +65,7 @@ class formule(ASSD,AsBase):
         self.code=compile(texte,texte,'eval')
       except SyntaxError :
         print 75*'!'
-        print '! '+string.ljust('Erreur evaluation formule '+self.nom,72)+'!'
+        print '! ' + '%-72s' % ('Erreur evaluation formule '+self.nom) + '!'
         print 75*'!'
         raise
 
@@ -88,3 +86,33 @@ class formule(ASSD,AsBase):
       del d['code']
       return d
 
+   def Parametres(self):
+      """Equivalent de fonction.Parametres pour pouvoir utiliser des formules
+      à la place de fonctions dans certaines macro-commandes.
+      """
+      from SD.sd_fonction  import sd_formule
+      from Utilitai.Utmess import UTMESS
+      if not self.par_lot():
+        TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT', 'I':'INTERPRE' }
+        sd = sd_formule(self.get_name())
+        prol = sd.PROL.get()
+        nova = sd.NOVA.get()
+        if prol is None or nova is None:
+           UTMESS('F', 'SDVERI_2', valk=[objev])
+        dico={
+         'INTERPOL'    : ['LIN','LIN'],
+         'NOM_PARA'    : [s.strip() for s in nova],
+         'NOM_RESU'    : prol[3][0:16].strip(),
+         'PROL_DROITE' : TypeProl['E'],
+         'PROL_GAUCHE' : TypeProl['E'],
+        }
+      else:
+         raise Accas.AsException("Erreur dans fonction.Parametres en PAR_LOT='OUI'")
+      return dico
+
+
+class formule_c(formule):
+   pass
+
+
+
index 76bf97c855f5b8ecef4a99d00f46be7bb8db00b8..8a1fddaad7b6ab3695ca3734403c16bc66d4e7e1 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_GEOM Noyau  DATE 16/05/2006   AUTEUR DURAND C.DURAND 
+#@ MODIF N_GEOM Noyau  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -57,8 +57,8 @@ class GEOM(ASSD):
 
    def __convert__(cls,valeur):
       if isinstance(valeur, (str,unicode)):
-        return valeur
-      raise ValueError, 'On attend une chaine de caractères'
+         return valeur
+      raise ValueError, 'On attend un chaine de caractères'
    __convert__=classmethod(__convert__)
 
 class geom(GEOM):pass
index af1a3c07dd11d257222b196333dce98d21a8410b..d4d3222aff6766766f0f09ab7352133621231f35 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_JDC Noyau  DATE 30/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_JDC Noyau  DATE 01/04/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -35,6 +35,30 @@ import N_CR
 from N_Exception import AsException
 from N_ASSD import ASSD
 
+
+
+
+MemoryErrorMsg = """MemoryError :
+
+En général, cette erreur se produit car la mémoire utilisée hors du fortran
+(jeveux) est importante.
+
+Causes possibles :
+   - le calcul produit de gros objets Python dans une macro-commande ou
+     dans le jeu de commande lui-même,
+   - le calcul appelle un solveur (MUMPS par exemple) ou un outil externe
+     qui a besoin de mémoire hors jeveux,
+   - utilisation de jeveux dynamique,
+   - ...
+
+Solution :
+   - distinguer la mémoire limite du calcul (case "Mémoire totale" de astk)
+     de la mémoire réservée à jeveux (case "dont Aster"), le reste étant
+     disponible pour les allocations dynamiques.
+"""
+
+
+
 class JDC(N_OBJECT.OBJECT):
    """
       Cette classe interprete un jeu de commandes fourni sous
@@ -92,12 +116,15 @@ NONE = None
       #
       self.cr = self.CR(debut = "CR phase d'initialisation", 
                         fin = "fin CR phase d'initialisation")
-      self.g_context={}
+      # on met le jdc lui-meme dans le context global pour l'avoir sous
+      # l'etiquette "jdc" dans le fichier de commandes
+      self.g_context={ 'jdc' : self }
       # Liste pour stocker tous les concepts produits dans le JDC
       self.sds=[]
       # Dictionnaire pour stocker tous les concepts du JDC (acces rapide par le nom)
       self.sds_dict={}
       self.etapes=[]
+      self.index_etapes = {}
       self.mc_globaux={}
       self.current_context={}
       self.condition_context={}
@@ -112,13 +139,25 @@ NONE = None
          compte-rendu self.cr
       """
       try:
-        if self.appli != None : 
-           self.appli.affiche_infos('Compilation du fichier de commandes en cours ...')
-        self.proc_compile=compile(self.procedure,self.nom,'exec')
-      except SyntaxError,e:
-        if CONTEXT.debug : traceback.print_exc()
-        l=traceback.format_exception_only(SyntaxError,e)
-        self.cr.exception("Compilation impossible : "+string.join(l))
+         if self.appli != None : 
+            self.appli.affiche_infos('Compilation du fichier de commandes en cours ...')
+         self.proc_compile=compile(self.procedure,self.nom,'exec')
+      except SyntaxError, e:
+         if CONTEXT.debug : traceback.print_exc()
+         l=traceback.format_exception_only(SyntaxError,e)
+         self.cr.exception("Compilation impossible : "+string.join(l))
+      except MemoryError, e:
+         self.cr.exception(MemoryErrorMsg)
+      except SystemError, e:
+         erreurs_connues = """
+Causes possibles :
+ - offset too large : liste trop longue derrière un mot-clé.
+   Solution : liste = (valeurs, ..., )
+              MOT_CLE = *liste,
+"""
+         l=traceback.format_exception_only(SystemError,e)
+         l.append(erreurs_connues)
+         self.cr.exception("Compilation impossible : " + ''.join(l))
       return
 
    def exec_compile(self):
@@ -178,7 +217,12 @@ NONE = None
         # une erreur a ete identifiee
         if CONTEXT.debug :
           traceback.print_exc()
-        self.cr.exception(str(e))
+        # l'exception a été récupérée avant (où, comment ?),
+        # donc on cherche dans le texte
+        txt = str(e)
+        if txt.find('MemoryError') >= 0:
+           txt = MemoryErrorMsg
+        self.cr.exception(txt)
         CONTEXT.unset_current_step()
 
       except NameError,e:
@@ -241,6 +285,7 @@ NONE = None
          et retourne un numéro d'enregistrement
       """
       self.etapes.append(etape)
+      self.index_etapes[etape] = len(self.etapes) - 1
       return self.g_register(etape)
 
    def o_register(self,sd):
@@ -418,7 +463,7 @@ NONE = None
       # Si on insère des commandes (par ex, dans EFICAS), il faut préalablement
       # remettre ce pointeur à 0
       if etape:
-         index_etape=self.etapes.index(etape)
+         index_etape = self.index_etapes[etape]
       else:
          index_etape=len(self.etapes)
       if index_etape >= self.index_etape_courante:
@@ -429,7 +474,8 @@ NONE = None
          liste_etapes=self.etapes[self.index_etape_courante:index_etape]
       else:
          d=self.current_context={}
-         if self.context_ini:d.update(self.context_ini)
+         if self.context_ini:
+            d.update(self.context_ini)
          liste_etapes=self.etapes
 
       for e in liste_etapes:
@@ -459,5 +505,6 @@ NONE = None
           et remet à jour la parenté de l'étape et des concepts
        """
        self.etapes.append(etape)
+       self.index_etapes[etape] = len(self.etapes) - 1
        etape.reparent(self)
        etape.reset_jdc(self)
index 28940f2c2e9febd931f404946d0d6e8bdcf9d01f..c2a53700ed11ff79c22b1c223c37e0857e0c83fa 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_MACRO_ETAPE Noyau  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_MACRO_ETAPE Noyau  DATE 28/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -76,6 +76,7 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
       self.current_context={}
       self.index_etape_courante=0
       self.etapes=[]
+      self.index_etapes={}
       self.sds=[]
       #  Dans le cas d'une macro écrite en Python, l'attribut Outputs est un 
       #  dictionnaire qui contient les concepts produits de sortie 
@@ -268,7 +269,7 @@ Causes possibles :
       # Si on insère des commandes (par ex, dans EFICAS), il faut
       # préalablement remettre ce pointeur à 0
       if etape:
-         index_etape=self.etapes.index(etape)
+         index_etape = self.index_etapes[etape]
       else:
          index_etape=len(self.etapes)
 
@@ -426,6 +427,7 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
           et demande d enregistrement global aupres du JDC
       """
       self.etapes.append(etape)
+      self.index_etapes[etape] = len(self.etapes) - 1
       idetape=self.jdc.g_register(etape)
       return idetape
 
@@ -651,6 +653,7 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
           passée en argument (etape)
       """
       self.etapes=[]
+      self.index_etapes={}
       for etp in etape.etapes:
           new_etp=etp.copy()
           new_etp.copy_reuse(etp)
@@ -665,6 +668,8 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
                 self.NommerSdprod(new_sd,etp.sd.nom)
           new_etp.copy_intern(etp)
           self.etapes.append(new_etp)
+          self.index_etapes[new_etp] = len(self.etapes) - 1
+          
 
    def reset_jdc(self,new_jdc):
        """
index 2205ae343a94a3299afdc3ff4d6e6dfb9fb76d73..6509c70843f8dc4619ee6ec905eb47765e3b8bac 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_MCCOMPO Noyau  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_MCCOMPO Noyau  DATE 18/12/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -367,17 +367,17 @@ class MCCOMPO(N_OBJECT.OBJECT):
         mocle.reparent(self)
 
    def get_sd_utilisees(self):
-    """ 
+      """ 
         Retourne la liste des concepts qui sont utilisés à l'intérieur de self
         ( comme valorisation d'un MCS) 
-    """
-    l=[]
-    for child in self.mc_liste:
-      l.extend(child.get_sd_utilisees())
-    return l
+      """
+      l=[]
+      for child in self.mc_liste:
+         l.extend(child.get_sd_utilisees())
+      return l
 
    def get_sd_mcs_utilisees(self):
-    """ 
+      """ 
           Retourne la ou les SD utilisée par self sous forme d'un dictionnaire :
             - Si aucune sd n'est utilisée, le dictionnaire est vide.
             - Sinon, les clés du dictionnaire sont les mots-clés derrière lesquels on
@@ -387,13 +387,14 @@ class MCCOMPO(N_OBJECT.OBJECT):
                 { 'VALE_F': [ <Cata.cata.para_sensi instance at 0x9419854>,
                               <Cata.cata.para_sensi instance at 0x941a204> ],
                   'MODELE': [<Cata.cata.modele instance at 0x941550c>] }
-    """
-    dico = {}
-    for child in self.mc_liste:
-      daux = child.get_sd_mcs_utilisees()
-      for cle in daux.keys():
-        dico[cle] = daux[cle]
-    return dico
+      """
+      dico = {}
+      for child in self.mc_liste:
+         daux = child.get_sd_mcs_utilisees()
+         for cle in daux.keys():
+            dico[cle] = dico.get(cle, [])
+            dico[cle].extend(daux[cle])
+      return dico
 
    def get_mcs_with_co(self,co):
       """
index da2162fe5671d19bf1e1905742cfa14862f8e0f8..07462dd7fd09e0e5adc4cb7b81fa01a2cdb747a5 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_MCLIST Noyau  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_MCLIST Noyau  DATE 18/12/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -121,7 +121,7 @@ class MCList(UserList.UserList):
       """
       l=[]
       for child in self.data:
-        l.extend(child.get_sd_utilisees())
+         l.extend(child.get_sd_utilisees())
       return l
 
    def get_sd_mcs_utilisees(self):
@@ -136,12 +136,13 @@ class MCList(UserList.UserList):
                 { 'VALE_F': [ <Cata.cata.para_sensi instance at 0x9419854>,
                               <Cata.cata.para_sensi instance at 0x941a204> ],
                   'MODELE': [<Cata.cata.modele instance at 0x941550c>] }
-     """
+      """
       dico = {}
       for child in self.data:
-        daux = child.get_sd_mcs_utilisees()
-        for cle in daux.keys():
-          dico[cle] = daux[cle]
+         daux = child.get_sd_mcs_utilisees()
+         for cle in daux.keys():
+            dico[cle] = dico.get(cle, [])
+            dico[cle].extend(daux[cle])
       return dico
 
    def get_mcs_with_co(self,co):
index d85eda44b94ded7a1b2f9eb94692cff8be5a42ca..2f42ae93066f15d50551d8198f1a75c790c67e98 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_MCSIMP Noyau  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_MCSIMP Noyau  DATE 30/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -32,6 +32,7 @@ from copy import copy
 from Noyau.N_ASSD import ASSD,assd
 from Noyau.N_CO import CO
 import N_OBJECT
+from N_CONVERT import ConversionFactory
 
 class MCSIMP(N_OBJECT.OBJECT):
    """
@@ -58,6 +59,7 @@ class MCSIMP(N_OBJECT.OBJECT):
       self.nom=nom
       self.val = val
       self.parent = parent
+      self.convProto = ConversionFactory('type', typ=self.definition.type)
       self.valeur = self.GETVAL(self.val)
       if parent :
          self.jdc = self.parent.jdc
@@ -68,16 +70,17 @@ class MCSIMP(N_OBJECT.OBJECT):
          self.jdc = None
          self.niveau = None
          self.etape = None
-         
+
    def GETVAL(self,val):
       """ 
           Retourne la valeur effective du mot-clé en fonction
           de la valeur donnée. Defaut si val == None
       """
       if (val is None and hasattr(self.definition,'defaut')) :
-        return self.definition.defaut
-      else:
-        return val
+         val = self.definition.defaut
+      if self.convProto:
+         val = self.convProto.convert(val)
+      return val
 
    def get_valeur(self):
       """
index fbd8cc5655818b846e027e81e460cb649c0a5ffa..61a79a4ce4d679491a1d88898cda6123a3273147 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_VALIDATOR Noyau  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_VALIDATOR Noyau  DATE 09/10/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -80,7 +80,7 @@ class ListProtocol(Protocol):
     """Verificateur de protocole liste : convertit un objet quelconque en liste pour validation ultérieure"""
     def default(self,obj):
         if type(obj) == types.TupleType :
-            if obj[0] in ('RI','MP'):
+            if len(obj) > 0 and obj[0] in ('RI','MP'):
                 #il s'agit d'un complexe ancienne mode. La cardinalite vaut 1
                 return (obj,)
             else:
@@ -134,7 +134,7 @@ class TypeProtocol(PProtocol):
             else:
                 print "Type non encore géré %s" %`type_permis`
 
-        raise ValError("%s n'est pas d'un type autorisé: %s" % (repr(obj),typ))
+        raise ValError("%s (de type %s) n'est pas d'un type autorisé: %s" % (repr(obj),type(obj),typ))
 
     def is_complexe(self,valeur):
         """ Retourne 1 si valeur est un complexe, 0 sinon """
index cfd3f131761ce633b8eefe8fdff8d2618234cab1..0f1912467250483ff0252ee044a8db02883e15ec 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF ascheckers Noyau  DATE 23/05/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF ascheckers Noyau  DATE 28/11/2007   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -39,12 +39,18 @@ class Parmi(object):
         return "".join( l )
 
 class CheckLog(object):
-    """Un validateur qui enregistre toutes
-    les erreurs trouvées"""
+    """Un validateur qui enregistre toutes les erreurs trouvées.
+    checkedXXX répond True si la "marq" courante est inférieure ou égale
+    à la celle de la dernière vérification.
+    Si on incrémentait "marq" à chaque étape, on revérifie à chaque fois.
+    """
     def __init__(self):
-        self.msg = []
-        self.names = {}
-        self.optional = False
+        self.msg       = []
+        self.names     = {}
+        self.optional  = False
+        self._marq     = 1
+        self._lastmarq = self._marq
+        self._debug    = False
 
     def log(self, level, obj, msg ):
         if obj :
@@ -58,8 +64,40 @@ class CheckLog(object):
     def warn(self, obj, msg ):
         self.log( 1, obj, msg )
 
-    def visit(self, obj ):
-        self.names[obj.nomj()] = 1
+    def visitOJB(self, obj):
+        key = obj.nomj()
+        self.names[key] = self._marq
+
+    def visitAsBase(self, obj):
+        key = (obj.nomj(), obj.__class__.__name__)
+        self.names[key] = self._marq
+
+    def force(self, force=False):
+        if not force:
+           self._marq = 1
+        else:
+           self._lastmarq += 1
+           self._marq = self._lastmarq
+
+    def checkedOJB(self, obj):
+        key = obj.nomj()
+        res = self.names.get(key, 0) >= self._marq
+        self.help_dbg([key,], res)
+        return res
+
+    def checkedAsBase(self, obj):
+        key = (obj.nomj(), obj.__class__.__name__)
+        res = self.names.get(key, 0) >= self._marq
+        self.help_dbg(key, res)
+        return res
+
+    def help_dbg(self, key, res):
+        if self._debug:
+            if res:
+               s = 'ignore'
+            else:
+               s = 'check '
+            print '#DBG %6d %s : %s' % (self._marq, s, ', '.join(key))
 
     def __str__(self):
         d = { 0: "E", 1:"W" }
index eaf091ec1edc063eef06459aa0f52fa5a808c4c2..adc4b85ea8de928d87237aa07b263ed5a5f3af20 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF asojb Noyau  DATE 04/06/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF asojb Noyau  DATE 07/04/2008   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  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.        
+# 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.
 # ======================================================================
 
 """
@@ -29,7 +29,7 @@ import traceback,sys
 # pour utilisation dans eficas
 try:
    import aster
-   from Utilitai.Utmess import U2MESS as UTMESS
+   from Utilitai.Utmess import UTMESS
 except:
    pass
 
@@ -56,6 +56,11 @@ class AsBase(Type):
         if checker is None:
             checker = CheckLog()
 
+        # vérif déjà faite ? (en tenant compte du type)
+        if checker.checkedAsBase(self):
+            return checker
+        checker.visitAsBase( self )
+
         # vérifie les enfants :
         optional = checker.optional
         checker.optional = checker.optional or self.optional
@@ -70,9 +75,10 @@ class AsBase(Type):
                     try :
                         v( checker )
                     except :
-                        UTMESS("E", 'SDVERI_45')
+                        UTMESS("E", 'SDVERI_45')  # AJACOT NON
                         print 40*'-'
                         traceback.print_exc(file=sys.stdout)
+                        print self
 
         checker.optional = optional
         return checker
@@ -108,9 +114,22 @@ class AsBase(Type):
                 l.append( indent + line )
         return "\n".join( l )
 
-    def __repr__(self):
+    def short_repr(self):
         return "<%s(%x,%r)>" % (self.__class__.__name__, id(self), self.nomj() )
 
+    def long_repr(self):
+        if not hasattr(self, "par_lot") or self.par_lot():
+           # hors Aster ou en par_lot='oui'
+           return self.short_repr()
+        else:
+           from Cata.cata import IMPR_CO, _F
+           IMPR_CO(CONCEPT=_F(NOM=self.nom), UNITE=6)
+           return ''
+
+    def __repr__(self):
+        # par défaut, on fait court !
+        return self.short_repr()
+
 
 # -----------------------------------------------------------------------------
 class JeveuxAttr(object):
@@ -152,14 +171,22 @@ class JeveuxIntAttr(JeveuxAttr):
     def __get__(self, obj, klass):
         if obj is None:
             return self
-        return aster.jeveux_getattr( obj.nomj(), self.name )[0]
+        nomj = obj.nomj()
+        if aster.jeveux_exists( nomj ):
+            return aster.jeveux_getattr( nomj, self.name )[0]
+        else :
+            return None
 
 # -----------------------------------------------------------------------------
 class JeveuxStrAttr(JeveuxAttr):
     def __get__(self, obj, klass):
         if obj is None:
             return self
-        return aster.jeveux_getattr( obj.nomj(), self.name )[1].strip()
+        nomj = obj.nomj()
+        if aster.jeveux_exists( nomj ):
+            return aster.jeveux_getattr( nomj, self.name )[1].strip()
+        else :
+            return None
 
 # -----------------------------------------------------------------------------
 class OJB(AsBase):
@@ -206,7 +233,7 @@ class OJB(AsBase):
         """Fonction utilitaire, renvoie une liste de chaines 'strippées'"""
         data = self.get()
         if data is not None:
-            return [ x.strip() for x in self.get() ]
+            return [ x.strip() for x in data ]
         else:
             return []
 
@@ -221,9 +248,9 @@ class OJB(AsBase):
         if checker is None:
             checker = CheckLog()
         # l'objet a déjà été vérifié, on ne fait rien
-        if self.nomj() in checker.names.keys():
-            return checker
-        checker.visit( self )
+        if checker.checkedOJB(self):
+           return checker
+        checker.visitOJB( self )
         if self.exists:
             self.foreachattr( lambda k,v,obj,c: v.check(k, obj, c),
                               self, checker )
@@ -248,6 +275,16 @@ def Facultatif( ojb ):
 class OJBVect(OJB):
     lonmax = JeveuxIntAttr("LONMAX")
     lonuti = JeveuxIntAttr("LONUTI")
+    _xous = "S"
+    _genr = "V"
+
+# -----------------------------------------------------------------------------
+class OJBPtnom(OJB):
+    nommax = JeveuxIntAttr("NOMMAX")
+    nomuti = JeveuxIntAttr("NOMUTI")
+    _xous = "S"
+    _genr = "N"
+    _type = "K"
 
 # -----------------------------------------------------------------------------
 class OJBCollec(OJB):
@@ -299,5 +336,7 @@ class AsVK80(OJBVect):
     _ltyp = 80
 
 # Pour compatibilite
-AsColl = OJBCollec
 AsObject = OJB
+AsColl   = OJBCollec
+AsPn     = OJBPtnom
+AsVect   = OJBVect
diff --git a/Noyau/properties.py b/Noyau/properties.py
deleted file mode 100644 (file)
index f6bb7c4..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#@ MODIF properties Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
-# -*- coding: iso-8859-1 -*-
-#            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.      
-#                                                                       
-#                                                                       
-# ======================================================================
-version = "6.2.24"
-date = "15/03/2002"
-
diff --git a/Tests/Makefile b/Tests/Makefile
new file mode 100644 (file)
index 0000000..36d2b46
--- /dev/null
@@ -0,0 +1,28 @@
+all:elem elem7 comm comm9 comm7 ihm9 ihm ihm7
+
+elem:
+       python run.py testelem
+elem7:
+       python run.py testelem7
+
+comm:
+       python run.py testcomm
+comm9:
+       python run.py testcomm9
+comm7:
+       python run.py testcomm7
+
+ihm9:
+       python run.py testihm9/testihm1.py
+       python run.py testihm9/testihm2.py
+       python run.py testihm9/testihm3.py
+       python run.py testihm9/testihm4.py
+ihm:
+       python run.py testihm/testihm1.py
+       python run.py testihm/testihm2.py
+       python run.py testihm/testihm3.py
+       python run.py testihm/testihm4.py
+ihm7:
+       python run.py testihm7/testihm1.py
+       python run.py testihm7/testihm2.py
+       python run.py testihm7/testihm4.py
index eb536e9ea3566d8ed45fd18065ce3d2fa9042d8b..ae0b62f673d2be16c7e831a58c570cd034ee80e8 100644 (file)
@@ -13,3 +13,6 @@ par test ou Test.
 
 Quelques tests dont le nom commence par futuretest ne sont pas exécutés. Ils identifient 
 des limites actuelles d'Accas.
+
+Certains tests doivent etre exécutés séparément à cause d'un problème d'import de catalogue.
+En particulier, les tests d'ihm (testihm*.py) entrent dans cette catégorie.
index 92b7360fd79ea4d85b5b2b73f006495509d6c5f7..d4118db021ad7e7ed24b7cdabdfbf814e12af913 100644 (file)
@@ -37,8 +37,10 @@ rep_travail     =   "/tmp"
 initialdir=os.curdir
 
 # Choix des catalogues
-rep_mat=os.path.join(rep_cata,'..','materiau')
-rep_mat="/local/cchris/ASTER/instals/materiaux/NEW8/materiau"
+#rep_mat=os.path.join(rep_cata,'..','materiau')
+rep_mat_v7="/local/cchris/ASTER/instals/materiaux/STA7"
+rep_mat_v8="/local/cchris/ASTER/instals/materiaux/STA8"
+rep_mat_v9="/local/cchris/ASTER/instals/materiaux/NEW9"
 
 catalogues = (
                ('ASTER','petit',os.path.join(rep_cata,'petitcata'),'python'),
index 1d298b5810833ed94fccc64048802c3f9aff57ba..deaa5455a8fea74f6f19264a44bcf7ca0ee45c22 100755 (executable)
@@ -27,6 +27,6 @@
 
 # Modules Eficas
 import prefs
-from Editeur import eficas_go
+from InterfaceTK import eficas_go
 
 eficas_go.lance_eficas()
index 9c58b1ff6671b29f1371afaf1145f661fb561a1a..972807572e5ec3f7887f4f4ec7a72bf76c0db720 100644 (file)
@@ -2,7 +2,7 @@ import os,glob,sys
 import unittest
 import difflib
 
-from Editeur import appli
+from InterfaceTK import appli
 
 from config import ASTERDIR
 
index 05d94bc8c8e5bc777fdb076a197c6c29fb3a3f41..253edf544470410d3b245fbe6ab3a41d03ba89c0 100644 (file)
@@ -2,7 +2,7 @@ import os,glob,sys
 import unittest
 import difflib
 
-from Editeur import appli
+from InterfaceTK import appli
 
 from config import ASTERDIR
 
index e3013c80a5d1d34fb7b6d644e4d2b0062911af3a..14d8981f93019676916dbdcd80527d2eccc3df03 100644 (file)
@@ -3,7 +3,7 @@ import unittest
 import difflib
 
 import prefs
-from Editeur import appli
+from InterfaceTK import appli
 
 def add_param(j,pos,nom,valeur):
     co=j.addentite("PARAMETRE",pos)
index bc7c9379a5ed007896cfb917ba93fb20199d6e31..7e9432eb690a383ea4451a8021492bc0d71bb4f0 100644 (file)
@@ -3,7 +3,7 @@ import unittest
 import difflib
 
 import prefs
-from Editeur import appli
+from InterfaceTK import appli
 
 def add_param(j,pos,nom,valeur):
     co=j.addentite("PARAMETRE",pos)
index 25134e9846593422572beb5e00fcea210f3eb94e..34a71cc876b7a234f18a0dd0dbead535781641d2 100755 (executable)
@@ -5,7 +5,7 @@ INCLUDE_MATERIAU(   NOM_AFNOR='18MND5',      TYPE_MODELE='REF',
                      NOM_MATER='MAT3',       INFO=1               )
 
 CHMAT3=AFFE_MATERIAU(  MAILLAGE=MAILLA3,
-                       AFFE=_F(  TOUT='OUI', MATER = MAT3, TEMP_REF = 20.))
+                       AFFE=_F(  TOUT='OUI', MATER = MAT3))
 
 riginor = 2.88E7 
 
index 2027774f90c5206534f98ded0d242d6bd617496f..af7db1de3a305ac5878240be86c3e9c9a703f201 100755 (executable)
@@ -191,10 +191,10 @@ SUPPORT=AFFE_CHAR_MECA(
 CHMATP=AFFE_MATERIAU(MAILLAGE=MAILLAGE,
                      AFFE=(_F(GROUP_MA='GMAT01',
                               MATER=MATP01,
-                              TEMP_REF=20.0,),
+                              ),
                            _F(GROUP_MA='GMAT03',
                               MATER=MATP03,
-                              TEMP_REF=20.0,),),)
+                              ),),)
 
 #-----------------------------------------------------------------------
 # ASSEMBLAGE MATRICE MASSE ET RIGIDITE
@@ -247,7 +247,7 @@ MODES=MACRO_MODE_MECA(
                VERI_MODE=_F( STOP_ERREUR = 'NON'),
                NORM_MODE=_F( 
                      NORME = 'MASS_GENE',
-                     MASS_INER =MASSINER),
+                     ),
                  IMPRESSION=_F( TOUT_PARA = 'OUI')
                   )
 
index 976dc604fbe03e042686921bd3212f998bb4e0b7..e23f47d56f077edd24242ca459f757511785ece6 100755 (executable)
@@ -38,7 +38,7 @@ INCLUDE_MATERIAU(TYPE_MODELE='REF',
                  )
 
 CHMAT=AFFE_MATERIAU(  MAILLAGE=MAIL,AFFE=(
-                       _F(  TOUT='OUI',TEMP_REF=25, MATER = MONMAT),
+                       _F(  TOUT='OUI', MATER = MONMAT),
                ),)
 
 #
index e211716ecb2079e431a131515bbe250f24c2ecfc..a0b40af668a7f0b07e9fec52b8bdc44df5323e46 100644 (file)
@@ -3,7 +3,7 @@ import unittest
 import difflib
 
 import prefs
-from Editeur import appli
+from InterfaceTK import appli
 
 def add_param(j,pos,nom,valeur):
     co=j.addentite("PARAMETRE",pos)
index 4440100867afd674cca8e3b6554a56ec6168b1c0..c23919a34b53c4e8c42871b972cb718af15659e0 100644 (file)
@@ -6,7 +6,7 @@ import difflib
 import compare
 
 import prefs
-from Editeur import appli
+from InterfaceTK import appli
 
 def add_param(j,pos,nom,valeur):
     co=j.addentite("PARAMETRE",pos)
@@ -35,7 +35,7 @@ class TestCase(unittest.TestCase):
    def test000(self):
       """ Test de construction du fichier de commandes az.comm de zero"""
 
-      app=appli.STANDALONE(version='v7')
+      app=appli.STANDALONE(version='v9')
       j=app.newJDC()
 # commande DEBUT
       co=j.addentite("DEBUT",0)
@@ -322,7 +322,7 @@ class TestCase(unittest.TestCase):
    def test001(self):
       """ Test de construction d'un fichier de commandes avec DEFI_LIST_REEL, fonction et parametre de zero"""
 
-      app=appli.STANDALONE(version='v7')
+      app=appli.STANDALONE(version='v9')
       j=app.newJDC()
 # commande DEBUT
       co=j.addentite("DEBUT",0)
@@ -378,9 +378,9 @@ class TestCase(unittest.TestCase):
       ! Concept retourné non défini !
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Mot-clé simple : VALE
-         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-         ! 'sin(1.,2)' n'est pas d'un type autorisé: ('R',) !
-         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+         ! 'sin(1.,2)' (de type <type 'str'>) n'est pas d'un type autorisé: ('R',) !
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Fin Mot-clé simple : VALE
    Fin Etape : DEFI_LIST_REEL
    Etape : DEFI_LIST_REEL    ligne : ...
@@ -388,9 +388,9 @@ class TestCase(unittest.TestCase):
       ! Concept retourné non défini !
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Mot-clé simple : VALE
-         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-         ! 'aaa(1.)' n'est pas d'un type autorisé: ('R',) !
-         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+         ! 'aaa(1.)' (de type <type 'str'>) n'est pas d'un type autorisé: ('R',) !
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Fin Mot-clé simple : VALE
    Fin Etape : DEFI_LIST_REEL
 FIN CR validation :SansNom
index 664332c257ff9702ba8b2c0413b2a7b2e5cd5a54..c5d4cb1d8479ea979ca15c424bddf6e640014879 100644 (file)
@@ -38,13 +38,13 @@ Fin Mot cle Facteur :mcs1
       """Verification de type"""
       #Ne leve plus d'exception
       #self.assertRaises(AttributeError,self.cata,1,'mcs1',None)
-      o=self.cata({'a':1.},'mcs1',None)
+      o=self.cata({'a':1.2},'mcs1',None)
       cr=o.report()
       expected_cr="""Mot cle Facteur :mcs1
    Mot-clé simple : a
-      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-      ! 1.0 n'est pas d'un type autorisé: ('I',) !
-      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+      ! 1.2 (de type <type 'float'>) n'est pas d'un type autorisé: ('I',) !
+      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Fin Mot-clé simple : a
 Fin Mot cle Facteur :mcs1
 """
index 937760645a13d2f9d21b9b774a033a446430de83..c3f902a0b89348481007c02b0393ee474aedafad 100644 (file)
@@ -3,10 +3,12 @@ import unittest
 import difflib
 
 import prefs
-from Editeur import appli
+from InterfaceTK import appli
+#from Editeur import appli
 from Editeur import comploader
 from Editeur import Objecttreeitem
 
+
 def add_param(j,pos,nom,valeur):
     co=j.addentite("PARAMETRE",pos)
     co.set_nom(nom)
index 9bee5124f581b7fc5159937f41551437c5a1e3c2..1efad3b3022fbce3f5134c06aa5424466e296225 100644 (file)
@@ -6,7 +6,8 @@ import difflib
 import compare
 
 import prefs
-from Editeur import appli
+from InterfaceTK import appli
+#from Editeur import appli
 
 def add_param(j,pos,nom,valeur):
     co=j.addentite("PARAMETRE",pos)
@@ -433,9 +434,9 @@ FIN();
       ! Concept retourné non défini !
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Mot-clé simple : VALE
-         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-         ! 'sin(1.,2)' n'est pas d'un type autorisé: ('R',) !
-         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+         ! 'sin(1.,2)' (de type <type 'str'>) n'est pas d'un type autorisé: ('R',) !
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Fin Mot-clé simple : VALE
    Fin Etape : DEFI_LIST_REEL
    Etape : DEFI_LIST_REEL    ligne : ...
@@ -443,9 +444,9 @@ FIN();
       ! Concept retourné non défini !
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Mot-clé simple : VALE
-         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-         ! 'aaa(1.)' n'est pas d'un type autorisé: ('R',) !
-         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+         ! 'aaa(1.)' (de type <type 'str'>) n'est pas d'un type autorisé: ('R',) !
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Fin Mot-clé simple : VALE
    Fin Etape : DEFI_LIST_REEL
 FIN CR validation :SansNom
index 89430d9600ead7979ab38ca6e89a11c468db1047..78ddd294284b1f85b5565347ae57551d2ba36ca3 100644 (file)
@@ -27,9 +27,10 @@ co1=OP5(MATR=co0)
       expected="""DEBUT CR validation : bidon
    Etape : OP5    ligne : 5    fichier : 'bidon'
       Mot-clé simple : MATR
-         !!!!!!...
-         ! ... n'est pas d'un type autorisé... !
-         !!!!!!...
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+         ! concept co0 de type concept (de type <class 'cata5.concept'>) n'est pas d'un !
+         ! type autorisé: (<class 'Accas.A_ASSD.CO'>,)                                  !
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Fin Mot-clé simple : MATR
    Fin Etape : OP5
 FIN CR validation :bidon
@@ -46,9 +47,10 @@ co2=OP2(MATR=co0)
       expected="""DEBUT CR validation : bidon
    Etape : OP2    ligne : 5    fichier : 'bidon'
       Mot-clé simple : MATR
-         !!!!...
-         ! ... n'est pas d'un type autorisé... !
-         !!!!...
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+         ! concept co0 de type concept (de type <class 'cata5.concept'>) n'est pas d'un !
+         ! type autorisé: (<class 'Accas.A_ASSD.CO'>, <class 'cata5.concept2'>)         !
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Fin Mot-clé simple : MATR
    Fin Etape : OP2
 FIN CR validation :bidon
@@ -78,9 +80,10 @@ co2=OP10(MATR=CO("xx"))
       expected="""DEBUT CR validation : bidon
    Etape : OP10    ligne : 2    fichier : 'bidon'
       Mot-clé simple : MATR
-         !!!!...
-         ! ... n'est pas d'un type autorisé... !
-         !!!!...
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+         ! concept xx de type CO (de type <class 'Accas.A_ASSD.CO'>) n'est pas d'un type !
+         ! autorisé: (<class 'cata5.concept2'>,)                                         !
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Fin Mot-clé simple : MATR
    Fin Etape : OP10
 FIN CR validation :bidon
@@ -101,9 +104,10 @@ co2=OP22(MATR=xx)
       expected="""DEBUT CR validation : bidon
    Etape : OP22    ligne : 3    fichier : 'bidon'
       Mot-clé simple : MATR
-         !!!!!!!!...
-         ! ... n'est pas d'un type autorisé... !
-         !!!!!!!...
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+         ! concept xx de type concept4 (de type <class 'cata5.concept4'>) n'est pas d'un !
+         ! type autorisé: (<class 'Accas.A_ASSD.CO'>,)                                   !
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Fin Mot-clé simple : MATR
    Fin Etape : OP22
 FIN CR validation :bidon
index 4d2a936e61952089a23264a4173f19d55c2c1e84..5a7ad9e19df0377c3988fb90bef8d09abb658ff0 100644 (file)
@@ -5,7 +5,8 @@ import difflib
 import compare
 
 import prefs
-from Editeur import appli
+from InterfaceTK import appli
+#from Editeur import appli
 from Accas import AsException
 
 def add_param(j,pos,nom,valeur):
index 6b7f3e5c1655466a6717b812ce663b689d615921..7a07d18a88d9368190b9fd625cb3043a28e37355 100644 (file)
@@ -5,7 +5,8 @@ import difflib
 import compare
 
 import prefs
-from Editeur import appli
+from InterfaceTK import appli
+#from Editeur import appli
 from Accas import AsException
 
 def add_param(j,pos,nom,valeur):
index d2ea0de71390a2fc8f38ba493c1481068c86ec6e..67858ff68032458fa406851cd2a6237b0ef76c87 100644 (file)
@@ -168,7 +168,7 @@ Fin Mot-cl
    # Entiers
    def test030(self):
        cata=SIMP(typ='I',statut='o')
-       liste=((1,1),("a",0), (1.,0),(('RI',1.,0.),0),
+       liste=((1,1),("a",0), (1.1,0),(('RI',1.,0.),0),
               (('RI',1,0),0), (1+0j,0), ("1",0), ("toto",0), (None,0),
              )
        for valeur,valid in liste:
@@ -179,7 +179,7 @@ Fin Mot-cl
    def test031(self):
        cata=SIMP(typ='I',statut='o',into=(1,5,8),max=4)
        liste=((1,1),("a",0), ("toto",0), (None,0),
-              (1.,0),(('RI',1.,0.),0),
+              (1.1,0),(('RI',1.,0.),0),
               (3,0), (6,0), ((1,5),1), ((1,5,8),1), ((1,5,8,5),1),
               ((1,5,8,5,1),0), ((1.,6.),0), ((3.,2.),0), ((1.,2.,3.),0),
               ((1.,2.,3.,4.),0), ((1.,2.,3.,4.,5.),0),
index b04f74353966c7d196f9d0f561a71c08413f1408..e472dd2672bc2b43d6fa6e251dc7e4148b56f798 100644 (file)
@@ -41,3 +41,24 @@ class TestSimpCase(unittest.TestCase):
            o=cata(valeur,'mcs',None)
            msg="erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report())
            self.assertEqual(o.isvalid(),valid,msg=msg)
+
+   def test004(self):
+       cata=SIMP(statut='f',typ=('R','I'),max=5)
+       liste=((1,1),(1.5,1), ((1,2),1),
+              ((2.3,3.4),1),((1,2.0),1),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           msg="erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report())
+           self.assertEqual(o.isvalid(),valid,msg=msg)
+
+   def _test005(self):
+       cata=SIMP(statut='f',typ='I',max=5)
+       liste=((1,1),(1.0,1), ((1,2),1),
+              ((2.3,3.4),0),((1,2.0),1),
+             )
+       for valeur,valid in liste:
+           o=cata(valeur,'mcs',None)
+           msg="erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report())
+           self.assertEqual(o.isvalid(),valid,msg=msg)
+
index e7e1fa622c551c9d3095cb310a2ec1576d5e74f8..51891e9a5ec31f53224699a32d494cce1180e2a9 100644 (file)
@@ -73,9 +73,9 @@ Fin Mot-cl
 """),
               (("TUTU","TATA","CCCC","TUTU","TATA",1,"TUTU","TATA","CCCC"),
 """Mot-clé simple : mcs
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! 1 n'est pas d'un type autorisé: ('TXM',) !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! 1 (de type <type 'int'>) n'est pas d'un type autorisé: ('TXM',) !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    ! La valeur : 1  ne fait pas partie des choix possibles ('TUTU', 'TATA', 'CCCC') !
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -107,31 +107,31 @@ Fin Mot-cl
                (myparam((2,4,4)),OK),
                (myparam((2,4.5,4)),
 """Mot-clé simple : mcs
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! 4.5 n'est pas d'un type autorisé: ('I',) !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! 4.5 (de type <type 'float'>) n'est pas d'un type autorisé: ('I',) !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs
 """),
                (myparam((2,myparam(4.5),4)),
 """Mot-clé simple : mcs
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! 4.5 n'est pas d'un type autorisé: ('I',) !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! 4.5 (de type <type 'float'>) n'est pas d'un type autorisé: ('I',) !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs
 """),
                (param((2,4,4)),OK),
                (param((2,4.5,4)),
 """Mot-clé simple : mcs
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! 4.5 n'est pas d'un type autorisé: ('I',) !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! 4.5 (de type <type 'float'>) n'est pas d'un type autorisé: ('I',) !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs
 """),
                (param((2,param(4.5),4)),
 """Mot-clé simple : mcs
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! 4.5 n'est pas d'un type autorisé: ('I',) !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! 4.5 (de type <type 'float'>) n'est pas d'un type autorisé: ('I',) !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs
 """),
              )
index 6519dabda45a0eab1300810f84fe6ecb67243c44..40f3c41f66755df504c46001b745ced8bf28b037 100644 (file)
@@ -17,9 +17,9 @@ class TestMCSimpCase(unittest.TestCase):
       o=cata((1,2,'aa','bb',7,'cc'),'mcs1',None)
       cr=o.report()
       expected_cr="""Mot-clé simple : mcs1
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! 'aa' n'est pas d'un type autorisé: ('I',) !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! 'aa' (de type <type 'str'>) n'est pas d'un type autorisé: ('I',) !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    ! Nombre d'arguments de (1, 2, 'aa', 'bb', 7, 'cc') incorrect (min = 1, max = 5) !
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -32,9 +32,9 @@ Fin Mot-cl
       o=cata((1,2,'aa','bb',7,'cc'),'mcs1',None)
       cr=o.report()
       expected_cr="""Mot-clé simple : mcs1
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! 'aa' n'est pas d'un type autorisé: ('I',) !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! 'aa' (de type <type 'str'>) n'est pas d'un type autorisé: ('I',) !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs1
 """
       self.assertEqual(str(cr) , expected_cr,msg='Erreur :\n%s\n!=\n%s' % (str(cr),expected_cr))
@@ -44,9 +44,9 @@ Fin Mot-cl
       o=cata((1,2,7,3,4,5,6),'mcs1',None)
       cr=o.report()
       expected_cr="""Mot-clé simple : mcs1
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! La valeur : 3  ne fait pas partie des choix possibles (1, 2, 7) !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! La valeur : 3.0  ne fait pas partie des choix possibles (1, 2, 7) !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs1
 """
       self.assertEqual(str(cr) , expected_cr,msg='Erreur :\n%s\n!=\n%s' % (str(cr),expected_cr))
@@ -56,9 +56,9 @@ Fin Mot-cl
       o=cata((1,2,7,3,4,5,6),'mcs1',None)
       cr=o.report()
       expected_cr="""Mot-clé simple : mcs1
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! La valeur : 7 est en dehors du domaine de validité [ ** , 6 ] !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! La valeur : 7.0 est en dehors du domaine de validité [ ** , 6 ] !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs1
 """
       self.assertEqual(str(cr) , expected_cr,msg='Erreur :\n%s\n!=\n%s' % (str(cr),expected_cr))
@@ -68,12 +68,13 @@ Fin Mot-cl
       o=cata((1,2,7,3,4,5,6),'mcs1',None)
       cr=o.report()
       expected_cr="""Mot-clé simple : mcs1
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! La valeur : 7 est en dehors du domaine de validité [ ** , 6 ] !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! Nombre d'arguments de (1, 2, 7, 3, 4, 5, 6) incorrect (min = 1, max = 6) !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! La valeur : 7.0 est en dehors du domaine de validité [ ** , 6 ] !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Nombre d'arguments de (1.0, 2.0, 7.0, 3.0, 4.0, 5.0, 6.0) incorrect (min = 1, !
+   ! max = 6)                                                                      !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs1
 """
       self.assertEqual(str(cr) , expected_cr,msg='Erreur :\n%s\n!=\n%s' % (str(cr),expected_cr))
@@ -83,15 +84,16 @@ Fin Mot-cl
       o=cata((1,2,7,"aa",4,"bb",6),'mcs1',None)
       cr=o.report()
       expected_cr="""Mot-clé simple : mcs1
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! 'aa' n'est pas d'un type autorisé: ('R',) !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! La valeur : 7 est en dehors du domaine de validité [ ** , 6 ] !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! Nombre d'arguments de (1, 2, 7, 'aa', 4, 'bb', 6) incorrect (min = 1, max = 6) !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! 'aa' (de type <type 'str'>) n'est pas d'un type autorisé: ('R',) !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! La valeur : 7.0 est en dehors du domaine de validité [ ** , 6 ] !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Nombre d'arguments de (1.0, 2.0, 7.0, 'aa', 4.0, 'bb', 6.0) incorrect (min = 1, !
+   ! max = 6)                                                                        !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs1
 """
       self.assertEqual(str(cr) , expected_cr,msg='Erreur :\n%s\n!=\n%s' % (str(cr),expected_cr))
index 7390fef70db7af2330a4fb55142de885840738fc..80a2881f75662de84884d34c453f7501bc7bc217 100644 (file)
@@ -66,7 +66,7 @@ class TestValidCase(unittest.TestCase):
    def test003(self):
        cata=SIMP(statut='o',typ='I',validators=TypeVal(1))
        liste=(
-               (1,1),(1.,0),(1.25,0),
+               (1,1),(1.1,0),(1.25,0),
                (('RI',0.,1.),0),
              )
        self._test(cata,liste)
@@ -77,7 +77,7 @@ class TestValidCase(unittest.TestCase):
               (1,1),((1,3),1),
               ((3,1),0),
               ((1,3,2),0),
-              ((1.,2.),0),
+              ((1.1,2.),0),
               (myparam((1.,2.)),0),
               (myparam((1,2)),1),
               (myparam((1,2,3,4,5)),1),
@@ -108,7 +108,7 @@ class TestValidCase(unittest.TestCase):
               ((100,50,60,701),0),
               ((3,1),0),
               ((1,3,2),0),
-              ((1.,2.),0),
+              ((1.1,2.),0),
              )
        self._test(cata,liste)
 
index f78f84331910d6dc3a7a9aab82bc0311ee0e1af5..e9b06022a40340d88ca82549f6568f419646f0e5 100644 (file)
@@ -72,10 +72,10 @@ Fin Mot-cl
               (("aaaa","aaaaa","axyzaa","bbbbaaa","zzz"),OK),
               (("aaaa","aaaa","axyz","bbbb","zzz"),
 """Mot-clé simple : mcs
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! Mot-clé mcs invalide : aaaa est un doublon                      !
-   ! Critere de validite: pas de présence de doublon dans la liste !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Mot-clé mcs invalide : aaaa est un doublon                    !
+   ! Critere de validite: pas de présence de doublon dans la liste !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs
 """),
               (("aaaa","axyz","bbbb","zzz"),OK),
@@ -84,19 +84,19 @@ Fin Mot-cl
               (("aaa",Variable('x',"bbb")),OK),
               (("aaa",Variable('x',"aaa")),
 """Mot-clé simple : mcs
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! Mot-clé mcs invalide : aaa est un doublon                       !
-   ! Critere de validite: pas de présence de doublon dans la liste !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Mot-clé mcs invalide : aaa est un doublon                     !
+   ! Critere de validite: pas de présence de doublon dans la liste !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs
 """),
               (Variable('x',("aaa","bbb")),OK),
               (Variable('x',("aaa","bbb","bbb")),
 """Mot-clé simple : mcs
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! Mot-clé mcs invalide : bbb est un doublon                       !
-   ! Critere de validite: pas de présence de doublon dans la liste !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Mot-clé mcs invalide : bbb est un doublon                     !
+   ! Critere de validite: pas de présence de doublon dans la liste !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs
 """),
              )
@@ -109,10 +109,10 @@ Fin Mot-cl
               (("TUTU","TATA","CCCC"),OK),
               (("TUTU","TATA","CCCC","TUTU","TATA","CCCC"),
 """Mot-clé simple : mcs
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! Mot-clé mcs invalide : TUTU est un doublon                      !
-   ! Critere de validite: pas de présence de doublon dans la liste !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Mot-clé mcs invalide : TUTU est un doublon                    !
+   ! Critere de validite: pas de présence de doublon dans la liste !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs
 """),
               (("TUTU","TATA","CCCC","TUTU","TATA","CCCC","TUTU","TATA","CCCC"),
@@ -142,7 +142,7 @@ Fin Mot-cl
 """Mot-clé simple : mcs
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    ! Mot-clé mcs invalide : (1, 3, 5) contient des valeurs non paires !
-   ! Critere de validite: : pas de présence de doublon dans la liste  !
+   ! Critere de validite: pas de présence de doublon dans la liste    !
    !  et valeur paire                                                 !
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs
@@ -150,11 +150,11 @@ Fin Mot-cl
                ((2,4,6),OK),
                ((2,4,4),
 """Mot-clé simple : mcs
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! Mot-clé mcs invalide : 4 est un doublon                         !
-   ! Critere de validite: pas de présence de doublon dans la liste !
-   !  et valeur paire                                                !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Mot-clé mcs invalide : 4 est un doublon                       !
+   ! Critere de validite: pas de présence de doublon dans la liste !
+   !  et valeur paire                                              !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs
 """),
              )
@@ -170,10 +170,10 @@ Fin Mot-cl
                ((i,1,i,i),OK),
                ((1,1,i,i),
 """Mot-clé simple : mcs
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   ! Mot-clé mcs invalide : 1 est un doublon                         !
-   ! Critere de validite: pas de présence de doublon dans la liste !
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   ! Mot-clé mcs invalide : 1 est un doublon                       !
+   ! Critere de validite: pas de présence de doublon dans la liste !
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs
 """ ),
                )
@@ -241,7 +241,7 @@ Fin Mot-cl
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    ! Mot-clé mcs invalide : (<concept entier>, 5, 7, <concept entier>) ne contient !
    ! pas les elements obligatoires : [6]                                           !
-   ! Critere de validite: : pas de présence de doublon dans la liste               !
+   ! Critere de validite: pas de présence de doublon dans la liste                 !
    !  et valeur (5, 6, 7) obligatoire                                              !
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs
@@ -293,7 +293,7 @@ Fin Mot-cl
    ! pas les elements obligatoires : [6]                                           !
    ! Critere de validite: valeur (5, 6, 7) obligatoire                             !
    !  et liste croissant                                                           !
-   !  et : pas de présence de doublon dans la liste                                !
+   !  et pas de présence de doublon dans la liste                                  !
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs
 """ ),
@@ -304,7 +304,7 @@ Fin Mot-cl
    ! par valeurs croissantes                                                        !
    ! Critere de validite: valeur (5, 6, 7) obligatoire                              !
    !  et liste croissant                                                            !
-   !  et : pas de présence de doublon dans la liste                                 !
+   !  et pas de présence de doublon dans la liste                                   !
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs
 """ ),
@@ -314,7 +314,7 @@ Fin Mot-cl
    ! Mot-clé mcs invalide : 7 est un doublon           !
    ! Critere de validite: valeur (5, 6, 7) obligatoire !
    !  et liste croissant                               !
-   !  et : pas de présence de doublon dans la liste    !
+   !  et pas de présence de doublon dans la liste      !
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 Fin Mot-clé simple : mcs
 """ ),
diff --git a/Tests/testelem/testzzz6az.py b/Tests/testelem/testzzz6az.py
deleted file mode 100644 (file)
index 748748c..0000000
+++ /dev/null
@@ -1,399 +0,0 @@
-# coding=utf-8
-
-import os
-import unittest
-import difflib
-import compare
-
-import prefs
-from Editeur import appli
-
-def add_param(j,pos,nom,valeur):
-    co=j.addentite("PARAMETRE",pos)
-    co.set_nom(nom)
-    co.set_valeur(valeur)
-    return co
-
-def add_mcsimp(obj,nom,valeur):
-    mcs=obj.get_child(nom,restreint='oui')
-    if mcs is None:
-       pos=obj.get_index_child(nom)
-       mcs=obj.addentite(nom,pos)
-    mcs.set_valeur(mcs.eval_val(valeur))
-    return mcs
-
-def cdiff(text1,text2):
-    return " ".join(difflib.context_diff(text1.splitlines(1),text2.splitlines(1)))
-
-class TestCase(unittest.TestCase):
-   def setUp(self):
-      pass
-
-   def tearDown(self):
-      CONTEXT.unset_current_step()
-
-   def test000(self):
-      """ Test de construction du fichier de commandes az.comm de zero"""
-
-      app=appli.STANDALONE(version='v6')
-      j=app.newJDC()
-# commande DEBUT
-      co=j.addentite("DEBUT",0)
-# commande FIN
-      co=j.addentite("FIN",1)
-# parametres
-      pos=0
-      pos=pos+1
-      co=add_param(j,pos,"P1","9.8")
-      pos=pos+1
-      co=add_param(j,pos,"P2","8.8")
-      pos=pos+1
-      co=add_param(j,pos,"P3","7")
-      pos=pos+1
-      co=add_param(j,pos,"P5","P3*P1")
-      pos=pos+1
-      co=add_param(j,pos,"P6","P1-3")
-      pos=pos+1
-      co=add_param(j,pos,"P4","[2,3,4]")
-# commentaire
-      pos=pos+1
-      co=j.addentite("COMMENTAIRE",pos)
-      co.set_valeur("Pas trouve   shellpanel")
-# commande LIRE_MAILLAGE
-      pos=pos+1
-      co=j.addentite("LIRE_MAILLAGE",pos)
-      test,mess=co.nomme_sd("MAILLA2")
-      mcs=co.addentite("UNITE")
-      valeur=mcs.eval_val("P4[1]")
-      test=mcs.set_valeur(valeur)
-# formule
-      pos=pos+1
-      co=j.addentite("FORMULE",pos)
-      co.update(("aaa","REEL","a+z","(a,z)"))
-# commande LIRE_MAILLAGE
-      pos=pos+1
-      ma=co=j.addentite("LIRE_MAILLAGE",pos)
-      test,mess=co.nomme_sd("MAIL")
-      mcs=co.addentite("UNITE")
-      valeur,validite=mcs.eval_valeur("P3")
-      test=mcs.set_valeur(valeur)
-#
-      pos=pos+1
-      co=j.addentite("COMMENTAIRE",pos)
-      co.set_valeur(" 'LIRE_MAILLAGE', 'UNITE'            --> uniquebasepanel")
-# formule
-      pos=pos+1
-      co=j.addentite("FORMULE",pos)
-      co.update(("az","REEL","aaaaa","(ae,inst)"))
-# commande AFFE_MODELE
-      pos=pos+1
-      co=j.addentite("AFFE_MODELE",pos)
-      mcs=co.get_child("MAILLAGE")
-      valeur,validite=mcs.eval_valeur("MAIL")
-      assert valeur == ma.sd
-      test=mcs.set_valeur(valeur)
-      assert valeur == co["MAILLAGE"]
-      mcf=co.addentite("AFFE")
-      mcs=mcf[0].get_child("PHENOMENE")
-      valeur=mcs.eval_val_item('MECANIQUE')
-      assert valeur=='MECANIQUE',str(valeur)
-      test=mcs.set_valeur(valeur)
-      assert mcf["PHENOMENE"] == 'MECANIQUE'
-      mcs=mcf[0].get_child("b_mecanique").get_child("MODELISATION")
-      mcs.set_valeur(mcs.eval_val_item('DIS_T'))
-      assert mcf["MODELISATION"] == 'DIS_T'
-      mcs=add_mcsimp(mcf[0],"GROUP_MA",('RESSORT','eee',))
-
-      mcf=co.addentite("AFFE")
-      mcs=mcf[1].get_child("PHENOMENE")
-      mcs.set_valeur(mcs.eval_val_item('MECANIQUE'))
-      mcs=mcf[1].get_child("b_mecanique").get_child("MODELISATION")
-      mcs.set_valeur(mcs.eval_val_item('DIS_T'))
-      mcs=add_mcsimp(mcf[1],"GROUP_MA",'MASSES')
-
-      mcf=co.addentite("AFFE")
-      mcs=mcf[2].get_child("PHENOMENE")
-      mcs.set_valeur(mcs.eval_val_item('ACOUSTIQUE'))
-      mcs=mcf[2].get_child("b_acoustique").get_child("MODELISATION")
-      mcs.set_valeur(mcs.eval_val_item('PLAN'))
-      #mcs=add_mcsimp(mcf[2],"GROUP_NO",'GNP3,GNP5,GNP6,GNP7,GNP8,GNP9,GNP10,GNP11,GNP12')
-      mcs=add_mcsimp(mcf[2],"GROUP_NO","'GNP3','GNP5','GNP6','GNP7','GNP8','GNP9','GNP10','GNP11','GNP12'")
-
-      co.nomme_sd("AFFE1")
-# commande AFFE_MODELE
-      pos=pos+1
-      co=j.addentite("AFFE_MODELE",pos)
-      mcs=co.get_child("MAILLAGE")
-      mcs.set_valeur(mcs.eval_val("MAIL"))
-
-      mcf=co.addentite("AFFE")
-      mcs=mcf[0].get_child("PHENOMENE")
-      valeur=mcs.eval_val_item('MECANIQUE')
-      test=mcs.set_valeur(valeur)
-      mcs=mcf[0].get_child("b_mecanique").get_child("MODELISATION")
-      mcs.set_valeur(mcs.eval_val_item('DIS_T'))
-      mcs=add_mcsimp(mcf[0],"GROUP_MA",'RESSORT')
-
-      mcf=co.addentite("AFFE")
-      mcs=mcf[1].get_child("PHENOMENE")
-      mcs.set_valeur(mcs.eval_val_item('MECANIQUE'))
-      mcs=mcf[1].get_child("b_mecanique").get_child("MODELISATION")
-      mcs.set_valeur(mcs.eval_val_item('DIS_T'))
-      mcs=add_mcsimp(mcf[1],"GROUP_MA",'MASSES')
-
-      mcf=co.addentite("AFFE")
-      mcs=mcf[2].get_child("PHENOMENE")
-      mcs.set_valeur(mcs.eval_val_item('THERMIQUE'))
-      mcs=mcf[2].get_child("b_thermique").get_child("MODELISATION")
-      mcs.set_valeur(mcs.eval_val_item('COQUE'))
-      mcs=add_mcsimp(mcf[2],"TOUT",'OUI')
-
-      co.nomme_sd("MOD")
-#CARA=AFFE_CARA_ELEM(MODELE=MOD,
-#                    POUTRE=_F(GROUP_MA='MA',
-#                              SECTION='CERCLE',
-#                              CARA='R',
-#                              VALE=(3.0,P6,),),);
-      pos=pos+1
-      co=j.addentite("AFFE_CARA_ELEM",pos)
-      mcs=co.get_child("MODELE")
-      mcs.set_valeur(mcs.eval_val("MOD"))
-      mcf=co.addentite("POUTRE")
-      mcs=mcf[0].get_child("SECTION")
-      mcs.set_valeur(mcs.eval_val('CERCLE'))
-      assert mcf[0]["SECTION"] == 'CERCLE'
-      mcs=add_mcsimp(mcf[0],"GROUP_MA",'MA')
-      mcs=mcf[0].get_child("b_cercle").get_child("CARA")
-      mcs.set_valeur(mcs.eval_val('R'))
-      mcs=mcf[0].get_child("b_cercle").get_child("VALE")
-      mcs.set_valeur(mcs.eval_val('3.0,P6'))
-      co.nomme_sd("CARA")
-# commentaire
-      pos=pos+1
-      co=j.addentite("COMMENTAIRE",pos)
-      text=""" 'AFFE_MODELE', 'MAILLAGE'           --> uniqueassdpanel
-  AFFE_MODELE', 'AFFE', 'GROUP_MA'   --> plusieursbasepanel 
- 'AFFE_MODELE', 'AFFE', 'PHENOMENE'  --> uniqueintopanel
- 'AFFE_MODELE', 'AFFE', 'b_mecanique'--> plusieursintopanel"""
-      co.set_valeur(text)
-#F1=DEFI_FONCTION(NOM_PARA='DX',
-#                 VALE=(5.0,3.0,P4[1],P3,),);
-      pos=pos+1
-      co=j.addentite("DEFI_FONCTION",pos)
-      mcs=co.get_child("NOM_PARA")
-      mcs.set_valeur(mcs.eval_val("DX"))
-      mcs=co.addentite("VALE")
-      mcs.set_valeur(mcs.eval_val("5.0,3.0,P4[1],P3"))
-      co.nomme_sd("F1")
-#F3=DEFI_FONCTION(NOM_PARA='DRX',
-#                 VALE_C=(5.0,7.0,9.0,9.0,8.0,7.0,),);
-      pos=pos+1
-      co=j.addentite("DEFI_FONCTION",pos)
-      mcs=co.get_child("NOM_PARA")
-      mcs.set_valeur(mcs.eval_val("DRX"))
-      mcs=co.addentite("VALE_C")
-      mcs.set_valeur(mcs.eval_val("5.0,7.0,9.0,9.0,8.0,7.0"))
-      co.nomme_sd("F3")
-# commentaire
-      pos=pos+1
-      co=j.addentite("COMMENTAIRE",pos)
-      co.set_valeur(" 'DEFI_FONCTION', 'VALE'             --> fonctionpanel  ")
-#MATER2=DEFI_MATERIAU(ELAS=_F(E=100000000000.0,
-#                             NU=0.0,),
-#                     ECRO_ASYM_LINE=_F(DC_SIGM_EPSI=0.0,
-#                                       SY_C=200000000.0,
-#                                       DT_SIGM_EPSI=0.0,
-#                                       SY_T=50000000.0,),);
-      pos=pos+1
-      co=j.addentite("DEFI_MATERIAU",pos)
-      mcf=co.addentite("ELAS")
-      mcs=mcf[0].get_child("E")
-      mcs.set_valeur(mcs.eval_val("100000000000.0"))
-      mcs=mcf[0].get_child("NU")
-      mcs.set_valeur(mcs.eval_val("0.0"))
-      mcf=co.addentite("ECRO_ASYM_LINE")
-      mcs=mcf[0].get_child("DC_SIGM_EPSI")
-      mcs.set_valeur(mcs.eval_val("0.0"))
-      mcs=mcf[0].get_child("DT_SIGM_EPSI")
-      mcs.set_valeur(mcs.eval_val("0.0"))
-      mcs=mcf[0].get_child("SY_C")
-      mcs.set_valeur(mcs.eval_val("200000000.0"))
-      mcs=mcf[0].get_child("SY_T")
-      mcs.set_valeur(mcs.eval_val("50000000.0"))
-      co.nomme_sd("MATER2")
-#PS1=DEFI_PARA_SENSI(VALE=1.0,);
-#PS2=DEFI_PARA_SENSI(VALE=1.0,);
-#PS3=DEFI_PARA_SENSI(VALE=1.0,);
-      pos=pos+1
-      co=j.addentite("DEFI_PARA_SENSI",pos)
-      mcs=co.get_child("VALE")
-      mcs.set_valeur(mcs.eval_val("1.0"))
-      co.nomme_sd("PS1")
-      pos=pos+1
-      co=j.addentite("DEFI_PARA_SENSI",pos)
-      mcs=co.get_child("VALE")
-      mcs.set_valeur(mcs.eval_val("1.0"))
-      co.nomme_sd("PS2")
-      pos=pos+1
-      co=j.addentite("DEFI_PARA_SENSI",pos)
-      mcs=co.get_child("VALE")
-      mcs.set_valeur(mcs.eval_val("1.0"))
-      co.nomme_sd("PS3")
-#CHMAT2=AFFE_MATERIAU(MAILLAGE=MAIL,
-#                     AFFE=_F(TOUT='OUI',
-#                             MATER=MATER2,),);
-      pos=pos+1
-      co=j.addentite("AFFE_MATERIAU",pos)
-      add_mcsimp(co,"MAILLAGE","MAIL")
-      mcf=co.get_child("AFFE")
-      add_mcsimp(mcf[0],"TOUT","OUI")
-      add_mcsimp(mcf[0],"MATER","MATER2")
-      co.nomme_sd("CHMAT2")
-#AAAZ=AFFE_CHAR_THER(MODELE=AFFE1,
-#                    TEMP_IMPO=_F(TOUT='OUI',
-#                                 TEMP=0.0,),);
-      pos=pos+1
-      co=j.addentite("AFFE_CHAR_THER",pos)
-      add_mcsimp(co,"MODELE","AFFE1")
-      mcf=co.addentite("TEMP_IMPO")
-      add_mcsimp(mcf[0],"TOUT","OUI")
-      add_mcsimp(mcf[0],"TEMP","0.0")
-      co.nomme_sd("AAAZ")
-#TH1=THER_LINEAIRE(MODELE=AFFE1,
-#                  CHAM_MATER=CHMAT2,
-#                  EXCIT=_F(CHARGE=AAAZ,),
-#                  SENSIBILITE=(PS1,PS2,),);
-      pos=pos+1
-      co=j.addentite("THER_LINEAIRE",pos)
-      add_mcsimp(co,"MODELE","AFFE1")
-      add_mcsimp(co,"CHAM_MATER","CHMAT2")
-      mcf=co.get_child("EXCIT")
-      add_mcsimp(mcf[0],"CHARGE","AAAZ")
-      add_mcsimp(co,"SENSIBILITE","PS1,PS2")
-      co.nomme_sd("TH1")
-# commentaire
-      pos=pos+1
-      co=j.addentite("COMMENTAIRE",pos)
-      co.set_valeur(" 'THER_LINEAIRE', 'SENSIBILITE'       --> plusieursassdpanel")
-#ACA1=AFFE_CHAR_ACOU(MODELE=AFFE1,
-#                    PRES_IMPO=_F(TOUT='OUI',
-#                                 PRES=('RI',3.0,3.0,),),);
-      pos=pos+1
-      co=j.addentite("AFFE_CHAR_ACOU",pos)
-      add_mcsimp(co,"MODELE","AFFE1")
-      mcf=co.addentite("PRES_IMPO")
-      add_mcsimp(mcf[0],"TOUT","OUI")
-      add_mcsimp(mcf[0],"PRES","'RI',3.0,3.0")
-      co.nomme_sd("ACA1")
-# commentaire
-      pos=pos+1
-      co=j.addentite("COMMENTAIRE",pos)
-      co.set_valeur(" 'AFFE_CHAR_ACOU', 'PRES_IMPO', 'PRES' --> uniquecomppanel")
-
-# 'AFFE_CHAR_ACOU', 'PRES_IMPO', 'PRES' --> uniquecomppanel
-
-#MACRO_MATR_ASSE(MODELE=AFFE1,
-#                NUME_DDL=CO('DDL1'),
-#                MATR_ASSE=_F(MATRICE=CO('MAT1'),
-#                             OPTION='RIGI_THER',),);
-      pos=pos+1
-      co=j.addentite("MACRO_MATR_ASSE",pos)
-      add_mcsimp(co,"MODELE","AFFE1")
-      mcs=co.get_child("NUME_DDL")
-      mcs.set_valeur_co('DDL1')
-      mcf=co.get_child("MATR_ASSE")
-      add_mcsimp(mcf[0],"OPTION","RIGI_THER")
-      mcs=mcf[0].get_child("MATRICE")
-      mcs.set_valeur_co('MAT1')
-# commentaire
-      pos=pos+1
-      co=j.addentite("COMMENTAIRE",pos)
-      co.set_valeur(" 'MACRO_MATR_ASSE', 'MATR_ASSE', 'MATRICE'  --> uniquesdcopanel")
-
-      assert j.isvalid(),j.report()
-
-      text1=app.get_text_JDC(j,'python')
-      file=os.path.join(prefs.INSTALLDIR,"Tests/testelem/azv6.comm")
-      f=open(file)
-      text2=f.read()
-      f.close()
-      assert text1 == text2 , cdiff(text1,text2)
-
-   def test001(self):
-      """ Test de construction d'un fichier de commandes avec DEFI_LIST_REEL, fonction et parametre de zero"""
-
-      app=appli.STANDALONE(version='v6.8')
-      j=app.newJDC()
-# commande DEBUT
-      co=j.addentite("DEBUT",0)
-# commande FIN
-      co=j.addentite("FIN",1)
-#parametre
-      pos=0
-      pos=pos+1
-      co=add_param(j,pos,"P1","9.8")
-      pos=pos+1
-      co=add_param(j,pos,"P2","sin(P1)")
-# formule
-      pos=pos+1
-      co=j.addentite("FORMULE",pos)
-      co.update(("aaa","REEL","a+z","(a,z)"))
-#parametre de formule
-      pos=pos+1
-      co=add_param(j,pos,"P3","aaa(P1,2.)")
-#commande defi_list_reel
-      pos=pos+1
-      co=j.addentite("DEFI_LIST_REEL",pos)
-      add_mcsimp(co,"VALE","1.,2.,3.")
-      co.nomme_sd("LI1")
-#commande defi_list_reel
-      pos=pos+1
-      co=j.addentite("DEFI_LIST_REEL",pos)
-      add_mcsimp(co,"VALE","sin(1.)")
-      co.nomme_sd("LI2")
-#commande defi_list_reel
-      pos=pos+1
-      co=j.addentite("DEFI_LIST_REEL",pos)
-      add_mcsimp(co,"VALE","aaa(1.,2.)")
-      co.nomme_sd("LI3")
-#commande defi_list_reel
-      pos=pos+1
-      co=j.addentite("DEFI_LIST_REEL",pos)
-      add_mcsimp(co,"VALE","sin(1.,2)")
-      co.nomme_sd("LI4")
-#commande defi_list_reel
-      pos=pos+1
-      co=j.addentite("DEFI_LIST_REEL",pos)
-      add_mcsimp(co,"VALE","aaa(1.)")
-      co.nomme_sd("LI5")
-#commande defi_list_reel
-      pos=pos+1
-      co=j.addentite("DEFI_LIST_REEL",pos)
-      add_mcsimp(co,"VALE","1,sin(1.),2")
-      co.nomme_sd("LI6")
-
-      expected="""DEBUT CR validation : SansNom
-   Etape : DEFI_LIST_REEL    ligne : ...
-      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-      ! Concept retourné non défini !
-      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-      Mot-clé simple : VALE
-         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-         ! 'sin(1.,2)' n'est pas d'un type autorisé: ('R',) !
-         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-      Fin Mot-clé simple : VALE
-   Fin Etape : DEFI_LIST_REEL
-   Etape : DEFI_LIST_REEL    ligne : ...
-      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-      ! Concept retourné non défini !
-      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-      Mot-clé simple : VALE
-         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-         ! 'aaa(1.)' n'est pas d'un type autorisé: ('R',) !
-         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-      Fin Mot-clé simple : VALE
-   Fin Etape : DEFI_LIST_REEL
-FIN CR validation :SansNom
-"""
-      msg=str( j.report())
-      assert compare.check(expected,msg),cdiff(expected,msg)
index 4440100867afd674cca8e3b6554a56ec6168b1c0..f463af354f93033ae83be8642296ea5451cdc574 100644 (file)
@@ -6,7 +6,7 @@ import difflib
 import compare
 
 import prefs
-from Editeur import appli
+from InterfaceTK import appli
 
 def add_param(j,pos,nom,valeur):
     co=j.addentite("PARAMETRE",pos)
@@ -378,9 +378,9 @@ class TestCase(unittest.TestCase):
       ! Concept retourné non défini !
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Mot-clé simple : VALE
-         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-         ! 'sin(1.,2)' n'est pas d'un type autorisé: ('R',) !
-         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+         ! 'sin(1.,2)' (de type <type 'str'>) n'est pas d'un type autorisé: ('R',) !
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Fin Mot-clé simple : VALE
    Fin Etape : DEFI_LIST_REEL
    Etape : DEFI_LIST_REEL    ligne : ...
@@ -388,9 +388,9 @@ class TestCase(unittest.TestCase):
       ! Concept retourné non défini !
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Mot-clé simple : VALE
-         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-         ! 'aaa(1.)' n'est pas d'un type autorisé: ('R',) !
-         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+         ! 'aaa(1.)' (de type <type 'str'>) n'est pas d'un type autorisé: ('R',) !
+         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Fin Mot-clé simple : VALE
    Fin Etape : DEFI_LIST_REEL
 FIN CR validation :SansNom
index 52e49e833276f784d1ae763d4e28fd77b7ad5f31..dcf246d0830ed5b73157a84452edb841b2f73a6a 100644 (file)
@@ -9,11 +9,11 @@ import Tkinter
 
 # Modules Eficas
 import prefs
-from Editeur import eficas_go
-from Editeur import splash
 from Editeur import session
-from Editeur import eficas
-from Editeur import images
+from InterfaceTK import eficas_go
+from InterfaceTK import splash
+from InterfaceTK import eficas
+from InterfaceTK import images
 from common import *
 
 version='v8'
index b701fbb022b27fc62b7d2dbbe113758c7c2c5a4e..0bb15fbb7ec0c414dbadc81ad1b48e99003cc05d 100644 (file)
@@ -9,11 +9,8 @@ import Tkinter
 
 # Modules Eficas
 import prefs
-from Editeur import eficas_go
-from Editeur import splash
 from Editeur import session
-from Editeur import eficas
-from Editeur import images
+from InterfaceTK import eficas_go,splash,eficas,images
 from common import *
 
 
index 7fa615f3a49905172c357eaefb70d5d42a164ed1..f96a73b8e3dc65f47b616802e80c21c24055b913 100644 (file)
@@ -9,11 +9,8 @@ import Tkinter
 
 # Modules Eficas
 import prefs
-from Editeur import eficas_go
-from Editeur import splash
 from Editeur import session
-from Editeur import eficas
-from Editeur import images
+from InterfaceTK import eficas_go,splash,eficas,images
 from common import *
 
 
index 3d384921e855116a7a522f6e2f5f9f062695d9b8..3b3032e420b0025348d5e742686f5fc64a093279 100644 (file)
@@ -9,11 +9,8 @@ import Tkinter
 
 # Modules Eficas
 import prefs
-from Editeur import eficas_go
-from Editeur import splash
 from Editeur import session
-from Editeur import eficas
-from Editeur import images
+from InterfaceTK import eficas_go,splash,eficas,images
 from common import *
 
 
index 3b806c3d8ec4437be3ab2b89313b92e71a119541..78590803172bc27245ea8d497c779613f866873e 100644 (file)
@@ -9,11 +9,8 @@ import Tkinter
 
 # Modules Eficas
 import prefs
-from Editeur import eficas_go
-from Editeur import splash
 from Editeur import session
-from Editeur import eficas
-from Editeur import images
+from InterfaceTK import eficas_go,splash,eficas,images
 from common import *
 
 version='v7'
index 15d83d9f4a87a1ad1bb6d23d247b9ad393f68b07..37de0da2eefc4312b409cb39566707200e78fbac 100644 (file)
@@ -9,11 +9,8 @@ import Tkinter
 
 # Modules Eficas
 import prefs
-from Editeur import eficas_go
-from Editeur import splash
 from Editeur import session
-from Editeur import eficas
-from Editeur import images
+from InterfaceTK import eficas_go,splash,eficas,images
 from common import *
 
 
index abdea69fe866cba0951110e789b787808b290a3c..6dbd0025728e438693a38bd71cf488e0361b14c9 100644 (file)
@@ -9,11 +9,8 @@ import Tkinter
 
 # Modules Eficas
 import prefs
-from Editeur import eficas_go
-from Editeur import splash
 from Editeur import session
-from Editeur import eficas
-from Editeur import images
+from InterfaceTK import eficas_go,splash,eficas,images
 from common import *
 
 
index 37c180cdd73fbd107191e3a76bd8dda339a9cab0..911387bf985df5b4cb9bedee075f424f65cb8ac7 100644 (file)
@@ -6,6 +6,10 @@ jdcdisplay=None
 
 class UnKnownNode(Exception):pass
 
+def pause():
+  if 1:
+    showinfo("Pause","Pause")
+
 def init_common(r,j):
     global root,jdcdisplay
     root=r
@@ -57,7 +61,6 @@ def create_command(nom,panel):
     label=panel.liste_command.dico_labels[nom]
     label.event_generate("<Enter>")
     label.event_generate("<Return>")
-    #root.event_generate("<Return>")
     root.update()
     panel=jdcdisplay.panel_courant
     return panel
index dab4f5e688e392576909d3974c1586de2bd6cb52..0c1b6699986eba5f5591f3a191ce3ea463b68c6a 100644 (file)
@@ -9,11 +9,8 @@ import Tkinter
 
 # Modules Eficas
 import prefs
-from Editeur import eficas_go
-from Editeur import splash
 from Editeur import session
-from Editeur import eficas
-from Editeur import images
+from InterfaceTK import eficas_go,splash,eficas,images
 from common import *
 
 version='v9'
index ab88e845d69021c10d4cd4e36377a6b8fb835e3f..ee3762d9e199bc1b727bb4886431d83ed5f39210 100644 (file)
@@ -9,11 +9,8 @@ import Tkinter
 
 # Modules Eficas
 import prefs
-from Editeur import eficas_go
-from Editeur import splash
 from Editeur import session
-from Editeur import eficas
-from Editeur import images
+from InterfaceTK import eficas_go,splash,eficas,images
 from common import *
 
 
index 7fa615f3a49905172c357eaefb70d5d42a164ed1..f96a73b8e3dc65f47b616802e80c21c24055b913 100644 (file)
@@ -9,11 +9,8 @@ import Tkinter
 
 # Modules Eficas
 import prefs
-from Editeur import eficas_go
-from Editeur import splash
 from Editeur import session
-from Editeur import eficas
-from Editeur import images
+from InterfaceTK import eficas_go,splash,eficas,images
 from common import *
 
 
index 6e0d354747f46bb181dad9aa6ad1bcdeb5878024..20e44bb1661ed0166dded8cc682735a9964764a7 100644 (file)
@@ -9,11 +9,8 @@ import Tkinter
 
 # Modules Eficas
 import prefs
-from Editeur import eficas_go
-from Editeur import splash
 from Editeur import session
-from Editeur import eficas
-from Editeur import images
+from InterfaceTK import eficas_go,splash,eficas,images
 from common import *
 
 
index b5970abb44efd49864daf0bd7d05b132ee57cf47..f6d1d0c7a98ba147144fe6390da0f4e811da38ed 100644 (file)
@@ -6,6 +6,7 @@ import sets
 jdcSet=sets.Set()
 
 dict_erreurs={
+#STA8.4
               "DIST_LIGN_3D": "la commande DIST_LIGN_3D a ete supprimee",
               "DEFI_THER_JOULE": "la commande DIST_LIGN_3D a ete supprimee",
               "DIST_LIGN_3D": "la commande DIST_LIGN_3D a ete supprimee",
@@ -62,6 +63,18 @@ dict_erreurs={
               "COMB_CHAM_ELEM":"COMB_CHAM_ELEM est remplace par CREA_CHAMP",
               "IMPR_OAR":"IMPR_OAR demande un traitement manuel",
               "IMPR_FICO_HOMARD":"IMPR_FICO_HOMARD a ete integre dans MACR_ADPA_MAIL",
+# STA9.2
+              "POST_RCCM_SITUATION_NUME_PASSAGE":"Utilisation de NUME_PASSAGE pour le type TUYAUTERIE impossible en 9.2. On ne traite pour le moment que les chemins de passage simples.",
+              "DEFI_MATERIAU_BAZANT_FD" : "le materiau BAZANT_FD a ete supprime",
+              "DEFI_MATERIAU_APPUI_ELAS" : "le materiau APPUI_ELAS a ete supprime",
+              "DEFI_MATERIAU_PORO_JOINT" : "le materiau PORO_JOINT a ete supprime",
+              "DEFI_MATERIAU_ZIRC_CYRA2" : "le materiau ZIRC_CYRA2 a ete supprime",
+              "DEFI_MATERIAU_ZIRC_EPRI" : "le materiau ZIRC_EPRI a ete supprime",
+              "IMPR_MATRICE_MATR_ELEM_FORMAT=RESULTAT" : "IMPR_MATRICE au format RESULTAT a ete supprime",
+              "IMPR_MATRICE_MATR_ASSE_FORMAT=RESULTAT" : "IMPR_MATRICE au format RESULTAT a ete supprime",
+              "CALC_G_OPTION=G_LAGR" : "l'OPTION G_LAGR de CALC_G a ete supprimee",
+              "CALC_G_OPTION=G_LAGR_GLOB" : "l'OPTION G_LAGR_GLOB de CALC_G a ete supprimee",
+              "CALC_MATR_ELEM_THETA" : "l'OPTION RIGI_MECA_LAGR de CALC_MATR_ELEM a ete supprimee",
              }
 
 def EcritErreur(listeGena,ligne=None) :
index b8f0a5aa48ef0b0d471a77eb59af9a1feb29c39b..fc95db7e45ef4949f24e4208b21fc1ef3fabd3ef 100644 (file)
@@ -6,7 +6,6 @@ import parseur
 from mocles import parseKeywords
 
 
-JDCdict={}
 
 class JDC:
     """Cet objet conserve toutes les informations relatives à un fichier de commandes .comm"""
@@ -112,12 +111,9 @@ class JDC:
 def getJDC(filename,atraiter):
 #---------------------------_
 # lit le JDC
-    jdc=JDCdict.get(filename)
-    if not jdc: 
-        f=open(filename)
-        src=f.read()
-        f.close()
-        jdc=JDC(filename,src,atraiter)
-        JDCdict[filename]=jdc
+    f=open(filename)
+    src=f.read()
+    f.close()
+    jdc=JDC(filename,src,atraiter)
     return jdc
 
index 9bc0e044dc3322e0ed71291c9b076dcbf92b3a0c..80d2ede45068a15f24c7ce0e79a90ae64943a255 100644 (file)
@@ -23,7 +23,7 @@ from dictErreurs  import GenereErreurPourCommande
 import calcG
 
 
-atraiter=( "DEFI_MAILLAGE",)
+atraiter=( "DEFI_MAILLAGE","CALC_VECT_ELEM","DYNA_NON_LINE","STAT_NON_LINE","FACT_LDLT","FACT_GRAD","RESO_LDLT","RESO_GRAD","DYNA_TRAN_MODAL","NORM_MODE","MACRO_MODE_MECA","POST_RCCM","THER_NON_LINE","THER_LINEAIRE","THER_NON_LINE_MO","DEFI_CABLE_BP","GENE_VARI_ALEA","DEFI_MATERIAU","IMPR_MATRICE","CALC_G","CALC_MATR_ELEM")
 
 def traduc(infile,outfile,flog=None):
 
@@ -35,14 +35,131 @@ def traduc(infile,outfile,flog=None):
     parseKeywords(root)
     
     ####################### traitement erreurs ########################
-    #GenereErreurPourCommande(jdc,("POST_RCCM","DIST_LIGN_3D","IMPR_OAR","COMB_CHAM_NO","COMB_CHAM_ELEM"))
-    GenereErreurPourCommande(jdc,())
+    GenereErreurPourCommande(jdc,("POST_RCCM"))
 
-    ####################### traitement CALC_META     #######################
+    ####################### traitement Sous-Structuration  #######################
     renameMotCleInFact(jdc,"DEFI_MAILLAGE","DEFI_SUPER_MAILLE","MACR_ELEM_STAT","MACR_ELEM")
+    renameMotCleInFact(jdc,"DYNA_NON_LINE","SOUS_STRUC","MAILLE","SUPER_MAILLE")
+    renameMotCleInFact(jdc,"STAT_NON_LINE","SOUS_STRUC","MAILLE","SUPER_MAILLE")
+    renameMotCleInFact(jdc,"CALC_VECT_ELEM","SOUS_STRUC","MAILLE","SUPER_MAILLE")
+    #########################################################################
+
+    ####################### traitement Resolution lineaire ######################
+    renameMotCle(jdc,"RESO_LDLT","MATR_FACT","MATR")
+    renameMotCle(jdc,"RESO_GRAD","MATR_ASSE","MATR")
+    renameMotCle(jdc,"RESO_GRAD","MATR_FACT","MATR_FACT")
+    renameOper(jdc,"RESO_LDLT","RESOUDRE")
+    renameOper(jdc,"RESO_GRAD","RESOUDRE")
+    renameOper(jdc,"FACT_LDLT","FACTORISER")
+    renameOper(jdc,"FACT_GRAD","FACTORISER")
+    #########################################################################
+
+    ####################### traitement DYNA_TRAN_MODAL ######################
+    removeMotCle(jdc,"DYNA_TRAN_MODAL","NB_MODE_DIAG")
+    #########################################################################
+
+    ####################### traitement MASS_INER dans NORM_MODE ##########
+    removeMotCle(jdc,"NORM_MODE","MASSE_INER")
+    removeMotCleInFact(jdc,"MACRO_MODE_MECA","NORM_MODE","MASSE_INER")
+    #########################################################################
+
+    ####################### traitement POST_RCCM ############################
+    removeMotCleInFactSiRegleAvecErreur(jdc,"POST_RCCM","SITUATION","NUME_PASSAGE",((("TYPE_RESU_MECA","TUYAUTERIE",jdc),"MCaPourValeur"),))
+    #########################################################################
+
+    ####################### traitement THER_NON_LINE ############################
+    renameMotCleInFact(jdc,"THER_NON_LINE","TEMP_INIT","NUME_INIT","NUME_ORDRE")
+    renameMotCle(jdc,"THER_NON_LINE","TEMP_INIT","ETAT_INIT",)
+    renameMotCleInFact(jdc,"THER_NON_LINE","INCREMENT","NUME_INIT","NUME_INST_INIT")
+    renameMotCleInFact(jdc,"THER_NON_LINE","INCREMENT","NUME_FIN","NUME_INST_FIN")
+    #########################################################################
+
+    ####################### traitement THER_LINEAIRE ############################
+    renameMotCleInFact(jdc,"THER_LINEAIRE","TEMP_INIT","NUME_INIT","NUME_ORDRE")
+    renameMotCle(jdc,"THER_LINEAIRE","TEMP_INIT","ETAT_INIT",)
+    renameMotCleInFact(jdc,"THER_LINEAIRE","INCREMENT","NUME_INIT","NUME_INST_INIT")
+    renameMotCleInFact(jdc,"THER_LINEAIRE","INCREMENT","NUME_FIN","NUME_INST_FIN")
+    #########################################################################
+
+    ####################### traitement THER_NON_LINE ############################
+    renameMotCleInFact(jdc,"THER_NON_LINE","TEMP_INIT","NUME_INIT","NUME_ORDRE")
+    renameMotCle(jdc,"THER_NON_LINE","TEMP_INIT","ETAT_INIT",)
+    #########################################################################
 
+    ####################### traitement DEFI_CABLE_BP ######################
+    removeMotCle(jdc,"DEFI_CABLE_BP","MAILLAGE")
     #########################################################################
 
+    ####################### traitement GENE_VARI_ALEA ######################
+    removeMotCleSiRegle(jdc,"GENE_VARI_ALEA","COEF_VAR",((("TYPE","EXPONENTIELLE",jdc),"MCaPourValeur"),))
+    #########################################################################
+
+    ####################### traitement DEFI_MATERIAU ######################
+    removeMotCleAvecErreur(jdc,"DEFI_MATERIAU","BAZANT_FD")
+    removeMotCleAvecErreur(jdc,"DEFI_MATERIAU","PORO_JOINT")
+    removeMotCleAvecErreur(jdc,"DEFI_MATERIAU","APPUI_ELAS")
+    removeMotCleAvecErreur(jdc,"DEFI_MATERIAU","ZIRC_EPRI")
+    removeMotCleAvecErreur(jdc,"DEFI_MATERIAU","ZIRC_CYRA2")
+    #########################################################################
+
+    ####################### traitement IMPR_MATRICE ######################
+    removeCommandeSiRegleAvecErreur(jdc,"IMPR_MATRICE",((("MATR_ELEM","FORMAT","RESULTAT",jdc),"MCsousMCFaPourValeur"),))
+    removeCommandeSiRegleAvecErreur(jdc,"IMPR_MATRICE",((("MATR_ASSE","FORMAT","RESULTAT",jdc),"MCsousMCFaPourValeur"),))
+    #########################################################################
+
+
+    ####################### traitement CALC_G ######################
+    removeMotCleSiRegleAvecErreur(jdc,"CALC_G","OPTION",((("OPTION","G_LAGR",jdc),"MCaPourValeur"),))
+    removeMotCleSiRegleAvecErreur(jdc,"CALC_G","OPTION",((("OPTION","G_LAGR_GLOB",jdc),"MCaPourValeur"),))
+    removeMotCle(jdc,"CALC_G","PROPAGATION")
+    removeMotCle(jdc,"CALC_G","THETA_LAGR")
+    removeMotCle(jdc,"CALC_G","DIRE_THETA_LAGR")
+    #########################################################################
+
+    ####################### traitement CALC_MATR_ELEM ######################
+    removeMotCleSiRegle(jdc,"CALC_MATR_ELEM","OPTION",((("OPTION","RIGI_MECA_LAGR",jdc),"MCaPourValeur"),))
+    removeMotCleAvecErreur(jdc,"CALC_MATR_ELEM","PROPAGATION")
+    removeMotCle(jdc,"CALC_MATR_ELEM","THETA")
+    #########################################################################
+
+    ####################### traitement CONTACT ######################
+    removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","KT_ULTM")
+    removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","EFFO_N_INIT")
+    removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","RIGI_N_IRRA")
+    removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","RIGI_N_FO")
+    removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","RIGI_MZ")
+    removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","ANGLE_1")
+    removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","ANGLE_2")
+    removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","ANGLE_3")
+    removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","ANGLE_4")
+    removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","MOMENT_1")
+    removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","MOMENT_2")
+    removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","MOMENT_3")
+    removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","MOMENT_4")
+    removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","C_PRAGER_MZ")
+    dDis_Choc={"DIS_CONTACT":"DIS_CHOC"}
+    ChangementValeurDsMCF(jdc,"STAT_NON_LINE","COMP_INCR","RELATION",dDis_Choc)
+    ChangementValeurDsMCF(jdc,"DYNA_NON_LINE","COMP_INCR","RELATION",dDis_Choc)
+    renameMotCleInFact(jdc,"STAT_NON_LINE","COMP_INCR","DIS_CONTACT","DIS_CHOC")
+    renameMotCleInFact(jdc,"DYNA_NON_LINE","COMP_INCR","DIS_CONTACT","DIS_CHOC")
+    dGrilles={"DIS_GRICRA":"GRILLE_CRAYONS"}
+    ChangementValeurDsMCF(jdc,"STAT_NON_LINE","COMP_INCR","RELATION",dGrilles)
+    ChangementValeurDsMCF(jdc,"DYNA_NON_LINE","COMP_INCR","RELATION",dGrilles)
+
+    removeMotCleInFact(jdc,"AFFE_CHAR_MECA","CONTACT","RECHERCHE")
+    removeMotCleInFact(jdc,"AFFE_CHAR_MECA","CONTACT","VECT_Y")
+    removeMotCleInFact(jdc,"AFFE_CHAR_MECA","CONTACT","VECT_ORIE_POU")
+
+    renameCommandeSiRegle(jdc,"AFFE_CHAR_MECA_F","AFFE_CHAR_MECA",((("CONTACT",),"existeMCFParmi"),))
+    #########################################################################
+
+    ####################### traitement CAM_CLAY ######################
+    AjouteMotClefDansFacteur(jdc,"DEFI_MATERIAU","CAM_CLAY","MU=xxx",)
+    #########################################################################
+
+    ####################### traitement GLRC ######################
+    renameCommandeSiRegle(jdc,"DEFI_MATERIAU","DEFI_GLRC", ((("GLRC_DAMAGE","GLRC_ACIER",),"existeMCFParmi"),))
+    #########################################################################
 
     f=open(outfile,'w')
     f.write(jdc.getSource())
diff --git a/Ui/OptionsEditeur.py b/Ui/OptionsEditeur.py
new file mode 100644 (file)
index 0000000..f828bdf
--- /dev/null
@@ -0,0 +1,138 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'OptionsEditeur.ui'
+#
+# Created: Tue Jun 10 18:23:53 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.16
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class desOptions(QDialog):
+    def __init__(self,parent = None,name = None,modal = 0,fl = 0):
+        QDialog.__init__(self,parent,name,modal,fl)
+
+        if not name:
+            self.setName("desOptions")
+
+
+
+        self.groupBox1 = QGroupBox(self,"groupBox1")
+        self.groupBox1.setGeometry(QRect(11,11,548,191))
+
+        self.textLabel1_3 = QLabel(self.groupBox1,"textLabel1_3")
+        self.textLabel1_3.setGeometry(QRect(30,60,280,20))
+
+        self.textLabel1_2_2 = QLabel(self.groupBox1,"textLabel1_2_2")
+        self.textLabel1_2_2.setGeometry(QRect(30,120,280,20))
+
+        self.CBVersions = QComboBox(0,self.groupBox1,"CBVersions")
+        self.CBVersions.setGeometry(QRect(30,20,90,30))
+
+        self.LERepMat = QLineEdit(self.groupBox1,"LERepMat")
+        self.LERepMat.setGeometry(QRect(30,140,501,31))
+
+        self.LERepCata = QLineEdit(self.groupBox1,"LERepCata")
+        self.LERepCata.setGeometry(QRect(30,80,501,31))
+
+        self.Bok = QPushButton(self.groupBox1,"Bok")
+        self.Bok.setGeometry(QRect(440,20,90,31))
+        self.Bok.setAutoDefault(0)
+
+        self.groupBox2 = QGroupBox(self,"groupBox2")
+        self.groupBox2.setGeometry(QRect(11,208,548,90))
+
+        self.LEVersionAjout = QLineEdit(self.groupBox2,"LEVersionAjout")
+        self.LEVersionAjout.setGeometry(QRect(120,31,101,30))
+
+        self.LEVersionSup = QLineEdit(self.groupBox2,"LEVersionSup")
+        self.LEVersionSup.setGeometry(QRect(410,30,101,30))
+
+        self.PBSup = QPushButton(self.groupBox2,"PBSup")
+        self.PBSup.setGeometry(QRect(300,20,101,41))
+
+        self.PBajout = QPushButton(self.groupBox2,"PBajout")
+        self.PBajout.setGeometry(QRect(10,20,101,41))
+
+        self.PBQuit = QPushButton(self,"PBQuit")
+        self.PBQuit.setGeometry(QRect(400,420,151,31))
+        self.PBQuit.setMinimumSize(QSize(0,30))
+
+        self.groupBox3 = QGroupBox(self,"groupBox3")
+        self.groupBox3.setGeometry(QRect(10,310,548,90))
+
+        self.LERepDoc = QLineEdit(self.groupBox3,"LERepDoc")
+        self.LERepDoc.setGeometry(QRect(20,50,520,31))
+
+        self.textLabel1 = QLabel(self.groupBox3,"textLabel1")
+        self.textLabel1.setGeometry(QRect(20,20,280,30))
+
+        self.Bdefaut = QCheckBox(self,"Bdefaut")
+        self.Bdefaut.setGeometry(QRect(10,430,340,20))
+        Bdefaut_font = QFont(self.Bdefaut.font())
+        Bdefaut_font.setPointSize(12)
+        self.Bdefaut.setFont(Bdefaut_font)
+
+        self.languageChange()
+
+        self.resize(QSize(570,474).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        self.connect(self.CBVersions,SIGNAL("activated(int)"),self.VersionChoisie)
+        self.connect(self.Bdefaut,SIGNAL("clicked()"),self.BdefautChecked)
+        self.connect(self.LEVersionAjout,SIGNAL("returnPressed()"),self.AjoutVersion)
+        self.connect(self.LERepDoc,SIGNAL("returnPressed()"),self.ChangePathDoc)
+        self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked)
+        self.connect(self.LEVersionSup,SIGNAL("returnPressed()"),self.SupVersion)
+        self.connect(self.PBajout,SIGNAL("clicked()"),self.AjoutVersion)
+        self.connect(self.PBSup,SIGNAL("clicked()"),self.SupVersion)
+        self.connect(self.PBQuit,SIGNAL("clicked()"),self.close)
+        self.connect(self.LERepDoc,SIGNAL("textChanged(const QString&)"),self.ChangePathDoc)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("Options Aster"))
+        self.groupBox1.setTitle(self.__tr("Configurer une Version"))
+        self.textLabel1_3.setText(self.__trUtf8("\x52\xc3\xa9\x70\x65\x72\x74\x6f\x69\x72\x65\x20\x64\x27\x61\x63\x63\xc3\xa8\x73\x20\x61\x75\x20\x63\x61\x74\x61\x6c\x6f\x67\x75\x65\x20\x3a"))
+        self.textLabel1_2_2.setText(self.__trUtf8("\x52\xc3\xa9\x70\x65\x72\x74\x6f\x69\x72\x65\x20\x64\x27\x61\x63\x63\xc3\xa8\x73\x20\x61\x75\x78\x20\x6d\x61\x74\xc3\xa9\x72\x69\x61\x75\x78\x20\x3a"))
+        self.LERepMat.setText(QString.null)
+        self.LERepCata.setText(QString.null)
+        self.Bok.setText(self.__tr("Valider"))
+        self.groupBox2.setTitle(self.__trUtf8("\x47\xc3\xa9\x72\x65\x72\x20\x6c\x65\x73\x20\x76\x65\x72\x73\x69\x6f\x6e\x73"))
+        self.PBSup.setText(self.__tr("Supprimer\n"
+"Version :"))
+        self.PBajout.setText(self.__tr("Ajouter\n"
+"Version :"))
+        self.PBQuit.setText(self.__tr("Quitter"))
+        self.groupBox3.setTitle(self.__tr("Doc"))
+        self.LERepDoc.setText(QString.null)
+        self.textLabel1.setText(self.__trUtf8("\x52\x65\x70\x65\x72\x74\x6f\x69\x72\x65\x20\x64\x27\x61\x63\x63\x65\x73\x20\xc3\xa0\x20\x6c\x61\x20\x64\x6f\x63\x75\x6d\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x3a"))
+        self.Bdefaut.setText(self.__tr("Reinitialiser avec les valeurs par defaut"))
+
+
+    def VersionChoisie(self):
+        print "desOptions.VersionChoisie(): Not implemented yet"
+
+    def BdefautChecked(self):
+        print "desOptions.BdefautChecked(): Not implemented yet"
+
+    def AjoutVersion(self):
+        print "desOptions.AjoutVersion(): Not implemented yet"
+
+    def SupVersion(self):
+        print "desOptions.SupVersion(): Not implemented yet"
+
+    def ChangePathDoc(self):
+        print "desOptions.ChangePathDoc(): Not implemented yet"
+
+    def BokClicked(self):
+        print "desOptions.BokClicked(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("desOptions",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("desOptions",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/OptionsEditeur.ui b/Ui/OptionsEditeur.ui
new file mode 100644 (file)
index 0000000..0825010
--- /dev/null
@@ -0,0 +1,369 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>desOptions</class>
+<widget class="QDialog">
+    <property name="name">
+        <cstring>desOptions</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>570</width>
+            <height>474</height>
+        </rect>
+    </property>
+    <property name="caption">
+        <string>Options Aster</string>
+    </property>
+    <widget class="QGroupBox">
+        <property name="name">
+            <cstring>groupBox1</cstring>
+        </property>
+        <property name="geometry">
+            <rect>
+                <x>11</x>
+                <y>11</y>
+                <width>548</width>
+                <height>191</height>
+            </rect>
+        </property>
+        <property name="title">
+            <string>Configurer une Version</string>
+        </property>
+        <widget class="QLabel">
+            <property name="name">
+                <cstring>textLabel1_3</cstring>
+            </property>
+            <property name="geometry">
+                <rect>
+                    <x>30</x>
+                    <y>60</y>
+                    <width>280</width>
+                    <height>20</height>
+                </rect>
+            </property>
+            <property name="text">
+                <string>Répertoire d'accès au catalogue :</string>
+            </property>
+        </widget>
+        <widget class="QLabel">
+            <property name="name">
+                <cstring>textLabel1_2_2</cstring>
+            </property>
+            <property name="geometry">
+                <rect>
+                    <x>30</x>
+                    <y>120</y>
+                    <width>280</width>
+                    <height>20</height>
+                </rect>
+            </property>
+            <property name="text">
+                <string>Répertoire d'accès aux matériaux :</string>
+            </property>
+        </widget>
+        <widget class="QComboBox">
+            <property name="name">
+                <cstring>CBVersions</cstring>
+            </property>
+            <property name="geometry">
+                <rect>
+                    <x>30</x>
+                    <y>20</y>
+                    <width>90</width>
+                    <height>30</height>
+                </rect>
+            </property>
+        </widget>
+        <widget class="QLineEdit">
+            <property name="name">
+                <cstring>LERepMat</cstring>
+            </property>
+            <property name="geometry">
+                <rect>
+                    <x>30</x>
+                    <y>140</y>
+                    <width>501</width>
+                    <height>31</height>
+                </rect>
+            </property>
+            <property name="text">
+                <string></string>
+            </property>
+        </widget>
+        <widget class="QLineEdit">
+            <property name="name">
+                <cstring>LERepCata</cstring>
+            </property>
+            <property name="geometry">
+                <rect>
+                    <x>30</x>
+                    <y>80</y>
+                    <width>501</width>
+                    <height>31</height>
+                </rect>
+            </property>
+            <property name="text">
+                <string></string>
+            </property>
+        </widget>
+        <widget class="QPushButton">
+            <property name="name">
+                <cstring>Bok</cstring>
+            </property>
+            <property name="geometry">
+                <rect>
+                    <x>440</x>
+                    <y>20</y>
+                    <width>90</width>
+                    <height>31</height>
+                </rect>
+            </property>
+            <property name="text">
+                <string>Valider</string>
+            </property>
+            <property name="autoDefault">
+                <bool>false</bool>
+            </property>
+        </widget>
+    </widget>
+    <widget class="QGroupBox">
+        <property name="name">
+            <cstring>groupBox2</cstring>
+        </property>
+        <property name="geometry">
+            <rect>
+                <x>11</x>
+                <y>208</y>
+                <width>548</width>
+                <height>90</height>
+            </rect>
+        </property>
+        <property name="title">
+            <string>Gérer les versions</string>
+        </property>
+        <widget class="QLineEdit">
+            <property name="name">
+                <cstring>LEVersionAjout</cstring>
+            </property>
+            <property name="geometry">
+                <rect>
+                    <x>120</x>
+                    <y>31</y>
+                    <width>101</width>
+                    <height>30</height>
+                </rect>
+            </property>
+        </widget>
+        <widget class="QLineEdit">
+            <property name="name">
+                <cstring>LEVersionSup</cstring>
+            </property>
+            <property name="geometry">
+                <rect>
+                    <x>410</x>
+                    <y>30</y>
+                    <width>101</width>
+                    <height>30</height>
+                </rect>
+            </property>
+        </widget>
+        <widget class="QPushButton">
+            <property name="name">
+                <cstring>PBSup</cstring>
+            </property>
+            <property name="geometry">
+                <rect>
+                    <x>300</x>
+                    <y>20</y>
+                    <width>101</width>
+                    <height>41</height>
+                </rect>
+            </property>
+            <property name="text">
+                <string>Supprimer
+Version :</string>
+            </property>
+        </widget>
+        <widget class="QPushButton">
+            <property name="name">
+                <cstring>PBajout</cstring>
+            </property>
+            <property name="geometry">
+                <rect>
+                    <x>10</x>
+                    <y>20</y>
+                    <width>101</width>
+                    <height>41</height>
+                </rect>
+            </property>
+            <property name="text">
+                <string>Ajouter
+Version :</string>
+            </property>
+        </widget>
+    </widget>
+    <widget class="QPushButton">
+        <property name="name">
+            <cstring>PBQuit</cstring>
+        </property>
+        <property name="geometry">
+            <rect>
+                <x>400</x>
+                <y>420</y>
+                <width>151</width>
+                <height>31</height>
+            </rect>
+        </property>
+        <property name="minimumSize">
+            <size>
+                <width>0</width>
+                <height>30</height>
+            </size>
+        </property>
+        <property name="text">
+            <string>Quitter</string>
+        </property>
+    </widget>
+    <widget class="QGroupBox">
+        <property name="name">
+            <cstring>groupBox3</cstring>
+        </property>
+        <property name="geometry">
+            <rect>
+                <x>10</x>
+                <y>310</y>
+                <width>548</width>
+                <height>90</height>
+            </rect>
+        </property>
+        <property name="title">
+            <string>Doc</string>
+        </property>
+        <widget class="QLineEdit">
+            <property name="name">
+                <cstring>LERepDoc</cstring>
+            </property>
+            <property name="geometry">
+                <rect>
+                    <x>20</x>
+                    <y>50</y>
+                    <width>520</width>
+                    <height>31</height>
+                </rect>
+            </property>
+            <property name="text">
+                <string></string>
+            </property>
+        </widget>
+        <widget class="QLabel">
+            <property name="name">
+                <cstring>textLabel1</cstring>
+            </property>
+            <property name="geometry">
+                <rect>
+                    <x>20</x>
+                    <y>20</y>
+                    <width>280</width>
+                    <height>30</height>
+                </rect>
+            </property>
+            <property name="text">
+                <string>Repertoire d'acces à la documentation :</string>
+            </property>
+        </widget>
+    </widget>
+    <widget class="QCheckBox">
+        <property name="name">
+            <cstring>Bdefaut</cstring>
+        </property>
+        <property name="geometry">
+            <rect>
+                <x>10</x>
+                <y>430</y>
+                <width>340</width>
+                <height>20</height>
+            </rect>
+        </property>
+        <property name="font">
+            <font>
+                <pointsize>12</pointsize>
+            </font>
+        </property>
+        <property name="text">
+            <string>Reinitialiser avec les valeurs par defaut</string>
+        </property>
+    </widget>
+</widget>
+<connections>
+    <connection>
+        <sender>CBVersions</sender>
+        <signal>activated(int)</signal>
+        <receiver>desOptions</receiver>
+        <slot>VersionChoisie()</slot>
+    </connection>
+    <connection>
+        <sender>Bdefaut</sender>
+        <signal>clicked()</signal>
+        <receiver>desOptions</receiver>
+        <slot>BdefautChecked()</slot>
+    </connection>
+    <connection>
+        <sender>LEVersionAjout</sender>
+        <signal>returnPressed()</signal>
+        <receiver>desOptions</receiver>
+        <slot>AjoutVersion()</slot>
+    </connection>
+    <connection>
+        <sender>LERepDoc</sender>
+        <signal>returnPressed()</signal>
+        <receiver>desOptions</receiver>
+        <slot>ChangePathDoc()</slot>
+    </connection>
+    <connection>
+        <sender>Bok</sender>
+        <signal>clicked()</signal>
+        <receiver>desOptions</receiver>
+        <slot>BokClicked()</slot>
+    </connection>
+    <connection>
+        <sender>LEVersionSup</sender>
+        <signal>returnPressed()</signal>
+        <receiver>desOptions</receiver>
+        <slot>SupVersion()</slot>
+    </connection>
+    <connection>
+        <sender>PBajout</sender>
+        <signal>clicked()</signal>
+        <receiver>desOptions</receiver>
+        <slot>AjoutVersion()</slot>
+    </connection>
+    <connection>
+        <sender>PBSup</sender>
+        <signal>clicked()</signal>
+        <receiver>desOptions</receiver>
+        <slot>SupVersion()</slot>
+    </connection>
+    <connection>
+        <sender>PBQuit</sender>
+        <signal>clicked()</signal>
+        <receiver>desOptions</receiver>
+        <slot>close()</slot>
+    </connection>
+    <connection>
+        <sender>LERepDoc</sender>
+        <signal>textChanged(const QString&amp;)</signal>
+        <receiver>desOptions</receiver>
+        <slot>ChangePathDoc()</slot>
+    </connection>
+</connections>
+<slots>
+    <slot>VersionChoisie()</slot>
+    <slot>BdefautChecked()</slot>
+    <slot>AjoutVersion()</slot>
+    <slot>SupVersion()</slot>
+    <slot>ChangePathDoc()</slot>
+    <slot>BokClicked()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/OptionsPdf.py b/Ui/OptionsPdf.py
new file mode 100644 (file)
index 0000000..c5c3c89
--- /dev/null
@@ -0,0 +1,63 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'OptionsPdf.ui'
+#
+# Created: lun avr 7 09:36:07 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class desPdf(QDialog):
+    def __init__(self,parent = None,name = None,modal = 0,fl = 0):
+        QDialog.__init__(self,parent,name,modal,fl)
+
+        if not name:
+            self.setName("desPdf")
+
+
+
+        self.textLabel1_2 = QLabel(self,"textLabel1_2")
+        self.textLabel1_2.setGeometry(QRect(20,10,280,20))
+
+        self.BCancel = QPushButton(self,"BCancel")
+        self.BCancel.setGeometry(QRect(450,90,70,31))
+
+        self.LERepPdf = QLineEdit(self,"LERepPdf")
+        self.LERepPdf.setGeometry(QRect(20,40,501,31))
+
+        self.Bok = QPushButton(self,"Bok")
+        self.Bok.setGeometry(QRect(350,90,70,31))
+
+        self.languageChange()
+
+        self.resize(QSize(538,142).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        self.connect(self.BCancel,SIGNAL("clicked()"),self.reject)
+        self.connect(self.LERepPdf,SIGNAL("returnPressed()"),self.LeRepPdfPressed)
+        self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked)
+
+        self.setTabOrder(self.LERepPdf,self.Bok)
+        self.setTabOrder(self.Bok,self.BCancel)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("desPdf"))
+        self.textLabel1_2.setText(self.__tr("Lecteur Pdf"))
+        self.BCancel.setText(self.__tr("Cancel"))
+        self.LERepPdf.setText(self.__tr("acroread"))
+        self.Bok.setText(self.__tr("Ok"))
+
+
+    def LeRepPdfPressed(self):
+        print "desPdf.LeRepPdfPressed(): Not implemented yet"
+
+    def BokClicked(self):
+        print "desPdf.BokClicked(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("desPdf",s,c)
diff --git a/Ui/OptionsPdf.ui b/Ui/OptionsPdf.ui
new file mode 100644 (file)
index 0000000..5d7a8a5
--- /dev/null
@@ -0,0 +1,116 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>desPdf</class>
+<widget class="QDialog">
+    <property name="name">
+        <cstring>desPdf</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>538</width>
+            <height>142</height>
+        </rect>
+    </property>
+    <property name="caption">
+        <string>desPdf</string>
+    </property>
+    <widget class="QLabel">
+        <property name="name">
+            <cstring>textLabel1_2</cstring>
+        </property>
+        <property name="geometry">
+            <rect>
+                <x>20</x>
+                <y>10</y>
+                <width>280</width>
+                <height>20</height>
+            </rect>
+        </property>
+        <property name="text">
+            <string>Lecteur Pdf</string>
+        </property>
+    </widget>
+    <widget class="QPushButton">
+        <property name="name">
+            <cstring>BCancel</cstring>
+        </property>
+        <property name="geometry">
+            <rect>
+                <x>450</x>
+                <y>90</y>
+                <width>70</width>
+                <height>31</height>
+            </rect>
+        </property>
+        <property name="text">
+            <string>Cancel</string>
+        </property>
+    </widget>
+    <widget class="QLineEdit">
+        <property name="name">
+            <cstring>LERepPdf</cstring>
+        </property>
+        <property name="geometry">
+            <rect>
+                <x>20</x>
+                <y>40</y>
+                <width>501</width>
+                <height>31</height>
+            </rect>
+        </property>
+        <property name="text">
+            <string>acroread</string>
+        </property>
+    </widget>
+    <widget class="QPushButton">
+        <property name="name">
+            <cstring>Bok</cstring>
+        </property>
+        <property name="geometry">
+            <rect>
+                <x>350</x>
+                <y>90</y>
+                <width>70</width>
+                <height>31</height>
+            </rect>
+        </property>
+        <property name="text">
+            <string>Ok</string>
+        </property>
+    </widget>
+</widget>
+<connections>
+    <connection>
+        <sender>BCancel</sender>
+        <signal>clicked()</signal>
+        <receiver>desPdf</receiver>
+        <slot>reject()</slot>
+    </connection>
+    <connection>
+        <sender>LERepPdf</sender>
+        <signal>returnPressed()</signal>
+        <receiver>desPdf</receiver>
+        <slot>LeRepPdfPressed()</slot>
+    </connection>
+    <connection>
+        <sender>Bok</sender>
+        <signal>clicked()</signal>
+        <receiver>desPdf</receiver>
+        <slot>BokClicked()</slot>
+    </connection>
+</connections>
+<tabstops>
+    <tabstop>LERepPdf</tabstop>
+    <tabstop>Bok</tabstop>
+    <tabstop>BCancel</tabstop>
+</tabstops>
+<includes>
+    <include location="local" impldecl="in implementation">OptionsPdf.ui.h</include>
+</includes>
+<slots>
+    <slot>LeRepPdfPressed()</slot>
+    <slot>BokClicked()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/aideQT.py b/Ui/aideQT.py
new file mode 100644 (file)
index 0000000..a60c760
--- /dev/null
@@ -0,0 +1,78 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'aideQT.ui'
+#
+# Created: mar mar 25 10:05:07 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class Aide(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("Aide")
+
+
+        AideLayout = QGridLayout(self,1,1,11,6,"AideLayout")
+
+        layout2 = QHBoxLayout(None,0,6,"layout2")
+
+        self.PBIndex = QPushButton(self,"PBIndex")
+        self.PBIndex.setMinimumSize(QSize(0,30))
+        layout2.addWidget(self.PBIndex)
+
+        self.PBBack = QPushButton(self,"PBBack")
+        self.PBBack.setEnabled(1)
+        self.PBBack.setMinimumSize(QSize(0,30))
+        layout2.addWidget(self.PBBack)
+
+        self.PBForward = QPushButton(self,"PBForward")
+        self.PBForward.setEnabled(1)
+        self.PBForward.setMinimumSize(QSize(0,30))
+        layout2.addWidget(self.PBForward)
+
+        AideLayout.addLayout(layout2,1,0)
+
+        self.TB1 = QTextBrowser(self,"TB1")
+
+        AideLayout.addMultiCellWidget(self.TB1,0,0,0,1)
+        spacer1 = QSpacerItem(311,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
+        AideLayout.addItem(spacer1,1,1)
+
+        self.languageChange()
+
+        self.resize(QSize(602,480).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        self.connect(self.PBBack,SIGNAL("clicked()"),self.TB1.backward)
+        self.connect(self.PBForward,SIGNAL("clicked()"),self.TB1.forward)
+        self.connect(self.PBIndex,SIGNAL("clicked()"),self.TB1.home)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("Aide"))
+        self.PBIndex.setText(self.__tr("Index"))
+        self.PBBack.setText(self.__tr("Back"))
+        self.PBForward.setText(self.__tr("Forward"))
+
+
+    def PBIndexPushed(self):
+        print "Aide.PBIndexPushed(): Not implemented yet"
+
+    def PBBackPushed(self):
+        print "Aide.PBBackPushed(): Not implemented yet"
+
+    def PBForwardPushed(self):
+        print "Aide.PBForwardPushed(): Not implemented yet"
+
+    def SlotSourceChanged(self):
+        print "Aide.SlotSourceChanged(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("Aide",s,c)
diff --git a/Ui/aideQT.ui b/Ui/aideQT.ui
new file mode 100644 (file)
index 0000000..40a8d59
--- /dev/null
@@ -0,0 +1,131 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>Aide</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>Aide</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>602</width>
+            <height>480</height>
+        </rect>
+    </property>
+    <property name="caption">
+        <string>Aide</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QLayoutWidget" row="1" column="0">
+            <property name="name">
+                <cstring>layout2</cstring>
+            </property>
+            <hbox>
+                <property name="name">
+                    <cstring>unnamed</cstring>
+                </property>
+                <widget class="QPushButton">
+                    <property name="name">
+                        <cstring>PBIndex</cstring>
+                    </property>
+                    <property name="minimumSize">
+                        <size>
+                            <width>0</width>
+                            <height>30</height>
+                        </size>
+                    </property>
+                    <property name="text">
+                        <string>Index</string>
+                    </property>
+                </widget>
+                <widget class="QPushButton">
+                    <property name="name">
+                        <cstring>PBBack</cstring>
+                    </property>
+                    <property name="enabled">
+                        <bool>true</bool>
+                    </property>
+                    <property name="minimumSize">
+                        <size>
+                            <width>0</width>
+                            <height>30</height>
+                        </size>
+                    </property>
+                    <property name="text">
+                        <string>Back</string>
+                    </property>
+                </widget>
+                <widget class="QPushButton">
+                    <property name="name">
+                        <cstring>PBForward</cstring>
+                    </property>
+                    <property name="enabled">
+                        <bool>true</bool>
+                    </property>
+                    <property name="minimumSize">
+                        <size>
+                            <width>0</width>
+                            <height>30</height>
+                        </size>
+                    </property>
+                    <property name="text">
+                        <string>Forward</string>
+                    </property>
+                </widget>
+            </hbox>
+        </widget>
+        <widget class="QTextBrowser" row="0" column="0" rowspan="1" colspan="2">
+            <property name="name">
+                <cstring>TB1</cstring>
+            </property>
+        </widget>
+        <spacer row="1" column="1">
+            <property name="name">
+                <cstring>spacer1</cstring>
+            </property>
+            <property name="orientation">
+                <enum>Horizontal</enum>
+            </property>
+            <property name="sizeType">
+                <enum>Expanding</enum>
+            </property>
+            <property name="sizeHint">
+                <size>
+                    <width>311</width>
+                    <height>20</height>
+                </size>
+            </property>
+        </spacer>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>PBBack</sender>
+        <signal>clicked()</signal>
+        <receiver>TB1</receiver>
+        <slot>backward()</slot>
+    </connection>
+    <connection>
+        <sender>PBForward</sender>
+        <signal>clicked()</signal>
+        <receiver>TB1</receiver>
+        <slot>forward()</slot>
+    </connection>
+    <connection>
+        <sender>PBIndex</sender>
+        <signal>clicked()</signal>
+        <receiver>TB1</receiver>
+        <slot>home()</slot>
+    </connection>
+</connections>
+<slots>
+    <slot>PBIndexPushed()</slot>
+    <slot>PBBackPushed()</slot>
+    <slot>PBForwardPushed()</slot>
+    <slot>SlotSourceChanged()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desChoixCata.py b/Ui/desChoixCata.py
new file mode 100644 (file)
index 0000000..22e37b8
--- /dev/null
@@ -0,0 +1,85 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desChoixCata.ui'
+#
+# Created: mar mar 25 10:05:07 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DChoixCata(QDialog):
+    def __init__(self,parent = None,name = None,modal = 0,fl = 0):
+        QDialog.__init__(self,parent,name,modal,fl)
+
+        if not name:
+            self.setName("DChoixCata")
+
+        self.setSizeGripEnabled(1)
+
+        DChoixCataLayout = QGridLayout(self,1,1,11,6,"DChoixCataLayout")
+
+        self.frame3 = QFrame(self,"frame3")
+        self.frame3.setFrameShape(QFrame.StyledPanel)
+        self.frame3.setFrameShadow(QFrame.Raised)
+
+        self.buttonCancel = QPushButton(self.frame3,"buttonCancel")
+        self.buttonCancel.setGeometry(QRect(380,6,90,30))
+        self.buttonCancel.setAutoDefault(1)
+
+        self.buttonOk = QPushButton(self.frame3,"buttonOk")
+        self.buttonOk.setGeometry(QRect(40,6,90,30))
+        self.buttonOk.setAutoDefault(1)
+        self.buttonOk.setDefault(1)
+
+        DChoixCataLayout.addMultiCellWidget(self.frame3,2,2,0,1)
+
+        self.TLNb = QLabel(self,"TLNb")
+        self.TLNb.setMinimumSize(QSize(30,0))
+
+        DChoixCataLayout.addWidget(self.TLNb,0,0)
+
+        self.CBChoixCata = QComboBox(0,self,"CBChoixCata")
+        self.CBChoixCata.setEnabled(1)
+
+        DChoixCataLayout.addWidget(self.CBChoixCata,1,1)
+
+        self.textLabel1_2 = QLabel(self,"textLabel1_2")
+        self.textLabel1_2.setMinimumSize(QSize(380,60))
+
+        DChoixCataLayout.addWidget(self.textLabel1_2,1,0)
+
+        self.languageChange()
+
+        self.resize(QSize(547,172).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        self.connect(self.buttonOk,SIGNAL("clicked()"),self.BOkPressed)
+        self.connect(self.buttonCancel,SIGNAL("clicked()"),self.BCancelPressed)
+        self.connect(self.CBChoixCata,SIGNAL("activated(const QString&)"),self.CataChoisi)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("Choix d'une version du code Aster"))
+        self.buttonCancel.setText(self.__tr("&Cancel"))
+        self.buttonCancel.setAccel(QString.null)
+        self.buttonOk.setText(self.__tr("&OK"))
+        self.buttonOk.setAccel(QString.null)
+        self.TLNb.setText(self.__tr("2"))
+        self.textLabel1_2.setText(self.__tr("<font size=\"+1\">Veuillez choisir celle avec laquelle vous souhaitez travailler</font>"))
+
+
+    def CataChoisi(self):
+        print "DChoixCata.CataChoisi(): Not implemented yet"
+
+    def BOkPressed(self):
+        print "DChoixCata.BOkPressed(): Not implemented yet"
+
+    def BCancelPressed(self):
+        print "DChoixCata.BCancelPressed(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DChoixCata",s,c)
diff --git a/Ui/desChoixCata.ui b/Ui/desChoixCata.ui
new file mode 100644 (file)
index 0000000..8f6eff5
--- /dev/null
@@ -0,0 +1,147 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DChoixCata</class>
+<widget class="QDialog">
+    <property name="name">
+        <cstring>DChoixCata</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>547</width>
+            <height>172</height>
+        </rect>
+    </property>
+    <property name="caption">
+        <string>Choix d'une version du code Aster</string>
+    </property>
+    <property name="sizeGripEnabled">
+        <bool>true</bool>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QFrame" row="2" column="0" rowspan="1" colspan="2">
+            <property name="name">
+                <cstring>frame3</cstring>
+            </property>
+            <property name="frameShape">
+                <enum>StyledPanel</enum>
+            </property>
+            <property name="frameShadow">
+                <enum>Raised</enum>
+            </property>
+            <widget class="QPushButton">
+                <property name="name">
+                    <cstring>buttonCancel</cstring>
+                </property>
+                <property name="geometry">
+                    <rect>
+                        <x>380</x>
+                        <y>6</y>
+                        <width>90</width>
+                        <height>30</height>
+                    </rect>
+                </property>
+                <property name="text">
+                    <string>&amp;Cancel</string>
+                </property>
+                <property name="accel">
+                    <string></string>
+                </property>
+                <property name="autoDefault">
+                    <bool>true</bool>
+                </property>
+            </widget>
+            <widget class="QPushButton">
+                <property name="name">
+                    <cstring>buttonOk</cstring>
+                </property>
+                <property name="geometry">
+                    <rect>
+                        <x>40</x>
+                        <y>6</y>
+                        <width>90</width>
+                        <height>30</height>
+                    </rect>
+                </property>
+                <property name="text">
+                    <string>&amp;OK</string>
+                </property>
+                <property name="accel">
+                    <string></string>
+                </property>
+                <property name="autoDefault">
+                    <bool>true</bool>
+                </property>
+                <property name="default">
+                    <bool>true</bool>
+                </property>
+            </widget>
+        </widget>
+        <widget class="QLabel" row="0" column="0">
+            <property name="name">
+                <cstring>TLNb</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>30</width>
+                    <height>0</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>2</string>
+            </property>
+        </widget>
+        <widget class="QComboBox" row="1" column="1">
+            <property name="name">
+                <cstring>CBChoixCata</cstring>
+            </property>
+            <property name="enabled">
+                <bool>true</bool>
+            </property>
+        </widget>
+        <widget class="QLabel" row="1" column="0">
+            <property name="name">
+                <cstring>textLabel1_2</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>380</width>
+                    <height>60</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&lt;font size="+1"&gt;Veuillez choisir celle avec laquelle vous souhaitez travailler&lt;/font&gt;</string>
+            </property>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>buttonOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DChoixCata</receiver>
+        <slot>BOkPressed()</slot>
+    </connection>
+    <connection>
+        <sender>buttonCancel</sender>
+        <signal>clicked()</signal>
+        <receiver>DChoixCata</receiver>
+        <slot>BCancelPressed()</slot>
+    </connection>
+    <connection>
+        <sender>CBChoixCata</sender>
+        <signal>activated(const QString&amp;)</signal>
+        <receiver>DChoixCata</receiver>
+        <slot>CataChoisi()</slot>
+    </connection>
+</connections>
+<slots>
+    <slot>CataChoisi()</slot>
+    <slot>BOkPressed()</slot>
+    <slot>BCancelPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desCommande.py b/Ui/desCommande.py
new file mode 100644 (file)
index 0000000..2a4cc27
--- /dev/null
@@ -0,0 +1,228 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desCommande.ui'
+#
+# Created: ven mai 16 13:30:38 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DComm(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DComm")
+
+        self.setMinimumSize(QSize(505,0))
+
+        DCommLayout = QGridLayout(self,1,1,11,6,"DCommLayout")
+
+        self.Commentaire = QLabel(self,"Commentaire")
+        self.Commentaire.setFrameShape(QLabel.NoFrame)
+        self.Commentaire.setFrameShadow(QLabel.Plain)
+
+        DCommLayout.addMultiCellWidget(self.Commentaire,1,1,0,2)
+
+        self.bOk = QPushButton(self,"bOk")
+        self.bOk.setMinimumSize(QSize(0,30))
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+
+        DCommLayout.addWidget(self.bOk,2,1)
+
+        self.bSup = QPushButton(self,"bSup")
+        self.bSup.setMinimumSize(QSize(0,30))
+        self.bSup.setAutoDefault(1)
+
+        DCommLayout.addWidget(self.bSup,2,0)
+
+        self.bHelp = QPushButton(self,"bHelp")
+        self.bHelp.setMinimumSize(QSize(0,30))
+        self.bHelp.setAutoDefault(1)
+
+        DCommLayout.addWidget(self.bHelp,2,2)
+
+        self.TWChoix = QTabWidget(self,"TWChoix")
+
+        self.MotClef = QWidget(self.TWChoix,"MotClef")
+
+        self.textLabel1 = QLabel(self.MotClef,"textLabel1")
+        self.textLabel1.setGeometry(QRect(11,11,226,18))
+        self.textLabel1.setMinimumSize(QSize(0,0))
+
+        self.LBMCPermis = QListBox(self.MotClef,"LBMCPermis")
+        self.LBMCPermis.setGeometry(QRect(11,35,226,342))
+        self.LBMCPermis.setMinimumSize(QSize(0,0))
+
+        self.textLabel1_2 = QLabel(self.MotClef,"textLabel1_2")
+        self.textLabel1_2.setGeometry(QRect(243,11,225,18))
+
+        self.LBRegles = QListBox(self.MotClef,"LBRegles")
+        self.LBRegles.setGeometry(QRect(243,35,225,342))
+        self.TWChoix.insertTab(self.MotClef,QString(""))
+
+        self.Concept = QWidget(self.TWChoix,"Concept")
+        ConceptLayout = QGridLayout(self.Concept,1,1,11,6,"ConceptLayout")
+
+        self.groupBox1 = QGroupBox(self.Concept,"groupBox1")
+
+        self.textLabel1_3 = QLabel(self.groupBox1,"textLabel1_3")
+        self.textLabel1_3.setGeometry(QRect(80,50,130,31))
+
+        self.textLabel1_3_2 = QLabel(self.groupBox1,"textLabel1_3_2")
+        self.textLabel1_3_2.setGeometry(QRect(80,170,150,31))
+
+        self.LENomConcept = QLineEdit(self.groupBox1,"LENomConcept")
+        self.LENomConcept.setGeometry(QRect(80,110,310,30))
+
+        self.textLabel3 = QLabel(self.groupBox1,"textLabel3")
+        self.textLabel3.setGeometry(QRect(10,200,290,31))
+
+        self.typeConcept = QLabel(self.groupBox1,"typeConcept")
+        self.typeConcept.setGeometry(QRect(310,200,130,31))
+
+        ConceptLayout.addWidget(self.groupBox1,0,0)
+        self.TWChoix.insertTab(self.Concept,QString(""))
+
+        self.Commande = QWidget(self.TWChoix,"Commande")
+        CommandeLayout = QGridLayout(self.Commande,1,1,11,6,"CommandeLayout")
+
+        self.buttonGroup1 = QButtonGroup(self.Commande,"buttonGroup1")
+
+        self.RBalpha = QRadioButton(self.buttonGroup1,"RBalpha")
+        self.RBalpha.setGeometry(QRect(20,20,120,20))
+        self.RBalpha.setChecked(1)
+
+        self.RBGroupe = QRadioButton(self.buttonGroup1,"RBGroupe")
+        self.RBGroupe.setGeometry(QRect(20,40,110,20))
+
+        CommandeLayout.addMultiCellWidget(self.buttonGroup1,0,1,3,3)
+
+        self.LBNouvCommande = QListBox(self.Commande,"LBNouvCommande")
+
+        CommandeLayout.addMultiCellWidget(self.LBNouvCommande,2,2,0,3)
+
+        self.textLabel1_4 = QLabel(self.Commande,"textLabel1_4")
+        self.textLabel1_4.setMaximumSize(QSize(32767,20))
+
+        CommandeLayout.addMultiCellWidget(self.textLabel1_4,0,0,0,2)
+
+        self.textLabel4 = QLabel(self.Commande,"textLabel4")
+
+        CommandeLayout.addMultiCellWidget(self.textLabel4,3,3,0,3)
+
+        self.textLabel6 = QLabel(self.Commande,"textLabel6")
+        self.textLabel6.setMinimumSize(QSize(40,40))
+
+        CommandeLayout.addWidget(self.textLabel6,1,0)
+
+        self.LEFiltre = QLineEdit(self.Commande,"LEFiltre")
+        self.LEFiltre.setMinimumSize(QSize(0,40))
+
+        CommandeLayout.addWidget(self.LEFiltre,1,1)
+
+        self.BNext = QToolButton(self.Commande,"BNext")
+        self.BNext.setMinimumSize(QSize(70,40))
+        self.BNext.setIconSet(QIconSet())
+
+        CommandeLayout.addWidget(self.BNext,1,2)
+        self.TWChoix.insertTab(self.Commande,QString(""))
+
+        DCommLayout.addMultiCellWidget(self.TWChoix,0,0,0,2)
+
+        self.languageChange()
+
+        self.resize(QSize(505,483).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        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.LENomConcept,SIGNAL("returnPressed()"),self.LENomConceptReturnPressed)
+        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.setTabOrder(self.LEFiltre,self.LBRegles)
+        self.setTabOrder(self.LBRegles,self.LENomConcept)
+        self.setTabOrder(self.LENomConcept,self.TWChoix)
+        self.setTabOrder(self.TWChoix,self.LBMCPermis)
+        self.setTabOrder(self.LBMCPermis,self.RBalpha)
+        self.setTabOrder(self.RBalpha,self.LBNouvCommande)
+        self.setTabOrder(self.LBNouvCommande,self.bOk)
+        self.setTabOrder(self.bOk,self.bSup)
+        self.setTabOrder(self.bSup,self.bHelp)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("DComm"))
+        self.Commentaire.setText(QString.null)
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(self.__tr("Alt+S"))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(self.__tr("Alt+D"))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+        self.textLabel1.setText(self.__tr("<h3><p align=\"center\"><u><b>Mots Clefs Permis</b></u></p></h3>"))
+        self.textLabel1_2.setText(self.__trUtf8("\x3c\x68\x33\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x3c\x75\x3e\x3c\x62\x3e\x52\xc3\xa8\x67\x6c\x65\x73\x3c\x2f\x62\x3e\x3c\x2f\x75\x3e\x3c\x2f\x70\x3e\x3c\x2f\x68\x33\x3e"))
+        self.TWChoix.changeTab(self.MotClef,self.__tr("Ajouter Mot-Clef"))
+        self.groupBox1.setTitle(self.__tr("Concept"))
+        self.textLabel1_3.setText(self.__tr("<u>Nom du concept :</u>"))
+        self.textLabel1_3_2.setText(self.__tr("<u>Type du concept :</u>"))
+        self.textLabel3.setText(self.__trUtf8("\x4c\x27\x6f\x70\xc3\xa9\x72\x61\x74\x65\x75\x72\x20\x72\x65\x74\x6f\x75\x72\x6e\x65\x20\x75\x6e\x20\x63\x6f\x6e\x63\x65\x70\x74\x20\x64\x65\x20\x74\x79\x70\x65\x20\x3a"))
+        self.typeConcept.setText(self.__tr("TypeDuConcept"))
+        self.TWChoix.changeTab(self.Concept,self.__tr("Nommer Concept"))
+        self.buttonGroup1.setTitle(self.__tr("Affichage"))
+        self.RBalpha.setText(self.__trUtf8("\x61\x6c\x70\x68\x61\x62\xc3\xa9\x74\x69\x71\x75\x65"))
+        self.RBGroupe.setText(self.__tr("par groupe"))
+        self.textLabel1_4.setText(self.__tr("<b><u>Commandes :</u></b>"))
+        self.textLabel4.setText(self.__trUtf8("\x4c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x68\x6f\x69\x73\x69\x65\x20\x73\x65\x72\x61\x20\x61\x6a\x6f\x75\x74\xc3\xa9\x65\x20\x41\x50\x52\x45\x53\x20\x6c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x6f\x75\x72\x61\x6e\x74\x65"))
+        self.textLabel6.setText(self.__tr("Filtre"))
+        self.BNext.setText(self.__tr("Suivant"))
+        QToolTip.add(self.BNext,self.__tr("affiche la prochaine occurence"))
+        self.TWChoix.changeTab(self.Commande,self.__tr("Nouvelle Commande"))
+
+
+    def LBNouvCommandeClicked(self):
+        print "DComm.LBNouvCommandeClicked(): Not implemented yet"
+
+    def LEFiltreTextChanged(self):
+        print "DComm.LEFiltreTextChanged(): Not implemented yet"
+
+    def LEfiltreReturnPressed(self):
+        print "DComm.LEfiltreReturnPressed(): Not implemented yet"
+
+    def BSupPressed(self):
+        print "DComm.BSupPressed(): Not implemented yet"
+
+    def LENomConceptReturnPressed(self):
+        print "DComm.LENomConceptReturnPressed(): Not implemented yet"
+
+    def BOkPressed(self):
+        print "DComm.BOkPressed(): Not implemented yet"
+
+    def BuildTabCommand(self):
+        print "DComm.BuildTabCommand(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DComm.ViewDoc(): Not implemented yet"
+
+    def BNextPressed(self):
+        print "DComm.BNextPressed(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DComm",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DComm",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desCommande.ui b/Ui/desCommande.ui
new file mode 100644 (file)
index 0000000..1ebda2c
--- /dev/null
@@ -0,0 +1,484 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DComm</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DComm</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>505</width>
+            <height>483</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>505</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DComm</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QLabel" row="1" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>Commentaire</cstring>
+            </property>
+            <property name="frameShape">
+                <enum>NoFrame</enum>
+            </property>
+            <property name="frameShadow">
+                <enum>Plain</enum>
+            </property>
+            <property name="text">
+                <string></string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="2" column="1">
+            <property name="name">
+                <cstring>bOk</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Valider</string>
+            </property>
+            <property name="accel">
+                <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="default">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>validation de la saisie</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="2" column="0">
+            <property name="name">
+                <cstring>bSup</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Supprimer</string>
+            </property>
+            <property name="accel">
+                <string>Alt+S</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>suppression du mot clef</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="2" column="2">
+            <property name="name">
+                <cstring>bHelp</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Documentation</string>
+            </property>
+            <property name="accel">
+                <string>Alt+D</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>affichage documentation aster</string>
+            </property>
+        </widget>
+        <widget class="QTabWidget" row="0" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>TWChoix</cstring>
+            </property>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>MotClef</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Ajouter Mot-Clef</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QLabel" row="0" column="0">
+                        <property name="name">
+                            <cstring>textLabel1</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&lt;h3&gt;&lt;p align="center"&gt;&lt;u&gt;&lt;b&gt;Mots Clefs Permis&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;/h3&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QListBox" row="1" column="1">
+                        <property name="name">
+                            <cstring>LBRegles</cstring>
+                        </property>
+                    </widget>
+                    <widget class="QListBox" row="1" column="0">
+                        <property name="name">
+                            <cstring>LBMCPermis</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="0" column="1">
+                        <property name="name">
+                            <cstring>textLabel1_2</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;h3&gt;&lt;p align="center"&gt;&lt;u&gt;&lt;b&gt;Règles&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;/h3&gt;</string>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Concept</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Nommer Concept</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QGroupBox" row="0" column="0">
+                        <property name="name">
+                            <cstring>groupBox1</cstring>
+                        </property>
+                        <property name="title">
+                            <string>Concept</string>
+                        </property>
+                        <widget class="QLabel">
+                            <property name="name">
+                                <cstring>textLabel1_3</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>80</x>
+                                    <y>50</y>
+                                    <width>130</width>
+                                    <height>31</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>&lt;u&gt;Nom du concept :&lt;/u&gt;</string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel">
+                            <property name="name">
+                                <cstring>textLabel1_3_2</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>80</x>
+                                    <y>170</y>
+                                    <width>150</width>
+                                    <height>31</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>&lt;u&gt;Type du concept :&lt;/u&gt;</string>
+                            </property>
+                        </widget>
+                        <widget class="QLineEdit">
+                            <property name="name">
+                                <cstring>LENomConcept</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>80</x>
+                                    <y>110</y>
+                                    <width>310</width>
+                                    <height>30</height>
+                                </rect>
+                            </property>
+                        </widget>
+                        <widget class="QLabel">
+                            <property name="name">
+                                <cstring>textLabel3</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>10</x>
+                                    <y>200</y>
+                                    <width>290</width>
+                                    <height>31</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>L'opérateur retourne un concept de type :</string>
+                            </property>
+                        </widget>
+                        <widget class="QLabel">
+                            <property name="name">
+                                <cstring>typeConcept</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>310</x>
+                                    <y>200</y>
+                                    <width>130</width>
+                                    <height>31</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>TypeDuConcept</string>
+                            </property>
+                        </widget>
+                    </widget>
+                </grid>
+            </widget>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Commande</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Nouvelle Commande</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QButtonGroup" row="0" column="3" rowspan="2" colspan="1">
+                        <property name="name">
+                            <cstring>buttonGroup1</cstring>
+                        </property>
+                        <property name="title">
+                            <string>Affichage</string>
+                        </property>
+                        <widget class="QRadioButton">
+                            <property name="name">
+                                <cstring>RBalpha</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>20</x>
+                                    <y>20</y>
+                                    <width>120</width>
+                                    <height>20</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>alphabétique</string>
+                            </property>
+                            <property name="checked">
+                                <bool>true</bool>
+                            </property>
+                        </widget>
+                        <widget class="QRadioButton">
+                            <property name="name">
+                                <cstring>RBGroupe</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>20</x>
+                                    <y>40</y>
+                                    <width>110</width>
+                                    <height>20</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>par groupe</string>
+                            </property>
+                        </widget>
+                    </widget>
+                    <widget class="QListBox" row="2" column="0" rowspan="1" colspan="4">
+                        <property name="name">
+                            <cstring>LBNouvCommande</cstring>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="0" column="0" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>textLabel1_4</cstring>
+                        </property>
+                        <property name="maximumSize">
+                            <size>
+                                <width>32767</width>
+                                <height>20</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&lt;b&gt;&lt;u&gt;Commandes :&lt;/u&gt;&lt;/b&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="3" column="0" rowspan="1" colspan="4">
+                        <property name="name">
+                            <cstring>textLabel4</cstring>
+                        </property>
+                        <property name="text">
+                            <string>La commande choisie sera ajoutée APRES la commande courante</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="1" column="0">
+                        <property name="name">
+                            <cstring>textLabel6</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>40</width>
+                                <height>40</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>Filtre</string>
+                        </property>
+                    </widget>
+                    <widget class="QLineEdit" row="1" column="1">
+                        <property name="name">
+                            <cstring>LEFiltre</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>40</height>
+                            </size>
+                        </property>
+                    </widget>
+                    <widget class="QToolButton" row="1" column="2">
+                        <property name="name">
+                            <cstring>BNext</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>70</width>
+                                <height>40</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>Suivant</string>
+                        </property>
+                        <property name="iconSet">
+                            <iconset></iconset>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>affiche la prochaine occurence</string>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>LBNouvCommande</sender>
+        <signal>doubleClicked(QListBoxItem*)</signal>
+        <receiver>DComm</receiver>
+        <slot>LBNouvCommandeClicked()</slot>
+    </connection>
+    <connection>
+        <sender>LEFiltre</sender>
+        <signal>textChanged(const QString&amp;)</signal>
+        <receiver>DComm</receiver>
+        <slot>LEFiltreTextChanged()</slot>
+    </connection>
+    <connection>
+        <sender>LEFiltre</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DComm</receiver>
+        <slot>LEfiltreReturnPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bSup</sender>
+        <signal>pressed()</signal>
+        <receiver>DComm</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DComm</receiver>
+        <slot>BOkPressed()</slot>
+    </connection>
+    <connection>
+        <sender>LENomConcept</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DComm</receiver>
+        <slot>LENomConceptReturnPressed()</slot>
+    </connection>
+    <connection>
+        <sender>RBGroupe</sender>
+        <signal>clicked()</signal>
+        <receiver>DComm</receiver>
+        <slot>BuildTabCommand()</slot>
+    </connection>
+    <connection>
+        <sender>RBalpha</sender>
+        <signal>clicked()</signal>
+        <receiver>DComm</receiver>
+        <slot>BuildTabCommand()</slot>
+    </connection>
+    <connection>
+        <sender>bHelp</sender>
+        <signal>clicked()</signal>
+        <receiver>DComm</receiver>
+        <slot>ViewDoc()</slot>
+    </connection>
+    <connection>
+        <sender>BNext</sender>
+        <signal>pressed()</signal>
+        <receiver>DComm</receiver>
+        <slot>BNextPressed()</slot>
+    </connection>
+</connections>
+<tabstops>
+    <tabstop>LEFiltre</tabstop>
+    <tabstop>LBRegles</tabstop>
+    <tabstop>LENomConcept</tabstop>
+    <tabstop>TWChoix</tabstop>
+    <tabstop>LBMCPermis</tabstop>
+    <tabstop>RBalpha</tabstop>
+    <tabstop>LBNouvCommande</tabstop>
+    <tabstop>bOk</tabstop>
+    <tabstop>bSup</tabstop>
+    <tabstop>bHelp</tabstop>
+</tabstops>
+<slots>
+    <slot>LBNouvCommandeClicked()</slot>
+    <slot>LEFiltreTextChanged()</slot>
+    <slot>LEfiltreReturnPressed()</slot>
+    <slot>BSupPressed()</slot>
+    <slot>LENomConceptReturnPressed()</slot>
+    <slot>BOkPressed()</slot>
+    <slot>BuildTabCommand()</slot>
+    <slot>ViewDoc()</slot>
+    <slot>BNextPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desCommentaire.py b/Ui/desCommentaire.py
new file mode 100644 (file)
index 0000000..2ad3717
--- /dev/null
@@ -0,0 +1,186 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desCommentaire.ui'
+#
+# Created: Thu Jun 19 16:49:50 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.16
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DComment(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DComment")
+
+        self.setMinimumSize(QSize(505,0))
+
+        DCommentLayout = QGridLayout(self,1,1,11,6,"DCommentLayout")
+
+        self.TWChoix = QTabWidget(self,"TWChoix")
+
+        self.Valeur_Parametre = QWidget(self.TWChoix,"Valeur_Parametre")
+
+        self.textCommentaire = QTextEdit(self.Valeur_Parametre,"textCommentaire")
+        self.textCommentaire.setGeometry(QRect(0,0,480,390))
+        self.TWChoix.insertTab(self.Valeur_Parametre,QString.fromLatin1(""))
+
+        self.Commande = QWidget(self.TWChoix,"Commande")
+        CommandeLayout = QGridLayout(self.Commande,1,1,11,6,"CommandeLayout")
+
+        self.LBNouvCommande = QListBox(self.Commande,"LBNouvCommande")
+
+        CommandeLayout.addMultiCellWidget(self.LBNouvCommande,2,2,0,3)
+
+        self.buttonGroup1 = QButtonGroup(self.Commande,"buttonGroup1")
+
+        self.RBGroupe = QRadioButton(self.buttonGroup1,"RBGroupe")
+        self.RBGroupe.setGeometry(QRect(20,40,101,20))
+
+        self.RBalpha = QRadioButton(self.buttonGroup1,"RBalpha")
+        self.RBalpha.setGeometry(QRect(20,20,120,20))
+        self.RBalpha.setChecked(1)
+
+        CommandeLayout.addMultiCellWidget(self.buttonGroup1,0,1,3,3)
+
+        self.textLabel1_4 = QLabel(self.Commande,"textLabel1_4")
+
+        CommandeLayout.addMultiCellWidget(self.textLabel1_4,0,0,0,2)
+
+        self.textLabel4 = QLabel(self.Commande,"textLabel4")
+
+        CommandeLayout.addMultiCellWidget(self.textLabel4,3,3,0,3)
+
+        self.LEFiltre = QLineEdit(self.Commande,"LEFiltre")
+        self.LEFiltre.setMinimumSize(QSize(160,30))
+
+        CommandeLayout.addWidget(self.LEFiltre,1,1)
+
+        self.BNext = QToolButton(self.Commande,"BNext")
+        self.BNext.setMinimumSize(QSize(60,30))
+        self.BNext.setIconSet(QIconSet())
+
+        CommandeLayout.addWidget(self.BNext,1,2)
+
+        self.textLabel6 = QLabel(self.Commande,"textLabel6")
+        self.textLabel6.setMinimumSize(QSize(50,30))
+
+        CommandeLayout.addWidget(self.textLabel6,1,0)
+        self.TWChoix.insertTab(self.Commande,QString.fromLatin1(""))
+
+        DCommentLayout.addMultiCellWidget(self.TWChoix,0,0,0,2)
+
+        self.bOk = QPushButton(self,"bOk")
+        self.bOk.setMinimumSize(QSize(0,30))
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+
+        DCommentLayout.addWidget(self.bOk,2,1)
+
+        self.bSup = QPushButton(self,"bSup")
+        self.bSup.setMinimumSize(QSize(0,30))
+        self.bSup.setAutoDefault(1)
+
+        DCommentLayout.addWidget(self.bSup,2,0)
+
+        self.bHelp = QPushButton(self,"bHelp")
+        self.bHelp.setMinimumSize(QSize(0,30))
+        self.bHelp.setAutoDefault(1)
+
+        DCommentLayout.addWidget(self.bHelp,2,2)
+
+        self.Commentaire = QLabel(self,"Commentaire")
+        self.Commentaire.setFrameShape(QLabel.NoFrame)
+        self.Commentaire.setFrameShadow(QLabel.Plain)
+
+        DCommentLayout.addMultiCellWidget(self.Commentaire,1,1,0,2)
+
+        self.languageChange()
+
+        self.resize(QSize(505,483).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        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.textCommentaire,SIGNAL("textChanged()"),self.TexteCommentaireEntre)
+
+        self.setTabOrder(self.LEFiltre,self.TWChoix)
+        self.setTabOrder(self.TWChoix,self.textCommentaire)
+        self.setTabOrder(self.textCommentaire,self.LBNouvCommande)
+        self.setTabOrder(self.LBNouvCommande,self.RBalpha)
+        self.setTabOrder(self.RBalpha,self.bOk)
+        self.setTabOrder(self.bOk,self.bSup)
+        self.setTabOrder(self.bSup,self.bHelp)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("DComm"))
+        self.TWChoix.changeTab(self.Valeur_Parametre,self.__tr("Commentaire"))
+        self.buttonGroup1.setTitle(self.__tr("Affichage"))
+        self.RBGroupe.setText(self.__tr("par groupe"))
+        self.RBalpha.setText(self.__trUtf8("\x61\x6c\x70\x68\x61\x62\xc3\xa9\x74\x69\x71\x75\x65"))
+        self.textLabel1_4.setText(self.__tr("<b><u>Commandes :</u></b>"))
+        self.textLabel4.setText(self.__trUtf8("\x4c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x68\x6f\x69\x73\x69\x65\x20\x73\x65\x72\x61\x20\x61\x6a\x6f\x75\x74\xc3\xa9\x65\x20\x41\x50\x52\x45\x53\x20\x6c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x6f\x75\x72\x61\x6e\x74\x65"))
+        self.BNext.setText(self.__tr("Suivant"))
+        QToolTip.add(self.BNext,self.__tr("affiche la prochaine occurence"))
+        self.textLabel6.setText(self.__tr("Filtre"))
+        self.TWChoix.changeTab(self.Commande,self.__tr("Nouvelle Commande"))
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(QKeySequence(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(QKeySequence(self.__tr("Alt+S")))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(QKeySequence(self.__tr("Alt+D")))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+        self.Commentaire.setText(QString.null)
+
+
+    def LBNouvCommandeClicked(self):
+        print "DComment.LBNouvCommandeClicked(): Not implemented yet"
+
+    def LEFiltreTextChanged(self):
+        print "DComment.LEFiltreTextChanged(): Not implemented yet"
+
+    def LEfiltreReturnPressed(self):
+        print "DComment.LEfiltreReturnPressed(): Not implemented yet"
+
+    def BSupPressed(self):
+        print "DComment.BSupPressed(): Not implemented yet"
+
+    def LENomConceptReturnPressed(self):
+        print "DComment.LENomConceptReturnPressed(): Not implemented yet"
+
+    def BOkPressed(self):
+        print "DComment.BOkPressed(): Not implemented yet"
+
+    def BuildTabCommand(self):
+        print "DComment.BuildTabCommand(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DComment.ViewDoc(): Not implemented yet"
+
+    def BNextPressed(self):
+        print "DComment.BNextPressed(): Not implemented yet"
+
+    def textCommentaireChanged(self):
+        print "DComment.textCommentaireChanged(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DComment",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DComment",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desCommentaire.ui b/Ui/desCommentaire.ui
new file mode 100644 (file)
index 0000000..6321008
--- /dev/null
@@ -0,0 +1,349 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DComment</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DComment</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>505</width>
+            <height>483</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>505</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DComm</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QTabWidget" row="0" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>TWChoix</cstring>
+            </property>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Valeur_Parametre</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Commentaire</string>
+                </attribute>
+                <widget class="QTextEdit">
+                    <property name="name">
+                        <cstring>textCommentaire</cstring>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>0</x>
+                            <y>0</y>
+                            <width>480</width>
+                            <height>390</height>
+                        </rect>
+                    </property>
+                </widget>
+            </widget>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Commande</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Nouvelle Commande</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QListBox" row="2" column="0" rowspan="1" colspan="4">
+                        <property name="name">
+                            <cstring>LBNouvCommande</cstring>
+                        </property>
+                    </widget>
+                    <widget class="QButtonGroup" row="0" column="3" rowspan="2" colspan="1">
+                        <property name="name">
+                            <cstring>buttonGroup1</cstring>
+                        </property>
+                        <property name="title">
+                            <string>Affichage</string>
+                        </property>
+                        <widget class="QRadioButton">
+                            <property name="name">
+                                <cstring>RBGroupe</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>20</x>
+                                    <y>40</y>
+                                    <width>101</width>
+                                    <height>20</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>par groupe</string>
+                            </property>
+                        </widget>
+                        <widget class="QRadioButton">
+                            <property name="name">
+                                <cstring>RBalpha</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>20</x>
+                                    <y>20</y>
+                                    <width>120</width>
+                                    <height>20</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>alphabétique</string>
+                            </property>
+                            <property name="checked">
+                                <bool>true</bool>
+                            </property>
+                        </widget>
+                    </widget>
+                    <widget class="QLabel" row="0" column="0" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>textLabel1_4</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;b&gt;&lt;u&gt;Commandes :&lt;/u&gt;&lt;/b&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="3" column="0" rowspan="1" colspan="4">
+                        <property name="name">
+                            <cstring>textLabel4</cstring>
+                        </property>
+                        <property name="text">
+                            <string>La commande choisie sera ajoutée APRES la commande courante</string>
+                        </property>
+                    </widget>
+                    <widget class="QLineEdit" row="1" column="1">
+                        <property name="name">
+                            <cstring>LEFiltre</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>160</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                    </widget>
+                    <widget class="QToolButton" row="1" column="2">
+                        <property name="name">
+                            <cstring>BNext</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>60</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>Suivant</string>
+                        </property>
+                        <property name="iconSet">
+                            <iconset></iconset>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>affiche la prochaine occurence</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="1" column="0">
+                        <property name="name">
+                            <cstring>textLabel6</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>50</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>Filtre</string>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+        </widget>
+        <widget class="QPushButton" row="2" column="1">
+            <property name="name">
+                <cstring>bOk</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Valider</string>
+            </property>
+            <property name="accel">
+                <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="default">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>validation de la saisie</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="2" column="0">
+            <property name="name">
+                <cstring>bSup</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Supprimer</string>
+            </property>
+            <property name="accel">
+                <string>Alt+S</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>suppression du mot clef</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="2" column="2">
+            <property name="name">
+                <cstring>bHelp</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Documentation</string>
+            </property>
+            <property name="accel">
+                <string>Alt+D</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>affichage documentation aster</string>
+            </property>
+        </widget>
+        <widget class="QLabel" row="1" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>Commentaire</cstring>
+            </property>
+            <property name="frameShape">
+                <enum>NoFrame</enum>
+            </property>
+            <property name="frameShadow">
+                <enum>Plain</enum>
+            </property>
+            <property name="text">
+                <string></string>
+            </property>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>LBNouvCommande</sender>
+        <signal>doubleClicked(QListBoxItem*)</signal>
+        <receiver>DComment</receiver>
+        <slot>LBNouvCommandeClicked()</slot>
+    </connection>
+    <connection>
+        <sender>LEFiltre</sender>
+        <signal>textChanged(const QString&amp;)</signal>
+        <receiver>DComment</receiver>
+        <slot>LEFiltreTextChanged()</slot>
+    </connection>
+    <connection>
+        <sender>LEFiltre</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DComment</receiver>
+        <slot>LEfiltreReturnPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bSup</sender>
+        <signal>pressed()</signal>
+        <receiver>DComment</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DComment</receiver>
+        <slot>BOkPressed()</slot>
+    </connection>
+    <connection>
+        <sender>RBGroupe</sender>
+        <signal>clicked()</signal>
+        <receiver>DComment</receiver>
+        <slot>BuildTabCommand()</slot>
+    </connection>
+    <connection>
+        <sender>RBalpha</sender>
+        <signal>clicked()</signal>
+        <receiver>DComment</receiver>
+        <slot>BuildTabCommand()</slot>
+    </connection>
+    <connection>
+        <sender>bHelp</sender>
+        <signal>clicked()</signal>
+        <receiver>DComment</receiver>
+        <slot>ViewDoc()</slot>
+    </connection>
+    <connection>
+        <sender>BNext</sender>
+        <signal>pressed()</signal>
+        <receiver>DComment</receiver>
+        <slot>BNextPressed()</slot>
+    </connection>
+    <connection>
+        <sender>textCommentaire</sender>
+        <signal>textChanged()</signal>
+        <receiver>DComment</receiver>
+        <slot>TexteCommentaireEntre()</slot>
+    </connection>
+</connections>
+<tabstops>
+    <tabstop>LEFiltre</tabstop>
+    <tabstop>TWChoix</tabstop>
+    <tabstop>textCommentaire</tabstop>
+    <tabstop>LBNouvCommande</tabstop>
+    <tabstop>RBalpha</tabstop>
+    <tabstop>bOk</tabstop>
+    <tabstop>bSup</tabstop>
+    <tabstop>bHelp</tabstop>
+</tabstops>
+<slots>
+    <slot>LBNouvCommandeClicked()</slot>
+    <slot>LEFiltreTextChanged()</slot>
+    <slot>LEfiltreReturnPressed()</slot>
+    <slot>BSupPressed()</slot>
+    <slot>LENomConceptReturnPressed()</slot>
+    <slot>BOkPressed()</slot>
+    <slot>BuildTabCommand()</slot>
+    <slot>ViewDoc() </slot>
+    <slot>BNextPressed()</slot>
+    <slot>textCommentaireChanged()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desError.py b/Ui/desError.py
new file mode 100644 (file)
index 0000000..b9c5979
--- /dev/null
@@ -0,0 +1,70 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desError.ui'
+#
+# Created: mar mar 25 10:05:08 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DError(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DError")
+
+        self.setMinimumSize(QSize(350,0))
+
+        DErrorLayout = QGridLayout(self,1,1,11,6,"DErrorLayout")
+
+        self.textLabel1_3 = QLabel(self,"textLabel1_3")
+
+        DErrorLayout.addWidget(self.textLabel1_3,0,0)
+
+        layout1 = QHBoxLayout(None,0,6,"layout1")
+        spacer1_2 = QSpacerItem(171,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
+        layout1.addItem(spacer1_2)
+
+        self.bSup = QPushButton(self,"bSup")
+        self.bSup.setAutoDefault(1)
+        layout1.addWidget(self.bSup)
+        spacer1 = QSpacerItem(171,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
+        layout1.addItem(spacer1)
+
+        DErrorLayout.addLayout(layout1,1,0)
+
+        self.languageChange()
+
+        self.resize(QSize(482,480).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("DInactif"))
+        self.textLabel1_3.setText(self.__trUtf8("\x3c\x66\x6f\x6e\x74\x20\x73\x69\x7a\x65\x3d\x22\x2b\x34\x22\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x4c\x65\x20\x6e\x6f\x65\x75\x64\x20\x73\xc3\xa9\x6c\x65\x63\x74\x69\x6f\x6e\x6e\xc3\xa9\x20\x6e\x65\x20\x63\x6f\x72\x72\x65\x73\x70\x6f\x6e\x64\x20\x70\x61\x73\x20\xc3\xa0\x20\x75\x6e\x20\x6f\x62\x6a\x65\x74\x20\x61\x63\x74\x69\x66\x2e\x3c\x2f\x70\x3e\x3c\x2f\x66\x6f\x6e\x74\x3e"))
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(self.__tr("Alt+S"))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+
+
+    def BSupPressed(self):
+        print "DError.BSupPressed(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DError.ViewDoc(): Not implemented yet"
+
+    def BOkPressed(self):
+        print "DError.BOkPressed(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DError",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DError",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desError.ui b/Ui/desError.ui
new file mode 100644 (file)
index 0000000..9dd94bb
--- /dev/null
@@ -0,0 +1,113 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DError</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DError</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>482</width>
+            <height>480</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>350</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DInactif</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QLabel" row="0" column="0">
+            <property name="name">
+                <cstring>textLabel1_3</cstring>
+            </property>
+            <property name="text">
+                <string>&lt;font size="+4"&gt;&lt;p align="center"&gt;Le noeud sélectionné ne correspond pas à un objet actif.&lt;/p&gt;&lt;/font&gt;</string>
+            </property>
+        </widget>
+        <widget class="QLayoutWidget" row="1" column="0">
+            <property name="name">
+                <cstring>layout1</cstring>
+            </property>
+            <hbox>
+                <property name="name">
+                    <cstring>unnamed</cstring>
+                </property>
+                <spacer>
+                    <property name="name">
+                        <cstring>spacer1_2</cstring>
+                    </property>
+                    <property name="orientation">
+                        <enum>Horizontal</enum>
+                    </property>
+                    <property name="sizeType">
+                        <enum>Expanding</enum>
+                    </property>
+                    <property name="sizeHint">
+                        <size>
+                            <width>171</width>
+                            <height>20</height>
+                        </size>
+                    </property>
+                </spacer>
+                <widget class="QPushButton">
+                    <property name="name">
+                        <cstring>bSup</cstring>
+                    </property>
+                    <property name="text">
+                        <string>&amp;Supprimer</string>
+                    </property>
+                    <property name="accel">
+                        <string>Alt+S</string>
+                    </property>
+                    <property name="autoDefault">
+                        <bool>true</bool>
+                    </property>
+                    <property name="toolTip" stdset="0">
+                        <string>suppression du mot clef</string>
+                    </property>
+                </widget>
+                <spacer>
+                    <property name="name">
+                        <cstring>spacer1</cstring>
+                    </property>
+                    <property name="orientation">
+                        <enum>Horizontal</enum>
+                    </property>
+                    <property name="sizeType">
+                        <enum>Expanding</enum>
+                    </property>
+                    <property name="sizeHint">
+                        <size>
+                            <width>171</width>
+                            <height>20</height>
+                        </size>
+                    </property>
+                </spacer>
+            </hbox>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>bSup</sender>
+        <signal>clicked()</signal>
+        <receiver>DError</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+</connections>
+<slots>
+    <slot>BSupPressed()</slot>
+    <slot>ViewDoc()</slot>
+    <slot>BOkPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desFormule.py b/Ui/desFormule.py
new file mode 100644 (file)
index 0000000..6d7b72c
--- /dev/null
@@ -0,0 +1,260 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desFormule.ui'
+#
+# Created: ven mai 16 13:30:38 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DFormule(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DFormule")
+
+        self.setMinimumSize(QSize(505,0))
+
+        DFormuleLayout = QGridLayout(self,1,1,11,6,"DFormuleLayout")
+
+        layout4 = QHBoxLayout(None,0,6,"layout4")
+
+        self.bSup = QPushButton(self,"bSup")
+        self.bSup.setMinimumSize(QSize(0,30))
+        self.bSup.setAutoDefault(1)
+        layout4.addWidget(self.bSup)
+
+        self.bOk = QPushButton(self,"bOk")
+        self.bOk.setMinimumSize(QSize(0,30))
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+        layout4.addWidget(self.bOk)
+
+        self.bHelp = QPushButton(self,"bHelp")
+        self.bHelp.setMinimumSize(QSize(0,30))
+        self.bHelp.setAutoDefault(1)
+        layout4.addWidget(self.bHelp)
+
+        DFormuleLayout.addLayout(layout4,2,0)
+
+        self.Commentaire = QLabel(self,"Commentaire")
+
+        DFormuleLayout.addWidget(self.Commentaire,1,0)
+
+        self.TWChoix = QTabWidget(self,"TWChoix")
+
+        self.Formule = QWidget(self.TWChoix,"Formule")
+        FormuleLayout = QGridLayout(self.Formule,1,1,11,6,"FormuleLayout")
+
+        self.textLabel1 = QLabel(self.Formule,"textLabel1")
+        self.textLabel1.setMinimumSize(QSize(0,0))
+
+        FormuleLayout.addWidget(self.textLabel1,0,0)
+
+        self.textLabel1_3 = QLabel(self.Formule,"textLabel1_3")
+
+        FormuleLayout.addMultiCellWidget(self.textLabel1_3,6,6,0,1)
+
+        layout6 = QHBoxLayout(None,0,6,"layout6")
+
+        self.LENomFormule = QLineEdit(self.Formule,"LENomFormule")
+        self.LENomFormule.setMinimumSize(QSize(0,40))
+        layout6.addWidget(self.LENomFormule)
+
+        layout4_2 = QHBoxLayout(None,0,6,"layout4_2")
+
+        self.textLabel1_6 = QLabel(self.Formule,"textLabel1_6")
+        layout4_2.addWidget(self.textLabel1_6)
+
+        self.LENomsArgs = QLineEdit(self.Formule,"LENomsArgs")
+        self.LENomsArgs.setMinimumSize(QSize(230,40))
+        layout4_2.addWidget(self.LENomsArgs)
+
+        self.textLabel1_6_2 = QLabel(self.Formule,"textLabel1_6_2")
+        layout4_2.addWidget(self.textLabel1_6_2)
+        layout6.addLayout(layout4_2)
+
+        FormuleLayout.addMultiCellLayout(layout6,2,2,0,1)
+
+        self.textLabel2 = QLabel(self.Formule,"textLabel2")
+
+        FormuleLayout.addWidget(self.textLabel2,1,1)
+
+        self.textLabel1_3_2 = QLabel(self.Formule,"textLabel1_3_2")
+
+        FormuleLayout.addMultiCellWidget(self.textLabel1_3_2,7,7,0,1)
+
+        self.textLabel2_2 = QLabel(self.Formule,"textLabel2_2")
+
+        FormuleLayout.addMultiCellWidget(self.textLabel2_2,3,3,0,1)
+
+        self.textLabel1_5 = QLabel(self.Formule,"textLabel1_5")
+        self.textLabel1_5.setMinimumSize(QSize(0,0))
+
+        FormuleLayout.addMultiCellWidget(self.textLabel1_5,4,4,0,1)
+
+        self.LECorpsFormule = QLineEdit(self.Formule,"LECorpsFormule")
+        self.LECorpsFormule.setMinimumSize(QSize(0,30))
+
+        FormuleLayout.addMultiCellWidget(self.LECorpsFormule,5,5,0,1)
+
+        self.textLabel1_2 = QLabel(self.Formule,"textLabel1_2")
+
+        FormuleLayout.addWidget(self.textLabel1_2,0,1)
+        self.TWChoix.insertTab(self.Formule,QString(""))
+
+        self.Commande = QWidget(self.TWChoix,"Commande")
+        CommandeLayout = QGridLayout(self.Commande,1,1,11,6,"CommandeLayout")
+
+        self.textLabel4 = QLabel(self.Commande,"textLabel4")
+
+        CommandeLayout.addMultiCellWidget(self.textLabel4,3,3,0,3)
+
+        self.buttonGroup1 = QButtonGroup(self.Commande,"buttonGroup1")
+
+        LayoutWidget = QWidget(self.buttonGroup1,"layout1")
+        LayoutWidget.setGeometry(QRect(20,20,113,48))
+        layout1 = QVBoxLayout(LayoutWidget,11,6,"layout1")
+
+        self.RBalpha = QRadioButton(LayoutWidget,"RBalpha")
+        self.RBalpha.setChecked(1)
+        layout1.addWidget(self.RBalpha)
+
+        self.RBGroupe = QRadioButton(LayoutWidget,"RBGroupe")
+        layout1.addWidget(self.RBGroupe)
+
+        CommandeLayout.addMultiCellWidget(self.buttonGroup1,0,1,3,3)
+
+        self.LBNouvCommande = QListBox(self.Commande,"LBNouvCommande")
+
+        CommandeLayout.addMultiCellWidget(self.LBNouvCommande,2,2,0,3)
+
+        self.textLabel1_4 = QLabel(self.Commande,"textLabel1_4")
+
+        CommandeLayout.addMultiCellWidget(self.textLabel1_4,0,0,0,2)
+
+        self.textLabel6 = QLabel(self.Commande,"textLabel6")
+        self.textLabel6.setMinimumSize(QSize(40,0))
+
+        CommandeLayout.addWidget(self.textLabel6,1,0)
+
+        self.LEFiltre = QLineEdit(self.Commande,"LEFiltre")
+        self.LEFiltre.setMinimumSize(QSize(160,40))
+
+        CommandeLayout.addWidget(self.LEFiltre,1,1)
+
+        self.BNext = QToolButton(self.Commande,"BNext")
+        self.BNext.setMinimumSize(QSize(60,40))
+        self.BNext.setIconSet(QIconSet())
+
+        CommandeLayout.addWidget(self.BNext,1,2)
+        self.TWChoix.insertTab(self.Commande,QString(""))
+
+        DFormuleLayout.addWidget(self.TWChoix,0,0)
+
+        self.languageChange()
+
+        self.resize(QSize(529,493).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        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.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand)
+        self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand)
+        self.connect(self.BNext,SIGNAL("clicked()"),self.BNextPressed)
+        self.connect(self.LENomFormule,SIGNAL("returnPressed()"),self.NomFormuleSaisi)
+        self.connect(self.LENomsArgs,SIGNAL("returnPressed()"),self.argsSaisis)
+        self.connect(self.LECorpsFormule,SIGNAL("returnPressed()"),self.FormuleSaisie)
+        self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc)
+
+        self.setTabOrder(self.LEFiltre,self.LENomFormule)
+        self.setTabOrder(self.LENomFormule,self.LENomsArgs)
+        self.setTabOrder(self.LENomsArgs,self.LECorpsFormule)
+        self.setTabOrder(self.LECorpsFormule,self.bSup)
+        self.setTabOrder(self.bSup,self.bOk)
+        self.setTabOrder(self.bOk,self.bHelp)
+        self.setTabOrder(self.bHelp,self.TWChoix)
+        self.setTabOrder(self.TWChoix,self.RBalpha)
+        self.setTabOrder(self.RBalpha,self.RBGroupe)
+        self.setTabOrder(self.RBGroupe,self.LBNouvCommande)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("DMacro"))
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(self.__tr("Alt+S"))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(self.__tr("Alt+D"))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+        self.Commentaire.setText(QString.null)
+        self.textLabel1.setText(self.__tr("<h3><p align=\"center\"><u><b>Nom de la formule</b></u></p></h3>"))
+        self.textLabel1_3.setText(self.__trUtf8("\x52\x65\x74\x6f\x75\x72\x2d\x43\x68\x61\x72\x69\x6f\x74\x20\x70\x65\x72\x6d\x65\x74\x20\x64\x65\x20\x76\xc3\xa9\x72\x69\x66\x69\x65\x72\x20\x71\x75\x65\x20\x6c\x27\x65\x78\x70\x72\x65\x73\x73\x69\x6f\x6e\x20\x65\x73\x74\x20\x76\x61\x6c\x69\x64\x65\x2e"))
+        self.textLabel1_6.setText(self.__tr("<h1><b>(</b></h1>"))
+        self.textLabel1_6_2.setText(self.__tr("<h1><b>)</b></h1>"))
+        self.textLabel2.setText(self.__trUtf8("\x76\x61\x72\x69\x61\x62\x6c\x65\x73\x20\x73\xc3\xa9\x70\x61\x72\xc3\xa9\x65\x73\x20\x70\x61\x72\x20\x64\x65\x73\x20\x22\x2c\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x61\x72\x20\x65\x78\x2e\x20\x3a\x20\x78\x2c\x79\x2c\x7a"))
+        self.textLabel1_3_2.setText(self.__trUtf8("\x43\x65\x20\x6e\x27\x65\x73\x74\x20\x71\x75\x27\x61\x70\x72\xc3\xa8\x73\x20\x61\x76\x6f\x69\x72\x20\x61\x70\x70\x75\x79\xc3\xa9\x20\x73\x75\x72\x20\x6c\x65\x20\x62\x6f\x75\x74\x6f\x6e\x20\x56\x61\x6c\x69\x64\x65\x72\x20\x71\x75\x65\x20\x6c\x65\x73\x20\x6e\x6f\x75\x76\x65\x6c\x6c\x65\x73\x0a\x76\x61\x6c\x65\x75\x72\x73\x20\x73\x65\x72\x6f\x6e\x74\x20\x65\x66\x66\x65\x63\x74\x69\x76\x65\x6d\x65\x6e\x74\x20\x70\x72\x69\x73\x65\x73\x20\x65\x6e\x20\x63\x6f\x6d\x70\x74\x65"))
+        self.textLabel2_2.setText(self.__tr("<font size=\"+4\" face=\"Helvetica\"><b>=</b></font>"))
+        self.textLabel1_5.setText(self.__tr("<h3><p align=\"center\"><u><b>Expression</b></u></p></h3>"))
+        self.textLabel1_2.setText(self.__tr("<h3><p align=\"center\"><u><b>Arguments</b></u></p></h3>"))
+        self.TWChoix.changeTab(self.Formule,self.__trUtf8("\x44\xc3\xa9\x66\x69\x6e\x69\x74\x69\x6f\x6e\x20\x46\x6f\x72\x6d\x75\x6c\x65"))
+        self.textLabel4.setText(self.__trUtf8("\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x6c\x65\x66\x74\x22\x3e\x4c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x68\x6f\x69\x73\x69\x65\x20\x73\x65\x72\x61\x20\x61\x6a\x6f\x75\x74\xc3\xa9\x65\x20\x41\x50\x52\x45\x53\x20\x6c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x6f\x75\x72\x61\x6e\x74\x65\x3c\x2f\x70\x3e"))
+        self.buttonGroup1.setTitle(self.__tr("Affichage"))
+        self.RBalpha.setText(self.__trUtf8("\x61\x6c\x70\x68\x61\x62\xc3\xa9\x74\x69\x71\x75\x65"))
+        self.RBGroupe.setText(self.__tr("par groupe"))
+        self.textLabel1_4.setText(self.__tr("<b><u>Commandes :</u></b>"))
+        self.textLabel6.setText(self.__tr("Filtre"))
+        self.BNext.setText(self.__tr("Suivant"))
+        QToolTip.add(self.BNext,self.__tr("affiche la prochaine occurence"))
+        self.TWChoix.changeTab(self.Commande,self.__tr("Nouvelle Commande"))
+
+
+    def LBNouvCommandeClicked(self):
+        print "DFormule.LBNouvCommandeClicked(): Not implemented yet"
+
+    def LEFiltreTextChanged(self):
+        print "DFormule.LEFiltreTextChanged(): Not implemented yet"
+
+    def LEfiltreReturnPressed(self):
+        print "DFormule.LEfiltreReturnPressed(): Not implemented yet"
+
+    def BSupPressed(self):
+        print "DFormule.BSupPressed(): Not implemented yet"
+
+    def BOkPressed(self):
+        print "DFormule.BOkPressed(): Not implemented yet"
+
+    def BuildTabCommand(self):
+        print "DFormule.BuildTabCommand(): Not implemented yet"
+
+    def BNextPressed(self):
+        print "DFormule.BNextPressed(): Not implemented yet"
+
+    def NomFormuleSaisi(self):
+        print "DFormule.NomFormuleSaisi(): Not implemented yet"
+
+    def argsSaisis(self):
+        print "DFormule.argsSaisis(): Not implemented yet"
+
+    def FormuleSaisie(self):
+        print "DFormule.FormuleSaisie(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DFormule.ViewDoc(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DFormule",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DFormule",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desFormule.ui b/Ui/desFormule.ui
new file mode 100644 (file)
index 0000000..37d5e0a
--- /dev/null
@@ -0,0 +1,502 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DFormule</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DFormule</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>529</width>
+            <height>493</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>505</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DMacro</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QLayoutWidget" row="2" column="0">
+            <property name="name">
+                <cstring>layout4</cstring>
+            </property>
+            <hbox>
+                <property name="name">
+                    <cstring>unnamed</cstring>
+                </property>
+                <widget class="QPushButton">
+                    <property name="name">
+                        <cstring>bSup</cstring>
+                    </property>
+                    <property name="minimumSize">
+                        <size>
+                            <width>0</width>
+                            <height>30</height>
+                        </size>
+                    </property>
+                    <property name="text">
+                        <string>&amp;Supprimer</string>
+                    </property>
+                    <property name="accel">
+                        <string>Alt+S</string>
+                    </property>
+                    <property name="autoDefault">
+                        <bool>true</bool>
+                    </property>
+                    <property name="toolTip" stdset="0">
+                        <string>suppression du mot clef</string>
+                    </property>
+                </widget>
+                <widget class="QPushButton">
+                    <property name="name">
+                        <cstring>bOk</cstring>
+                    </property>
+                    <property name="minimumSize">
+                        <size>
+                            <width>0</width>
+                            <height>30</height>
+                        </size>
+                    </property>
+                    <property name="text">
+                        <string>&amp;Valider</string>
+                    </property>
+                    <property name="accel">
+                        <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+                    </property>
+                    <property name="autoDefault">
+                        <bool>true</bool>
+                    </property>
+                    <property name="default">
+                        <bool>true</bool>
+                    </property>
+                    <property name="toolTip" stdset="0">
+                        <string>validation de la saisie</string>
+                    </property>
+                </widget>
+                <widget class="QPushButton">
+                    <property name="name">
+                        <cstring>bHelp</cstring>
+                    </property>
+                    <property name="minimumSize">
+                        <size>
+                            <width>0</width>
+                            <height>30</height>
+                        </size>
+                    </property>
+                    <property name="text">
+                        <string>&amp;Documentation</string>
+                    </property>
+                    <property name="accel">
+                        <string>Alt+D</string>
+                    </property>
+                    <property name="autoDefault">
+                        <bool>true</bool>
+                    </property>
+                    <property name="toolTip" stdset="0">
+                        <string>affichage documentation aster</string>
+                    </property>
+                </widget>
+            </hbox>
+        </widget>
+        <widget class="QLabel" row="1" column="0">
+            <property name="name">
+                <cstring>Commentaire</cstring>
+            </property>
+            <property name="text">
+                <string></string>
+            </property>
+        </widget>
+        <widget class="QTabWidget" row="0" column="0">
+            <property name="name">
+                <cstring>TWChoix</cstring>
+            </property>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Formule</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Définition Formule</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QLabel" row="0" column="0">
+                        <property name="name">
+                            <cstring>textLabel1</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&lt;h3&gt;&lt;p align="center"&gt;&lt;u&gt;&lt;b&gt;Nom de la formule&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;/h3&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="6" column="0" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>textLabel1_3</cstring>
+                        </property>
+                        <property name="text">
+                            <string>Retour-Chariot permet de vérifier que l'expression est valide.</string>
+                        </property>
+                    </widget>
+                    <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>layout6</cstring>
+                        </property>
+                        <hbox>
+                            <property name="name">
+                                <cstring>unnamed</cstring>
+                            </property>
+                            <widget class="QLineEdit">
+                                <property name="name">
+                                    <cstring>LENomFormule</cstring>
+                                </property>
+                                <property name="minimumSize">
+                                    <size>
+                                        <width>0</width>
+                                        <height>40</height>
+                                    </size>
+                                </property>
+                            </widget>
+                            <widget class="QLayoutWidget">
+                                <property name="name">
+                                    <cstring>layout4</cstring>
+                                </property>
+                                <hbox>
+                                    <property name="name">
+                                        <cstring>unnamed</cstring>
+                                    </property>
+                                    <widget class="QLabel">
+                                        <property name="name">
+                                            <cstring>textLabel1_6</cstring>
+                                        </property>
+                                        <property name="text">
+                                            <string>&lt;h1&gt;&lt;b&gt;(&lt;/b&gt;&lt;/h1&gt;</string>
+                                        </property>
+                                    </widget>
+                                    <widget class="QLineEdit">
+                                        <property name="name">
+                                            <cstring>LENomsArgs</cstring>
+                                        </property>
+                                        <property name="minimumSize">
+                                            <size>
+                                                <width>230</width>
+                                                <height>40</height>
+                                            </size>
+                                        </property>
+                                    </widget>
+                                    <widget class="QLabel">
+                                        <property name="name">
+                                            <cstring>textLabel1_6_2</cstring>
+                                        </property>
+                                        <property name="text">
+                                            <string>&lt;h1&gt;&lt;b&gt;)&lt;/b&gt;&lt;/h1&gt;</string>
+                                        </property>
+                                    </widget>
+                                </hbox>
+                            </widget>
+                        </hbox>
+                    </widget>
+                    <widget class="QLabel" row="1" column="1">
+                        <property name="name">
+                            <cstring>textLabel2</cstring>
+                        </property>
+                        <property name="text">
+                            <string>variables séparées par des ","
+          par ex. : x,y,z</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="7" column="0" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>textLabel1_3_2</cstring>
+                        </property>
+                        <property name="text">
+                            <string>Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
+valeurs seront effectivement prises en compte</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="3" column="0" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>textLabel2_2</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;font size="+4" face="Helvetica"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="4" column="0" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>textLabel1_5</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&lt;h3&gt;&lt;p align="center"&gt;&lt;u&gt;&lt;b&gt;Expression&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;/h3&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QLineEdit" row="5" column="0" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>LECorpsFormule</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="0" column="1">
+                        <property name="name">
+                            <cstring>textLabel1_2</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;h3&gt;&lt;p align="center"&gt;&lt;u&gt;&lt;b&gt;Arguments&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;/h3&gt;</string>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Commande</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Nouvelle Commande</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QLabel" row="3" column="0" rowspan="1" colspan="4">
+                        <property name="name">
+                            <cstring>textLabel4</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;p align="left"&gt;La commande choisie sera ajoutée APRES la commande courante&lt;/p&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QButtonGroup" row="0" column="3" rowspan="2" colspan="1">
+                        <property name="name">
+                            <cstring>buttonGroup1</cstring>
+                        </property>
+                        <property name="title">
+                            <string>Affichage</string>
+                        </property>
+                        <widget class="QLayoutWidget">
+                            <property name="name">
+                                <cstring>layout1</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>20</x>
+                                    <y>20</y>
+                                    <width>113</width>
+                                    <height>48</height>
+                                </rect>
+                            </property>
+                            <vbox>
+                                <property name="name">
+                                    <cstring>unnamed</cstring>
+                                </property>
+                                <widget class="QRadioButton">
+                                    <property name="name">
+                                        <cstring>RBalpha</cstring>
+                                    </property>
+                                    <property name="text">
+                                        <string>alphabétique</string>
+                                    </property>
+                                    <property name="checked">
+                                        <bool>true</bool>
+                                    </property>
+                                </widget>
+                                <widget class="QRadioButton">
+                                    <property name="name">
+                                        <cstring>RBGroupe</cstring>
+                                    </property>
+                                    <property name="text">
+                                        <string>par groupe</string>
+                                    </property>
+                                </widget>
+                            </vbox>
+                        </widget>
+                    </widget>
+                    <widget class="QListBox" row="2" column="0" rowspan="1" colspan="4">
+                        <property name="name">
+                            <cstring>LBNouvCommande</cstring>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="0" column="0" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>textLabel1_4</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;b&gt;&lt;u&gt;Commandes :&lt;/u&gt;&lt;/b&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="1" column="0">
+                        <property name="name">
+                            <cstring>textLabel6</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>40</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>Filtre</string>
+                        </property>
+                    </widget>
+                    <widget class="QLineEdit" row="1" column="1">
+                        <property name="name">
+                            <cstring>LEFiltre</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>160</width>
+                                <height>40</height>
+                            </size>
+                        </property>
+                    </widget>
+                    <widget class="QToolButton" row="1" column="2">
+                        <property name="name">
+                            <cstring>BNext</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>60</width>
+                                <height>40</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>Suivant</string>
+                        </property>
+                        <property name="iconSet">
+                            <iconset></iconset>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>affiche la prochaine occurence</string>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>LBNouvCommande</sender>
+        <signal>doubleClicked(QListBoxItem*)</signal>
+        <receiver>DFormule</receiver>
+        <slot>LBNouvCommandeClicked()</slot>
+    </connection>
+    <connection>
+        <sender>LEFiltre</sender>
+        <signal>textChanged(const QString&amp;)</signal>
+        <receiver>DFormule</receiver>
+        <slot>LEFiltreTextChanged()</slot>
+    </connection>
+    <connection>
+        <sender>LEFiltre</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DFormule</receiver>
+        <slot>LEfiltreReturnPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bSup</sender>
+        <signal>pressed()</signal>
+        <receiver>DFormule</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DFormule</receiver>
+        <slot>BOkPressed()</slot>
+    </connection>
+    <connection>
+        <sender>RBalpha</sender>
+        <signal>clicked()</signal>
+        <receiver>DFormule</receiver>
+        <slot>BuildTabCommand()</slot>
+    </connection>
+    <connection>
+        <sender>RBGroupe</sender>
+        <signal>clicked()</signal>
+        <receiver>DFormule</receiver>
+        <slot>BuildTabCommand()</slot>
+    </connection>
+    <connection>
+        <sender>BNext</sender>
+        <signal>clicked()</signal>
+        <receiver>DFormule</receiver>
+        <slot>BNextPressed()</slot>
+    </connection>
+    <connection>
+        <sender>LENomFormule</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DFormule</receiver>
+        <slot>NomFormuleSaisi()</slot>
+    </connection>
+    <connection>
+        <sender>LENomsArgs</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DFormule</receiver>
+        <slot>argsSaisis()</slot>
+    </connection>
+    <connection>
+        <sender>LECorpsFormule</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DFormule</receiver>
+        <slot>FormuleSaisie()</slot>
+    </connection>
+    <connection>
+        <sender>bHelp</sender>
+        <signal>clicked()</signal>
+        <receiver>DFormule</receiver>
+        <slot>ViewDoc()</slot>
+    </connection>
+</connections>
+<tabstops>
+    <tabstop>LEFiltre</tabstop>
+    <tabstop>LENomFormule</tabstop>
+    <tabstop>LENomsArgs</tabstop>
+    <tabstop>LECorpsFormule</tabstop>
+    <tabstop>bSup</tabstop>
+    <tabstop>bOk</tabstop>
+    <tabstop>bHelp</tabstop>
+    <tabstop>TWChoix</tabstop>
+    <tabstop>RBalpha</tabstop>
+    <tabstop>RBGroupe</tabstop>
+    <tabstop>LBNouvCommande</tabstop>
+</tabstops>
+<slots>
+    <slot>LBNouvCommandeClicked()</slot>
+    <slot>LEFiltreTextChanged()</slot>
+    <slot>LEfiltreReturnPressed()</slot>
+    <slot>BSupPressed()</slot>
+    <slot>BOkPressed()</slot>
+    <slot>BuildTabCommand()</slot>
+    <slot>BNextPressed()</slot>
+    <slot>NomFormuleSaisi()</slot>
+    <slot>argsSaisis()</slot>
+    <slot>FormuleSaisie()</slot>
+    <slot>ViewDoc()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desInactif.py b/Ui/desInactif.py
new file mode 100644 (file)
index 0000000..39e7cce
--- /dev/null
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desInactif.ui'
+#
+# Created: mar mar 25 10:05:08 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DInactif(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DInactif")
+
+        self.setMinimumSize(QSize(350,0))
+
+        DInactifLayout = QGridLayout(self,1,1,11,6,"DInactifLayout")
+
+        self.textLabel1_3 = QLabel(self,"textLabel1_3")
+
+        DInactifLayout.addWidget(self.textLabel1_3,0,0)
+
+        self.textLabel1 = QLabel(self,"textLabel1")
+
+        DInactifLayout.addWidget(self.textLabel1,1,0)
+
+        layout1 = QHBoxLayout(None,0,6,"layout1")
+        spacer2 = QSpacerItem(171,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
+        layout1.addItem(spacer2)
+
+        self.bSup = QPushButton(self,"bSup")
+        self.bSup.setAutoDefault(1)
+        layout1.addWidget(self.bSup)
+        spacer1 = QSpacerItem(171,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
+        layout1.addItem(spacer1)
+
+        DInactifLayout.addLayout(layout1,2,0)
+
+        self.languageChange()
+
+        self.resize(QSize(482,480).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("DInactif"))
+        self.textLabel1_3.setText(self.__trUtf8("\x3c\x66\x6f\x6e\x74\x20\x73\x69\x7a\x65\x3d\x22\x2b\x32\x22\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x4c\x65\x20\x6e\x6f\x65\x75\x64\x20\x73\xc3\xa9\x6c\x65\x63\x74\x69\x6f\x6e\x6e\xc3\xa9\x20\x6e\x65\x20\x63\x6f\x72\x72\x65\x73\x70\x6f\x6e\x64\x20\x70\x61\x73\x20\xc3\xa0\x20\x75\x6e\x20\x6f\x62\x6a\x65\x74\x20\x61\x63\x74\x69\x66\x2e\x3c\x2f\x70\x3e\x3c\x2f\x66\x6f\x6e\x74\x3e"))
+        self.textLabel1.setText(self.__trUtf8("\x3c\x66\x6f\x6e\x74\x20\x73\x69\x7a\x65\x3d\x22\x2b\x32\x22\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x0a\x53\x65\x75\x6c\x65\x73\x20\x6c\x65\x73\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x73\x20\x70\x6c\x61\x63\xc3\xa9\x65\x73\x20\x65\x6e\x74\x72\x65\x20\x3a\x0a\x0a\x44\x45\x42\x55\x54\x20\x2f\x20\x46\x49\x4e\x0a\x0a\x73\x6f\x6e\x74\x20\x61\x63\x74\x69\x76\x65\x73\x0a\x3c\x2f\x70\x3e\x3c\x2f\x66\x6f\x6e\x74\x3e"))
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(self.__tr("Alt+S"))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+
+
+    def BSupPressed(self):
+        print "DInactif.BSupPressed(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DInactif.ViewDoc(): Not implemented yet"
+
+    def BOkPressed(self):
+        print "DInactif.BOkPressed(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DInactif",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DInactif",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desInactif.ui b/Ui/desInactif.ui
new file mode 100644 (file)
index 0000000..1b8f7f3
--- /dev/null
@@ -0,0 +1,127 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DInactif</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DInactif</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>482</width>
+            <height>480</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>350</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DInactif</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QLabel" row="0" column="0">
+            <property name="name">
+                <cstring>textLabel1_3</cstring>
+            </property>
+            <property name="text">
+                <string>&lt;font size="+2"&gt;&lt;p align="center"&gt;Le noeud sélectionné ne correspond pas à un objet actif.&lt;/p&gt;&lt;/font&gt;</string>
+            </property>
+        </widget>
+        <widget class="QLabel" row="1" column="0">
+            <property name="name">
+                <cstring>textLabel1</cstring>
+            </property>
+            <property name="text">
+                <string>&lt;font size="+2"&gt;&lt;p align="center"&gt;
+Seules les commandes placées entre :
+
+DEBUT / FIN
+
+sont actives
+&lt;/p&gt;&lt;/font&gt;</string>
+            </property>
+        </widget>
+        <widget class="QLayoutWidget" row="2" column="0">
+            <property name="name">
+                <cstring>layout1</cstring>
+            </property>
+            <hbox>
+                <property name="name">
+                    <cstring>unnamed</cstring>
+                </property>
+                <spacer>
+                    <property name="name">
+                        <cstring>spacer2</cstring>
+                    </property>
+                    <property name="orientation">
+                        <enum>Horizontal</enum>
+                    </property>
+                    <property name="sizeType">
+                        <enum>Expanding</enum>
+                    </property>
+                    <property name="sizeHint">
+                        <size>
+                            <width>171</width>
+                            <height>20</height>
+                        </size>
+                    </property>
+                </spacer>
+                <widget class="QPushButton">
+                    <property name="name">
+                        <cstring>bSup</cstring>
+                    </property>
+                    <property name="text">
+                        <string>&amp;Supprimer</string>
+                    </property>
+                    <property name="accel">
+                        <string>Alt+S</string>
+                    </property>
+                    <property name="autoDefault">
+                        <bool>true</bool>
+                    </property>
+                    <property name="toolTip" stdset="0">
+                        <string>suppression du mot clef</string>
+                    </property>
+                </widget>
+                <spacer>
+                    <property name="name">
+                        <cstring>spacer1</cstring>
+                    </property>
+                    <property name="orientation">
+                        <enum>Horizontal</enum>
+                    </property>
+                    <property name="sizeType">
+                        <enum>Expanding</enum>
+                    </property>
+                    <property name="sizeHint">
+                        <size>
+                            <width>171</width>
+                            <height>20</height>
+                        </size>
+                    </property>
+                </spacer>
+            </hbox>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>bSup</sender>
+        <signal>clicked()</signal>
+        <receiver>DInactif</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+</connections>
+<slots>
+    <slot>BSupPressed()</slot>
+    <slot>ViewDoc()</slot>
+    <slot>BOkPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desInclude.py b/Ui/desInclude.py
new file mode 100644 (file)
index 0000000..dfe0d62
--- /dev/null
@@ -0,0 +1,240 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desInclude.ui'
+#
+# Created: ven mai 16 13:30:38 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DInc1(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DInc1")
+
+        self.setMinimumSize(QSize(505,0))
+
+        DInc1Layout = QGridLayout(self,1,1,11,6,"DInc1Layout")
+
+        self.bOk = QPushButton(self,"bOk")
+        self.bOk.setMinimumSize(QSize(0,30))
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+
+        DInc1Layout.addWidget(self.bOk,2,1)
+
+        self.bHelp = QPushButton(self,"bHelp")
+        self.bHelp.setMinimumSize(QSize(0,30))
+        self.bHelp.setAutoDefault(1)
+
+        DInc1Layout.addWidget(self.bHelp,2,2)
+
+        self.bSup = QPushButton(self,"bSup")
+        self.bSup.setMinimumSize(QSize(0,30))
+        self.bSup.setAutoDefault(1)
+
+        DInc1Layout.addWidget(self.bSup,2,0)
+
+        self.Commentaire = QLabel(self,"Commentaire")
+
+        DInc1Layout.addMultiCellWidget(self.Commentaire,1,1,0,2)
+
+        self.TWChoix = QTabWidget(self,"TWChoix")
+
+        self.MotClef = QWidget(self.TWChoix,"MotClef")
+        MotClefLayout = QGridLayout(self.MotClef,1,1,11,6,"MotClefLayout")
+
+        self.LBMCPermis = QListBox(self.MotClef,"LBMCPermis")
+        self.LBMCPermis.setMinimumSize(QSize(0,0))
+
+        MotClefLayout.addWidget(self.LBMCPermis,1,0)
+
+        self.textLabel1 = QLabel(self.MotClef,"textLabel1")
+        self.textLabel1.setMinimumSize(QSize(0,0))
+
+        MotClefLayout.addWidget(self.textLabel1,0,0)
+
+        self.LBRegles = QListBox(self.MotClef,"LBRegles")
+
+        MotClefLayout.addWidget(self.LBRegles,1,1)
+
+        self.textLabel1_2 = QLabel(self.MotClef,"textLabel1_2")
+
+        MotClefLayout.addWidget(self.textLabel1_2,0,1)
+        self.TWChoix.insertTab(self.MotClef,QString(""))
+
+        self.Commande = QWidget(self.TWChoix,"Commande")
+        CommandeLayout = QGridLayout(self.Commande,1,1,11,6,"CommandeLayout")
+
+        self.LBNouvCommande = QListBox(self.Commande,"LBNouvCommande")
+
+        CommandeLayout.addMultiCellWidget(self.LBNouvCommande,2,2,0,3)
+
+        self.buttonGroup1 = QButtonGroup(self.Commande,"buttonGroup1")
+
+        self.RBGroupe = QRadioButton(self.buttonGroup1,"RBGroupe")
+        self.RBGroupe.setGeometry(QRect(20,40,101,20))
+
+        self.RBalpha = QRadioButton(self.buttonGroup1,"RBalpha")
+        self.RBalpha.setGeometry(QRect(20,20,120,20))
+        self.RBalpha.setChecked(1)
+
+        CommandeLayout.addMultiCellWidget(self.buttonGroup1,0,1,3,3)
+
+        self.textLabel4 = QLabel(self.Commande,"textLabel4")
+
+        CommandeLayout.addMultiCellWidget(self.textLabel4,3,3,0,3)
+
+        self.textLabel1_4 = QLabel(self.Commande,"textLabel1_4")
+
+        CommandeLayout.addMultiCellWidget(self.textLabel1_4,0,0,0,2)
+
+        self.textLabel6 = QLabel(self.Commande,"textLabel6")
+        self.textLabel6.setMinimumSize(QSize(40,0))
+
+        CommandeLayout.addWidget(self.textLabel6,1,0)
+
+        self.LEFiltre = QLineEdit(self.Commande,"LEFiltre")
+        self.LEFiltre.setMinimumSize(QSize(160,40))
+
+        CommandeLayout.addWidget(self.LEFiltre,1,1)
+
+        self.BNext = QToolButton(self.Commande,"BNext")
+        self.BNext.setMinimumSize(QSize(60,0))
+        self.BNext.setIconSet(QIconSet())
+
+        CommandeLayout.addWidget(self.BNext,1,2)
+        self.TWChoix.insertTab(self.Commande,QString(""))
+
+        self.TabPage = QWidget(self.TWChoix,"TabPage")
+
+        self.textLabel1_3 = QLabel(self.TabPage,"textLabel1_3")
+        self.textLabel1_3.setGeometry(QRect(30,40,440,41))
+
+        self.LENomFichier = QLineEdit(self.TabPage,"LENomFichier")
+        self.LENomFichier.setGeometry(QRect(18,117,450,40))
+        self.LENomFichier.setSizePolicy(QSizePolicy(0,0,0,0,self.LENomFichier.sizePolicy().hasHeightForWidth()))
+        self.LENomFichier.setMinimumSize(QSize(450,40))
+
+        self.BBrowse = QPushButton(self.TabPage,"BBrowse")
+        self.BBrowse.setGeometry(QRect(288,306,161,41))
+        self.BBrowse.setSizePolicy(QSizePolicy(0,0,0,0,self.BBrowse.sizePolicy().hasHeightForWidth()))
+
+        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.TWChoix.insertTab(self.TabPage,QString(""))
+
+        self.TabPage_2 = QWidget(self.TWChoix,"TabPage_2")
+        TabPageLayout = QGridLayout(self.TabPage_2,1,1,11,6,"TabPageLayout")
+
+        self.textLabel1_5 = QLabel(self.TabPage_2,"textLabel1_5")
+
+        TabPageLayout.addWidget(self.textLabel1_5,0,0)
+        self.TWChoix.insertTab(self.TabPage_2,QString(""))
+
+        DInc1Layout.addMultiCellWidget(self.TWChoix,0,0,0,2)
+
+        self.languageChange()
+
+        self.resize(QSize(521,511).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        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.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand)
+        self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand)
+        self.connect(self.BNext,SIGNAL("clicked()"),self.BNextPressed)
+        self.connect(self.BBrowse,SIGNAL("clicked()"),self.BBrowsePressed)
+        self.connect(self.LENomFichier,SIGNAL("returnPressed()"),self.LENomFichReturnPressed)
+        self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc)
+
+        self.setTabOrder(self.LEFiltre,self.LENomFichier)
+        self.setTabOrder(self.LENomFichier,self.bHelp)
+        self.setTabOrder(self.bHelp,self.bSup)
+        self.setTabOrder(self.bSup,self.bOk)
+        self.setTabOrder(self.bOk,self.TWChoix)
+        self.setTabOrder(self.TWChoix,self.LBMCPermis)
+        self.setTabOrder(self.LBMCPermis,self.LBRegles)
+        self.setTabOrder(self.LBRegles,self.LBNouvCommande)
+        self.setTabOrder(self.LBNouvCommande,self.RBalpha)
+        self.setTabOrder(self.RBalpha,self.BBrowse)
+        self.setTabOrder(self.BBrowse,self.BChangeFile)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("DMacro"))
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(self.__tr("Alt+D"))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(self.__tr("Alt+S"))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.Commentaire.setText(QString.null)
+        self.textLabel1.setText(self.__tr("<h3><p align=\"center\"><u><b>Mots Clefs Permis</b></u></p></h3>"))
+        self.textLabel1_2.setText(self.__trUtf8("\x3c\x68\x33\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x3c\x75\x3e\x3c\x62\x3e\x52\xc3\xa9\x67\x6c\x65\x73\x3c\x2f\x62\x3e\x3c\x2f\x75\x3e\x3c\x2f\x70\x3e\x3c\x2f\x68\x33\x3e"))
+        self.TWChoix.changeTab(self.MotClef,self.__tr("Ajouter Mot-Clef"))
+        self.buttonGroup1.setTitle(self.__tr("Affichage"))
+        self.RBGroupe.setText(self.__tr("par groupe"))
+        self.RBalpha.setText(self.__trUtf8("\x61\x6c\x70\x68\x61\x62\xc3\xa9\x74\x69\x71\x75\x65"))
+        self.textLabel4.setText(self.__trUtf8("\x4c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x68\x6f\x69\x73\x69\x65\x20\x73\x65\x72\x61\x20\x61\x6a\x6f\x75\x74\xc3\xa9\x65\x20\x41\x50\x52\x45\x53\x20\x6c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x6f\x75\x72\x61\x6e\x74\x65"))
+        self.textLabel1_4.setText(self.__tr("<b><u>Commandes :</u></b>"))
+        self.textLabel6.setText(self.__tr("Filtre"))
+        self.BNext.setText(self.__tr("Suivant"))
+        QToolTip.add(self.BNext,self.__tr("affiche la prochaine occurence"))
+        self.TWChoix.changeTab(self.Commande,self.__tr("Nouvelle Commande"))
+        self.textLabel1_3.setText(self.__tr("<font size=\"+1\">La commande INCLUDE requiert un nom de Fichier :</font>"))
+        self.BBrowse.setText(self.__tr("Edit"))
+        self.BChangeFile.setText(self.__tr("Autre Fichier"))
+        self.TWChoix.changeTab(self.TabPage,self.__tr("Fichier Include"))
+        self.textLabel1_5.setText(self.__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_2,self.__tr("Fichier Inc"))
+
+
+    def LBNouvCommandeClicked(self):
+        print "DInc1.LBNouvCommandeClicked(): Not implemented yet"
+
+    def LEFiltreTextChanged(self):
+        print "DInc1.LEFiltreTextChanged(): Not implemented yet"
+
+    def LEfiltreReturnPressed(self):
+        print "DInc1.LEfiltreReturnPressed(): Not implemented yet"
+
+    def BSupPressed(self):
+        print "DInc1.BSupPressed(): Not implemented yet"
+
+    def BOkPressed(self):
+        print "DInc1.BOkPressed(): Not implemented yet"
+
+    def BuildTabCommand(self):
+        print "DInc1.BuildTabCommand(): Not implemented yet"
+
+    def BNextPressed(self):
+        print "DInc1.BNextPressed(): Not implemented yet"
+
+    def BBrowsePressed(self):
+        print "DInc1.BBrowsePressed(): Not implemented yet"
+
+    def LENomFichReturnPressed(self):
+        print "DInc1.LENomFichReturnPressed(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DInc1.ViewDoc(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DInc1",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DInc1",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desInclude.ui b/Ui/desInclude.ui
new file mode 100644 (file)
index 0000000..9edfc3e
--- /dev/null
@@ -0,0 +1,504 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DInc1</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DInc1</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>521</width>
+            <height>511</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>505</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DMacro</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QPushButton" row="2" column="1">
+            <property name="name">
+                <cstring>bOk</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Valider</string>
+            </property>
+            <property name="accel">
+                <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="default">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>validation de la saisie</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="2" column="2">
+            <property name="name">
+                <cstring>bHelp</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Documentation</string>
+            </property>
+            <property name="accel">
+                <string>Alt+D</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>affichage documentation aster</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="2" column="0">
+            <property name="name">
+                <cstring>bSup</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Supprimer</string>
+            </property>
+            <property name="accel">
+                <string>Alt+S</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>suppression du mot clef</string>
+            </property>
+        </widget>
+        <widget class="QLabel" row="1" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>Commentaire</cstring>
+            </property>
+            <property name="text">
+                <string></string>
+            </property>
+        </widget>
+        <widget class="QTabWidget" row="0" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>TWChoix</cstring>
+            </property>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>MotClef</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Ajouter Mot-Clef</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QListBox" row="1" column="0">
+                        <property name="name">
+                            <cstring>LBMCPermis</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="0" column="0">
+                        <property name="name">
+                            <cstring>textLabel1</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&lt;h3&gt;&lt;p align="center"&gt;&lt;u&gt;&lt;b&gt;Mots Clefs Permis&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;/h3&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QListBox" row="1" column="1">
+                        <property name="name">
+                            <cstring>LBRegles</cstring>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="0" column="1">
+                        <property name="name">
+                            <cstring>textLabel1_2</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;h3&gt;&lt;p align="center"&gt;&lt;u&gt;&lt;b&gt;Régles&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;/h3&gt;</string>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Commande</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Nouvelle Commande</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QListBox" row="2" column="0" rowspan="1" colspan="4">
+                        <property name="name">
+                            <cstring>LBNouvCommande</cstring>
+                        </property>
+                    </widget>
+                    <widget class="QButtonGroup" row="0" column="3" rowspan="2" colspan="1">
+                        <property name="name">
+                            <cstring>buttonGroup1</cstring>
+                        </property>
+                        <property name="title">
+                            <string>Affichage</string>
+                        </property>
+                        <widget class="QRadioButton">
+                            <property name="name">
+                                <cstring>RBGroupe</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>20</x>
+                                    <y>40</y>
+                                    <width>101</width>
+                                    <height>20</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>par groupe</string>
+                            </property>
+                        </widget>
+                        <widget class="QRadioButton">
+                            <property name="name">
+                                <cstring>RBalpha</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>20</x>
+                                    <y>20</y>
+                                    <width>120</width>
+                                    <height>20</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>alphabétique</string>
+                            </property>
+                            <property name="checked">
+                                <bool>true</bool>
+                            </property>
+                        </widget>
+                    </widget>
+                    <widget class="QLabel" row="3" column="0" rowspan="1" colspan="4">
+                        <property name="name">
+                            <cstring>textLabel4</cstring>
+                        </property>
+                        <property name="text">
+                            <string>La commande choisie sera ajoutée APRES la commande courante</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="0" column="0" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>textLabel1_4</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;b&gt;&lt;u&gt;Commandes :&lt;/u&gt;&lt;/b&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="1" column="0">
+                        <property name="name">
+                            <cstring>textLabel6</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>40</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>Filtre</string>
+                        </property>
+                    </widget>
+                    <widget class="QLineEdit" row="1" column="1">
+                        <property name="name">
+                            <cstring>LEFiltre</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>160</width>
+                                <height>40</height>
+                            </size>
+                        </property>
+                    </widget>
+                    <widget class="QToolButton" row="1" column="2">
+                        <property name="name">
+                            <cstring>BNext</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>60</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>Suivant</string>
+                        </property>
+                        <property name="iconSet">
+                            <iconset></iconset>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>affiche la prochaine occurence</string>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>TabPage</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Fichier Include</string>
+                </attribute>
+                <widget class="QLabel">
+                    <property name="name">
+                        <cstring>textLabel1_3</cstring>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>30</x>
+                            <y>40</y>
+                            <width>440</width>
+                            <height>41</height>
+                        </rect>
+                    </property>
+                    <property name="text">
+                        <string>&lt;font size="+1"&gt;La commande INCLUDE requiert un nom de Fichier :&lt;/font&gt;</string>
+                    </property>
+                </widget>
+                <widget class="QLineEdit">
+                    <property name="name">
+                        <cstring>LENomFichier</cstring>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>18</x>
+                            <y>117</y>
+                            <width>450</width>
+                            <height>40</height>
+                        </rect>
+                    </property>
+                    <property name="sizePolicy">
+                        <sizepolicy>
+                            <hsizetype>0</hsizetype>
+                            <vsizetype>0</vsizetype>
+                            <horstretch>0</horstretch>
+                            <verstretch>0</verstretch>
+                        </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                        <size>
+                            <width>450</width>
+                            <height>40</height>
+                        </size>
+                    </property>
+                </widget>
+                <widget class="QPushButton">
+                    <property name="name">
+                        <cstring>BBrowse</cstring>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>288</x>
+                            <y>306</y>
+                            <width>161</width>
+                            <height>41</height>
+                        </rect>
+                    </property>
+                    <property name="sizePolicy">
+                        <sizepolicy>
+                            <hsizetype>0</hsizetype>
+                            <vsizetype>0</vsizetype>
+                            <horstretch>0</horstretch>
+                            <verstretch>0</verstretch>
+                        </sizepolicy>
+                    </property>
+                    <property name="text">
+                        <string>Edit</string>
+                    </property>
+                </widget>
+                <widget class="QPushButton">
+                    <property name="name">
+                        <cstring>BChangeFile</cstring>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>290</x>
+                            <y>350</y>
+                            <width>161</width>
+                            <height>41</height>
+                        </rect>
+                    </property>
+                    <property name="sizePolicy">
+                        <sizepolicy>
+                            <hsizetype>0</hsizetype>
+                            <vsizetype>0</vsizetype>
+                            <horstretch>0</horstretch>
+                            <verstretch>0</verstretch>
+                        </sizepolicy>
+                    </property>
+                    <property name="text">
+                        <string>Autre Fichier</string>
+                    </property>
+                </widget>
+            </widget>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>TabPage</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Fichier Inc</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QLabel" row="0" column="0">
+                        <property name="name">
+                            <cstring>textLabel1_5</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;font size="+1"&gt;&lt;p align="center"&gt;La commande INCLUDE n'a pas de fichier associé.
+Il faut d'abord choisir un numéro d'unité&lt;/p&gt;&lt;/font&gt;</string>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>LBNouvCommande</sender>
+        <signal>doubleClicked(QListBoxItem*)</signal>
+        <receiver>DInc1</receiver>
+        <slot>LBNouvCommandeClicked()</slot>
+    </connection>
+    <connection>
+        <sender>LEFiltre</sender>
+        <signal>textChanged(const QString&amp;)</signal>
+        <receiver>DInc1</receiver>
+        <slot>LEFiltreTextChanged()</slot>
+    </connection>
+    <connection>
+        <sender>LEFiltre</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DInc1</receiver>
+        <slot>LEfiltreReturnPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bSup</sender>
+        <signal>pressed()</signal>
+        <receiver>DInc1</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DInc1</receiver>
+        <slot>BOkPressed()</slot>
+    </connection>
+    <connection>
+        <sender>RBalpha</sender>
+        <signal>clicked()</signal>
+        <receiver>DInc1</receiver>
+        <slot>BuildTabCommand()</slot>
+    </connection>
+    <connection>
+        <sender>RBGroupe</sender>
+        <signal>clicked()</signal>
+        <receiver>DInc1</receiver>
+        <slot>BuildTabCommand()</slot>
+    </connection>
+    <connection>
+        <sender>BNext</sender>
+        <signal>clicked()</signal>
+        <receiver>DInc1</receiver>
+        <slot>BNextPressed()</slot>
+    </connection>
+    <connection>
+        <sender>BBrowse</sender>
+        <signal>clicked()</signal>
+        <receiver>DInc1</receiver>
+        <slot>BBrowsePressed()</slot>
+    </connection>
+    <connection>
+        <sender>LENomFichier</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DInc1</receiver>
+        <slot>LENomFichReturnPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bHelp</sender>
+        <signal>clicked()</signal>
+        <receiver>DInc1</receiver>
+        <slot>ViewDoc()</slot>
+    </connection>
+</connections>
+<tabstops>
+    <tabstop>LEFiltre</tabstop>
+    <tabstop>LENomFichier</tabstop>
+    <tabstop>bHelp</tabstop>
+    <tabstop>bSup</tabstop>
+    <tabstop>bOk</tabstop>
+    <tabstop>TWChoix</tabstop>
+    <tabstop>LBMCPermis</tabstop>
+    <tabstop>LBRegles</tabstop>
+    <tabstop>LBNouvCommande</tabstop>
+    <tabstop>RBalpha</tabstop>
+    <tabstop>BBrowse</tabstop>
+    <tabstop>BChangeFile</tabstop>
+</tabstops>
+<slots>
+    <slot>LBNouvCommandeClicked()</slot>
+    <slot>LEFiltreTextChanged()</slot>
+    <slot>LEfiltreReturnPressed()</slot>
+    <slot>BSupPressed()</slot>
+    <slot>BOkPressed()</slot>
+    <slot>BuildTabCommand()</slot>
+    <slot>BNextPressed()</slot>
+    <slot>BBrowsePressed()</slot>
+    <slot>LENomFichReturnPressed()</slot>
+    <slot>ViewDoc()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desListeParam.py b/Ui/desListeParam.py
new file mode 100644 (file)
index 0000000..d832674
--- /dev/null
@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desListeParam.ui'
+#
+# Created: mar mar 25 10:05:08 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DLisParam(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DLisParam")
+
+
+        DLisParamLayout = QGridLayout(self,1,1,11,6,"DLisParamLayout")
+
+        self.LBParam = QListBox(self,"LBParam")
+
+        DLisParamLayout.addWidget(self.LBParam,0,0)
+
+        self.languageChange()
+
+        self.resize(QSize(413,394).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        self.connect(self.LBParam,SIGNAL("clicked(QListBoxItem*)"),self.LBParamItemPressed)
+
+
+    def languageChange(self):
+        self.setCaption(self.__trUtf8("\x53\xc3\xa9\x6c\x65\x63\x74\x69\x6f\x6e\x20\x64\x65\x20\x70\x61\x72\x61\x6d\xc3\xa9\x74\x72\x65\x73"))
+
+
+    def LBParamItemPressed(self):
+        print "DLisParam.LBParamItemPressed(): Not implemented yet"
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DLisParam",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desListeParam.ui b/Ui/desListeParam.ui
new file mode 100644 (file)
index 0000000..5296fb5
--- /dev/null
@@ -0,0 +1,44 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DLisParam</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DLisParam</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>413</width>
+            <height>394</height>
+        </rect>
+    </property>
+    <property name="caption">
+        <string>Sélection de paramétres</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QListBox" row="0" column="0">
+            <property name="name">
+                <cstring>LBParam</cstring>
+            </property>
+            <property name="selectionMode">
+                <enum>Single</enum>
+            </property>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>LBParam</sender>
+        <signal>clicked(QListBoxItem*)</signal>
+        <receiver>DLisParam</receiver>
+        <slot>LBParamItemPressed()</slot>
+    </connection>
+</connections>
+<slots>
+    <slot>LBParamItemPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desMCFact.py b/Ui/desMCFact.py
new file mode 100644 (file)
index 0000000..50c7de5
--- /dev/null
@@ -0,0 +1,111 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desMCFact.ui'
+#
+# Created: mar mar 25 10:05:08 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DMCFact(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DMCFact")
+
+        self.setMinimumSize(QSize(505,0))
+
+        DMCFactLayout = QGridLayout(self,1,1,11,6,"DMCFactLayout")
+
+        self.TWChoix = QTabWidget(self,"TWChoix")
+
+        self.MotClef = QWidget(self.TWChoix,"MotClef")
+        MotClefLayout = QGridLayout(self.MotClef,1,1,11,6,"MotClefLayout")
+
+        self.textLabel1 = QLabel(self.MotClef,"textLabel1")
+        self.textLabel1.setMinimumSize(QSize(0,0))
+
+        MotClefLayout.addWidget(self.textLabel1,0,0)
+
+        self.LBMCPermis = QListBox(self.MotClef,"LBMCPermis")
+        self.LBMCPermis.setMinimumSize(QSize(0,0))
+
+        MotClefLayout.addWidget(self.LBMCPermis,1,0)
+
+        self.LBRegles = QListBox(self.MotClef,"LBRegles")
+
+        MotClefLayout.addWidget(self.LBRegles,1,1)
+
+        self.textLabel1_2 = QLabel(self.MotClef,"textLabel1_2")
+
+        MotClefLayout.addWidget(self.textLabel1_2,0,1)
+        self.TWChoix.insertTab(self.MotClef,QString(""))
+
+        DMCFactLayout.addMultiCellWidget(self.TWChoix,0,0,0,2)
+
+        self.bSup = QPushButton(self,"bSup")
+        self.bSup.setAutoDefault(1)
+
+        DMCFactLayout.addWidget(self.bSup,2,0)
+
+        self.Commentaire = QLabel(self,"Commentaire")
+
+        DMCFactLayout.addMultiCellWidget(self.Commentaire,1,1,0,2)
+
+        self.bHelp = QPushButton(self,"bHelp")
+        self.bHelp.setAutoDefault(1)
+
+        DMCFactLayout.addWidget(self.bHelp,2,2)
+
+        self.bOk = QPushButton(self,"bOk")
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+
+        DMCFactLayout.addWidget(self.bOk,2,1)
+
+        self.languageChange()
+
+        self.resize(QSize(511,499).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed)
+        self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed)
+        self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("DMacro"))
+        self.textLabel1.setText(self.__tr("<h3><p align=\"center\"><u><b>Mots Clefs Permis</b></u></p></h3>"))
+        self.textLabel1_2.setText(self.__trUtf8("\x3c\x68\x33\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x3c\x75\x3e\x3c\x62\x3e\x52\xc3\xa9\x67\x6c\x65\x73\x3c\x2f\x62\x3e\x3c\x2f\x75\x3e\x3c\x2f\x70\x3e\x3c\x2f\x68\x33\x3e"))
+        self.TWChoix.changeTab(self.MotClef,self.__tr("Ajouter Mot-Clef"))
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(self.__tr("Alt+S"))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.Commentaire.setText(QString.null)
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(self.__tr("Alt+D"))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+
+
+    def ViewDoc(self):
+        print "DMCFact.ViewDoc(): Not implemented yet"
+
+    def BSupPressed(self):
+        print "DMCFact.BSupPressed(): Not implemented yet"
+
+    def BOkPressed(self):
+        print "DMCFact.BOkPressed(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DMCFact",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DMCFact",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desMCFact.ui b/Ui/desMCFact.ui
new file mode 100644 (file)
index 0000000..433df5f
--- /dev/null
@@ -0,0 +1,174 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DMCFact</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DMCFact</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>511</width>
+            <height>499</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>505</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DMacro</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QTabWidget" row="0" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>TWChoix</cstring>
+            </property>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>MotClef</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Ajouter Mot-Clef</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QLabel" row="0" column="0">
+                        <property name="name">
+                            <cstring>textLabel1</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&lt;h3&gt;&lt;p align="center"&gt;&lt;u&gt;&lt;b&gt;Mots Clefs Permis&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;/h3&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QListBox" row="1" column="0">
+                        <property name="name">
+                            <cstring>LBMCPermis</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                    </widget>
+                    <widget class="QListBox" row="1" column="1">
+                        <property name="name">
+                            <cstring>LBRegles</cstring>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="0" column="1">
+                        <property name="name">
+                            <cstring>textLabel1_2</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;h3&gt;&lt;p align="center"&gt;&lt;u&gt;&lt;b&gt;Régles&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;/h3&gt;</string>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+        </widget>
+        <widget class="QPushButton" row="2" column="0">
+            <property name="name">
+                <cstring>bSup</cstring>
+            </property>
+            <property name="text">
+                <string>&amp;Supprimer</string>
+            </property>
+            <property name="accel">
+                <string>Alt+S</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>suppression du mot clef</string>
+            </property>
+        </widget>
+        <widget class="QLabel" row="1" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>Commentaire</cstring>
+            </property>
+            <property name="text">
+                <string></string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="2" column="2">
+            <property name="name">
+                <cstring>bHelp</cstring>
+            </property>
+            <property name="text">
+                <string>&amp;Documentation</string>
+            </property>
+            <property name="accel">
+                <string>Alt+D</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>affichage documentation aster</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="2" column="1">
+            <property name="name">
+                <cstring>bOk</cstring>
+            </property>
+            <property name="text">
+                <string>&amp;Valider</string>
+            </property>
+            <property name="accel">
+                <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="default">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>validation de la saisie</string>
+            </property>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>bSup</sender>
+        <signal>pressed()</signal>
+        <receiver>DMCFact</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DMCFact</receiver>
+        <slot>BOkPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bHelp</sender>
+        <signal>clicked()</signal>
+        <receiver>DMCFact</receiver>
+        <slot>ViewDoc()</slot>
+    </connection>
+</connections>
+<slots>
+    <slot>ViewDoc()</slot>
+    <slot>BSupPressed()</slot>
+    <slot>BOkPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desMCListAjout.py b/Ui/desMCListAjout.py
new file mode 100644 (file)
index 0000000..bb0d598
--- /dev/null
@@ -0,0 +1,121 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desMCListAjout.ui'
+#
+# Created: mar mar 25 10:05:08 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DMCListAjout(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DMCListAjout")
+
+        self.setMinimumSize(QSize(350,0))
+
+        DMCListAjoutLayout = QGridLayout(self,1,1,11,6,"DMCListAjoutLayout")
+
+        self.textLabel1 = QLabel(self,"textLabel1")
+
+        DMCListAjoutLayout.addMultiCellWidget(self.textLabel1,1,1,0,2)
+
+        self.textLabel1_2 = QLabel(self,"textLabel1_2")
+
+        DMCListAjoutLayout.addMultiCellWidget(self.textLabel1_2,2,2,0,2)
+
+        layout9 = QHBoxLayout(None,0,6,"layout9")
+        spacer4 = QSpacerItem(60,21,QSizePolicy.Expanding,QSizePolicy.Minimum)
+        layout9.addItem(spacer4)
+
+        self.bAjout = QPushButton(self,"bAjout")
+        self.bAjout.setAutoDefault(1)
+        self.bAjout.setDefault(1)
+        layout9.addWidget(self.bAjout)
+        spacer2 = QSpacerItem(80,21,QSizePolicy.Expanding,QSizePolicy.Minimum)
+        layout9.addItem(spacer2)
+
+        DMCListAjoutLayout.addMultiCellLayout(layout9,8,8,0,2)
+        spacer1 = QSpacerItem(21,40,QSizePolicy.Minimum,QSizePolicy.Expanding)
+        DMCListAjoutLayout.addItem(spacer1,9,1)
+
+        self.textLabel1_2_2 = QLabel(self,"textLabel1_2_2")
+
+        DMCListAjoutLayout.addMultiCellWidget(self.textLabel1_2_2,6,6,0,2)
+        spacer5 = QSpacerItem(20,20,QSizePolicy.Minimum,QSizePolicy.Expanding)
+        DMCListAjoutLayout.addItem(spacer5,7,1)
+
+        self.MCFacteur = QLabel(self,"MCFacteur")
+
+        DMCListAjoutLayout.addMultiCellWidget(self.MCFacteur,4,4,0,2)
+        spacer6 = QSpacerItem(21,31,QSizePolicy.Minimum,QSizePolicy.Expanding)
+        DMCListAjoutLayout.addItem(spacer6,5,1)
+        spacer7 = QSpacerItem(21,51,QSizePolicy.Minimum,QSizePolicy.Expanding)
+        DMCListAjoutLayout.addItem(spacer7,3,1)
+        spacer8 = QSpacerItem(41,51,QSizePolicy.Minimum,QSizePolicy.Expanding)
+        DMCListAjoutLayout.addItem(spacer8,0,1)
+
+        self.bSup = QPushButton(self,"bSup")
+        self.bSup.setAutoDefault(1)
+
+        DMCListAjoutLayout.addWidget(self.bSup,10,0)
+
+        self.bOk = QPushButton(self,"bOk")
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+
+        DMCListAjoutLayout.addWidget(self.bOk,10,1)
+
+        self.bHelp = QPushButton(self,"bHelp")
+        self.bHelp.setAutoDefault(1)
+
+        DMCListAjoutLayout.addWidget(self.bHelp,10,2)
+
+        self.languageChange()
+
+        self.resize(QSize(459,472).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        self.connect(self.bOk,SIGNAL("clicked()"),self.BAjoutClicked)
+        self.connect(self.bAjout,SIGNAL("clicked()"),self.BAjoutClicked)
+        self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed)
+        self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("Form1"))
+        self.textLabel1.setText(self.__tr("<p align=\"center\"><font size=\"+1\">Pour ajouter une autre occurrence</font></p>"))
+        self.textLabel1_2.setText(self.__tr("<p align=\"center\"><font size=\"+1\">du mot clef-facteur</font> </p>"))
+        self.bAjout.setText(self.__tr("&Ajouter"))
+        self.bAjout.setAccel(self.__tr("Alt+A"))
+        QToolTip.add(self.bAjout,self.__tr("validation de la saisie"))
+        self.textLabel1_2_2.setText(self.__tr("<p align=\"center\"><font size=\"+1\">cliquez ci-dessous</font> </p>"))
+        self.MCFacteur.setText(self.__tr("<p align=\"center\">AFFE</p>"))
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(self.__tr("Alt+S"))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(self.__tr("Alt+D"))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+
+
+    def BAjoutClicked(self):
+        print "DMCListAjout.BAjoutClicked(): Not implemented yet"
+
+    def BSupPressed(self):
+        print "DMCListAjout.BSupPressed(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DMCListAjout.ViewDoc(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DMCListAjout",s,c)
diff --git a/Ui/desMCListAjout.ui b/Ui/desMCListAjout.ui
new file mode 100644 (file)
index 0000000..ff58dbc
--- /dev/null
@@ -0,0 +1,297 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DMCListAjout</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DMCListAjout</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>459</width>
+            <height>472</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>350</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>Form1</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QLabel" row="1" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>textLabel1</cstring>
+            </property>
+            <property name="text">
+                <string>&lt;p align="center"&gt;&lt;font size="+1"&gt;Pour ajouter une autre occurrence&lt;/font&gt;&lt;/p&gt;</string>
+            </property>
+        </widget>
+        <widget class="QLabel" row="2" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>textLabel1_2</cstring>
+            </property>
+            <property name="text">
+                <string>&lt;p align="center"&gt;&lt;font size="+1"&gt;du mot clef-facteur&lt;/font&gt; &lt;/p&gt;</string>
+            </property>
+        </widget>
+        <widget class="QLayoutWidget" row="8" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>layout9</cstring>
+            </property>
+            <hbox>
+                <property name="name">
+                    <cstring>unnamed</cstring>
+                </property>
+                <spacer>
+                    <property name="name">
+                        <cstring>spacer4</cstring>
+                    </property>
+                    <property name="orientation">
+                        <enum>Horizontal</enum>
+                    </property>
+                    <property name="sizeType">
+                        <enum>Expanding</enum>
+                    </property>
+                    <property name="sizeHint">
+                        <size>
+                            <width>60</width>
+                            <height>21</height>
+                        </size>
+                    </property>
+                </spacer>
+                <widget class="QPushButton">
+                    <property name="name">
+                        <cstring>bAjout</cstring>
+                    </property>
+                    <property name="text">
+                        <string>&amp;Ajouter</string>
+                    </property>
+                    <property name="accel">
+                        <string>Alt+A</string>
+                    </property>
+                    <property name="autoDefault">
+                        <bool>true</bool>
+                    </property>
+                    <property name="default">
+                        <bool>true</bool>
+                    </property>
+                    <property name="toolTip" stdset="0">
+                        <string>validation de la saisie</string>
+                    </property>
+                </widget>
+                <spacer>
+                    <property name="name">
+                        <cstring>spacer2</cstring>
+                    </property>
+                    <property name="orientation">
+                        <enum>Horizontal</enum>
+                    </property>
+                    <property name="sizeType">
+                        <enum>Expanding</enum>
+                    </property>
+                    <property name="sizeHint">
+                        <size>
+                            <width>80</width>
+                            <height>21</height>
+                        </size>
+                    </property>
+                </spacer>
+            </hbox>
+        </widget>
+        <spacer row="9" column="1">
+            <property name="name">
+                <cstring>spacer1</cstring>
+            </property>
+            <property name="orientation">
+                <enum>Vertical</enum>
+            </property>
+            <property name="sizeType">
+                <enum>Expanding</enum>
+            </property>
+            <property name="sizeHint">
+                <size>
+                    <width>21</width>
+                    <height>40</height>
+                </size>
+            </property>
+        </spacer>
+        <widget class="QLabel" row="6" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>textLabel1_2_2</cstring>
+            </property>
+            <property name="text">
+                <string>&lt;p align="center"&gt;&lt;font size="+1"&gt;cliquez ci-dessous&lt;/font&gt; &lt;/p&gt;</string>
+            </property>
+        </widget>
+        <spacer row="7" column="1">
+            <property name="name">
+                <cstring>spacer5</cstring>
+            </property>
+            <property name="orientation">
+                <enum>Vertical</enum>
+            </property>
+            <property name="sizeType">
+                <enum>Expanding</enum>
+            </property>
+            <property name="sizeHint">
+                <size>
+                    <width>20</width>
+                    <height>20</height>
+                </size>
+            </property>
+        </spacer>
+        <widget class="QLabel" row="4" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>MCFacteur</cstring>
+            </property>
+            <property name="text">
+                <string>&lt;p align="center"&gt;AFFE&lt;/p&gt;</string>
+            </property>
+        </widget>
+        <spacer row="5" column="1">
+            <property name="name">
+                <cstring>spacer6</cstring>
+            </property>
+            <property name="orientation">
+                <enum>Vertical</enum>
+            </property>
+            <property name="sizeType">
+                <enum>Expanding</enum>
+            </property>
+            <property name="sizeHint">
+                <size>
+                    <width>21</width>
+                    <height>31</height>
+                </size>
+            </property>
+        </spacer>
+        <spacer row="3" column="1">
+            <property name="name">
+                <cstring>spacer7</cstring>
+            </property>
+            <property name="orientation">
+                <enum>Vertical</enum>
+            </property>
+            <property name="sizeType">
+                <enum>Expanding</enum>
+            </property>
+            <property name="sizeHint">
+                <size>
+                    <width>21</width>
+                    <height>51</height>
+                </size>
+            </property>
+        </spacer>
+        <spacer row="0" column="1">
+            <property name="name">
+                <cstring>spacer8</cstring>
+            </property>
+            <property name="orientation">
+                <enum>Vertical</enum>
+            </property>
+            <property name="sizeType">
+                <enum>Expanding</enum>
+            </property>
+            <property name="sizeHint">
+                <size>
+                    <width>41</width>
+                    <height>51</height>
+                </size>
+            </property>
+        </spacer>
+        <widget class="QPushButton" row="10" column="0">
+            <property name="name">
+                <cstring>bSup</cstring>
+            </property>
+            <property name="text">
+                <string>&amp;Supprimer</string>
+            </property>
+            <property name="accel">
+                <string>Alt+S</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>suppression du mot clef</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="10" column="1">
+            <property name="name">
+                <cstring>bOk</cstring>
+            </property>
+            <property name="text">
+                <string>&amp;Valider</string>
+            </property>
+            <property name="accel">
+                <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="default">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>validation de la saisie</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="10" column="2">
+            <property name="name">
+                <cstring>bHelp</cstring>
+            </property>
+            <property name="text">
+                <string>&amp;Documentation</string>
+            </property>
+            <property name="accel">
+                <string>Alt+D</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>affichage documentation aster</string>
+            </property>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DMCListAjout</receiver>
+        <slot>BAjoutClicked()</slot>
+    </connection>
+    <connection>
+        <sender>bAjout</sender>
+        <signal>clicked()</signal>
+        <receiver>DMCListAjout</receiver>
+        <slot>BAjoutClicked()</slot>
+    </connection>
+    <connection>
+        <sender>bSup</sender>
+        <signal>clicked()</signal>
+        <receiver>DMCListAjout</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bHelp</sender>
+        <signal>clicked()</signal>
+        <receiver>DMCListAjout</receiver>
+        <slot>ViewDoc()</slot>
+    </connection>
+</connections>
+<slots>
+    <slot>BAjoutClicked()</slot>
+    <slot>BSupPressed()</slot>
+    <slot>ViewDoc()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desMacro.py b/Ui/desMacro.py
new file mode 100644 (file)
index 0000000..4850e07
--- /dev/null
@@ -0,0 +1,228 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desMacro.ui'
+#
+# Created: Mon Jun 2 15:35:12 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.16
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DMacro(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DMacro")
+
+        self.setMinimumSize(QSize(505,0))
+
+        DMacroLayout = QGridLayout(self,1,1,11,6,"DMacroLayout")
+
+        self.Commentaire = QLabel(self,"Commentaire")
+
+        DMacroLayout.addMultiCellWidget(self.Commentaire,1,1,0,2)
+
+        self.TWChoix = QTabWidget(self,"TWChoix")
+
+        self.MotClef = QWidget(self.TWChoix,"MotClef")
+        MotClefLayout = QGridLayout(self.MotClef,1,1,11,6,"MotClefLayout")
+
+        self.LBMCPermis = QListBox(self.MotClef,"LBMCPermis")
+        self.LBMCPermis.setMinimumSize(QSize(0,0))
+
+        MotClefLayout.addWidget(self.LBMCPermis,1,0)
+
+        self.LBRegles = QListBox(self.MotClef,"LBRegles")
+
+        MotClefLayout.addWidget(self.LBRegles,1,1)
+
+        self.textLabel1_2 = QLabel(self.MotClef,"textLabel1_2")
+
+        MotClefLayout.addWidget(self.textLabel1_2,0,1)
+
+        self.textLabel1 = QLabel(self.MotClef,"textLabel1")
+        self.textLabel1.setMinimumSize(QSize(0,0))
+
+        MotClefLayout.addWidget(self.textLabel1,0,0)
+        self.TWChoix.insertTab(self.MotClef,QString.fromLatin1(""))
+
+        self.Commande = QWidget(self.TWChoix,"Commande")
+        CommandeLayout = QGridLayout(self.Commande,1,1,11,6,"CommandeLayout")
+
+        self.LBNouvCommande = QListBox(self.Commande,"LBNouvCommande")
+
+        CommandeLayout.addMultiCellWidget(self.LBNouvCommande,2,2,0,3)
+
+        self.buttonGroup1 = QButtonGroup(self.Commande,"buttonGroup1")
+
+        self.RBalpha = QRadioButton(self.buttonGroup1,"RBalpha")
+        self.RBalpha.setGeometry(QRect(20,20,120,20))
+        self.RBalpha.setChecked(1)
+
+        self.RBGroupe = QRadioButton(self.buttonGroup1,"RBGroupe")
+        self.RBGroupe.setGeometry(QRect(20,40,120,20))
+
+        CommandeLayout.addMultiCellWidget(self.buttonGroup1,0,1,3,3)
+
+        self.textLabel1_4 = QLabel(self.Commande,"textLabel1_4")
+
+        CommandeLayout.addMultiCellWidget(self.textLabel1_4,0,0,0,1)
+
+        self.BNext = QToolButton(self.Commande,"BNext")
+        self.BNext.setMinimumSize(QSize(60,0))
+        self.BNext.setIconSet(QIconSet())
+
+        CommandeLayout.addWidget(self.BNext,1,2)
+
+        self.textLabel6 = QLabel(self.Commande,"textLabel6")
+        self.textLabel6.setMinimumSize(QSize(40,0))
+
+        CommandeLayout.addWidget(self.textLabel6,1,0)
+
+        self.textLabel4 = QLabel(self.Commande,"textLabel4")
+
+        CommandeLayout.addMultiCellWidget(self.textLabel4,3,3,0,3)
+
+        self.LEFiltre = QLineEdit(self.Commande,"LEFiltre")
+        self.LEFiltre.setMinimumSize(QSize(160,30))
+
+        CommandeLayout.addWidget(self.LEFiltre,1,1)
+        self.TWChoix.insertTab(self.Commande,QString.fromLatin1(""))
+
+        self.TabPage = QWidget(self.TWChoix,"TabPage")
+
+        self.groupBox1_2 = QGroupBox(self.TabPage,"groupBox1_2")
+        self.groupBox1_2.setGeometry(QRect(0,0,520,380))
+
+        self.textLabel3_2 = QLabel(self.groupBox1_2,"textLabel3_2")
+        self.textLabel3_2.setGeometry(QRect(10,230,320,31))
+
+        self.typeConcept = QLabel(self.groupBox1_2,"typeConcept")
+        self.typeConcept.setGeometry(QRect(360,230,130,31))
+
+        self.textLabel1_3_2_3 = QLabel(self.groupBox1_2,"textLabel1_3_2_3")
+        self.textLabel1_3_2_3.setGeometry(QRect(20,200,160,31))
+
+        self.textLabel1_3_3 = QLabel(self.groupBox1_2,"textLabel1_3_3")
+        self.textLabel1_3_3.setGeometry(QRect(20,50,150,31))
+
+        self.LENomConcept = QLineEdit(self.groupBox1_2,"LENomConcept")
+        self.LENomConcept.setGeometry(QRect(20,80,440,30))
+        self.TWChoix.insertTab(self.TabPage,QString.fromLatin1(""))
+
+        DMacroLayout.addMultiCellWidget(self.TWChoix,0,0,0,2)
+
+        self.bSup = QPushButton(self,"bSup")
+        self.bSup.setMinimumSize(QSize(0,30))
+        self.bSup.setAutoDefault(1)
+
+        DMacroLayout.addWidget(self.bSup,2,0)
+
+        self.bHelp = QPushButton(self,"bHelp")
+        self.bHelp.setMinimumSize(QSize(0,30))
+        self.bHelp.setAutoDefault(1)
+
+        DMacroLayout.addWidget(self.bHelp,2,2)
+
+        self.bOk = QPushButton(self,"bOk")
+        self.bOk.setMinimumSize(QSize(0,30))
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+
+        DMacroLayout.addWidget(self.bOk,2,1)
+
+        self.languageChange()
+
+        self.resize(QSize(521,499).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        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.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand)
+        self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand)
+        self.connect(self.BNext,SIGNAL("clicked()"),self.BNextPressed)
+        self.connect(self.LENomConcept,SIGNAL("returnPressed()"),self.LENomConceptReturnPressed)
+        self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc)
+
+        self.setTabOrder(self.LEFiltre,self.LENomConcept)
+        self.setTabOrder(self.LENomConcept,self.TWChoix)
+        self.setTabOrder(self.TWChoix,self.LBMCPermis)
+        self.setTabOrder(self.LBMCPermis,self.LBRegles)
+        self.setTabOrder(self.LBRegles,self.LBNouvCommande)
+        self.setTabOrder(self.LBNouvCommande,self.RBalpha)
+        self.setTabOrder(self.RBalpha,self.bSup)
+        self.setTabOrder(self.bSup,self.bHelp)
+        self.setTabOrder(self.bHelp,self.bOk)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("DMacro"))
+        self.Commentaire.setText(QString.null)
+        self.textLabel1_2.setText(self.__trUtf8("\x3c\x68\x33\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x3c\x75\x3e\x3c\x62\x3e\x52\xc3\xa9\x67\x6c\x65\x73\x3c\x2f\x62\x3e\x3c\x2f\x75\x3e\x3c\x2f\x70\x3e\x3c\x2f\x68\x33\x3e"))
+        self.textLabel1.setText(self.__tr("<h3><p align=\"center\"><u><b>Mots Clefs Permis</b></u></p></h3>"))
+        self.TWChoix.changeTab(self.MotClef,self.__tr("Ajouter Mot-Clef"))
+        self.buttonGroup1.setTitle(self.__tr("Affichage"))
+        self.RBalpha.setText(self.__trUtf8("\x61\x6c\x70\x68\x61\x62\xc3\xa9\x74\x69\x71\x75\x65"))
+        self.RBGroupe.setText(self.__tr("par groupe"))
+        self.textLabel1_4.setText(self.__tr("<b><u>Commandes :</u></b>"))
+        self.BNext.setText(self.__tr("Suivant"))
+        QToolTip.add(self.BNext,self.__tr("affiche la prochaine occurence"))
+        self.textLabel6.setText(self.__tr("Filtre"))
+        self.textLabel4.setText(self.__trUtf8("\x4c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x68\x6f\x69\x73\x69\x65\x20\x73\x65\x72\x61\x20\x61\x6a\x6f\x75\x74\xc3\xa9\x65\x20\x41\x50\x52\x45\x53\x20\x6c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x6f\x75\x72\x61\x6e\x74\x65"))
+        self.TWChoix.changeTab(self.Commande,self.__tr("Nouvelle Commande"))
+        self.groupBox1_2.setTitle(self.__tr("Concept"))
+        self.textLabel3_2.setText(self.__trUtf8("\x4c\x27\x6f\x70\xc3\xa9\x72\x61\x74\x65\x75\x72\x20\x63\x6f\x75\x72\x61\x6e\x74\x20\x72\x65\x74\x6f\x75\x72\x6e\x65\x20\x75\x6e\x20\x63\x6f\x6e\x63\x65\x70\x74\x20\x64\x65\x20\x74\x79\x70\x65\x20\x3a"))
+        self.typeConcept.setText(self.__tr("TypeDuConcept"))
+        self.textLabel1_3_2_3.setText(self.__tr("<u>Type du concept :</u>"))
+        self.textLabel1_3_3.setText(self.__tr("<u>Nom du concept :</u>"))
+        self.TWChoix.changeTab(self.TabPage,self.__tr("Nommer Concept"))
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(QKeySequence(self.__tr("Alt+S")))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(QKeySequence(self.__tr("Alt+D")))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(QKeySequence(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+
+
+    def LBNouvCommandeClicked(self):
+        print "DMacro.LBNouvCommandeClicked(): Not implemented yet"
+
+    def LEFiltreTextChanged(self):
+        print "DMacro.LEFiltreTextChanged(): Not implemented yet"
+
+    def LEfiltreReturnPressed(self):
+        print "DMacro.LEfiltreReturnPressed(): Not implemented yet"
+
+    def BSupPressed(self):
+        print "DMacro.BSupPressed(): Not implemented yet"
+
+    def BOkPressed(self):
+        print "DMacro.BOkPressed(): Not implemented yet"
+
+    def BuildTabCommand(self):
+        print "DMacro.BuildTabCommand(): Not implemented yet"
+
+    def BNextPressed(self):
+        print "DMacro.BNextPressed(): Not implemented yet"
+
+    def LENomConceptReturnPressed(self):
+        print "DMacro.LENomConceptReturnPressed(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DMacro.ViewDoc(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DMacro",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DMacro",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desMacro.ui b/Ui/desMacro.ui
new file mode 100644 (file)
index 0000000..d451544
--- /dev/null
@@ -0,0 +1,475 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DMacro</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DMacro</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>521</width>
+            <height>499</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>505</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DMacro</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QLabel" row="1" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>Commentaire</cstring>
+            </property>
+            <property name="text">
+                <string></string>
+            </property>
+        </widget>
+        <widget class="QTabWidget" row="0" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>TWChoix</cstring>
+            </property>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>MotClef</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Ajouter Mot-Clef</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QListBox" row="1" column="0">
+                        <property name="name">
+                            <cstring>LBMCPermis</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                    </widget>
+                    <widget class="QListBox" row="1" column="1">
+                        <property name="name">
+                            <cstring>LBRegles</cstring>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="0" column="1">
+                        <property name="name">
+                            <cstring>textLabel1_2</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;h3&gt;&lt;p align="center"&gt;&lt;u&gt;&lt;b&gt;Régles&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;/h3&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="0" column="0">
+                        <property name="name">
+                            <cstring>textLabel1</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&lt;h3&gt;&lt;p align="center"&gt;&lt;u&gt;&lt;b&gt;Mots Clefs Permis&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;/h3&gt;</string>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Commande</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Nouvelle Commande</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QListBox" row="2" column="0" rowspan="1" colspan="4">
+                        <property name="name">
+                            <cstring>LBNouvCommande</cstring>
+                        </property>
+                    </widget>
+                    <widget class="QButtonGroup" row="0" column="3" rowspan="2" colspan="1">
+                        <property name="name">
+                            <cstring>buttonGroup1</cstring>
+                        </property>
+                        <property name="title">
+                            <string>Affichage</string>
+                        </property>
+                        <widget class="QRadioButton">
+                            <property name="name">
+                                <cstring>RBalpha</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>20</x>
+                                    <y>20</y>
+                                    <width>120</width>
+                                    <height>20</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>alphabétique</string>
+                            </property>
+                            <property name="checked">
+                                <bool>true</bool>
+                            </property>
+                        </widget>
+                        <widget class="QRadioButton">
+                            <property name="name">
+                                <cstring>RBGroupe</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>20</x>
+                                    <y>40</y>
+                                    <width>120</width>
+                                    <height>20</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>par groupe</string>
+                            </property>
+                        </widget>
+                    </widget>
+                    <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>textLabel1_4</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;b&gt;&lt;u&gt;Commandes :&lt;/u&gt;&lt;/b&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QToolButton" row="1" column="2">
+                        <property name="name">
+                            <cstring>BNext</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>60</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>Suivant</string>
+                        </property>
+                        <property name="iconSet">
+                            <iconset></iconset>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>affiche la prochaine occurence</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="1" column="0">
+                        <property name="name">
+                            <cstring>textLabel6</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>40</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>Filtre</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="3" column="0" rowspan="1" colspan="4">
+                        <property name="name">
+                            <cstring>textLabel4</cstring>
+                        </property>
+                        <property name="text">
+                            <string>La commande choisie sera ajoutée APRES la commande courante</string>
+                        </property>
+                    </widget>
+                    <widget class="QLineEdit" row="1" column="1">
+                        <property name="name">
+                            <cstring>LEFiltre</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>160</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>TabPage</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Nommer Concept</string>
+                </attribute>
+                <widget class="QGroupBox">
+                    <property name="name">
+                        <cstring>groupBox1_2</cstring>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>0</x>
+                            <y>0</y>
+                            <width>520</width>
+                            <height>380</height>
+                        </rect>
+                    </property>
+                    <property name="title">
+                        <string>Concept</string>
+                    </property>
+                    <widget class="QLabel">
+                        <property name="name">
+                            <cstring>textLabel3_2</cstring>
+                        </property>
+                        <property name="geometry">
+                            <rect>
+                                <x>10</x>
+                                <y>230</y>
+                                <width>320</width>
+                                <height>31</height>
+                            </rect>
+                        </property>
+                        <property name="text">
+                            <string>L'opérateur courant retourne un concept de type :</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel">
+                        <property name="name">
+                            <cstring>typeConcept</cstring>
+                        </property>
+                        <property name="geometry">
+                            <rect>
+                                <x>360</x>
+                                <y>230</y>
+                                <width>130</width>
+                                <height>31</height>
+                            </rect>
+                        </property>
+                        <property name="text">
+                            <string>TypeDuConcept</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel">
+                        <property name="name">
+                            <cstring>textLabel1_3_2_3</cstring>
+                        </property>
+                        <property name="geometry">
+                            <rect>
+                                <x>20</x>
+                                <y>200</y>
+                                <width>160</width>
+                                <height>31</height>
+                            </rect>
+                        </property>
+                        <property name="text">
+                            <string>&lt;u&gt;Type du concept :&lt;/u&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel">
+                        <property name="name">
+                            <cstring>textLabel1_3_3</cstring>
+                        </property>
+                        <property name="geometry">
+                            <rect>
+                                <x>20</x>
+                                <y>50</y>
+                                <width>150</width>
+                                <height>31</height>
+                            </rect>
+                        </property>
+                        <property name="text">
+                            <string>&lt;u&gt;Nom du concept :&lt;/u&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QLineEdit">
+                        <property name="name">
+                            <cstring>LENomConcept</cstring>
+                        </property>
+                        <property name="geometry">
+                            <rect>
+                                <x>20</x>
+                                <y>80</y>
+                                <width>440</width>
+                                <height>30</height>
+                            </rect>
+                        </property>
+                    </widget>
+                </widget>
+            </widget>
+        </widget>
+        <widget class="QPushButton" row="2" column="0">
+            <property name="name">
+                <cstring>bSup</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Supprimer</string>
+            </property>
+            <property name="accel">
+                <string>Alt+S</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>suppression du mot clef</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="2" column="2">
+            <property name="name">
+                <cstring>bHelp</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Documentation</string>
+            </property>
+            <property name="accel">
+                <string>Alt+D</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>affichage documentation aster</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="2" column="1">
+            <property name="name">
+                <cstring>bOk</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Valider</string>
+            </property>
+            <property name="accel">
+                <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="default">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>validation de la saisie</string>
+            </property>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>LBNouvCommande</sender>
+        <signal>doubleClicked(QListBoxItem*)</signal>
+        <receiver>DMacro</receiver>
+        <slot>LBNouvCommandeClicked()</slot>
+    </connection>
+    <connection>
+        <sender>LEFiltre</sender>
+        <signal>textChanged(const QString&amp;)</signal>
+        <receiver>DMacro</receiver>
+        <slot>LEFiltreTextChanged()</slot>
+    </connection>
+    <connection>
+        <sender>LEFiltre</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DMacro</receiver>
+        <slot>LEfiltreReturnPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bSup</sender>
+        <signal>pressed()</signal>
+        <receiver>DMacro</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DMacro</receiver>
+        <slot>BOkPressed()</slot>
+    </connection>
+    <connection>
+        <sender>RBalpha</sender>
+        <signal>clicked()</signal>
+        <receiver>DMacro</receiver>
+        <slot>BuildTabCommand()</slot>
+    </connection>
+    <connection>
+        <sender>RBGroupe</sender>
+        <signal>clicked()</signal>
+        <receiver>DMacro</receiver>
+        <slot>BuildTabCommand()</slot>
+    </connection>
+    <connection>
+        <sender>BNext</sender>
+        <signal>clicked()</signal>
+        <receiver>DMacro</receiver>
+        <slot>BNextPressed()</slot>
+    </connection>
+    <connection>
+        <sender>LENomConcept</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DMacro</receiver>
+        <slot>LENomConceptReturnPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bHelp</sender>
+        <signal>clicked()</signal>
+        <receiver>DMacro</receiver>
+        <slot>ViewDoc()</slot>
+    </connection>
+</connections>
+<tabstops>
+    <tabstop>LEFiltre</tabstop>
+    <tabstop>LENomConcept</tabstop>
+    <tabstop>TWChoix</tabstop>
+    <tabstop>LBMCPermis</tabstop>
+    <tabstop>LBRegles</tabstop>
+    <tabstop>LBNouvCommande</tabstop>
+    <tabstop>RBalpha</tabstop>
+    <tabstop>bSup</tabstop>
+    <tabstop>bHelp</tabstop>
+    <tabstop>bOk</tabstop>
+</tabstops>
+<slots>
+    <slot>LBNouvCommandeClicked()</slot>
+    <slot>LEFiltreTextChanged()</slot>
+    <slot>LEfiltreReturnPressed()</slot>
+    <slot>BSupPressed()</slot>
+    <slot>BOkPressed()</slot>
+    <slot>BuildTabCommand()</slot>
+    <slot>BNextPressed()</slot>
+    <slot>LENomConceptReturnPressed()</slot>
+    <slot>ViewDoc()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desParam.py b/Ui/desParam.py
new file mode 100644 (file)
index 0000000..bd88658
--- /dev/null
@@ -0,0 +1,209 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desParam.ui'
+#
+# Created: ven mai 16 13:30:38 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DParam(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DParam")
+
+        self.setMinimumSize(QSize(505,0))
+
+        DParamLayout = QGridLayout(self,1,1,11,6,"DParamLayout")
+
+        self.Commentaire = QLabel(self,"Commentaire")
+        self.Commentaire.setFrameShape(QLabel.NoFrame)
+        self.Commentaire.setFrameShadow(QLabel.Plain)
+
+        DParamLayout.addMultiCellWidget(self.Commentaire,1,1,0,2)
+
+        self.TWChoix = QTabWidget(self,"TWChoix")
+
+        self.Valeur_Parametre = QWidget(self.TWChoix,"Valeur_Parametre")
+
+        self.textLabel2_2_2 = QLabel(self.Valeur_Parametre,"textLabel2_2_2")
+        self.textLabel2_2_2.setGeometry(QRect(80,11,231,89))
+
+        self.Commentaire_2 = QLabel(self.Valeur_Parametre,"Commentaire_2")
+        self.Commentaire_2.setGeometry(QRect(11,275,459,89))
+
+        self.lineEditNom = QLineEdit(self.Valeur_Parametre,"lineEditNom")
+        self.lineEditNom.setGeometry(QRect(80,106,231,31))
+        self.lineEditNom.setMinimumSize(QSize(231,31))
+
+        self.textLabel2_2 = QLabel(self.Valeur_Parametre,"textLabel2_2")
+        self.textLabel2_2.setGeometry(QRect(11,106,63,31))
+
+        self.textLabel2 = QLabel(self.Valeur_Parametre,"textLabel2")
+        self.textLabel2.setGeometry(QRect(11,143,63,31))
+
+        self.Commentaire2 = QLabel(self.Valeur_Parametre,"Commentaire2")
+        self.Commentaire2.setGeometry(QRect(11,180,459,89))
+
+        self.lineEditVal = QLineEdit(self.Valeur_Parametre,"lineEditVal")
+        self.lineEditVal.setGeometry(QRect(80,143,231,31))
+        self.lineEditVal.setMinimumSize(QSize(231,31))
+        self.TWChoix.insertTab(self.Valeur_Parametre,QString(""))
+
+        self.Commande = QWidget(self.TWChoix,"Commande")
+        CommandeLayout = QGridLayout(self.Commande,1,1,11,6,"CommandeLayout")
+
+        self.textLabel6 = QLabel(self.Commande,"textLabel6")
+        self.textLabel6.setMinimumSize(QSize(40,0))
+
+        CommandeLayout.addWidget(self.textLabel6,1,0)
+
+        self.LBNouvCommande = QListBox(self.Commande,"LBNouvCommande")
+
+        CommandeLayout.addMultiCellWidget(self.LBNouvCommande,2,2,0,3)
+
+        self.buttonGroup1 = QButtonGroup(self.Commande,"buttonGroup1")
+
+        self.RBGroupe = QRadioButton(self.buttonGroup1,"RBGroupe")
+        self.RBGroupe.setGeometry(QRect(20,40,101,20))
+
+        self.RBalpha = QRadioButton(self.buttonGroup1,"RBalpha")
+        self.RBalpha.setGeometry(QRect(20,20,120,20))
+        self.RBalpha.setChecked(1)
+
+        CommandeLayout.addMultiCellWidget(self.buttonGroup1,0,1,3,3)
+
+        self.textLabel1_4 = QLabel(self.Commande,"textLabel1_4")
+
+        CommandeLayout.addMultiCellWidget(self.textLabel1_4,0,0,0,1)
+
+        self.textLabel4 = QLabel(self.Commande,"textLabel4")
+
+        CommandeLayout.addMultiCellWidget(self.textLabel4,3,3,0,3)
+
+        self.BNext = QToolButton(self.Commande,"BNext")
+        self.BNext.setMinimumSize(QSize(60,0))
+        self.BNext.setIconSet(QIconSet())
+
+        CommandeLayout.addWidget(self.BNext,1,2)
+
+        self.LEFiltre = QLineEdit(self.Commande,"LEFiltre")
+        self.LEFiltre.setMinimumSize(QSize(160,30))
+
+        CommandeLayout.addWidget(self.LEFiltre,1,1)
+        self.TWChoix.insertTab(self.Commande,QString(""))
+
+        DParamLayout.addMultiCellWidget(self.TWChoix,0,0,0,2)
+
+        self.bOk = QPushButton(self,"bOk")
+        self.bOk.setMinimumSize(QSize(0,30))
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+
+        DParamLayout.addWidget(self.bOk,2,1)
+
+        self.bSup = QPushButton(self,"bSup")
+        self.bSup.setMinimumSize(QSize(0,30))
+        self.bSup.setAutoDefault(1)
+
+        DParamLayout.addWidget(self.bSup,2,0)
+
+        self.bHelp = QPushButton(self,"bHelp")
+        self.bHelp.setMinimumSize(QSize(0,30))
+        self.bHelp.setAutoDefault(1)
+
+        DParamLayout.addWidget(self.bHelp,2,2)
+
+        self.languageChange()
+
+        self.resize(QSize(505,483).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        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.lineEditVal,SIGNAL("returnPressed()"),self.BOkPressed)
+
+        self.setTabOrder(self.LEFiltre,self.TWChoix)
+        self.setTabOrder(self.TWChoix,self.lineEditNom)
+        self.setTabOrder(self.lineEditNom,self.lineEditVal)
+        self.setTabOrder(self.lineEditVal,self.LBNouvCommande)
+        self.setTabOrder(self.LBNouvCommande,self.RBalpha)
+        self.setTabOrder(self.RBalpha,self.bOk)
+        self.setTabOrder(self.bOk,self.bSup)
+        self.setTabOrder(self.bSup,self.bHelp)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("DComm"))
+        self.Commentaire.setText(QString.null)
+        self.textLabel2_2_2.setText(self.__tr("<u><b><p align=\"center\">Parametre</p></b></u>"))
+        self.Commentaire_2.setText(QString.null)
+        self.textLabel2_2.setText(self.__tr("<b> Nom: </b>"))
+        self.textLabel2.setText(self.__tr("<b> Valeur: </b>"))
+        self.Commentaire2.setText(self.__trUtf8("\x52\x65\x74\x6f\x75\x72\x20\x43\x68\x61\x72\x69\x6f\x74\x20\x64\x61\x6e\x73\x20\x75\x6e\x65\x20\x73\x6f\x6e\x65\x20\x64\x65\x20\x73\x61\x69\x73\x69\x65\x20\x70\x65\x72\x6d\x65\x74\x20\x64\x65\x20\x76\xc3\xa9\x72\x69\x66\x69\x65\x72\x20\x6c\x61\x20\x0a\x76\x61\x6c\x69\x64\x69\x74\xc3\xa9\x20\x64\x65\x20\x6c\x61\x20\x76\x61\x6c\x65\x75\x72\x20\x73\x61\x69\x73\x69\x65\x2e\x0a\x0a\x4c\x65\x73\x20\x6e\x6f\x75\x76\x65\x6c\x6c\x65\x73\x20\x76\x61\x6c\x65\x75\x72\x73\x20\x6e\x65\x20\x73\x65\x72\x6f\x6e\x74\x20\x70\x72\x69\x73\x65\x73\x20\x20\x65\x6e\x20\x63\x6f\x6d\x70\x74\x65\x20\x71\x75\x27\x61\x70\x72\xc3\xa8\x73\x20\x61\x76\x6f\x69\x72\x20\x0a\x61\x70\x70\x75\x79\xc3\xa9\x20\x73\x75\x72\x20\x20\x6c\x65\x20\x62\x6f\x75\x74\x6f\x6e\x20\x56\x61\x6c\x69\x64\x65\x72\x2e"))
+        self.TWChoix.changeTab(self.Valeur_Parametre,self.__tr("Valeur Parametre"))
+        self.textLabel6.setText(self.__tr("Filtre"))
+        self.buttonGroup1.setTitle(self.__tr("Affichage"))
+        self.RBGroupe.setText(self.__tr("par groupe"))
+        self.RBalpha.setText(self.__trUtf8("\x61\x6c\x70\x68\x61\x62\xc3\xa9\x74\x69\x71\x75\x65"))
+        self.textLabel1_4.setText(self.__tr("<b><u>Commandes :</u></b>"))
+        self.textLabel4.setText(self.__trUtf8("\x4c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x68\x6f\x69\x73\x69\x65\x20\x73\x65\x72\x61\x20\x61\x6a\x6f\x75\x74\xc3\xa9\x65\x20\x41\x50\x52\x45\x53\x20\x6c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x6f\x75\x72\x61\x6e\x74\x65"))
+        self.BNext.setText(self.__tr("Suivant"))
+        QToolTip.add(self.BNext,self.__tr("affiche la prochaine occurence"))
+        self.TWChoix.changeTab(self.Commande,self.__tr("Nouvelle Commande"))
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(self.__tr("Alt+S"))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(self.__tr("Alt+D"))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+
+
+    def LBNouvCommandeClicked(self):
+        print "DParam.LBNouvCommandeClicked(): Not implemented yet"
+
+    def LEFiltreTextChanged(self):
+        print "DParam.LEFiltreTextChanged(): Not implemented yet"
+
+    def LEfiltreReturnPressed(self):
+        print "DParam.LEfiltreReturnPressed(): Not implemented yet"
+
+    def BSupPressed(self):
+        print "DParam.BSupPressed(): Not implemented yet"
+
+    def LENomConceptReturnPressed(self):
+        print "DParam.LENomConceptReturnPressed(): Not implemented yet"
+
+    def BOkPressed(self):
+        print "DParam.BOkPressed(): Not implemented yet"
+
+    def BuildTabCommand(self):
+        print "DParam.BuildTabCommand(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DParam.ViewDoc(): Not implemented yet"
+
+    def BNextPressed(self):
+        print "DParam.BNextPressed(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DParam",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DParam",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desParam.ui b/Ui/desParam.ui
new file mode 100644 (file)
index 0000000..7aa81f8
--- /dev/null
@@ -0,0 +1,508 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DParam</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DParam</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>505</width>
+            <height>483</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>505</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DComm</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QLabel" row="1" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>Commentaire</cstring>
+            </property>
+            <property name="frameShape">
+                <enum>NoFrame</enum>
+            </property>
+            <property name="frameShadow">
+                <enum>Plain</enum>
+            </property>
+            <property name="text">
+                <string></string>
+            </property>
+        </widget>
+        <widget class="QTabWidget" row="0" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>TWChoix</cstring>
+            </property>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Valeur_Parametre</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Valeur Parametre</string>
+                </attribute>
+                <widget class="QLabel">
+                    <property name="name">
+                        <cstring>textLabel2_2_2</cstring>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>80</x>
+                            <y>11</y>
+                            <width>231</width>
+                            <height>89</height>
+                        </rect>
+                    </property>
+                    <property name="text">
+                        <string>&lt;u&gt;&lt;b&gt;&lt;p align="center"&gt;Parametre&lt;/p&gt;&lt;/b&gt;&lt;/u&gt;</string>
+                    </property>
+                </widget>
+                <widget class="QLabel">
+                    <property name="name">
+                        <cstring>Commentaire_2</cstring>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>11</x>
+                            <y>275</y>
+                            <width>459</width>
+                            <height>89</height>
+                        </rect>
+                    </property>
+                    <property name="text">
+                        <string></string>
+                    </property>
+                </widget>
+                <widget class="QLineEdit">
+                    <property name="name">
+                        <cstring>lineEditNom</cstring>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>80</x>
+                            <y>106</y>
+                            <width>231</width>
+                            <height>31</height>
+                        </rect>
+                    </property>
+                    <property name="minimumSize">
+                        <size>
+                            <width>231</width>
+                            <height>31</height>
+                        </size>
+                    </property>
+                </widget>
+                <spacer>
+                    <property name="name">
+                        <cstring>spacer1</cstring>
+                    </property>
+                    <property name="orientation">
+                        <enum>Horizontal</enum>
+                    </property>
+                    <property name="sizeType">
+                        <enum>Expanding</enum>
+                    </property>
+                    <property name="sizeHint">
+                        <size>
+                            <width>153</width>
+                            <height>20</height>
+                        </size>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>317</x>
+                            <y>111</y>
+                            <width>153</width>
+                            <height>20</height>
+                        </rect>
+                    </property>
+                </spacer>
+                <spacer>
+                    <property name="name">
+                        <cstring>spacer2</cstring>
+                    </property>
+                    <property name="orientation">
+                        <enum>Horizontal</enum>
+                    </property>
+                    <property name="sizeType">
+                        <enum>Expanding</enum>
+                    </property>
+                    <property name="sizeHint">
+                        <size>
+                            <width>153</width>
+                            <height>20</height>
+                        </size>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>317</x>
+                            <y>148</y>
+                            <width>153</width>
+                            <height>20</height>
+                        </rect>
+                    </property>
+                </spacer>
+                <widget class="QLabel">
+                    <property name="name">
+                        <cstring>textLabel2_2</cstring>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>11</x>
+                            <y>106</y>
+                            <width>63</width>
+                            <height>31</height>
+                        </rect>
+                    </property>
+                    <property name="text">
+                        <string>&lt;b&gt; Nom: &lt;/b&gt;</string>
+                    </property>
+                </widget>
+                <widget class="QLabel">
+                    <property name="name">
+                        <cstring>textLabel2</cstring>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>11</x>
+                            <y>143</y>
+                            <width>63</width>
+                            <height>31</height>
+                        </rect>
+                    </property>
+                    <property name="text">
+                        <string>&lt;b&gt; Valeur: &lt;/b&gt;</string>
+                    </property>
+                </widget>
+                <widget class="QLabel">
+                    <property name="name">
+                        <cstring>Commentaire2</cstring>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>11</x>
+                            <y>180</y>
+                            <width>459</width>
+                            <height>89</height>
+                        </rect>
+                    </property>
+                    <property name="text">
+                        <string>Retour Chariot dans une sone de saisie permet de vérifier la 
+validité de la valeur saisie.
+
+Les nouvelles valeurs ne seront prises  en compte qu'après avoir 
+appuyé sur  le bouton Valider.</string>
+                    </property>
+                </widget>
+                <widget class="QLineEdit">
+                    <property name="name">
+                        <cstring>lineEditVal</cstring>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>80</x>
+                            <y>143</y>
+                            <width>231</width>
+                            <height>31</height>
+                        </rect>
+                    </property>
+                    <property name="minimumSize">
+                        <size>
+                            <width>231</width>
+                            <height>31</height>
+                        </size>
+                    </property>
+                </widget>
+            </widget>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Commande</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Nouvelle Commande</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QLabel" row="1" column="0">
+                        <property name="name">
+                            <cstring>textLabel6</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>40</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>Filtre</string>
+                        </property>
+                    </widget>
+                    <widget class="QListBox" row="2" column="0" rowspan="1" colspan="4">
+                        <property name="name">
+                            <cstring>LBNouvCommande</cstring>
+                        </property>
+                    </widget>
+                    <widget class="QButtonGroup" row="0" column="3" rowspan="2" colspan="1">
+                        <property name="name">
+                            <cstring>buttonGroup1</cstring>
+                        </property>
+                        <property name="title">
+                            <string>Affichage</string>
+                        </property>
+                        <widget class="QRadioButton">
+                            <property name="name">
+                                <cstring>RBGroupe</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>20</x>
+                                    <y>40</y>
+                                    <width>101</width>
+                                    <height>20</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>par groupe</string>
+                            </property>
+                        </widget>
+                        <widget class="QRadioButton">
+                            <property name="name">
+                                <cstring>RBalpha</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>20</x>
+                                    <y>20</y>
+                                    <width>120</width>
+                                    <height>20</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>alphabétique</string>
+                            </property>
+                            <property name="checked">
+                                <bool>true</bool>
+                            </property>
+                        </widget>
+                    </widget>
+                    <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>textLabel1_4</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;b&gt;&lt;u&gt;Commandes :&lt;/u&gt;&lt;/b&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="3" column="0" rowspan="1" colspan="4">
+                        <property name="name">
+                            <cstring>textLabel4</cstring>
+                        </property>
+                        <property name="text">
+                            <string>La commande choisie sera ajoutée APRES la commande courante</string>
+                        </property>
+                    </widget>
+                    <widget class="QToolButton" row="1" column="2">
+                        <property name="name">
+                            <cstring>BNext</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>60</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>Suivant</string>
+                        </property>
+                        <property name="iconSet">
+                            <iconset></iconset>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>affiche la prochaine occurence</string>
+                        </property>
+                    </widget>
+                    <widget class="QLineEdit" row="1" column="1">
+                        <property name="name">
+                            <cstring>LEFiltre</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>160</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+        </widget>
+        <widget class="QPushButton" row="2" column="1">
+            <property name="name">
+                <cstring>bOk</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Valider</string>
+            </property>
+            <property name="accel">
+                <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="default">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>validation de la saisie</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="2" column="0">
+            <property name="name">
+                <cstring>bSup</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Supprimer</string>
+            </property>
+            <property name="accel">
+                <string>Alt+S</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>suppression du mot clef</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="2" column="2">
+            <property name="name">
+                <cstring>bHelp</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Documentation</string>
+            </property>
+            <property name="accel">
+                <string>Alt+D</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>affichage documentation aster</string>
+            </property>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>LBNouvCommande</sender>
+        <signal>doubleClicked(QListBoxItem*)</signal>
+        <receiver>DParam</receiver>
+        <slot>LBNouvCommandeClicked()</slot>
+    </connection>
+    <connection>
+        <sender>LEFiltre</sender>
+        <signal>textChanged(const QString&amp;)</signal>
+        <receiver>DParam</receiver>
+        <slot>LEFiltreTextChanged()</slot>
+    </connection>
+    <connection>
+        <sender>LEFiltre</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DParam</receiver>
+        <slot>LEfiltreReturnPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bSup</sender>
+        <signal>pressed()</signal>
+        <receiver>DParam</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DParam</receiver>
+        <slot>BOkPressed()</slot>
+    </connection>
+    <connection>
+        <sender>RBGroupe</sender>
+        <signal>clicked()</signal>
+        <receiver>DParam</receiver>
+        <slot>BuildTabCommand()</slot>
+    </connection>
+    <connection>
+        <sender>RBalpha</sender>
+        <signal>clicked()</signal>
+        <receiver>DParam</receiver>
+        <slot>BuildTabCommand()</slot>
+    </connection>
+    <connection>
+        <sender>bHelp</sender>
+        <signal>clicked()</signal>
+        <receiver>DParam</receiver>
+        <slot>ViewDoc()</slot>
+    </connection>
+    <connection>
+        <sender>BNext</sender>
+        <signal>pressed()</signal>
+        <receiver>DParam</receiver>
+        <slot>BNextPressed()</slot>
+    </connection>
+    <connection>
+        <sender>lineEditVal</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DParam</receiver>
+        <slot>BOkPressed()</slot>
+    </connection>
+</connections>
+<tabstops>
+    <tabstop>LEFiltre</tabstop>
+    <tabstop>TWChoix</tabstop>
+    <tabstop>lineEditNom</tabstop>
+    <tabstop>lineEditVal</tabstop>
+    <tabstop>LBNouvCommande</tabstop>
+    <tabstop>RBalpha</tabstop>
+    <tabstop>bOk</tabstop>
+    <tabstop>bSup</tabstop>
+    <tabstop>bHelp</tabstop>
+</tabstops>
+<slots>
+    <slot>LBNouvCommandeClicked()</slot>
+    <slot>LEFiltreTextChanged()</slot>
+    <slot>LEfiltreReturnPressed()</slot>
+    <slot>BSupPressed()</slot>
+    <slot>LENomConceptReturnPressed()</slot>
+    <slot>BOkPressed()</slot>
+    <slot>BuildTabCommand()</slot>
+    <slot>ViewDoc() </slot>
+    <slot>BNextPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desPlusieursBase.py b/Ui/desPlusieursBase.py
new file mode 100644 (file)
index 0000000..dc7ca0f
--- /dev/null
@@ -0,0 +1,293 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desPlusieursBase.ui'
+#
+# Created: lun mai 5 17:43:44 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+image0_data = \
+    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
+    "\x49\x48\x44\x52\x00\x00\x00\x14\x00\x00\x00\x14" \
+    "\x08\x06\x00\x00\x00\x8d\x89\x1d\x0d\x00\x00\x00" \
+    "\x8d\x49\x44\x41\x54\x38\x8d\xb5\xd3\xdb\x0d\x80" \
+    "\x20\x0c\x05\xd0\x5b\xe3\x3a\x8e\xe2\x4c\x86\x99" \
+    "\x18\x85\x81\xea\x87\xc6\xc4\xd2\x56\x28\xd8\x84" \
+    "\x0f\x5e\x27\x17\x50\x02\x63\x6a\x2d\x73\xb9\x1f" \
+    "\xc0\xb5\x69\x15\x39\x17\xc3\xa0\x7e\xf0\xae\x9c" \
+    "\xca\xab\xbf\x1f\x5b\xb5\xa6\xed\xc8\x0c\x02\x83" \
+    "\x34\x20\x06\x02\x00\x81\x65\xc2\x38\x28\x30\x2f" \
+    "\xa9\x77\xdd\x36\xc6\xa0\x67\xa7\x78\x14\x3f\xa1" \
+    "\x85\xf9\x5b\xe6\x61\x76\xc2\x20\xa6\x83\x03\x58" \
+    "\x0d\x0e\x62\x7a\xc2\x01\xcc\x04\xa3\xd8\x55\x2c" \
+    "\x1a\xc0\x39\x95\xab\x27\xe7\x5a\x9a\x3e\x18\x47" \
+    "\xdd\xef\x30\x72\xec\xef\x5f\xaf\xb3\x4e\xcb\x01" \
+    "\x65\xf7\x82\x6b\x45\x7b\x00\x00\x00\x00\x49\x45" \
+    "\x4e\x44\xae\x42\x60\x82"
+image1_data = \
+    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
+    "\x49\x48\x44\x52\x00\x00\x00\x21\x00\x00\x00\x0e" \
+    "\x08\x06\x00\x00\x00\xa1\x1e\x75\x8c\x00\x00\x00" \
+    "\xc7\x49\x44\x41\x54\x38\x8d\xcd\x94\x59\x0e\xc3" \
+    "\x20\x0c\x44\x71\xd5\x7b\xc7\x3d\xf9\xf4\x07\xd3" \
+    "\x31\xb1\x59\xa2\x28\xaa\x25\x44\x48\xbc\x3c\xc6" \
+    "\x81\x52\xfe\xc0\xe4\x42\x0c\xee\xce\xb9\x12\xe0" \
+    "\x8a\x02\x39\x83\x88\x48\xf5\xdf\x02\xc9\x9c\x11" \
+    "\xf8\x60\x04\x30\x01\x19\x05\x4a\xe8\x68\xc5\x6a" \
+    "\xc2\x06\xc0\x6b\x4b\x10\x91\x11\xc8\x02\x87\x4f" \
+    "\x3a\x52\xa5\x87\x75\x71\x23\x89\x7e\x40\x39\xc4" \
+    "\x6b\x50\xd8\x86\x5b\x07\xf5\x40\x0a\x45\x00\x53" \
+    "\x33\x08\x93\xcf\x86\x74\xa3\x00\x28\xd4\x92\xde" \
+    "\xef\x04\x62\x6b\x55\x9d\xfe\x48\xac\x84\x2b\x1a" \
+    "\x6d\xaa\xe6\x85\x01\x55\x03\x3b\x99\xc5\x00\x9f" \
+    "\x70\xce\xda\x11\x1a\xab\x41\x3b\x6f\x6a\x70\xd1" \
+    "\x18\xe0\x08\xe6\xfd\x8b\xc5\x1d\x5d\x00\xa0\xf6" \
+    "\x14\x55\x6d\x1f\xf9\xb9\xbe\x49\x52\xaa\xbc\x37" \
+    "\x21\xf8\xf8\xb6\xf6\x24\xc5\x57\xef\x89\x47\xaf" \
+    "\xed\xf4\x8c\x5e\x60\xb8\xdf\xbe\xb8\x1d\x6d\xab" \
+    "\x9a\xff\x99\x27\x00\x00\x00\x00\x49\x45\x4e\x44" \
+    "\xae\x42\x60\x82"
+image2_data = \
+    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
+    "\x49\x48\x44\x52\x00\x00\x00\x21\x00\x00\x00\x0e" \
+    "\x08\x06\x00\x00\x00\xa1\x1e\x75\x8c\x00\x00\x00" \
+    "\xcf\x49\x44\x41\x54\x38\x8d\xd5\x94\xdb\x0e\xc3" \
+    "\x20\x0c\x43\xed\xfd\xf8\xd8\x97\xbb\x0f\x34\x5b" \
+    "\x48\x08\x45\xd5\x1e\xb6\x48\x88\xf4\x12\xe7\x60" \
+    "\x01\xc0\x0f\x04\x6f\xd6\xe9\x9b\xba\x77\x20\x04" \
+    "\x80\x92\x4a\x10\x32\xc9\x2e\xfb\xd8\xc7\xd5\xca" \
+    "\xbc\xc0\x25\x40\x00\x99\xe9\x57\x84\x95\x68\xfe" \
+    "\x7f\x06\xc0\xde\xd1\xde\xb3\x2b\x4a\x1e\xc4\xea" \
+    "\x82\x4b\x9e\x74\x09\x71\x65\xbd\x01\xf8\x55\x27" \
+    "\xf7\x8a\x72\x01\xe0\xa3\x12\x9f\x34\x5a\x01\x7c" \
+    "\x54\x3b\xaf\xdc\x98\x3d\x0f\x71\x09\xd1\x5a\x33" \
+    "\x1b\x47\x1f\x47\x07\x2c\x17\x49\x4a\x82\x33\x8f" \
+    "\x61\x78\x20\x3a\x88\x17\xe6\x73\x06\xb1\xf0\x8b" \
+    "\x07\xba\x03\xe6\x02\xc9\xb8\x31\x07\x7e\x37\xe0" \
+    "\x20\x9e\x67\xe3\x38\x67\x10\x97\x7b\x17\xde\x80" \
+    "\xc1\x85\xad\x38\x69\x5a\x51\xd5\x22\xc8\x2c\xe7" \
+    "\x79\x12\xe2\xfe\xd8\xbe\x83\x76\x20\x92\xf5\x2b" \
+    "\x18\x20\xdd\x11\xbb\x10\xe5\x65\xb5\x3a\x5a\x3b" \
+    "\xba\xff\x13\x07\x13\xd6\x6f\xa6\x98\x18\x57\x06" \
+    "\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82"
+
+class DPlusBase(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        self.image0 = QPixmap()
+        self.image0.loadFromData(image0_data,"PNG")
+        self.image1 = QPixmap()
+        self.image1.loadFromData(image1_data,"PNG")
+        self.image2 = QPixmap()
+        self.image2.loadFromData(image2_data,"PNG")
+        if not name:
+            self.setName("DPlusBase")
+
+        self.setMinimumSize(QSize(350,0))
+        self.setIcon(self.image0)
+
+        DPlusBaseLayout = QGridLayout(self,1,1,11,6,"DPlusBaseLayout")
+
+        self.tabuniqueinto = QTabWidget(self,"tabuniqueinto")
+
+        self.Widget8 = QWidget(self.tabuniqueinto,"Widget8")
+        Widget8Layout = QGridLayout(self.Widget8,1,1,11,6,"Widget8Layout")
+
+        self.textLabel1 = QLabel(self.Widget8,"textLabel1")
+
+        Widget8Layout.addWidget(self.textLabel1,0,0)
+
+        self.LBValeurs = QListBox(self.Widget8,"LBValeurs")
+        self.LBValeurs.setMinimumSize(QSize(200,0))
+
+        Widget8Layout.addMultiCellWidget(self.LBValeurs,1,9,0,0)
+        spacer4 = QSpacerItem(21,231,QSizePolicy.Minimum,QSizePolicy.Expanding)
+        Widget8Layout.addMultiCell(spacer4,5,9,1,2)
+        spacer3_3 = QSpacerItem(31,30,QSizePolicy.Minimum,QSizePolicy.Expanding)
+        Widget8Layout.addMultiCell(spacer3_3,0,0,1,2)
+
+        self.BAjout1Val = QToolButton(self.Widget8,"BAjout1Val")
+        self.BAjout1Val.setSizePolicy(QSizePolicy(0,0,0,0,self.BAjout1Val.sizePolicy().hasHeightForWidth()))
+        self.BAjout1Val.setMinimumSize(QSize(40,30))
+        self.BAjout1Val.setIconSet(QIconSet(self.image1))
+
+        Widget8Layout.addMultiCellWidget(self.BAjout1Val,2,2,1,2)
+        spacer5 = QSpacerItem(150,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
+        Widget8Layout.addMultiCell(spacer5,8,8,2,4)
+
+        layout7 = QVBoxLayout(None,0,6,"layout7")
+
+        self.bParam = QPushButton(self.Widget8,"bParam")
+        self.bParam.setMinimumSize(QSize(0,30))
+        self.bParam.setAutoDefault(1)
+        layout7.addWidget(self.bParam)
+
+        self.bImport = QPushButton(self.Widget8,"bImport")
+        self.bImport.setMinimumSize(QSize(0,30))
+        self.bImport.setAutoDefault(1)
+        layout7.addWidget(self.bImport)
+
+        Widget8Layout.addMultiCellLayout(layout7,7,8,5,5)
+        spacer3 = QSpacerItem(31,50,QSizePolicy.Minimum,QSizePolicy.Expanding)
+        Widget8Layout.addItem(spacer3,6,5)
+        spacer3_2 = QSpacerItem(31,50,QSizePolicy.Minimum,QSizePolicy.Expanding)
+        Widget8Layout.addItem(spacer3_2,9,5)
+
+        self.BSalome = QToolButton(self.Widget8,"BSalome")
+        self.BSalome.setSizePolicy(QSizePolicy(0,0,0,0,self.BSalome.sizePolicy().hasHeightForWidth()))
+        self.BSalome.setMinimumSize(QSize(40,30))
+        self.BSalome.setIconSet(QIconSet(self.image0))
+
+        Widget8Layout.addWidget(self.BSalome,4,3)
+
+        self.BView2D = QPushButton(self.Widget8,"BView2D")
+        self.BView2D.setMinimumSize(QSize(120,30))
+
+        Widget8Layout.addMultiCellWidget(self.BView2D,4,4,4,5)
+
+        layout12 = QHBoxLayout(None,0,6,"layout12")
+
+        self.textLabel1_2 = QLabel(self.Widget8,"textLabel1_2")
+        layout12.addWidget(self.textLabel1_2)
+        spacer6 = QSpacerItem(111,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
+        layout12.addItem(spacer6)
+
+        Widget8Layout.addMultiCellLayout(layout12,0,1,3,5)
+
+        self.LEValeur = QLineEdit(self.Widget8,"LEValeur")
+        self.LEValeur.setSizePolicy(QSizePolicy(1,1,0,0,self.LEValeur.sizePolicy().hasHeightForWidth()))
+        self.LEValeur.setMinimumSize(QSize(220,30))
+
+        Widget8Layout.addMultiCellWidget(self.LEValeur,2,3,3,5)
+
+        self.BSup1Val = QToolButton(self.Widget8,"BSup1Val")
+        self.BSup1Val.setSizePolicy(QSizePolicy(0,0,0,0,self.BSup1Val.sizePolicy().hasHeightForWidth()))
+        self.BSup1Val.setMinimumSize(QSize(40,30))
+        self.BSup1Val.setIconSet(QIconSet(self.image2))
+
+        Widget8Layout.addMultiCellWidget(self.BSup1Val,3,4,1,2)
+
+        self.Commentaire = QLabel(self.Widget8,"Commentaire")
+        self.Commentaire.setMinimumSize(QSize(0,60))
+
+        Widget8Layout.addMultiCellWidget(self.Commentaire,5,5,3,5)
+
+        layout6 = QHBoxLayout(None,0,6,"layout6")
+
+        self.bSup = QPushButton(self.Widget8,"bSup")
+        self.bSup.setMinimumSize(QSize(0,30))
+        self.bSup.setAutoDefault(1)
+        layout6.addWidget(self.bSup)
+
+        self.bOk = QPushButton(self.Widget8,"bOk")
+        self.bOk.setMinimumSize(QSize(0,30))
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+        layout6.addWidget(self.bOk)
+
+        self.bHelp = QPushButton(self.Widget8,"bHelp")
+        self.bHelp.setMinimumSize(QSize(0,30))
+        self.bHelp.setAutoDefault(1)
+        layout6.addWidget(self.bHelp)
+
+        Widget8Layout.addMultiCellLayout(layout6,10,10,0,5)
+        self.tabuniqueinto.insertTab(self.Widget8,QString(""))
+
+        DPlusBaseLayout.addWidget(self.tabuniqueinto,0,0)
+
+        self.languageChange()
+
+        self.resize(QSize(552,480).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        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.bParam,SIGNAL("clicked()"),self.BParametresPressed)
+        self.connect(self.bImport,SIGNAL("clicked()"),self.BImportPressed)
+        self.connect(self.BAjout1Val,SIGNAL("clicked()"),self.Ajout1Valeur)
+        self.connect(self.BSup1Val,SIGNAL("clicked()"),self.Sup1Valeur)
+        self.connect(self.LEValeur,SIGNAL("returnPressed()"),self.LEValeurPressed)
+        self.connect(self.BSalome,SIGNAL("clicked()"),self.BSalomePressed)
+        self.connect(self.BView2D,SIGNAL("clicked()"),self.BView2DPressed)
+
+        self.setTabOrder(self.LEValeur,self.tabuniqueinto)
+        self.setTabOrder(self.tabuniqueinto,self.bSup)
+        self.setTabOrder(self.bSup,self.bOk)
+        self.setTabOrder(self.bOk,self.bHelp)
+        self.setTabOrder(self.bHelp,self.bParam)
+        self.setTabOrder(self.bParam,self.bImport)
+        self.setTabOrder(self.bImport,self.LBValeurs)
+        self.setTabOrder(self.LBValeurs,self.BView2D)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("DUnIn"))
+        self.textLabel1.setText(self.__tr("<u><font size=\"+1\">Valeur(s) actuelle(s)</font></u>"))
+        self.BAjout1Val.setText(QString.null)
+        QToolTip.add(self.BAjout1Val,self.__trUtf8("\x61\x6a\x6f\x75\x74\x65\x20\x6c\x61\x20\x76\x61\x6c\x65\x75\x72\x20\x73\x61\x69\x73\x69\x65\x20\x73\x6f\x75\x73\x20\x6c\x20\x6f\x63\x63\x75\x72\x65\x6e\x63\x65\x20\x73\x65\x6c\x65\x63\x74\x69\x6f\x6e\x6e\xc3\xa9\x65\x20\x28\x65\x6e\x20\x66\x69\x6e\x20\x64\x65\x20\x6c\x69\x73\x74\x65\x20\x73\x69\x20\x69\x6c\x20\x6e\x20\x79\x20\x61\x20\x70\x61\x73\x20\x64\x65\x20\x73\x65\x6c\x65\x63\x74\x69\x6f\x6e\x29"))
+        self.bParam.setText(self.__tr("&Parametres"))
+        self.bParam.setAccel(self.__tr("Alt+P"))
+        QToolTip.add(self.bParam,self.__tr("suppression du mot clef"))
+        self.bImport.setText(self.__tr("&Importer"))
+        self.bImport.setAccel(self.__tr("Alt+I"))
+        QToolTip.add(self.bImport,self.__tr("suppression du mot clef"))
+        self.BSalome.setText(QString.null)
+        QToolTip.add(self.BSalome,self.__trUtf8("\x61\x6a\x6f\x75\x74\x65\x20\x6c\x61\x20\x76\x61\x6c\x65\x75\x72\x20\x73\x61\x69\x73\x69\x65\x20\x73\x6f\x75\x73\x20\x6c\x20\x6f\x63\x63\x75\x72\x65\x6e\x63\x65\x20\x73\x65\x6c\x65\x63\x74\x69\x6f\x6e\x6e\xc3\xa9\x65\x20\x28\x65\x6e\x20\x66\x69\x6e\x20\x64\x65\x20\x6c\x69\x73\x74\x65\x20\x73\x69\x20\x69\x6c\x20\x6e\x20\x79\x20\x61\x20\x70\x61\x73\x20\x64\x65\x20\x73\x65\x6c\x65\x63\x74\x69\x6f\x6e\x29"))
+        self.BView2D.setText(self.__tr("Visualiser"))
+        self.textLabel1_2.setText(self.__tr("<font size=\"+1\">Valeur</font>"))
+        self.BSup1Val.setText(QString.null)
+        QToolTip.add(self.BSup1Val,self.__tr("enleve l occurence selectionnee"))
+        self.Commentaire.setText(QString.null)
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(self.__tr("Alt+S"))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(self.__tr("Alt+D"))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+        self.tabuniqueinto.changeTab(self.Widget8,self.__tr("Saisir Valeur"))
+
+
+    def BSupPressed(self):
+        print "DPlusBase.BSupPressed(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DPlusBase.ViewDoc(): Not implemented yet"
+
+    def BOkPourListePressed(self):
+        print "DPlusBase.BOkPourListePressed(): Not implemented yet"
+
+    def BParametresPressed(self):
+        print "DPlusBase.BParametresPressed(): Not implemented yet"
+
+    def LEValeurPressed(self):
+        print "DPlusBase.LEValeurPressed(): Not implemented yet"
+
+    def Ajout1Valeur(self):
+        print "DPlusBase.Ajout1Valeur(): Not implemented yet"
+
+    def Sup1Valeur(self):
+        print "DPlusBase.Sup1Valeur(): Not implemented yet"
+
+    def BImportPressed(self):
+        print "DPlusBase.BImportPressed(): Not implemented yet"
+
+    def BSalomePressed(self):
+        print "DPlusBase.BSalomePressed(): Not implemented yet"
+
+    def BView2DPressed(self):
+        print "DPlusBase.BView2DPressed(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DPlusBase",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DPlusBase",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desPlusieursBase.ui b/Ui/desPlusieursBase.ui
new file mode 100644 (file)
index 0000000..a6a4eb0
--- /dev/null
@@ -0,0 +1,556 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DPlusBase</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DPlusBase</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>552</width>
+            <height>480</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>350</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DUnIn</string>
+    </property>
+    <property name="icon">
+        <pixmap>image0</pixmap>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QTabWidget" row="0" column="0">
+            <property name="name">
+                <cstring>tabuniqueinto</cstring>
+            </property>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Widget8</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Saisir Valeur</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QLabel" row="0" column="0">
+                        <property name="name">
+                            <cstring>textLabel1</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;u&gt;&lt;font size="+1"&gt;Valeur(s) actuelle(s)&lt;/font&gt;&lt;/u&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QListBox" row="1" column="0" rowspan="9" colspan="1">
+                        <property name="name">
+                            <cstring>LBValeurs</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>200</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                    </widget>
+                    <spacer row="5" column="1" rowspan="5" colspan="2">
+                        <property name="name">
+                            <cstring>spacer4</cstring>
+                        </property>
+                        <property name="orientation">
+                            <enum>Vertical</enum>
+                        </property>
+                        <property name="sizeType">
+                            <enum>Expanding</enum>
+                        </property>
+                        <property name="sizeHint">
+                            <size>
+                                <width>21</width>
+                                <height>231</height>
+                            </size>
+                        </property>
+                    </spacer>
+                    <spacer row="0" column="1" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>spacer3_3</cstring>
+                        </property>
+                        <property name="orientation">
+                            <enum>Vertical</enum>
+                        </property>
+                        <property name="sizeType">
+                            <enum>Expanding</enum>
+                        </property>
+                        <property name="sizeHint">
+                            <size>
+                                <width>31</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                    </spacer>
+                    <widget class="QToolButton" row="2" column="1" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>BAjout1Val</cstring>
+                        </property>
+                        <property name="sizePolicy">
+                            <sizepolicy>
+                                <hsizetype>0</hsizetype>
+                                <vsizetype>0</vsizetype>
+                                <horstretch>0</horstretch>
+                                <verstretch>0</verstretch>
+                            </sizepolicy>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>40</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string></string>
+                        </property>
+                        <property name="iconSet">
+                            <iconset>image1</iconset>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)</string>
+                        </property>
+                    </widget>
+                    <spacer row="8" column="2" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>spacer5</cstring>
+                        </property>
+                        <property name="orientation">
+                            <enum>Horizontal</enum>
+                        </property>
+                        <property name="sizeType">
+                            <enum>Expanding</enum>
+                        </property>
+                        <property name="sizeHint">
+                            <size>
+                                <width>150</width>
+                                <height>20</height>
+                            </size>
+                        </property>
+                    </spacer>
+                    <widget class="QLayoutWidget" row="7" column="5" rowspan="2" colspan="1">
+                        <property name="name">
+                            <cstring>layout7</cstring>
+                        </property>
+                        <vbox>
+                            <property name="name">
+                                <cstring>unnamed</cstring>
+                            </property>
+                            <widget class="QPushButton">
+                                <property name="name">
+                                    <cstring>bParam</cstring>
+                                </property>
+                                <property name="minimumSize">
+                                    <size>
+                                        <width>0</width>
+                                        <height>30</height>
+                                    </size>
+                                </property>
+                                <property name="text">
+                                    <string>&amp;Parametres</string>
+                                </property>
+                                <property name="accel">
+                                    <string>Alt+P</string>
+                                </property>
+                                <property name="autoDefault">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="toolTip" stdset="0">
+                                    <string>suppression du mot clef</string>
+                                </property>
+                            </widget>
+                            <widget class="QPushButton">
+                                <property name="name">
+                                    <cstring>bImport</cstring>
+                                </property>
+                                <property name="minimumSize">
+                                    <size>
+                                        <width>0</width>
+                                        <height>30</height>
+                                    </size>
+                                </property>
+                                <property name="text">
+                                    <string>&amp;Importer</string>
+                                </property>
+                                <property name="accel">
+                                    <string>Alt+I</string>
+                                </property>
+                                <property name="autoDefault">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="toolTip" stdset="0">
+                                    <string>suppression du mot clef</string>
+                                </property>
+                            </widget>
+                        </vbox>
+                    </widget>
+                    <spacer row="6" column="5">
+                        <property name="name">
+                            <cstring>spacer3</cstring>
+                        </property>
+                        <property name="orientation">
+                            <enum>Vertical</enum>
+                        </property>
+                        <property name="sizeType">
+                            <enum>Expanding</enum>
+                        </property>
+                        <property name="sizeHint">
+                            <size>
+                                <width>31</width>
+                                <height>50</height>
+                            </size>
+                        </property>
+                    </spacer>
+                    <spacer row="9" column="5">
+                        <property name="name">
+                            <cstring>spacer3_2</cstring>
+                        </property>
+                        <property name="orientation">
+                            <enum>Vertical</enum>
+                        </property>
+                        <property name="sizeType">
+                            <enum>Expanding</enum>
+                        </property>
+                        <property name="sizeHint">
+                            <size>
+                                <width>31</width>
+                                <height>50</height>
+                            </size>
+                        </property>
+                    </spacer>
+                    <widget class="QToolButton" row="4" column="3">
+                        <property name="name">
+                            <cstring>BSalome</cstring>
+                        </property>
+                        <property name="sizePolicy">
+                            <sizepolicy>
+                                <hsizetype>0</hsizetype>
+                                <vsizetype>0</vsizetype>
+                                <horstretch>0</horstretch>
+                                <verstretch>0</verstretch>
+                            </sizepolicy>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>40</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string></string>
+                        </property>
+                        <property name="iconSet">
+                            <iconset>image0</iconset>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)</string>
+                        </property>
+                    </widget>
+                    <widget class="QPushButton" row="4" column="4" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>BView2D</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>120</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>Visualiser</string>
+                        </property>
+                    </widget>
+                    <widget class="QLayoutWidget" row="0" column="3" rowspan="2" colspan="3">
+                        <property name="name">
+                            <cstring>layout12</cstring>
+                        </property>
+                        <hbox>
+                            <property name="name">
+                                <cstring>unnamed</cstring>
+                            </property>
+                            <widget class="QLabel">
+                                <property name="name">
+                                    <cstring>textLabel1_2</cstring>
+                                </property>
+                                <property name="text">
+                                    <string>&lt;font size="+1"&gt;Valeur&lt;/font&gt;</string>
+                                </property>
+                            </widget>
+                            <spacer>
+                                <property name="name">
+                                    <cstring>spacer6</cstring>
+                                </property>
+                                <property name="orientation">
+                                    <enum>Horizontal</enum>
+                                </property>
+                                <property name="sizeType">
+                                    <enum>Expanding</enum>
+                                </property>
+                                <property name="sizeHint">
+                                    <size>
+                                        <width>111</width>
+                                        <height>20</height>
+                                    </size>
+                                </property>
+                            </spacer>
+                        </hbox>
+                    </widget>
+                    <widget class="QLineEdit" row="2" column="3" rowspan="2" colspan="3">
+                        <property name="name">
+                            <cstring>LEValeur</cstring>
+                        </property>
+                        <property name="sizePolicy">
+                            <sizepolicy>
+                                <hsizetype>1</hsizetype>
+                                <vsizetype>1</vsizetype>
+                                <horstretch>0</horstretch>
+                                <verstretch>0</verstretch>
+                            </sizepolicy>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>220</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                    </widget>
+                    <widget class="QToolButton" row="3" column="1" rowspan="2" colspan="2">
+                        <property name="name">
+                            <cstring>BSup1Val</cstring>
+                        </property>
+                        <property name="sizePolicy">
+                            <sizepolicy>
+                                <hsizetype>0</hsizetype>
+                                <vsizetype>0</vsizetype>
+                                <horstretch>0</horstretch>
+                                <verstretch>0</verstretch>
+                            </sizepolicy>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>40</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string></string>
+                        </property>
+                        <property name="iconSet">
+                            <iconset>image2</iconset>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>enleve l occurence selectionnee</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="5" column="3" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>Commentaire</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>60</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string></string>
+                        </property>
+                    </widget>
+                    <widget class="QLayoutWidget" row="10" column="0" rowspan="1" colspan="6">
+                        <property name="name">
+                            <cstring>layout6</cstring>
+                        </property>
+                        <hbox>
+                            <property name="name">
+                                <cstring>unnamed</cstring>
+                            </property>
+                            <widget class="QPushButton">
+                                <property name="name">
+                                    <cstring>bSup</cstring>
+                                </property>
+                                <property name="minimumSize">
+                                    <size>
+                                        <width>0</width>
+                                        <height>30</height>
+                                    </size>
+                                </property>
+                                <property name="text">
+                                    <string>&amp;Supprimer</string>
+                                </property>
+                                <property name="accel">
+                                    <string>Alt+S</string>
+                                </property>
+                                <property name="autoDefault">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="toolTip" stdset="0">
+                                    <string>suppression du mot clef</string>
+                                </property>
+                            </widget>
+                            <widget class="QPushButton">
+                                <property name="name">
+                                    <cstring>bOk</cstring>
+                                </property>
+                                <property name="minimumSize">
+                                    <size>
+                                        <width>0</width>
+                                        <height>30</height>
+                                    </size>
+                                </property>
+                                <property name="text">
+                                    <string>&amp;Valider</string>
+                                </property>
+                                <property name="accel">
+                                    <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+                                </property>
+                                <property name="autoDefault">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="default">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="toolTip" stdset="0">
+                                    <string>validation de la saisie</string>
+                                </property>
+                            </widget>
+                            <widget class="QPushButton">
+                                <property name="name">
+                                    <cstring>bHelp</cstring>
+                                </property>
+                                <property name="minimumSize">
+                                    <size>
+                                        <width>0</width>
+                                        <height>30</height>
+                                    </size>
+                                </property>
+                                <property name="text">
+                                    <string>&amp;Documentation</string>
+                                </property>
+                                <property name="accel">
+                                    <string>Alt+D</string>
+                                </property>
+                                <property name="autoDefault">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="toolTip" stdset="0">
+                                    <string>affichage documentation aster</string>
+                                </property>
+                            </widget>
+                        </hbox>
+                    </widget>
+                </grid>
+            </widget>
+        </widget>
+    </grid>
+</widget>
+<images>
+    <image name="image0">
+        <data format="PNG" length="198">89504e470d0a1a0a0000000d49484452000000140000001408060000008d891d0d0000008d49444154388db5d3db0d80200c05d05be33a8ee24c8699188581ea87c6c4d25628d8840f5e27175002636a2d73b91fc0b569153917c3a07ef0ae9ccaabbf1f5bb5a6edc80c028334200602008165c23828302fa977dd36c6a067a778143fa185f95be66176c220a68303580d0e627ac201cc04a3d8552c1ac03995ab27e75a9a3e1847ddef3072ecef5fafb34ecb0165f7826b457b0000000049454e44ae426082</data>
+    </image>
+    <image name="image1">
+        <data format="PNG" length="256">89504e470d0a1a0a0000000d49484452000000210000000e0806000000a11e758c000000c749444154388dcd94590ec3200c4471d57bc73df9f407d331b159a228aa254448bc3cc68152fec0e4420ceeceb912e08a0239838848f5df02c99c11f86004300119054ae868c56ac206c06b4b109111c802874f3a52a587757123897e4039c46b50d8865b07f5400a450053330893cf8674a30028d492deef04626b559dfe48ac842b1a6daae6850155033b99c5009f70ceda111aab413b6f6a70d118e008e6fd8bc51d5d00a0f614556d1ff9b9be4952aabc3721f8f8b6f624c557ef8947afedf48c5e60b8dfbeb81d6dab9aff99270000000049454e44ae426082</data>
+    </image>
+    <image name="image2">
+        <data format="PNG" length="264">89504e470d0a1a0a0000000d49484452000000210000000e0806000000a11e758c000000cf49444154388dd594db0ec3200c43edfdf8d897bb0f345b480845d51eb64888f412e76001c00f046fd6e99bba77200480924a1032c92efbd8c7d5cabcc025400099e957849568fe7f06c0ded1deb32b4a1ec4ea824b9e74097165bd01f85527f78a7201e0a3129f345a017c543bafdc983d0f7109d15a331b471f47072c17494a82338f6178203a8817e67306b1f08b07ba03e602c9b831077e37e0209e67e3386710977b17de80c185ad38695a51d522c82ce77912e2fed8be83762092f52b1820dd11bb10e565b53a5a3bbaff130713d66fa6981857060000000049454e44ae426082</data>
+    </image>
+</images>
+<connections>
+    <connection>
+        <sender>bHelp</sender>
+        <signal>clicked()</signal>
+        <receiver>DPlusBase</receiver>
+        <slot>ViewDoc()</slot>
+    </connection>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DPlusBase</receiver>
+        <slot>BOkPourListePressed()</slot>
+    </connection>
+    <connection>
+        <sender>bSup</sender>
+        <signal>clicked()</signal>
+        <receiver>DPlusBase</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bParam</sender>
+        <signal>clicked()</signal>
+        <receiver>DPlusBase</receiver>
+        <slot>BParametresPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bImport</sender>
+        <signal>clicked()</signal>
+        <receiver>DPlusBase</receiver>
+        <slot>BImportPressed()</slot>
+    </connection>
+    <connection>
+        <sender>BAjout1Val</sender>
+        <signal>clicked()</signal>
+        <receiver>DPlusBase</receiver>
+        <slot>Ajout1Valeur()</slot>
+    </connection>
+    <connection>
+        <sender>BSup1Val</sender>
+        <signal>clicked()</signal>
+        <receiver>DPlusBase</receiver>
+        <slot>Sup1Valeur()</slot>
+    </connection>
+    <connection>
+        <sender>LEValeur</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DPlusBase</receiver>
+        <slot>LEValeurPressed()</slot>
+    </connection>
+    <connection>
+        <sender>BSalome</sender>
+        <signal>clicked()</signal>
+        <receiver>DPlusBase</receiver>
+        <slot>BSalomePressed()</slot>
+    </connection>
+    <connection>
+        <sender>BView2D</sender>
+        <signal>clicked()</signal>
+        <receiver>DPlusBase</receiver>
+        <slot>BView2DPressed()</slot>
+    </connection>
+</connections>
+<tabstops>
+    <tabstop>LEValeur</tabstop>
+    <tabstop>tabuniqueinto</tabstop>
+    <tabstop>bSup</tabstop>
+    <tabstop>bOk</tabstop>
+    <tabstop>bHelp</tabstop>
+    <tabstop>bParam</tabstop>
+    <tabstop>bImport</tabstop>
+    <tabstop>LBValeurs</tabstop>
+    <tabstop>BView2D</tabstop>
+</tabstops>
+<slots>
+    <slot>BSupPressed()</slot>
+    <slot>ViewDoc()</slot>
+    <slot>BOkPourListePressed()</slot>
+    <slot>BParametresPressed()</slot>
+    <slot>LEValeurPressed()</slot>
+    <slot>Ajout1Valeur()</slot>
+    <slot>Sup1Valeur()</slot>
+    <slot>BImportPressed()</slot>
+    <slot>BSalomePressed()</slot>
+    <slot>BView2DPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desPlusieursInto.py b/Ui/desPlusieursInto.py
new file mode 100644 (file)
index 0000000..224aa87
--- /dev/null
@@ -0,0 +1,207 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desPlusieursInto.ui'
+#
+# Created: ven avr 4 11:27:09 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+image0_data = \
+    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
+    "\x49\x48\x44\x52\x00\x00\x00\x21\x00\x00\x00\x0e" \
+    "\x08\x06\x00\x00\x00\xa1\x1e\x75\x8c\x00\x00\x00" \
+    "\xcf\x49\x44\x41\x54\x38\x8d\xd5\x94\xdb\x0e\xc3" \
+    "\x20\x0c\x43\xed\xfd\xf8\xd8\x97\xbb\x0f\x34\x5b" \
+    "\x48\x08\x45\xd5\x1e\xb6\x48\x88\xf4\x12\xe7\x60" \
+    "\x01\xc0\x0f\x04\x6f\xd6\xe9\x9b\xba\x77\x20\x04" \
+    "\x80\x92\x4a\x10\x32\xc9\x2e\xfb\xd8\xc7\xd5\xca" \
+    "\xbc\xc0\x25\x40\x00\x99\xe9\x57\x84\x95\x68\xfe" \
+    "\x7f\x06\xc0\xde\xd1\xde\xb3\x2b\x4a\x1e\xc4\xea" \
+    "\x82\x4b\x9e\x74\x09\x71\x65\xbd\x01\xf8\x55\x27" \
+    "\xf7\x8a\x72\x01\xe0\xa3\x12\x9f\x34\x5a\x01\x7c" \
+    "\x54\x3b\xaf\xdc\x98\x3d\x0f\x71\x09\xd1\x5a\x33" \
+    "\x1b\x47\x1f\x47\x07\x2c\x17\x49\x4a\x82\x33\x8f" \
+    "\x61\x78\x20\x3a\x88\x17\xe6\x73\x06\xb1\xf0\x8b" \
+    "\x07\xba\x03\xe6\x02\xc9\xb8\x31\x07\x7e\x37\xe0" \
+    "\x20\x9e\x67\xe3\x38\x67\x10\x97\x7b\x17\xde\x80" \
+    "\xc1\x85\xad\x38\x69\x5a\x51\xd5\x22\xc8\x2c\xe7" \
+    "\x79\x12\xe2\xfe\xd8\xbe\x83\x76\x20\x92\xf5\x2b" \
+    "\x18\x20\xdd\x11\xbb\x10\xe5\x65\xb5\x3a\x5a\x3b" \
+    "\xba\xff\x13\x07\x13\xd6\x6f\xa6\x98\x18\x57\x06" \
+    "\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82"
+image1_data = \
+    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
+    "\x49\x48\x44\x52\x00\x00\x00\x21\x00\x00\x00\x0e" \
+    "\x08\x06\x00\x00\x00\xa1\x1e\x75\x8c\x00\x00\x00" \
+    "\xc7\x49\x44\x41\x54\x38\x8d\xcd\x94\x59\x0e\xc3" \
+    "\x20\x0c\x44\x71\xd5\x7b\xc7\x3d\xf9\xf4\x07\xd3" \
+    "\x31\xb1\x59\xa2\x28\xaa\x25\x44\x48\xbc\x3c\xc6" \
+    "\x81\x52\xfe\xc0\xe4\x42\x0c\xee\xce\xb9\x12\xe0" \
+    "\x8a\x02\x39\x83\x88\x48\xf5\xdf\x02\xc9\x9c\x11" \
+    "\xf8\x60\x04\x30\x01\x19\x05\x4a\xe8\x68\xc5\x6a" \
+    "\xc2\x06\xc0\x6b\x4b\x10\x91\x11\xc8\x02\x87\x4f" \
+    "\x3a\x52\xa5\x87\x75\x71\x23\x89\x7e\x40\x39\xc4" \
+    "\x6b\x50\xd8\x86\x5b\x07\xf5\x40\x0a\x45\x00\x53" \
+    "\x33\x08\x93\xcf\x86\x74\xa3\x00\x28\xd4\x92\xde" \
+    "\xef\x04\x62\x6b\x55\x9d\xfe\x48\xac\x84\x2b\x1a" \
+    "\x6d\xaa\xe6\x85\x01\x55\x03\x3b\x99\xc5\x00\x9f" \
+    "\x70\xce\xda\x11\x1a\xab\x41\x3b\x6f\x6a\x70\xd1" \
+    "\x18\xe0\x08\xe6\xfd\x8b\xc5\x1d\x5d\x00\xa0\xf6" \
+    "\x14\x55\x6d\x1f\xf9\xb9\xbe\x49\x52\xaa\xbc\x37" \
+    "\x21\xf8\xf8\xb6\xf6\x24\xc5\x57\xef\x89\x47\xaf" \
+    "\xed\xf4\x8c\x5e\x60\xb8\xdf\xbe\xb8\x1d\x6d\xab" \
+    "\x9a\xff\x99\x27\x00\x00\x00\x00\x49\x45\x4e\x44" \
+    "\xae\x42\x60\x82"
+
+class DPlusInto(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        self.image0 = QPixmap()
+        self.image0.loadFromData(image0_data,"PNG")
+        self.image1 = QPixmap()
+        self.image1.loadFromData(image1_data,"PNG")
+        if not name:
+            self.setName("DPlusInto")
+
+        self.setMinimumSize(QSize(350,0))
+
+        DPlusIntoLayout = QGridLayout(self,1,1,11,6,"DPlusIntoLayout")
+
+        self.tabuniqueinto = QTabWidget(self,"tabuniqueinto")
+
+        self.Widget8 = QWidget(self.tabuniqueinto,"Widget8")
+        Widget8Layout = QGridLayout(self.Widget8,1,1,11,6,"Widget8Layout")
+
+        self.textLabel1 = QLabel(self.Widget8,"textLabel1")
+
+        Widget8Layout.addMultiCellWidget(self.textLabel1,0,0,0,1)
+
+        self.bSup = QPushButton(self.Widget8,"bSup")
+        self.bSup.setMinimumSize(QSize(130,30))
+        self.bSup.setAutoDefault(1)
+
+        Widget8Layout.addWidget(self.bSup,3,0)
+
+        self.bOk = QPushButton(self.Widget8,"bOk")
+        self.bOk.setMinimumSize(QSize(130,30))
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+
+        Widget8Layout.addMultiCellWidget(self.bOk,3,3,1,2)
+
+        self.bHelp = QPushButton(self.Widget8,"bHelp")
+        self.bHelp.setSizePolicy(QSizePolicy(1,0,150,0,self.bHelp.sizePolicy().hasHeightForWidth()))
+        self.bHelp.setMinimumSize(QSize(130,30))
+        self.bHelp.setAutoDefault(1)
+
+        Widget8Layout.addWidget(self.bHelp,3,3)
+
+        self.Commentaire = QLabel(self.Widget8,"Commentaire")
+        self.Commentaire.setMinimumSize(QSize(0,40))
+
+        Widget8Layout.addMultiCellWidget(self.Commentaire,2,2,0,3)
+
+        layout8 = QHBoxLayout(None,0,6,"layout8")
+
+        self.LBValeurs = QListBox(self.Widget8,"LBValeurs")
+        layout8.addWidget(self.LBValeurs)
+
+        layout5 = QVBoxLayout(None,0,6,"layout5")
+        spacer2 = QSpacerItem(21,44,QSizePolicy.Minimum,QSizePolicy.Expanding)
+        layout5.addItem(spacer2)
+
+        layout2 = QVBoxLayout(None,0,6,"layout2")
+
+        self.BSup1Val = QToolButton(self.Widget8,"BSup1Val")
+        self.BSup1Val.setMinimumSize(QSize(40,31))
+        self.BSup1Val.setMaximumSize(QSize(40,31))
+        self.BSup1Val.setIconSet(QIconSet(self.image0))
+        layout2.addWidget(self.BSup1Val)
+
+        self.BAjout1Val = QToolButton(self.Widget8,"BAjout1Val")
+        self.BAjout1Val.setMinimumSize(QSize(40,31))
+        self.BAjout1Val.setMaximumSize(QSize(40,31))
+        self.BAjout1Val.setIconSet(QIconSet(self.image1))
+        layout2.addWidget(self.BAjout1Val)
+        spacer3 = QSpacerItem(21,176,QSizePolicy.Minimum,QSizePolicy.Expanding)
+        layout2.addItem(spacer3)
+        layout5.addLayout(layout2)
+        layout8.addLayout(layout5)
+
+        self.listBoxVal = QListBox(self.Widget8,"listBoxVal")
+        layout8.addWidget(self.listBoxVal)
+
+        Widget8Layout.addMultiCellLayout(layout8,1,1,0,3)
+
+        self.textLabel1_2 = QLabel(self.Widget8,"textLabel1_2")
+
+        Widget8Layout.addMultiCellWidget(self.textLabel1_2,0,0,2,3)
+        self.tabuniqueinto.insertTab(self.Widget8,QString(""))
+
+        DPlusIntoLayout.addWidget(self.tabuniqueinto,0,0)
+
+        self.languageChange()
+
+        self.resize(QSize(482,480).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        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)
+
+        self.setTabOrder(self.listBoxVal,self.tabuniqueinto)
+        self.setTabOrder(self.tabuniqueinto,self.bSup)
+        self.setTabOrder(self.bSup,self.bOk)
+        self.setTabOrder(self.bOk,self.bHelp)
+        self.setTabOrder(self.bHelp,self.LBValeurs)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("DUnIn"))
+        self.textLabel1.setText(self.__tr("<u><font size=\"+1\">Valeur(s) actuelle(s)</font></u>"))
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(self.__tr("Alt+S"))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(self.__tr("Alt+D"))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+        self.Commentaire.setText(QString.null)
+        self.BSup1Val.setText(QString.null)
+        QToolTip.add(self.BSup1Val,self.__tr("enleve l occurence selectionnee"))
+        self.BAjout1Val.setText(QString.null)
+        QToolTip.add(self.BAjout1Val,self.__trUtf8("\x61\x6a\x6f\x75\x74\x65\x20\x6c\x61\x20\x76\x61\x6c\x65\x75\x72\x20\x73\x61\x69\x73\x69\x65\x20\x73\x6f\x75\x73\x20\x6c\x20\x6f\x63\x63\x75\x72\x65\x6e\x63\x65\x20\x73\x65\x6c\x65\x63\x74\x69\x6f\x6e\x6e\xc3\xa9\x65\x20\x28\x65\x6e\x20\x66\x69\x6e\x20\x64\x65\x20\x6c\x69\x73\x74\x65\x20\x73\x69\x20\x69\x6c\x20\x6e\x20\x79\x20\x61\x20\x70\x61\x73\x20\x64\x65\x20\x73\x65\x6c\x65\x63\x74\x69\x6f\x6e\x29"))
+        self.textLabel1_2.setText(self.__tr("<u><font size=\"+1\">Valeur(s) possibles(s)</font></u>"))
+        self.tabuniqueinto.changeTab(self.Widget8,self.__tr("Saisir Valeur"))
+
+
+    def BSupPressed(self):
+        print "DPlusInto.BSupPressed(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DPlusInto.ViewDoc(): Not implemented yet"
+
+    def BOkPourListePressed(self):
+        print "DPlusInto.BOkPourListePressed(): Not implemented yet"
+
+    def Ajout1Valeur(self):
+        print "DPlusInto.Ajout1Valeur(): Not implemented yet"
+
+    def Sup1Valeur(self):
+        print "DPlusInto.Sup1Valeur(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DPlusInto",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DPlusInto",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desPlusieursInto.ui b/Ui/desPlusieursInto.ui
new file mode 100644 (file)
index 0000000..f53e25e
--- /dev/null
@@ -0,0 +1,346 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DPlusInto</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DPlusInto</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>482</width>
+            <height>480</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>350</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DUnIn</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QTabWidget" row="0" column="0">
+            <property name="name">
+                <cstring>tabuniqueinto</cstring>
+            </property>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Widget8</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Saisir Valeur</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>textLabel1</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;u&gt;&lt;font size="+1"&gt;Valeur(s) actuelle(s)&lt;/font&gt;&lt;/u&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QPushButton" row="3" column="0">
+                        <property name="name">
+                            <cstring>bSup</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>130</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&amp;Supprimer</string>
+                        </property>
+                        <property name="accel">
+                            <string>Alt+S</string>
+                        </property>
+                        <property name="autoDefault">
+                            <bool>true</bool>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>suppression du mot clef</string>
+                        </property>
+                    </widget>
+                    <widget class="QPushButton" row="3" column="1" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>bOk</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>130</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&amp;Valider</string>
+                        </property>
+                        <property name="accel">
+                            <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+                        </property>
+                        <property name="autoDefault">
+                            <bool>true</bool>
+                        </property>
+                        <property name="default">
+                            <bool>true</bool>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>validation de la saisie</string>
+                        </property>
+                    </widget>
+                    <widget class="QPushButton" row="3" column="3">
+                        <property name="name">
+                            <cstring>bHelp</cstring>
+                        </property>
+                        <property name="sizePolicy">
+                            <sizepolicy>
+                                <hsizetype>1</hsizetype>
+                                <vsizetype>0</vsizetype>
+                                <horstretch>150</horstretch>
+                                <verstretch>0</verstretch>
+                            </sizepolicy>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>130</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&amp;Documentation</string>
+                        </property>
+                        <property name="accel">
+                            <string>Alt+D</string>
+                        </property>
+                        <property name="autoDefault">
+                            <bool>true</bool>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>affichage documentation aster</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="2" column="0" rowspan="1" colspan="4">
+                        <property name="name">
+                            <cstring>Commentaire</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>40</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string></string>
+                        </property>
+                    </widget>
+                    <widget class="QLayoutWidget" row="1" column="0" rowspan="1" colspan="4">
+                        <property name="name">
+                            <cstring>layout8</cstring>
+                        </property>
+                        <hbox>
+                            <property name="name">
+                                <cstring>unnamed</cstring>
+                            </property>
+                            <widget class="QListBox">
+                                <property name="name">
+                                    <cstring>LBValeurs</cstring>
+                                </property>
+                            </widget>
+                            <widget class="QLayoutWidget">
+                                <property name="name">
+                                    <cstring>layout5</cstring>
+                                </property>
+                                <vbox>
+                                    <property name="name">
+                                        <cstring>unnamed</cstring>
+                                    </property>
+                                    <spacer>
+                                        <property name="name">
+                                            <cstring>spacer2</cstring>
+                                        </property>
+                                        <property name="orientation">
+                                            <enum>Vertical</enum>
+                                        </property>
+                                        <property name="sizeType">
+                                            <enum>Expanding</enum>
+                                        </property>
+                                        <property name="sizeHint">
+                                            <size>
+                                                <width>21</width>
+                                                <height>44</height>
+                                            </size>
+                                        </property>
+                                    </spacer>
+                                    <widget class="QLayoutWidget">
+                                        <property name="name">
+                                            <cstring>layout2</cstring>
+                                        </property>
+                                        <vbox>
+                                            <property name="name">
+                                                <cstring>unnamed</cstring>
+                                            </property>
+                                            <widget class="QToolButton">
+                                                <property name="name">
+                                                    <cstring>BSup1Val</cstring>
+                                                </property>
+                                                <property name="minimumSize">
+                                                    <size>
+                                                        <width>40</width>
+                                                        <height>31</height>
+                                                    </size>
+                                                </property>
+                                                <property name="maximumSize">
+                                                    <size>
+                                                        <width>40</width>
+                                                        <height>31</height>
+                                                    </size>
+                                                </property>
+                                                <property name="text">
+                                                    <string></string>
+                                                </property>
+                                                <property name="iconSet">
+                                                    <iconset>image0</iconset>
+                                                </property>
+                                                <property name="toolTip" stdset="0">
+                                                    <string>enleve l occurence selectionnee</string>
+                                                </property>
+                                            </widget>
+                                            <widget class="QToolButton">
+                                                <property name="name">
+                                                    <cstring>BAjout1Val</cstring>
+                                                </property>
+                                                <property name="minimumSize">
+                                                    <size>
+                                                        <width>40</width>
+                                                        <height>31</height>
+                                                    </size>
+                                                </property>
+                                                <property name="maximumSize">
+                                                    <size>
+                                                        <width>40</width>
+                                                        <height>31</height>
+                                                    </size>
+                                                </property>
+                                                <property name="text">
+                                                    <string></string>
+                                                </property>
+                                                <property name="iconSet">
+                                                    <iconset>image1</iconset>
+                                                </property>
+                                                <property name="toolTip" stdset="0">
+                                                    <string>ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)</string>
+                                                </property>
+                                            </widget>
+                                            <spacer>
+                                                <property name="name">
+                                                    <cstring>spacer3</cstring>
+                                                </property>
+                                                <property name="orientation">
+                                                    <enum>Vertical</enum>
+                                                </property>
+                                                <property name="sizeType">
+                                                    <enum>Expanding</enum>
+                                                </property>
+                                                <property name="sizeHint">
+                                                    <size>
+                                                        <width>21</width>
+                                                        <height>176</height>
+                                                    </size>
+                                                </property>
+                                            </spacer>
+                                        </vbox>
+                                    </widget>
+                                </vbox>
+                            </widget>
+                            <widget class="QListBox">
+                                <property name="name">
+                                    <cstring>listBoxVal</cstring>
+                                </property>
+                            </widget>
+                        </hbox>
+                    </widget>
+                    <widget class="QLabel" row="0" column="2" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>textLabel1_2</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;u&gt;&lt;font size="+1"&gt;Valeur(s) possibles(s)&lt;/font&gt;&lt;/u&gt;</string>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+        </widget>
+    </grid>
+</widget>
+<images>
+    <image name="image0">
+        <data format="PNG" length="264">89504e470d0a1a0a0000000d49484452000000210000000e0806000000a11e758c000000cf49444154388dd594db0ec3200c43edfdf8d897bb0f345b480845d51eb64888f412e76001c00f046fd6e99bba77200480924a1032c92efbd8c7d5cabcc025400099e957849568fe7f06c0ded1deb32b4a1ec4ea824b9e74097165bd01f85527f78a7201e0a3129f345a017c543bafdc983d0f7109d15a331b471f47072c17494a82338f6178203a8817e67306b1f08b07ba03e602c9b831077e37e0209e67e3386710977b17de80c185ad38695a51d522c82ce77912e2fed8be83762092f52b1820dd11bb10e565b53a5a3bbaff130713d66fa6981857060000000049454e44ae426082</data>
+    </image>
+    <image name="image1">
+        <data format="PNG" length="256">89504e470d0a1a0a0000000d49484452000000210000000e0806000000a11e758c000000c749444154388dcd94590ec3200c4471d57bc73df9f407d331b159a228aa254448bc3cc68152fec0e4420ceeceb912e08a0239838848f5df02c99c11f86004300119054ae868c56ac206c06b4b109111c802874f3a52a587757123897e4039c46b50d8865b07f5400a450053330893cf8674a30028d492deef04626b559dfe48ac842b1a6daae6850155033b99c5009f70ceda111aab413b6f6a70d118e008e6fd8bc51d5d00a0f614556d1ff9b9be4952aabc3721f8f8b6f624c557ef8947afedf48c5e60b8dfbeb81d6dab9aff99270000000049454e44ae426082</data>
+    </image>
+</images>
+<connections>
+    <connection>
+        <sender>bHelp</sender>
+        <signal>clicked()</signal>
+        <receiver>DPlusInto</receiver>
+        <slot>ViewDoc()</slot>
+    </connection>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DPlusInto</receiver>
+        <slot>BOkPourListePressed()</slot>
+    </connection>
+    <connection>
+        <sender>bSup</sender>
+        <signal>clicked()</signal>
+        <receiver>DPlusInto</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+    <connection>
+        <sender>LBValeurs</sender>
+        <signal>doubleClicked(QListBoxItem*)</signal>
+        <receiver>DPlusInto</receiver>
+        <slot>Sup1Valeur()</slot>
+    </connection>
+    <connection>
+        <sender>BAjout1Val</sender>
+        <signal>clicked()</signal>
+        <receiver>DPlusInto</receiver>
+        <slot>Ajout1Valeur()</slot>
+    </connection>
+    <connection>
+        <sender>BSup1Val</sender>
+        <signal>clicked()</signal>
+        <receiver>DPlusInto</receiver>
+        <slot>Sup1Valeur()</slot>
+    </connection>
+</connections>
+<tabstops>
+    <tabstop>listBoxVal</tabstop>
+    <tabstop>tabuniqueinto</tabstop>
+    <tabstop>bSup</tabstop>
+    <tabstop>bOk</tabstop>
+    <tabstop>bHelp</tabstop>
+    <tabstop>LBValeurs</tabstop>
+</tabstops>
+<slots>
+    <slot>BSupPressed()</slot>
+    <slot>ViewDoc()</slot>
+    <slot>BOkPourListePressed()</slot>
+    <slot>Ajout1Valeur()</slot>
+    <slot>Sup1Valeur()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desPoursuite.py b/Ui/desPoursuite.py
new file mode 100644 (file)
index 0000000..2db030c
--- /dev/null
@@ -0,0 +1,236 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desPoursuite.ui'
+#
+# Created: ven mai 16 13:30:38 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DPour(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DPour")
+
+        self.setMinimumSize(QSize(505,0))
+
+        DPourLayout = QGridLayout(self,1,1,11,6,"DPourLayout")
+
+        self.Commentaire = QLabel(self,"Commentaire")
+
+        DPourLayout.addMultiCellWidget(self.Commentaire,1,1,0,2)
+
+        self.TWChoix = QTabWidget(self,"TWChoix")
+
+        self.MotClef = QWidget(self.TWChoix,"MotClef")
+        MotClefLayout = QGridLayout(self.MotClef,1,1,11,6,"MotClefLayout")
+
+        self.textLabel1_2 = QLabel(self.MotClef,"textLabel1_2")
+
+        MotClefLayout.addWidget(self.textLabel1_2,0,1)
+
+        self.LBMCPermis = QListBox(self.MotClef,"LBMCPermis")
+        self.LBMCPermis.setMinimumSize(QSize(0,0))
+
+        MotClefLayout.addWidget(self.LBMCPermis,1,0)
+
+        self.LBRegles = QListBox(self.MotClef,"LBRegles")
+
+        MotClefLayout.addWidget(self.LBRegles,1,1)
+
+        self.textLabel1 = QLabel(self.MotClef,"textLabel1")
+        self.textLabel1.setMinimumSize(QSize(0,0))
+
+        MotClefLayout.addWidget(self.textLabel1,0,0)
+        self.TWChoix.insertTab(self.MotClef,QString(""))
+
+        self.Commande = QWidget(self.TWChoix,"Commande")
+        CommandeLayout = QGridLayout(self.Commande,1,1,11,6,"CommandeLayout")
+
+        self.LBNouvCommande = QListBox(self.Commande,"LBNouvCommande")
+
+        CommandeLayout.addMultiCellWidget(self.LBNouvCommande,2,2,0,3)
+
+        self.textLabel1_4 = QLabel(self.Commande,"textLabel1_4")
+
+        CommandeLayout.addMultiCellWidget(self.textLabel1_4,0,0,0,1)
+
+        self.buttonGroup1 = QButtonGroup(self.Commande,"buttonGroup1")
+
+        self.RBGroupe = QRadioButton(self.buttonGroup1,"RBGroupe")
+        self.RBGroupe.setGeometry(QRect(20,40,101,20))
+
+        self.RBalpha = QRadioButton(self.buttonGroup1,"RBalpha")
+        self.RBalpha.setGeometry(QRect(20,20,120,20))
+        self.RBalpha.setChecked(1)
+
+        CommandeLayout.addMultiCellWidget(self.buttonGroup1,0,1,3,3)
+
+        self.textLabel4 = QLabel(self.Commande,"textLabel4")
+
+        CommandeLayout.addMultiCellWidget(self.textLabel4,3,3,0,3)
+
+        self.BNext = QToolButton(self.Commande,"BNext")
+        self.BNext.setMinimumSize(QSize(60,0))
+        self.BNext.setIconSet(QIconSet())
+
+        CommandeLayout.addWidget(self.BNext,1,2)
+
+        self.textLabel6 = QLabel(self.Commande,"textLabel6")
+        self.textLabel6.setMinimumSize(QSize(40,0))
+
+        CommandeLayout.addWidget(self.textLabel6,1,0)
+
+        self.LEFiltre = QLineEdit(self.Commande,"LEFiltre")
+        self.LEFiltre.setMinimumSize(QSize(160,30))
+
+        CommandeLayout.addWidget(self.LEFiltre,1,1)
+        self.TWChoix.insertTab(self.Commande,QString(""))
+
+        self.TabPage = QWidget(self.TWChoix,"TabPage")
+
+        LayoutWidget = QWidget(self.TabPage,"layout4")
+        LayoutWidget.setGeometry(QRect(10,31,472,90))
+        layout4 = QVBoxLayout(LayoutWidget,11,6,"layout4")
+
+        self.textLabel1_3 = QLabel(LayoutWidget,"textLabel1_3")
+        layout4.addWidget(self.textLabel1_3)
+
+        self.LENomFichier = QLineEdit(LayoutWidget,"LENomFichier")
+        self.LENomFichier.setMinimumSize(QSize(470,40))
+        layout4.addWidget(self.LENomFichier)
+
+        LayoutWidget_2 = QWidget(self.TabPage,"layout5")
+        LayoutWidget_2.setGeometry(QRect(8,131,481,250))
+        layout5 = QGridLayout(LayoutWidget_2,1,1,11,6,"layout5")
+
+        layout3 = QHBoxLayout(None,0,6,"layout3")
+        spacer3 = QSpacerItem(331,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
+        layout3.addItem(spacer3)
+
+        self.BBrowse = QPushButton(LayoutWidget_2,"BBrowse")
+        self.BBrowse.setSizePolicy(QSizePolicy(0,0,0,0,self.BBrowse.sizePolicy().hasHeightForWidth()))
+        self.BBrowse.setMinimumSize(QSize(140,50))
+        layout3.addWidget(self.BBrowse)
+
+        layout5.addLayout(layout3,1,0)
+        spacer1 = QSpacerItem(21,190,QSizePolicy.Minimum,QSizePolicy.Expanding)
+        layout5.addItem(spacer1,0,0)
+        self.TWChoix.insertTab(self.TabPage,QString(""))
+
+        DPourLayout.addMultiCellWidget(self.TWChoix,0,0,0,2)
+
+        self.bSup = QPushButton(self,"bSup")
+        self.bSup.setMinimumSize(QSize(0,30))
+        self.bSup.setAutoDefault(1)
+
+        DPourLayout.addWidget(self.bSup,2,0)
+
+        self.bOk = QPushButton(self,"bOk")
+        self.bOk.setMinimumSize(QSize(0,30))
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+
+        DPourLayout.addWidget(self.bOk,2,1)
+
+        self.bHelp = QPushButton(self,"bHelp")
+        self.bHelp.setMinimumSize(QSize(0,30))
+        self.bHelp.setAutoDefault(1)
+
+        DPourLayout.addWidget(self.bHelp,2,2)
+
+        self.languageChange()
+
+        self.resize(QSize(521,499).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        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.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand)
+        self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand)
+        self.connect(self.BNext,SIGNAL("clicked()"),self.BNextPressed)
+        self.connect(self.BBrowse,SIGNAL("clicked()"),self.BBrowsePressed)
+        self.connect(self.LENomFichier,SIGNAL("returnPressed()"),self.LENomFichReturnPressed)
+
+        self.setTabOrder(self.LEFiltre,self.LENomFichier)
+        self.setTabOrder(self.LENomFichier,self.TWChoix)
+        self.setTabOrder(self.TWChoix,self.LBMCPermis)
+        self.setTabOrder(self.LBMCPermis,self.LBRegles)
+        self.setTabOrder(self.LBRegles,self.LBNouvCommande)
+        self.setTabOrder(self.LBNouvCommande,self.RBalpha)
+        self.setTabOrder(self.RBalpha,self.BBrowse)
+        self.setTabOrder(self.BBrowse,self.bSup)
+        self.setTabOrder(self.bSup,self.bOk)
+        self.setTabOrder(self.bOk,self.bHelp)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("DMacro"))
+        self.Commentaire.setText(QString.null)
+        self.textLabel1_2.setText(self.__trUtf8("\x3c\x68\x33\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x3c\x75\x3e\x3c\x62\x3e\x52\xc3\xa9\x67\x6c\x65\x73\x3c\x2f\x62\x3e\x3c\x2f\x75\x3e\x3c\x2f\x70\x3e\x3c\x2f\x68\x33\x3e"))
+        self.textLabel1.setText(self.__tr("<h3><p align=\"center\"><u><b>Mots Clefs Permis</b></u></p></h3>"))
+        self.TWChoix.changeTab(self.MotClef,self.__tr("Ajouter Mot-Clef"))
+        self.textLabel1_4.setText(self.__tr("<b><u>Commandes :</u></b>"))
+        self.buttonGroup1.setTitle(self.__tr("Affichage"))
+        self.RBGroupe.setText(self.__tr("par groupe"))
+        self.RBalpha.setText(self.__trUtf8("\x61\x6c\x70\x68\x61\x62\xc3\xa9\x74\x69\x71\x75\x65"))
+        self.textLabel4.setText(self.__trUtf8("\x4c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x68\x6f\x69\x73\x69\x65\x20\x73\x65\x72\x61\x20\x61\x6a\x6f\x75\x74\xc3\xa9\x65\x20\x41\x50\x52\x45\x53\x20\x6c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x6f\x75\x72\x61\x6e\x74\x65"))
+        self.BNext.setText(self.__tr("Suivant"))
+        QToolTip.add(self.BNext,self.__tr("affiche la prochaine occurence"))
+        self.textLabel6.setText(self.__tr("Filtre"))
+        self.TWChoix.changeTab(self.Commande,self.__tr("Nouvelle Commande"))
+        self.textLabel1_3.setText(self.__tr("<font size=\"+1\">La commande POURSUITE requiert un nom de Fichier :</font>"))
+        self.BBrowse.setText(self.__tr("Edit"))
+        self.TWChoix.changeTab(self.TabPage,self.__tr("Fichier Poursuite"))
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(self.__tr("Alt+S"))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(self.__tr("Alt+D"))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+
+
+    def LBNouvCommandeClicked(self):
+        print "DPour.LBNouvCommandeClicked(): Not implemented yet"
+
+    def LEFiltreTextChanged(self):
+        print "DPour.LEFiltreTextChanged(): Not implemented yet"
+
+    def LEfiltreReturnPressed(self):
+        print "DPour.LEfiltreReturnPressed(): Not implemented yet"
+
+    def BSupPressed(self):
+        print "DPour.BSupPressed(): Not implemented yet"
+
+    def BOkPressed(self):
+        print "DPour.BOkPressed(): Not implemented yet"
+
+    def BuildTabCommand(self):
+        print "DPour.BuildTabCommand(): Not implemented yet"
+
+    def BNextPressed(self):
+        print "DPour.BNextPressed(): Not implemented yet"
+
+    def BBrowsePressed(self):
+        print "DPour.BBrowsePressed(): Not implemented yet"
+
+    def LENomFichReturnPressed(self):
+        print "DPour.LENomFichReturnPressed(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DPour",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DPour",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desPoursuite.ui b/Ui/desPoursuite.ui
new file mode 100644 (file)
index 0000000..17f7d6d
--- /dev/null
@@ -0,0 +1,504 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DPour</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DPour</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>521</width>
+            <height>499</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>505</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DMacro</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QLabel" row="1" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>Commentaire</cstring>
+            </property>
+            <property name="text">
+                <string></string>
+            </property>
+        </widget>
+        <widget class="QTabWidget" row="0" column="0" rowspan="1" colspan="3">
+            <property name="name">
+                <cstring>TWChoix</cstring>
+            </property>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>MotClef</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Ajouter Mot-Clef</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QLabel" row="0" column="1">
+                        <property name="name">
+                            <cstring>textLabel1_2</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;h3&gt;&lt;p align="center"&gt;&lt;u&gt;&lt;b&gt;Régles&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;/h3&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QListBox" row="1" column="0">
+                        <property name="name">
+                            <cstring>LBMCPermis</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                    </widget>
+                    <widget class="QListBox" row="1" column="1">
+                        <property name="name">
+                            <cstring>LBRegles</cstring>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="0" column="0">
+                        <property name="name">
+                            <cstring>textLabel1</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&lt;h3&gt;&lt;p align="center"&gt;&lt;u&gt;&lt;b&gt;Mots Clefs Permis&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;/h3&gt;</string>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Commande</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Nouvelle Commande</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QListBox" row="2" column="0" rowspan="1" colspan="4">
+                        <property name="name">
+                            <cstring>LBNouvCommande</cstring>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>textLabel1_4</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;b&gt;&lt;u&gt;Commandes :&lt;/u&gt;&lt;/b&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QButtonGroup" row="0" column="3" rowspan="2" colspan="1">
+                        <property name="name">
+                            <cstring>buttonGroup1</cstring>
+                        </property>
+                        <property name="title">
+                            <string>Affichage</string>
+                        </property>
+                        <widget class="QRadioButton">
+                            <property name="name">
+                                <cstring>RBGroupe</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>20</x>
+                                    <y>40</y>
+                                    <width>101</width>
+                                    <height>20</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>par groupe</string>
+                            </property>
+                        </widget>
+                        <widget class="QRadioButton">
+                            <property name="name">
+                                <cstring>RBalpha</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>20</x>
+                                    <y>20</y>
+                                    <width>120</width>
+                                    <height>20</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>alphabétique</string>
+                            </property>
+                            <property name="checked">
+                                <bool>true</bool>
+                            </property>
+                        </widget>
+                    </widget>
+                    <widget class="QLabel" row="3" column="0" rowspan="1" colspan="4">
+                        <property name="name">
+                            <cstring>textLabel4</cstring>
+                        </property>
+                        <property name="text">
+                            <string>La commande choisie sera ajoutée APRES la commande courante</string>
+                        </property>
+                    </widget>
+                    <widget class="QToolButton" row="1" column="2">
+                        <property name="name">
+                            <cstring>BNext</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>60</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>Suivant</string>
+                        </property>
+                        <property name="iconSet">
+                            <iconset></iconset>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>affiche la prochaine occurence</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="1" column="0">
+                        <property name="name">
+                            <cstring>textLabel6</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>40</width>
+                                <height>0</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>Filtre</string>
+                        </property>
+                    </widget>
+                    <widget class="QLineEdit" row="1" column="1">
+                        <property name="name">
+                            <cstring>LEFiltre</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>160</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>TabPage</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Fichier Poursuite</string>
+                </attribute>
+                <widget class="QLayoutWidget">
+                    <property name="name">
+                        <cstring>layout4</cstring>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>10</x>
+                            <y>31</y>
+                            <width>472</width>
+                            <height>90</height>
+                        </rect>
+                    </property>
+                    <vbox>
+                        <property name="name">
+                            <cstring>unnamed</cstring>
+                        </property>
+                        <widget class="QLabel">
+                            <property name="name">
+                                <cstring>textLabel1_3</cstring>
+                            </property>
+                            <property name="text">
+                                <string>&lt;font size="+1"&gt;La commande POURSUITE requiert un nom de Fichier :&lt;/font&gt;</string>
+                            </property>
+                        </widget>
+                        <widget class="QLineEdit">
+                            <property name="name">
+                                <cstring>LENomFichier</cstring>
+                            </property>
+                            <property name="minimumSize">
+                                <size>
+                                    <width>470</width>
+                                    <height>40</height>
+                                </size>
+                            </property>
+                        </widget>
+                    </vbox>
+                </widget>
+                <widget class="QLayoutWidget">
+                    <property name="name">
+                        <cstring>layout5</cstring>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>8</x>
+                            <y>131</y>
+                            <width>481</width>
+                            <height>250</height>
+                        </rect>
+                    </property>
+                    <grid>
+                        <property name="name">
+                            <cstring>unnamed</cstring>
+                        </property>
+                        <widget class="QLayoutWidget" row="1" column="0">
+                            <property name="name">
+                                <cstring>layout3</cstring>
+                            </property>
+                            <hbox>
+                                <property name="name">
+                                    <cstring>unnamed</cstring>
+                                </property>
+                                <spacer>
+                                    <property name="name">
+                                        <cstring>spacer3</cstring>
+                                    </property>
+                                    <property name="orientation">
+                                        <enum>Horizontal</enum>
+                                    </property>
+                                    <property name="sizeType">
+                                        <enum>Expanding</enum>
+                                    </property>
+                                    <property name="sizeHint">
+                                        <size>
+                                            <width>331</width>
+                                            <height>20</height>
+                                        </size>
+                                    </property>
+                                </spacer>
+                                <widget class="QPushButton">
+                                    <property name="name">
+                                        <cstring>BBrowse</cstring>
+                                    </property>
+                                    <property name="sizePolicy">
+                                        <sizepolicy>
+                                            <hsizetype>0</hsizetype>
+                                            <vsizetype>0</vsizetype>
+                                            <horstretch>0</horstretch>
+                                            <verstretch>0</verstretch>
+                                        </sizepolicy>
+                                    </property>
+                                    <property name="minimumSize">
+                                        <size>
+                                            <width>140</width>
+                                            <height>50</height>
+                                        </size>
+                                    </property>
+                                    <property name="text">
+                                        <string>Edit</string>
+                                    </property>
+                                </widget>
+                            </hbox>
+                        </widget>
+                        <spacer row="0" column="0">
+                            <property name="name">
+                                <cstring>spacer1</cstring>
+                            </property>
+                            <property name="orientation">
+                                <enum>Vertical</enum>
+                            </property>
+                            <property name="sizeType">
+                                <enum>Expanding</enum>
+                            </property>
+                            <property name="sizeHint">
+                                <size>
+                                    <width>21</width>
+                                    <height>190</height>
+                                </size>
+                            </property>
+                        </spacer>
+                    </grid>
+                </widget>
+            </widget>
+        </widget>
+        <widget class="QPushButton" row="2" column="0">
+            <property name="name">
+                <cstring>bSup</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Supprimer</string>
+            </property>
+            <property name="accel">
+                <string>Alt+S</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>suppression du mot clef</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="2" column="1">
+            <property name="name">
+                <cstring>bOk</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Valider</string>
+            </property>
+            <property name="accel">
+                <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="default">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>validation de la saisie</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="2" column="2">
+            <property name="name">
+                <cstring>bHelp</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Documentation</string>
+            </property>
+            <property name="accel">
+                <string>Alt+D</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>affichage documentation aster</string>
+            </property>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>LBNouvCommande</sender>
+        <signal>doubleClicked(QListBoxItem*)</signal>
+        <receiver>DPour</receiver>
+        <slot>LBNouvCommandeClicked()</slot>
+    </connection>
+    <connection>
+        <sender>LEFiltre</sender>
+        <signal>textChanged(const QString&amp;)</signal>
+        <receiver>DPour</receiver>
+        <slot>LEFiltreTextChanged()</slot>
+    </connection>
+    <connection>
+        <sender>LEFiltre</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DPour</receiver>
+        <slot>LEfiltreReturnPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bSup</sender>
+        <signal>pressed()</signal>
+        <receiver>DPour</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DPour</receiver>
+        <slot>BOkPressed()</slot>
+    </connection>
+    <connection>
+        <sender>RBalpha</sender>
+        <signal>clicked()</signal>
+        <receiver>DPour</receiver>
+        <slot>BuildTabCommand()</slot>
+    </connection>
+    <connection>
+        <sender>RBGroupe</sender>
+        <signal>clicked()</signal>
+        <receiver>DPour</receiver>
+        <slot>BuildTabCommand()</slot>
+    </connection>
+    <connection>
+        <sender>BNext</sender>
+        <signal>clicked()</signal>
+        <receiver>DPour</receiver>
+        <slot>BNextPressed()</slot>
+    </connection>
+    <connection>
+        <sender>BBrowse</sender>
+        <signal>clicked()</signal>
+        <receiver>DPour</receiver>
+        <slot>BBrowsePressed()</slot>
+    </connection>
+    <connection>
+        <sender>LENomFichier</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DPour</receiver>
+        <slot>LENomFichReturnPressed()</slot>
+    </connection>
+</connections>
+<tabstops>
+    <tabstop>LEFiltre</tabstop>
+    <tabstop>LENomFichier</tabstop>
+    <tabstop>TWChoix</tabstop>
+    <tabstop>LBMCPermis</tabstop>
+    <tabstop>LBRegles</tabstop>
+    <tabstop>LBNouvCommande</tabstop>
+    <tabstop>RBalpha</tabstop>
+    <tabstop>BBrowse</tabstop>
+    <tabstop>bSup</tabstop>
+    <tabstop>bOk</tabstop>
+    <tabstop>bHelp</tabstop>
+</tabstops>
+<slots>
+    <slot>LBNouvCommandeClicked()</slot>
+    <slot>LEFiltreTextChanged()</slot>
+    <slot>LEfiltreReturnPressed()</slot>
+    <slot>BSupPressed()</slot>
+    <slot>BOkPressed()</slot>
+    <slot>BuildTabCommand()</slot>
+    <slot>BNextPressed()</slot>
+    <slot>BBrowsePressed()</slot>
+    <slot>LENomFichReturnPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desRacine.py b/Ui/desRacine.py
new file mode 100644 (file)
index 0000000..39382eb
--- /dev/null
@@ -0,0 +1,166 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desRacine.ui'
+#
+# Created: Mon Jun 2 16:02:17 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.16
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DRac(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DRac")
+
+        self.setMinimumSize(QSize(505,0))
+
+        DRacLayout = QGridLayout(self,1,1,11,6,"DRacLayout")
+
+        self.textLabel1_4 = QLabel(self,"textLabel1_4")
+        self.textLabel1_4.setMinimumSize(QSize(291,21))
+
+        DRacLayout.addMultiCellWidget(self.textLabel1_4,0,0,0,1)
+
+        self.textLabel1_4_2 = QLabel(self,"textLabel1_4_2")
+
+        DRacLayout.addMultiCellWidget(self.textLabel1_4_2,0,1,2,3)
+
+        self.buttonGroup1 = QButtonGroup(self,"buttonGroup1")
+        self.buttonGroup1.setMinimumSize(QSize(0,60))
+
+        self.RBGroupe = QRadioButton(self.buttonGroup1,"RBGroupe")
+        self.RBGroupe.setGeometry(QRect(10,20,90,20))
+
+        self.RBalpha = QRadioButton(self.buttonGroup1,"RBalpha")
+        self.RBalpha.setGeometry(QRect(110,20,120,20))
+        self.RBalpha.setChecked(1)
+
+        DRacLayout.addMultiCellWidget(self.buttonGroup1,1,1,0,1)
+
+        self.bHelp = QPushButton(self,"bHelp")
+        self.bHelp.setMinimumSize(QSize(160,30))
+        self.bHelp.setAutoDefault(1)
+
+        DRacLayout.addWidget(self.bHelp,3,3)
+
+        self.bSup = QPushButton(self,"bSup")
+        self.bSup.setMinimumSize(QSize(160,30))
+        self.bSup.setAutoDefault(1)
+
+        DRacLayout.addWidget(self.bSup,3,0)
+
+        self.bOk = QPushButton(self,"bOk")
+        self.bOk.setMinimumSize(QSize(160,30))
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+
+        DRacLayout.addMultiCellWidget(self.bOk,3,3,1,2)
+
+        layout2 = QGridLayout(None,1,1,0,6,"layout2")
+
+        self.BNext = QToolButton(self,"BNext")
+        self.BNext.setMinimumSize(QSize(60,30))
+        self.BNext.setIconSet(QIconSet())
+
+        layout2.addWidget(self.BNext,0,2)
+
+        self.LEFiltre = QLineEdit(self,"LEFiltre")
+        self.LEFiltre.setMinimumSize(QSize(0,30))
+
+        layout2.addWidget(self.LEFiltre,0,1)
+
+        self.LBRegles = QListBox(self,"LBRegles")
+        self.LBRegles.setMinimumSize(QSize(240,350))
+
+        layout2.addMultiCellWidget(self.LBRegles,0,1,3,3)
+
+        self.textLabel6 = QLabel(self,"textLabel6")
+        self.textLabel6.setMinimumSize(QSize(40,0))
+
+        layout2.addWidget(self.textLabel6,0,0)
+
+        self.LBNouvCommande = QListBox(self,"LBNouvCommande")
+
+        layout2.addMultiCellWidget(self.LBNouvCommande,1,1,0,2)
+
+        DRacLayout.addMultiCellLayout(layout2,2,2,0,3)
+
+        self.languageChange()
+
+        self.resize(QSize(509,513).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        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.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand)
+        self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand)
+        self.connect(self.BNext,SIGNAL("clicked()"),self.BNextPressed)
+        self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc)
+
+        self.setTabOrder(self.LEFiltre,self.LBNouvCommande)
+        self.setTabOrder(self.LBNouvCommande,self.RBalpha)
+        self.setTabOrder(self.RBalpha,self.bSup)
+        self.setTabOrder(self.bSup,self.bOk)
+        self.setTabOrder(self.bOk,self.bHelp)
+        self.setTabOrder(self.bHelp,self.LBRegles)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("DMacro"))
+        self.textLabel1_4.setText(self.__tr("<b><u>Commandes :</u></b>"))
+        self.textLabel1_4_2.setText(self.__trUtf8("\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x3c\x62\x3e\x3c\x75\x3e\x52\xc3\xa9\x67\x6c\x65\x73\x20\x3a\x3c\x2f\x75\x3e\x3c\x2f\x62\x3e\x3c\x2f\x70\x3e"))
+        self.buttonGroup1.setTitle(self.__tr("Affichage"))
+        self.RBGroupe.setText(self.__tr("par groupe"))
+        self.RBalpha.setText(self.__trUtf8("\x61\x6c\x70\x68\x61\x62\xc3\xa9\x74\x69\x71\x75\x65"))
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(QKeySequence(self.__tr("Alt+D")))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(QKeySequence(self.__tr("Alt+S")))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(QKeySequence(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+        self.BNext.setText(self.__tr("Suivant"))
+        QToolTip.add(self.BNext,self.__tr("affiche la prochaine occurence"))
+        self.textLabel6.setText(self.__tr("Filtre"))
+
+
+    def LBNouvCommandeClicked(self):
+        print "DRac.LBNouvCommandeClicked(): Not implemented yet"
+
+    def LEFiltreTextChanged(self):
+        print "DRac.LEFiltreTextChanged(): Not implemented yet"
+
+    def LEfiltreReturnPressed(self):
+        print "DRac.LEfiltreReturnPressed(): Not implemented yet"
+
+    def BSupPressed(self):
+        print "DRac.BSupPressed(): Not implemented yet"
+
+    def BOkPressed(self):
+        print "DRac.BOkPressed(): Not implemented yet"
+
+    def BuildTabCommand(self):
+        print "DRac.BuildTabCommand(): Not implemented yet"
+
+    def BNextPressed(self):
+        print "DRac.BNextPressed(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DRac.ViewDoc(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DRac",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DRac",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desRacine.ui b/Ui/desRacine.ui
new file mode 100644 (file)
index 0000000..b4ee15d
--- /dev/null
@@ -0,0 +1,320 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DRac</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DRac</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>509</width>
+            <height>513</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>505</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DMacro</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
+            <property name="name">
+                <cstring>textLabel1_4</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>291</width>
+                    <height>21</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&lt;b&gt;&lt;u&gt;Commandes :&lt;/u&gt;&lt;/b&gt;</string>
+            </property>
+        </widget>
+        <widget class="QLabel" row="0" column="2" rowspan="2" colspan="2">
+            <property name="name">
+                <cstring>textLabel1_4_2</cstring>
+            </property>
+            <property name="text">
+                <string>&lt;p align="center"&gt;&lt;b&gt;&lt;u&gt;Régles :&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;</string>
+            </property>
+        </widget>
+        <widget class="QButtonGroup" row="1" column="0" rowspan="1" colspan="2">
+            <property name="name">
+                <cstring>buttonGroup1</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>0</width>
+                    <height>60</height>
+                </size>
+            </property>
+            <property name="title">
+                <string>Affichage</string>
+            </property>
+            <widget class="QRadioButton">
+                <property name="name">
+                    <cstring>RBGroupe</cstring>
+                </property>
+                <property name="geometry">
+                    <rect>
+                        <x>10</x>
+                        <y>20</y>
+                        <width>90</width>
+                        <height>20</height>
+                    </rect>
+                </property>
+                <property name="text">
+                    <string>par groupe</string>
+                </property>
+            </widget>
+            <widget class="QRadioButton">
+                <property name="name">
+                    <cstring>RBalpha</cstring>
+                </property>
+                <property name="geometry">
+                    <rect>
+                        <x>110</x>
+                        <y>20</y>
+                        <width>120</width>
+                        <height>20</height>
+                    </rect>
+                </property>
+                <property name="text">
+                    <string>alphabétique</string>
+                </property>
+                <property name="checked">
+                    <bool>true</bool>
+                </property>
+            </widget>
+        </widget>
+        <widget class="QPushButton" row="3" column="3">
+            <property name="name">
+                <cstring>bHelp</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>160</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Documentation</string>
+            </property>
+            <property name="accel">
+                <string>Alt+D</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>affichage documentation aster</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="3" column="0">
+            <property name="name">
+                <cstring>bSup</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>160</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Supprimer</string>
+            </property>
+            <property name="accel">
+                <string>Alt+S</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>suppression du mot clef</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="3" column="1" rowspan="1" colspan="2">
+            <property name="name">
+                <cstring>bOk</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>160</width>
+                    <height>30</height>
+                </size>
+            </property>
+            <property name="text">
+                <string>&amp;Valider</string>
+            </property>
+            <property name="accel">
+                <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+            </property>
+            <property name="autoDefault">
+                <bool>true</bool>
+            </property>
+            <property name="default">
+                <bool>true</bool>
+            </property>
+            <property name="toolTip" stdset="0">
+                <string>validation de la saisie</string>
+            </property>
+        </widget>
+        <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="4">
+            <property name="name">
+                <cstring>layout2</cstring>
+            </property>
+            <grid>
+                <property name="name">
+                    <cstring>unnamed</cstring>
+                </property>
+                <widget class="QToolButton" row="0" column="2">
+                    <property name="name">
+                        <cstring>BNext</cstring>
+                    </property>
+                    <property name="minimumSize">
+                        <size>
+                            <width>60</width>
+                            <height>30</height>
+                        </size>
+                    </property>
+                    <property name="text">
+                        <string>Suivant</string>
+                    </property>
+                    <property name="iconSet">
+                        <iconset></iconset>
+                    </property>
+                    <property name="toolTip" stdset="0">
+                        <string>affiche la prochaine occurence</string>
+                    </property>
+                </widget>
+                <widget class="QLineEdit" row="0" column="1">
+                    <property name="name">
+                        <cstring>LEFiltre</cstring>
+                    </property>
+                    <property name="minimumSize">
+                        <size>
+                            <width>0</width>
+                            <height>30</height>
+                        </size>
+                    </property>
+                </widget>
+                <widget class="QListBox" row="0" column="3" rowspan="2" colspan="1">
+                    <property name="name">
+                        <cstring>LBRegles</cstring>
+                    </property>
+                    <property name="minimumSize">
+                        <size>
+                            <width>240</width>
+                            <height>350</height>
+                        </size>
+                    </property>
+                </widget>
+                <widget class="QLabel" row="0" column="0">
+                    <property name="name">
+                        <cstring>textLabel6</cstring>
+                    </property>
+                    <property name="minimumSize">
+                        <size>
+                            <width>40</width>
+                            <height>0</height>
+                        </size>
+                    </property>
+                    <property name="text">
+                        <string>Filtre</string>
+                    </property>
+                </widget>
+                <widget class="QListBox" row="1" column="0" rowspan="1" colspan="3">
+                    <property name="name">
+                        <cstring>LBNouvCommande</cstring>
+                    </property>
+                </widget>
+            </grid>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>LBNouvCommande</sender>
+        <signal>doubleClicked(QListBoxItem*)</signal>
+        <receiver>DRac</receiver>
+        <slot>LBNouvCommandeClicked()</slot>
+    </connection>
+    <connection>
+        <sender>LEFiltre</sender>
+        <signal>textChanged(const QString&amp;)</signal>
+        <receiver>DRac</receiver>
+        <slot>LEFiltreTextChanged()</slot>
+    </connection>
+    <connection>
+        <sender>LEFiltre</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DRac</receiver>
+        <slot>LEfiltreReturnPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bSup</sender>
+        <signal>pressed()</signal>
+        <receiver>DRac</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DRac</receiver>
+        <slot>BOkPressed()</slot>
+    </connection>
+    <connection>
+        <sender>RBalpha</sender>
+        <signal>clicked()</signal>
+        <receiver>DRac</receiver>
+        <slot>BuildTabCommand()</slot>
+    </connection>
+    <connection>
+        <sender>RBGroupe</sender>
+        <signal>clicked()</signal>
+        <receiver>DRac</receiver>
+        <slot>BuildTabCommand()</slot>
+    </connection>
+    <connection>
+        <sender>BNext</sender>
+        <signal>clicked()</signal>
+        <receiver>DRac</receiver>
+        <slot>BNextPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bHelp</sender>
+        <signal>clicked()</signal>
+        <receiver>DRac</receiver>
+        <slot>ViewDoc()</slot>
+    </connection>
+</connections>
+<tabstops>
+    <tabstop>LEFiltre</tabstop>
+    <tabstop>LBNouvCommande</tabstop>
+    <tabstop>RBalpha</tabstop>
+    <tabstop>bSup</tabstop>
+    <tabstop>bOk</tabstop>
+    <tabstop>bHelp</tabstop>
+    <tabstop>LBRegles</tabstop>
+</tabstops>
+<slots>
+    <slot>LBNouvCommandeClicked()</slot>
+    <slot>LEFiltreTextChanged()</slot>
+    <slot>LEfiltreReturnPressed()</slot>
+    <slot>BSupPressed()</slot>
+    <slot>BOkPressed()</slot>
+    <slot>BuildTabCommand()</slot>
+    <slot>BNextPressed()</slot>
+    <slot>ViewDoc()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desSelectVal.py b/Ui/desSelectVal.py
new file mode 100644 (file)
index 0000000..f43b5d2
--- /dev/null
@@ -0,0 +1,91 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desSelectVal.ui'
+#
+# Created: mar mar 25 10:05:09 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DSelVal(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DSelVal")
+
+
+        DSelValLayout = QGridLayout(self,1,1,11,6,"DSelValLayout")
+
+        self.TBtext = QTextBrowser(self,"TBtext")
+
+        DSelValLayout.addMultiCellWidget(self.TBtext,0,0,0,1)
+
+        self.BGSeparateur = QButtonGroup(self,"BGSeparateur")
+        self.BGSeparateur.setMinimumSize(QSize(180,100))
+
+        LayoutWidget = QWidget(self.BGSeparateur,"layout1")
+        LayoutWidget.setGeometry(QRect(17,20,150,74))
+        layout1 = QGridLayout(LayoutWidget,1,1,11,6,"layout1")
+
+        self.BpointVirgule = QRadioButton(LayoutWidget,"BpointVirgule")
+
+        layout1.addWidget(self.BpointVirgule,2,0)
+
+        self.Bespace = QRadioButton(LayoutWidget,"Bespace")
+        self.Bespace.setChecked(1)
+
+        layout1.addWidget(self.Bespace,0,0)
+
+        self.Bvirgule = QRadioButton(LayoutWidget,"Bvirgule")
+
+        layout1.addWidget(self.Bvirgule,1,0)
+
+        DSelValLayout.addMultiCellWidget(self.BGSeparateur,1,2,0,0)
+
+        self.BImportTout = QPushButton(self,"BImportTout")
+
+        DSelValLayout.addWidget(self.BImportTout,2,1)
+
+        self.BImportSel = QPushButton(self,"BImportSel")
+
+        DSelValLayout.addWidget(self.BImportSel,1,1)
+
+        self.languageChange()
+
+        self.resize(QSize(413,497).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        self.connect(self.BGSeparateur,SIGNAL("clicked(int)"),self.SeparateurSelect)
+        self.connect(self.BImportSel,SIGNAL("clicked()"),self.BImportSelPressed)
+        self.connect(self.BImportTout,SIGNAL("clicked()"),self.BImportToutPressed)
+
+
+    def languageChange(self):
+        self.setCaption(self.__trUtf8("\x53\xc3\xa9\x6c\x65\x63\x74\x69\x6f\x6e\x20\x64\x65\x20\x76\x61\x6c\x65\x75\x72\x73"))
+        self.BGSeparateur.setTitle(self.__trUtf8("\x53\xc3\xa9\x70\x61\x72\x61\x74\x65\x75\x72"))
+        self.BpointVirgule.setText(self.__tr("point-virgule"))
+        self.Bespace.setText(self.__tr("espace"))
+        self.Bvirgule.setText(self.__tr("virgule"))
+        self.BImportTout.setText(self.__tr("Importer Tout"))
+        self.BImportSel.setText(self.__tr("Ajouter Selection"))
+
+
+    def SeparateurSelect(self):
+        print "DSelVal.SeparateurSelect(): Not implemented yet"
+
+    def BImportSelPressed(self):
+        print "DSelVal.BImportSelPressed(): Not implemented yet"
+
+    def BImportToutPressed(self):
+        print "DSelVal.BImportToutPressed(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DSelVal",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DSelVal",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desSelectVal.ui b/Ui/desSelectVal.ui
new file mode 100644 (file)
index 0000000..ae092f5
--- /dev/null
@@ -0,0 +1,130 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DSelVal</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DSelVal</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>413</width>
+            <height>497</height>
+        </rect>
+    </property>
+    <property name="caption">
+        <string>Sélection de valeurs</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QTextBrowser" row="0" column="0" rowspan="1" colspan="2">
+            <property name="name">
+                <cstring>TBtext</cstring>
+            </property>
+        </widget>
+        <widget class="QButtonGroup" row="1" column="0" rowspan="2" colspan="1">
+            <property name="name">
+                <cstring>BGSeparateur</cstring>
+            </property>
+            <property name="minimumSize">
+                <size>
+                    <width>180</width>
+                    <height>100</height>
+                </size>
+            </property>
+            <property name="title">
+                <string>Séparateur</string>
+            </property>
+            <widget class="QLayoutWidget">
+                <property name="name">
+                    <cstring>layout1</cstring>
+                </property>
+                <property name="geometry">
+                    <rect>
+                        <x>17</x>
+                        <y>20</y>
+                        <width>150</width>
+                        <height>74</height>
+                    </rect>
+                </property>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QRadioButton" row="2" column="0">
+                        <property name="name">
+                            <cstring>BpointVirgule</cstring>
+                        </property>
+                        <property name="text">
+                            <string>point-virgule</string>
+                        </property>
+                    </widget>
+                    <widget class="QRadioButton" row="0" column="0">
+                        <property name="name">
+                            <cstring>Bespace</cstring>
+                        </property>
+                        <property name="text">
+                            <string>espace</string>
+                        </property>
+                        <property name="checked">
+                            <bool>true</bool>
+                        </property>
+                    </widget>
+                    <widget class="QRadioButton" row="1" column="0">
+                        <property name="name">
+                            <cstring>Bvirgule</cstring>
+                        </property>
+                        <property name="text">
+                            <string>virgule</string>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+        </widget>
+        <widget class="QPushButton" row="2" column="1">
+            <property name="name">
+                <cstring>BImportTout</cstring>
+            </property>
+            <property name="text">
+                <string>Importer Tout</string>
+            </property>
+        </widget>
+        <widget class="QPushButton" row="1" column="1">
+            <property name="name">
+                <cstring>BImportSel</cstring>
+            </property>
+            <property name="text">
+                <string>Ajouter Selection</string>
+            </property>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>BGSeparateur</sender>
+        <signal>clicked(int)</signal>
+        <receiver>DSelVal</receiver>
+        <slot>SeparateurSelect()</slot>
+    </connection>
+    <connection>
+        <sender>BImportSel</sender>
+        <signal>clicked()</signal>
+        <receiver>DSelVal</receiver>
+        <slot>BImportSelPressed()</slot>
+    </connection>
+    <connection>
+        <sender>BImportTout</sender>
+        <signal>clicked()</signal>
+        <receiver>DSelVal</receiver>
+        <slot>BImportToutPressed()</slot>
+    </connection>
+</connections>
+<slots>
+    <slot>SeparateurSelect()</slot>
+    <slot>BImportSelPressed()</slot>
+    <slot>BImportToutPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desUniqueASSD.py b/Ui/desUniqueASSD.py
new file mode 100644 (file)
index 0000000..12a7993
--- /dev/null
@@ -0,0 +1,106 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desUniqueASSD.ui'
+#
+# Created: mar mar 25 10:05:09 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DUnASSD(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DUnASSD")
+
+        self.setMinimumSize(QSize(350,0))
+
+        DUnASSDLayout = QGridLayout(self,1,1,11,6,"DUnASSDLayout")
+
+        self.tabuniqueinto = QTabWidget(self,"tabuniqueinto")
+
+        self.Widget8 = QWidget(self.tabuniqueinto,"Widget8")
+        Widget8Layout = QGridLayout(self.Widget8,1,1,11,6,"Widget8Layout")
+
+        self.textLabel2 = QLabel(self.Widget8,"textLabel2")
+        self.textLabel2.setMinimumSize(QSize(436,50))
+
+        Widget8Layout.addWidget(self.textLabel2,0,0)
+
+        self.listBoxASSD = QListBox(self.Widget8,"listBoxASSD")
+
+        Widget8Layout.addWidget(self.listBoxASSD,1,0)
+
+        self.Commentaire = QLabel(self.Widget8,"Commentaire")
+        self.Commentaire.setMinimumSize(QSize(380,30))
+
+        Widget8Layout.addWidget(self.Commentaire,2,0)
+
+        layout2 = QHBoxLayout(None,0,6,"layout2")
+
+        self.bSup = QPushButton(self.Widget8,"bSup")
+        self.bSup.setMinimumSize(QSize(0,30))
+        self.bSup.setAutoDefault(1)
+        layout2.addWidget(self.bSup)
+
+        self.bOk = QPushButton(self.Widget8,"bOk")
+        self.bOk.setMinimumSize(QSize(0,30))
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+        layout2.addWidget(self.bOk)
+
+        self.bHelp = QPushButton(self.Widget8,"bHelp")
+        self.bHelp.setMinimumSize(QSize(0,30))
+        self.bHelp.setAutoDefault(1)
+        layout2.addWidget(self.bHelp)
+
+        Widget8Layout.addLayout(layout2,3,0)
+        self.tabuniqueinto.insertTab(self.Widget8,QString(""))
+
+        DUnASSDLayout.addWidget(self.tabuniqueinto,0,0)
+
+        self.languageChange()
+
+        self.resize(QSize(482,480).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        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 languageChange(self):
+        self.setCaption(self.__tr("DUnIn"))
+        self.textLabel2.setText(self.__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\x53\x74\x72\x75\x63\x74\x75\x72\x65\x73\x20\x64\x65\x20\x64\x6f\x6e\x6e\xc3\xa9\x65\x73\x20\x64\x75\x20\x74\x79\x70\x65\x0a\x72\x65\x71\x75\x69\x73\x20\x70\x61\x72\x20\x6c\x27\x6f\x62\x6a\x65\x74\x20\x63\x6f\x75\x72\x61\x6e\x74\x20\x3a\x3c\x2f\x70\x3e\x3c\x2f\x66\x6f\x6e\x74\x3e"))
+        self.Commentaire.setText(QString.null)
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(self.__tr("Alt+S"))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(self.__tr("Alt+D"))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+        self.tabuniqueinto.changeTab(self.Widget8,self.__tr("Saisir Valeur"))
+
+
+    def BSupPressed(self):
+        print "DUnASSD.BSupPressed(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DUnASSD.ViewDoc(): Not implemented yet"
+
+    def BOkPressed(self):
+        print "DUnASSD.BOkPressed(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DUnASSD",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DUnASSD",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desUniqueASSD.ui b/Ui/desUniqueASSD.ui
new file mode 100644 (file)
index 0000000..819c929
--- /dev/null
@@ -0,0 +1,190 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DUnASSD</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DUnASSD</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>482</width>
+            <height>480</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>350</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DUnIn</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QTabWidget" row="0" column="0">
+            <property name="name">
+                <cstring>tabuniqueinto</cstring>
+            </property>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Widget8</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Saisir Valeur</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QLabel" row="0" column="0">
+                        <property name="name">
+                            <cstring>textLabel2</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>436</width>
+                                <height>50</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&lt;font size="+1"&gt;&lt;p align="center"&gt;Structures de données du type
+requis par l'objet courant :&lt;/p&gt;&lt;/font&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QListBox" row="1" column="0">
+                        <property name="name">
+                            <cstring>listBoxASSD</cstring>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="2" column="0">
+                        <property name="name">
+                            <cstring>Commentaire</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>380</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string></string>
+                        </property>
+                    </widget>
+                    <widget class="QLayoutWidget" row="3" column="0">
+                        <property name="name">
+                            <cstring>layout2</cstring>
+                        </property>
+                        <hbox>
+                            <property name="name">
+                                <cstring>unnamed</cstring>
+                            </property>
+                            <widget class="QPushButton">
+                                <property name="name">
+                                    <cstring>bSup</cstring>
+                                </property>
+                                <property name="minimumSize">
+                                    <size>
+                                        <width>0</width>
+                                        <height>30</height>
+                                    </size>
+                                </property>
+                                <property name="text">
+                                    <string>&amp;Supprimer</string>
+                                </property>
+                                <property name="accel">
+                                    <string>Alt+S</string>
+                                </property>
+                                <property name="autoDefault">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="toolTip" stdset="0">
+                                    <string>suppression du mot clef</string>
+                                </property>
+                            </widget>
+                            <widget class="QPushButton">
+                                <property name="name">
+                                    <cstring>bOk</cstring>
+                                </property>
+                                <property name="minimumSize">
+                                    <size>
+                                        <width>0</width>
+                                        <height>30</height>
+                                    </size>
+                                </property>
+                                <property name="text">
+                                    <string>&amp;Valider</string>
+                                </property>
+                                <property name="accel">
+                                    <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+                                </property>
+                                <property name="autoDefault">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="default">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="toolTip" stdset="0">
+                                    <string>validation de la saisie</string>
+                                </property>
+                            </widget>
+                            <widget class="QPushButton">
+                                <property name="name">
+                                    <cstring>bHelp</cstring>
+                                </property>
+                                <property name="minimumSize">
+                                    <size>
+                                        <width>0</width>
+                                        <height>30</height>
+                                    </size>
+                                </property>
+                                <property name="text">
+                                    <string>&amp;Documentation</string>
+                                </property>
+                                <property name="accel">
+                                    <string>Alt+D</string>
+                                </property>
+                                <property name="autoDefault">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="toolTip" stdset="0">
+                                    <string>affichage documentation aster</string>
+                                </property>
+                            </widget>
+                        </hbox>
+                    </widget>
+                </grid>
+            </widget>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>bHelp</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnASSD</receiver>
+        <slot>ViewDoc()</slot>
+    </connection>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnASSD</receiver>
+        <slot>BOkPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bSup</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnASSD</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+</connections>
+<slots>
+    <slot>BSupPressed()</slot>
+    <slot>ViewDoc()</slot>
+    <slot>BOkPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desUniqueBase.py b/Ui/desUniqueBase.py
new file mode 100644 (file)
index 0000000..ec1c516
--- /dev/null
@@ -0,0 +1,174 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desUniqueBase.ui'
+#
+# Created: ven avr 4 11:27:09 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+image0_data = \
+    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
+    "\x49\x48\x44\x52\x00\x00\x00\x14\x00\x00\x00\x14" \
+    "\x08\x06\x00\x00\x00\x8d\x89\x1d\x0d\x00\x00\x00" \
+    "\x8d\x49\x44\x41\x54\x38\x8d\xb5\xd3\xdb\x0d\x80" \
+    "\x20\x0c\x05\xd0\x5b\xe3\x3a\x8e\xe2\x4c\x86\x99" \
+    "\x18\x85\x81\xea\x87\xc6\xc4\xd2\x56\x28\xd8\x84" \
+    "\x0f\x5e\x27\x17\x50\x02\x63\x6a\x2d\x73\xb9\x1f" \
+    "\xc0\xb5\x69\x15\x39\x17\xc3\xa0\x7e\xf0\xae\x9c" \
+    "\xca\xab\xbf\x1f\x5b\xb5\xa6\xed\xc8\x0c\x02\x83" \
+    "\x34\x20\x06\x02\x00\x81\x65\xc2\x38\x28\x30\x2f" \
+    "\xa9\x77\xdd\x36\xc6\xa0\x67\xa7\x78\x14\x3f\xa1" \
+    "\x85\xf9\x5b\xe6\x61\x76\xc2\x20\xa6\x83\x03\x58" \
+    "\x0d\x0e\x62\x7a\xc2\x01\xcc\x04\xa3\xd8\x55\x2c" \
+    "\x1a\xc0\x39\x95\xab\x27\xe7\x5a\x9a\x3e\x18\x47" \
+    "\xdd\xef\x30\x72\xec\xef\x5f\xaf\xb3\x4e\xcb\x01" \
+    "\x65\xf7\x82\x6b\x45\x7b\x00\x00\x00\x00\x49\x45" \
+    "\x4e\x44\xae\x42\x60\x82"
+
+class DUnBase(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        self.image0 = QPixmap()
+        self.image0.loadFromData(image0_data,"PNG")
+        if not name:
+            self.setName("DUnBase")
+
+        self.setMinimumSize(QSize(350,0))
+
+        DUnBaseLayout = QGridLayout(self,1,1,11,6,"DUnBaseLayout")
+
+        self.tabuniqueinto = QTabWidget(self,"tabuniqueinto")
+
+        self.Widget8 = QWidget(self.tabuniqueinto,"Widget8")
+        Widget8Layout = QGridLayout(self.Widget8,1,1,11,6,"Widget8Layout")
+
+        layout2 = QHBoxLayout(None,0,6,"layout2")
+
+        self.textLabel2 = QLabel(self.Widget8,"textLabel2")
+        layout2.addWidget(self.textLabel2)
+
+        self.lineEditVal = QLineEdit(self.Widget8,"lineEditVal")
+        self.lineEditVal.setMinimumSize(QSize(290,50))
+        layout2.addWidget(self.lineEditVal)
+
+        Widget8Layout.addMultiCellLayout(layout2,1,1,0,2)
+        spacer1 = QSpacerItem(288,21,QSizePolicy.Expanding,QSizePolicy.Minimum)
+        Widget8Layout.addMultiCell(spacer1,0,0,0,1)
+
+        self.bParametres = QPushButton(self.Widget8,"bParametres")
+        self.bParametres.setSizePolicy(QSizePolicy(0,0,0,0,self.bParametres.sizePolicy().hasHeightForWidth()))
+        self.bParametres.setMinimumSize(QSize(140,30))
+
+        Widget8Layout.addWidget(self.bParametres,0,2)
+
+        self.bSup = QPushButton(self.Widget8,"bSup")
+        self.bSup.setMinimumSize(QSize(0,30))
+        self.bSup.setAutoDefault(1)
+
+        Widget8Layout.addWidget(self.bSup,5,0)
+
+        self.bOk = QPushButton(self.Widget8,"bOk")
+        self.bOk.setMinimumSize(QSize(0,30))
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+
+        Widget8Layout.addWidget(self.bOk,5,1)
+
+        self.bHelp = QPushButton(self.Widget8,"bHelp")
+        self.bHelp.setMinimumSize(QSize(0,30))
+        self.bHelp.setAutoDefault(1)
+
+        Widget8Layout.addWidget(self.bHelp,5,2)
+        spacer4 = QSpacerItem(41,112,QSizePolicy.Minimum,QSizePolicy.Expanding)
+        Widget8Layout.addItem(spacer4,2,1)
+        spacer3 = QSpacerItem(21,112,QSizePolicy.Minimum,QSizePolicy.Expanding)
+        Widget8Layout.addItem(spacer3,4,1)
+
+        self.Commentaire = QLabel(self.Widget8,"Commentaire")
+        self.Commentaire.setMinimumSize(QSize(430,40))
+
+        Widget8Layout.addMultiCellWidget(self.Commentaire,3,3,0,2)
+
+        self.BView2D = QPushButton(self.Widget8,"BView2D")
+        self.BView2D.setMinimumSize(QSize(110,40))
+
+        Widget8Layout.addWidget(self.BView2D,2,2)
+
+        self.BSalome = QPushButton(self.Widget8,"BSalome")
+        self.BSalome.setMinimumSize(QSize(50,40))
+        self.BSalome.setIconSet(QIconSet(self.image0))
+
+        Widget8Layout.addWidget(self.BSalome,2,0)
+        self.tabuniqueinto.insertTab(self.Widget8,QString(""))
+
+        DUnBaseLayout.addWidget(self.tabuniqueinto,0,0)
+
+        self.languageChange()
+
+        self.resize(QSize(482,480).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc)
+        self.connect(self.bOk,SIGNAL("clicked()"),self.BOk2Pressed)
+        self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed)
+        self.connect(self.lineEditVal,SIGNAL("returnPressed()"),self.LEValeurPressed)
+        self.connect(self.bParametres,SIGNAL("pressed()"),self.BParametresPressed)
+        self.connect(self.BSalome,SIGNAL("pressed()"),self.BSalomePressed)
+        self.connect(self.BView2D,SIGNAL("clicked()"),self.BView2DPressed)
+
+        self.setTabOrder(self.lineEditVal,self.tabuniqueinto)
+        self.setTabOrder(self.tabuniqueinto,self.bParametres)
+        self.setTabOrder(self.bParametres,self.bSup)
+        self.setTabOrder(self.bSup,self.bOk)
+        self.setTabOrder(self.bOk,self.bHelp)
+        self.setTabOrder(self.bHelp,self.BView2D)
+        self.setTabOrder(self.BView2D,self.BSalome)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("DUnIn"))
+        self.textLabel2.setText(self.__tr("<b><u><p align=\"center\">Valeur: </p></u></b>"))
+        self.bParametres.setText(self.__tr("Parametres"))
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(self.__tr("Alt+S"))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(self.__tr("Alt+D"))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+        self.Commentaire.setText(QString.null)
+        self.BView2D.setText(self.__tr("Visualiser"))
+        self.BSalome.setText(QString.null)
+        self.tabuniqueinto.changeTab(self.Widget8,self.__tr("Saisir Valeur"))
+
+
+    def BSupPressed(self):
+        print "DUnBase.BSupPressed(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DUnBase.ViewDoc(): Not implemented yet"
+
+    def BOk2Pressed(self):
+        print "DUnBase.BOk2Pressed(): Not implemented yet"
+
+    def BParametresPressed(self):
+        print "DUnBase.BParametresPressed(): Not implemented yet"
+
+    def LEValeurPressed(self):
+        print "DUnBase.LEValeurPressed(): Not implemented yet"
+
+    def BSalomePressed(self):
+        print "DUnBase.BSalomePressed(): Not implemented yet"
+
+    def BView2DPressed(self):
+        print "DUnBase.BView2DPressed(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DUnBase",s,c)
diff --git a/Ui/desUniqueBase.ui b/Ui/desUniqueBase.ui
new file mode 100644 (file)
index 0000000..30eeab8
--- /dev/null
@@ -0,0 +1,336 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DUnBase</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DUnBase</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>482</width>
+            <height>480</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>350</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DUnIn</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QTabWidget" row="0" column="0">
+            <property name="name">
+                <cstring>tabuniqueinto</cstring>
+            </property>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Widget8</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Saisir Valeur</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QLayoutWidget" row="1" column="0" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>layout2</cstring>
+                        </property>
+                        <hbox>
+                            <property name="name">
+                                <cstring>unnamed</cstring>
+                            </property>
+                            <widget class="QLabel">
+                                <property name="name">
+                                    <cstring>textLabel2</cstring>
+                                </property>
+                                <property name="text">
+                                    <string>&lt;b&gt;&lt;u&gt;&lt;p align="center"&gt;Valeur: &lt;/p&gt;&lt;/u&gt;&lt;/b&gt;</string>
+                                </property>
+                            </widget>
+                            <widget class="QLineEdit">
+                                <property name="name">
+                                    <cstring>lineEditVal</cstring>
+                                </property>
+                                <property name="minimumSize">
+                                    <size>
+                                        <width>290</width>
+                                        <height>50</height>
+                                    </size>
+                                </property>
+                            </widget>
+                        </hbox>
+                    </widget>
+                    <spacer row="0" column="0" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>spacer1</cstring>
+                        </property>
+                        <property name="orientation">
+                            <enum>Horizontal</enum>
+                        </property>
+                        <property name="sizeType">
+                            <enum>Expanding</enum>
+                        </property>
+                        <property name="sizeHint">
+                            <size>
+                                <width>288</width>
+                                <height>21</height>
+                            </size>
+                        </property>
+                    </spacer>
+                    <widget class="QPushButton" row="0" column="2">
+                        <property name="name">
+                            <cstring>bParametres</cstring>
+                        </property>
+                        <property name="sizePolicy">
+                            <sizepolicy>
+                                <hsizetype>0</hsizetype>
+                                <vsizetype>0</vsizetype>
+                                <horstretch>0</horstretch>
+                                <verstretch>0</verstretch>
+                            </sizepolicy>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>140</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>Parametres</string>
+                        </property>
+                    </widget>
+                    <widget class="QPushButton" row="5" column="0">
+                        <property name="name">
+                            <cstring>bSup</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&amp;Supprimer</string>
+                        </property>
+                        <property name="accel">
+                            <string>Alt+S</string>
+                        </property>
+                        <property name="autoDefault">
+                            <bool>true</bool>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>suppression du mot clef</string>
+                        </property>
+                    </widget>
+                    <widget class="QPushButton" row="5" column="1">
+                        <property name="name">
+                            <cstring>bOk</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&amp;Valider</string>
+                        </property>
+                        <property name="accel">
+                            <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+                        </property>
+                        <property name="autoDefault">
+                            <bool>true</bool>
+                        </property>
+                        <property name="default">
+                            <bool>true</bool>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>validation de la saisie</string>
+                        </property>
+                    </widget>
+                    <widget class="QPushButton" row="5" column="2">
+                        <property name="name">
+                            <cstring>bHelp</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&amp;Documentation</string>
+                        </property>
+                        <property name="accel">
+                            <string>Alt+D</string>
+                        </property>
+                        <property name="autoDefault">
+                            <bool>true</bool>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>affichage documentation aster</string>
+                        </property>
+                    </widget>
+                    <spacer row="2" column="1">
+                        <property name="name">
+                            <cstring>spacer4</cstring>
+                        </property>
+                        <property name="orientation">
+                            <enum>Vertical</enum>
+                        </property>
+                        <property name="sizeType">
+                            <enum>Expanding</enum>
+                        </property>
+                        <property name="sizeHint">
+                            <size>
+                                <width>41</width>
+                                <height>112</height>
+                            </size>
+                        </property>
+                    </spacer>
+                    <spacer row="4" column="1">
+                        <property name="name">
+                            <cstring>spacer3</cstring>
+                        </property>
+                        <property name="orientation">
+                            <enum>Vertical</enum>
+                        </property>
+                        <property name="sizeType">
+                            <enum>Expanding</enum>
+                        </property>
+                        <property name="sizeHint">
+                            <size>
+                                <width>21</width>
+                                <height>112</height>
+                            </size>
+                        </property>
+                    </spacer>
+                    <widget class="QLabel" row="3" column="0" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>Commentaire</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>430</width>
+                                <height>40</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string></string>
+                        </property>
+                    </widget>
+                    <widget class="QPushButton" row="2" column="2">
+                        <property name="name">
+                            <cstring>BView2D</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>110</width>
+                                <height>40</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>Visualiser</string>
+                        </property>
+                    </widget>
+                    <widget class="QPushButton" row="2" column="0">
+                        <property name="name">
+                            <cstring>BSalome</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>50</width>
+                                <height>40</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string></string>
+                        </property>
+                        <property name="iconSet">
+                            <iconset>image0</iconset>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+        </widget>
+    </grid>
+</widget>
+<images>
+    <image name="image0">
+        <data format="PNG" length="198">89504e470d0a1a0a0000000d49484452000000140000001408060000008d891d0d0000008d49444154388db5d3db0d80200c05d05be33a8ee24c8699188581ea87c6c4d25628d8840f5e27175002636a2d73b91fc0b569153917c3a07ef0ae9ccaabbf1f5bb5a6edc80c028334200602008165c23828302fa977dd36c6a067a778143fa185f95be66176c220a68303580d0e627ac201cc04a3d8552c1ac03995ab27e75a9a3e1847ddef3072ecef5fafb34ecb0165f7826b457b0000000049454e44ae426082</data>
+    </image>
+</images>
+<connections>
+    <connection>
+        <sender>bHelp</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnBase</receiver>
+        <slot>ViewDoc()</slot>
+    </connection>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnBase</receiver>
+        <slot>BOk2Pressed()</slot>
+    </connection>
+    <connection>
+        <sender>bSup</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnBase</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+    <connection>
+        <sender>lineEditVal</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DUnBase</receiver>
+        <slot>LEValeurPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bParametres</sender>
+        <signal>pressed()</signal>
+        <receiver>DUnBase</receiver>
+        <slot>BParametresPressed()</slot>
+    </connection>
+    <connection>
+        <sender>BSalome</sender>
+        <signal>pressed()</signal>
+        <receiver>DUnBase</receiver>
+        <slot>BSalomePressed()</slot>
+    </connection>
+    <connection>
+        <sender>BView2D</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnBase</receiver>
+        <slot>BView2DPressed()</slot>
+    </connection>
+</connections>
+<tabstops>
+    <tabstop>lineEditVal</tabstop>
+    <tabstop>tabuniqueinto</tabstop>
+    <tabstop>bParametres</tabstop>
+    <tabstop>bSup</tabstop>
+    <tabstop>bOk</tabstop>
+    <tabstop>bHelp</tabstop>
+    <tabstop>BView2D</tabstop>
+    <tabstop>BSalome</tabstop>
+</tabstops>
+<slots>
+    <slot>BSupPressed()</slot>
+    <slot>ViewDoc()</slot>
+    <slot>BOk2Pressed()</slot>
+    <slot>BParametresPressed()</slot>
+    <slot>LEValeurPressed()</slot>
+    <slot>BSalomePressed()</slot>
+    <slot>BView2DPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desUniqueComp.py b/Ui/desUniqueComp.py
new file mode 100644 (file)
index 0000000..7b9af9d
--- /dev/null
@@ -0,0 +1,152 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desUniqueComp.ui'
+#
+# Created: ven avr 4 11:27:09 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DUnComp(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DUnComp")
+
+        self.setMinimumSize(QSize(350,0))
+
+        DUnCompLayout = QGridLayout(self,1,1,11,6,"DUnCompLayout")
+
+        self.tabuniqueinto = QTabWidget(self,"tabuniqueinto")
+
+        self.Widget8 = QWidget(self.tabuniqueinto,"Widget8")
+        Widget8Layout = QGridLayout(self.Widget8,1,1,11,6,"Widget8Layout")
+
+        layout3 = QVBoxLayout(None,0,6,"layout3")
+
+        self.textLabel1 = QLabel(self.Widget8,"textLabel1")
+        layout3.addWidget(self.textLabel1)
+
+        self.LEcomp = QLineEdit(self.Widget8,"LEcomp")
+        self.LEcomp.setMinimumSize(QSize(390,40))
+        layout3.addWidget(self.LEcomp)
+
+        Widget8Layout.addMultiCellLayout(layout3,0,0,0,1)
+
+        self.Commentaire = QLabel(self.Widget8,"Commentaire")
+
+        Widget8Layout.addMultiCellWidget(self.Commentaire,5,5,0,1)
+
+        self.LEReel = QLineEdit(self.Widget8,"LEReel")
+        self.LEReel.setMinimumSize(QSize(190,40))
+
+        Widget8Layout.addWidget(self.LEReel,3,0)
+
+        self.LEImag = QLineEdit(self.Widget8,"LEImag")
+        self.LEImag.setMinimumSize(QSize(190,40))
+
+        Widget8Layout.addWidget(self.LEImag,3,1)
+
+        self.buttonGroup1 = QButtonGroup(self.Widget8,"buttonGroup1")
+
+        self.RBRI = QRadioButton(self.buttonGroup1,"RBRI")
+        self.RBRI.setGeometry(QRect(20,40,335,20))
+
+        self.RBMP = QRadioButton(self.buttonGroup1,"RBMP")
+        self.RBMP.setGeometry(QRect(20,20,335,20))
+
+        Widget8Layout.addMultiCellWidget(self.buttonGroup1,2,2,0,1)
+        spacer3 = QSpacerItem(20,41,QSizePolicy.Minimum,QSizePolicy.Expanding)
+        Widget8Layout.addItem(spacer3,1,0)
+        spacer4 = QSpacerItem(20,41,QSizePolicy.Minimum,QSizePolicy.Expanding)
+        Widget8Layout.addItem(spacer4,4,0)
+
+        layout2 = QHBoxLayout(None,0,6,"layout2")
+
+        self.bSup = QPushButton(self.Widget8,"bSup")
+        self.bSup.setAutoDefault(1)
+        layout2.addWidget(self.bSup)
+
+        self.bOk = QPushButton(self.Widget8,"bOk")
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+        layout2.addWidget(self.bOk)
+
+        self.bHelp = QPushButton(self.Widget8,"bHelp")
+        self.bHelp.setAutoDefault(1)
+        layout2.addWidget(self.bHelp)
+
+        Widget8Layout.addMultiCellLayout(layout2,6,6,0,1)
+        self.tabuniqueinto.insertTab(self.Widget8,QString(""))
+
+        DUnCompLayout.addWidget(self.tabuniqueinto,0,0)
+
+        self.languageChange()
+
+        self.resize(QSize(484,480).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc)
+        self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed)
+        self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed)
+        self.connect(self.LEImag,SIGNAL("returnPressed()"),self.LEImagRPressed)
+        self.connect(self.LEReel,SIGNAL("returnPressed()"),self.LEReelRPressed)
+        self.connect(self.LEcomp,SIGNAL("returnPressed()"),self.LEcompRPressed)
+
+        self.setTabOrder(self.LEcomp,self.LEReel)
+        self.setTabOrder(self.LEReel,self.LEImag)
+        self.setTabOrder(self.LEImag,self.tabuniqueinto)
+        self.setTabOrder(self.tabuniqueinto,self.RBRI)
+        self.setTabOrder(self.RBRI,self.RBMP)
+        self.setTabOrder(self.RBMP,self.bSup)
+        self.setTabOrder(self.bSup,self.bOk)
+        self.setTabOrder(self.bOk,self.bHelp)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("DUnComp"))
+        self.textLabel1.setText(self.__tr("<font size=\"+2\">Complexe de la forme : a+bj</font>"))
+        self.Commentaire.setText(self.__tr("<font size=\"+2\">Un complexe est attendu</font>"))
+        self.buttonGroup1.setTitle(self.__tr("OU"))
+        self.RBRI.setText(self.__trUtf8("\x52\x49\x20\x20\x20\x3a\x20\x52\xc3\xa9\x65\x6c\x09\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x49\x6d\x61\x67\x69\x6e\x61\x69\x72\x65"))
+        self.RBMP.setText(self.__tr("MP        : Module                                                 Phase"))
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(self.__tr("Alt+S"))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(self.__tr("Alt+D"))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+        self.tabuniqueinto.changeTab(self.Widget8,self.__tr("Saisir Valeur"))
+
+
+    def BSupPressed(self):
+        print "DUnComp.BSupPressed(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DUnComp.ViewDoc(): Not implemented yet"
+
+    def BOkPressed(self):
+        print "DUnComp.BOkPressed(): Not implemented yet"
+
+    def LEImagRPressed(self):
+        print "DUnComp.LEImagRPressed(): Not implemented yet"
+
+    def LEReelRPressed(self):
+        print "DUnComp.LEReelRPressed(): Not implemented yet"
+
+    def LEcompRPressed(self):
+        print "DUnComp.LEcompRPressed(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DUnComp",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DUnComp",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desUniqueComp.ui b/Ui/desUniqueComp.ui
new file mode 100644 (file)
index 0000000..ae0361d
--- /dev/null
@@ -0,0 +1,303 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DUnComp</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DUnComp</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>484</width>
+            <height>480</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>350</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DUnComp</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QTabWidget" row="0" column="0">
+            <property name="name">
+                <cstring>tabuniqueinto</cstring>
+            </property>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Widget8</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Saisir Valeur</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QLayoutWidget" row="0" column="0" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>layout3</cstring>
+                        </property>
+                        <vbox>
+                            <property name="name">
+                                <cstring>unnamed</cstring>
+                            </property>
+                            <widget class="QLabel">
+                                <property name="name">
+                                    <cstring>textLabel1</cstring>
+                                </property>
+                                <property name="text">
+                                    <string>&lt;font size="+2"&gt;Complexe de la forme : a+bj&lt;/font&gt;</string>
+                                </property>
+                            </widget>
+                            <widget class="QLineEdit">
+                                <property name="name">
+                                    <cstring>LEcomp</cstring>
+                                </property>
+                                <property name="minimumSize">
+                                    <size>
+                                        <width>390</width>
+                                        <height>40</height>
+                                    </size>
+                                </property>
+                            </widget>
+                        </vbox>
+                    </widget>
+                    <widget class="QLabel" row="5" column="0" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>Commentaire</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;font size="+2"&gt;Un complexe est attendu&lt;/font&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QLineEdit" row="3" column="0">
+                        <property name="name">
+                            <cstring>LEReel</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>190</width>
+                                <height>40</height>
+                            </size>
+                        </property>
+                    </widget>
+                    <widget class="QLineEdit" row="3" column="1">
+                        <property name="name">
+                            <cstring>LEImag</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>190</width>
+                                <height>40</height>
+                            </size>
+                        </property>
+                    </widget>
+                    <widget class="QButtonGroup" row="2" column="0" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>buttonGroup1</cstring>
+                        </property>
+                        <property name="title">
+                            <string>OU</string>
+                        </property>
+                        <widget class="QRadioButton">
+                            <property name="name">
+                                <cstring>RBRI</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>20</x>
+                                    <y>40</y>
+                                    <width>335</width>
+                                    <height>20</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>RI   : Réel                                                Imaginaire</string>
+                            </property>
+                        </widget>
+                        <widget class="QRadioButton">
+                            <property name="name">
+                                <cstring>RBMP</cstring>
+                            </property>
+                            <property name="geometry">
+                                <rect>
+                                    <x>20</x>
+                                    <y>20</y>
+                                    <width>335</width>
+                                    <height>20</height>
+                                </rect>
+                            </property>
+                            <property name="text">
+                                <string>MP     : Module                                                 Phase</string>
+                            </property>
+                        </widget>
+                    </widget>
+                    <spacer row="1" column="0">
+                        <property name="name">
+                            <cstring>spacer3</cstring>
+                        </property>
+                        <property name="orientation">
+                            <enum>Vertical</enum>
+                        </property>
+                        <property name="sizeType">
+                            <enum>Expanding</enum>
+                        </property>
+                        <property name="sizeHint">
+                            <size>
+                                <width>20</width>
+                                <height>41</height>
+                            </size>
+                        </property>
+                    </spacer>
+                    <spacer row="4" column="0">
+                        <property name="name">
+                            <cstring>spacer4</cstring>
+                        </property>
+                        <property name="orientation">
+                            <enum>Vertical</enum>
+                        </property>
+                        <property name="sizeType">
+                            <enum>Expanding</enum>
+                        </property>
+                        <property name="sizeHint">
+                            <size>
+                                <width>20</width>
+                                <height>41</height>
+                            </size>
+                        </property>
+                    </spacer>
+                    <widget class="QLayoutWidget" row="6" column="0" rowspan="1" colspan="2">
+                        <property name="name">
+                            <cstring>layout2</cstring>
+                        </property>
+                        <hbox>
+                            <property name="name">
+                                <cstring>unnamed</cstring>
+                            </property>
+                            <widget class="QPushButton">
+                                <property name="name">
+                                    <cstring>bSup</cstring>
+                                </property>
+                                <property name="text">
+                                    <string>&amp;Supprimer</string>
+                                </property>
+                                <property name="accel">
+                                    <string>Alt+S</string>
+                                </property>
+                                <property name="autoDefault">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="toolTip" stdset="0">
+                                    <string>suppression du mot clef</string>
+                                </property>
+                            </widget>
+                            <widget class="QPushButton">
+                                <property name="name">
+                                    <cstring>bOk</cstring>
+                                </property>
+                                <property name="text">
+                                    <string>&amp;Valider</string>
+                                </property>
+                                <property name="accel">
+                                    <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+                                </property>
+                                <property name="autoDefault">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="default">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="toolTip" stdset="0">
+                                    <string>validation de la saisie</string>
+                                </property>
+                            </widget>
+                            <widget class="QPushButton">
+                                <property name="name">
+                                    <cstring>bHelp</cstring>
+                                </property>
+                                <property name="text">
+                                    <string>&amp;Documentation</string>
+                                </property>
+                                <property name="accel">
+                                    <string>Alt+D</string>
+                                </property>
+                                <property name="autoDefault">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="toolTip" stdset="0">
+                                    <string>affichage documentation aster</string>
+                                </property>
+                            </widget>
+                        </hbox>
+                    </widget>
+                </grid>
+            </widget>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>bHelp</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnComp</receiver>
+        <slot>ViewDoc()</slot>
+    </connection>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnComp</receiver>
+        <slot>BOkPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bSup</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnComp</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+    <connection>
+        <sender>LEImag</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DUnComp</receiver>
+        <slot>LEImagRPressed()</slot>
+    </connection>
+    <connection>
+        <sender>LEReel</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DUnComp</receiver>
+        <slot>LEReelRPressed()</slot>
+    </connection>
+    <connection>
+        <sender>LEcomp</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DUnComp</receiver>
+        <slot>LEcompRPressed()</slot>
+    </connection>
+</connections>
+<tabstops>
+    <tabstop>LEcomp</tabstop>
+    <tabstop>LEReel</tabstop>
+    <tabstop>LEImag</tabstop>
+    <tabstop>tabuniqueinto</tabstop>
+    <tabstop>RBRI</tabstop>
+    <tabstop>RBMP</tabstop>
+    <tabstop>bSup</tabstop>
+    <tabstop>bOk</tabstop>
+    <tabstop>bHelp</tabstop>
+</tabstops>
+<slots>
+    <slot>BSupPressed()</slot>
+    <slot>ViewDoc()</slot>
+    <slot>BOkPressed()</slot>
+    <slot>LEImagRPressed()</slot>
+    <slot>LEReelRPressed()</slot>
+    <slot>LEcompRPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desUniqueInto.py b/Ui/desUniqueInto.py
new file mode 100644 (file)
index 0000000..914a3d2
--- /dev/null
@@ -0,0 +1,102 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desUniqueInto.ui'
+#
+# Created: mar mar 25 10:05:09 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DUnIn(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DUnIn")
+
+        self.setMinimumSize(QSize(350,0))
+
+        DUnInLayout = QGridLayout(self,1,1,11,6,"DUnInLayout")
+
+        self.tabuniqueinto = QTabWidget(self,"tabuniqueinto")
+
+        self.Widget8 = QWidget(self.tabuniqueinto,"Widget8")
+        Widget8Layout = QGridLayout(self.Widget8,1,1,11,6,"Widget8Layout")
+
+        self.Commentaire = QLabel(self.Widget8,"Commentaire")
+        self.Commentaire.setMinimumSize(QSize(420,30))
+
+        Widget8Layout.addWidget(self.Commentaire,2,0)
+
+        layout2 = QHBoxLayout(None,0,6,"layout2")
+
+        self.bSup = QPushButton(self.Widget8,"bSup")
+        self.bSup.setMinimumSize(QSize(0,30))
+        self.bSup.setAutoDefault(1)
+        layout2.addWidget(self.bSup)
+
+        self.bOk = QPushButton(self.Widget8,"bOk")
+        self.bOk.setMinimumSize(QSize(0,30))
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+        layout2.addWidget(self.bOk)
+
+        self.bHelp = QPushButton(self.Widget8,"bHelp")
+        self.bHelp.setMinimumSize(QSize(0,30))
+        self.bHelp.setAutoDefault(1)
+        layout2.addWidget(self.bHelp)
+
+        Widget8Layout.addLayout(layout2,3,0)
+
+        self.listBoxVal = QListBox(self.Widget8,"listBoxVal")
+
+        Widget8Layout.addWidget(self.listBoxVal,1,0)
+
+        self.textLabel2 = QLabel(self.Widget8,"textLabel2")
+
+        Widget8Layout.addWidget(self.textLabel2,0,0)
+        self.tabuniqueinto.insertTab(self.Widget8,QString(""))
+
+        DUnInLayout.addWidget(self.tabuniqueinto,0,0)
+
+        self.languageChange()
+
+        self.resize(QSize(482,480).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        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 languageChange(self):
+        self.setCaption(self.__tr("DUnIn"))
+        self.Commentaire.setText(QString.null)
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(self.__tr("Alt+S"))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(self.__tr("Alt+D"))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+        self.textLabel2.setText(self.__tr("<b><u><p align=\"center\">Valeurs possibles</p></u></b>"))
+        self.tabuniqueinto.changeTab(self.Widget8,self.__tr("Saisir Valeur"))
+
+
+    def BSupPressed(self):
+        print "DUnIn.BSupPressed(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DUnIn.ViewDoc(): Not implemented yet"
+
+    def BOkPressed(self):
+        print "DUnIn.BOkPressed(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DUnIn",s,c)
diff --git a/Ui/desUniqueInto.ui b/Ui/desUniqueInto.ui
new file mode 100644 (file)
index 0000000..67f99a9
--- /dev/null
@@ -0,0 +1,183 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DUnIn</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DUnIn</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>482</width>
+            <height>480</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>350</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DUnIn</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QTabWidget" row="0" column="0">
+            <property name="name">
+                <cstring>tabuniqueinto</cstring>
+            </property>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Widget8</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Saisir Valeur</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QLabel" row="2" column="0">
+                        <property name="name">
+                            <cstring>Commentaire</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>420</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string></string>
+                        </property>
+                    </widget>
+                    <widget class="QLayoutWidget" row="3" column="0">
+                        <property name="name">
+                            <cstring>layout2</cstring>
+                        </property>
+                        <hbox>
+                            <property name="name">
+                                <cstring>unnamed</cstring>
+                            </property>
+                            <widget class="QPushButton">
+                                <property name="name">
+                                    <cstring>bSup</cstring>
+                                </property>
+                                <property name="minimumSize">
+                                    <size>
+                                        <width>0</width>
+                                        <height>30</height>
+                                    </size>
+                                </property>
+                                <property name="text">
+                                    <string>&amp;Supprimer</string>
+                                </property>
+                                <property name="accel">
+                                    <string>Alt+S</string>
+                                </property>
+                                <property name="autoDefault">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="toolTip" stdset="0">
+                                    <string>suppression du mot clef</string>
+                                </property>
+                            </widget>
+                            <widget class="QPushButton">
+                                <property name="name">
+                                    <cstring>bOk</cstring>
+                                </property>
+                                <property name="minimumSize">
+                                    <size>
+                                        <width>0</width>
+                                        <height>30</height>
+                                    </size>
+                                </property>
+                                <property name="text">
+                                    <string>&amp;Valider</string>
+                                </property>
+                                <property name="accel">
+                                    <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+                                </property>
+                                <property name="autoDefault">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="default">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="toolTip" stdset="0">
+                                    <string>validation de la saisie</string>
+                                </property>
+                            </widget>
+                            <widget class="QPushButton">
+                                <property name="name">
+                                    <cstring>bHelp</cstring>
+                                </property>
+                                <property name="minimumSize">
+                                    <size>
+                                        <width>0</width>
+                                        <height>30</height>
+                                    </size>
+                                </property>
+                                <property name="text">
+                                    <string>&amp;Documentation</string>
+                                </property>
+                                <property name="accel">
+                                    <string>Alt+D</string>
+                                </property>
+                                <property name="autoDefault">
+                                    <bool>true</bool>
+                                </property>
+                                <property name="toolTip" stdset="0">
+                                    <string>affichage documentation aster</string>
+                                </property>
+                            </widget>
+                        </hbox>
+                    </widget>
+                    <widget class="QListBox" row="1" column="0">
+                        <property name="name">
+                            <cstring>listBoxVal</cstring>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="0" column="0">
+                        <property name="name">
+                            <cstring>textLabel2</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;b&gt;&lt;u&gt;&lt;p align="center"&gt;Valeurs possibles&lt;/p&gt;&lt;/u&gt;&lt;/b&gt;</string>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>bHelp</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnIn</receiver>
+        <slot>ViewDoc()</slot>
+    </connection>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnIn</receiver>
+        <slot>BOkPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bSup</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnIn</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+</connections>
+<slots>
+    <slot>BSupPressed()</slot>
+    <slot>ViewDoc()</slot>
+    <slot>BOkPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desUniqueSDCO.py b/Ui/desUniqueSDCO.py
new file mode 100644 (file)
index 0000000..bd94a1d
--- /dev/null
@@ -0,0 +1,122 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desUniqueSDCO.ui'
+#
+# Created: ven avr 4 11:27:09 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DUnSDCO(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DUnSDCO")
+
+        self.setMinimumSize(QSize(350,0))
+
+        DUnSDCOLayout = QGridLayout(self,1,1,11,6,"DUnSDCOLayout")
+
+        self.tabuniqueinto = QTabWidget(self,"tabuniqueinto")
+
+        self.Widget8 = QWidget(self.tabuniqueinto,"Widget8")
+        Widget8Layout = QGridLayout(self.Widget8,1,1,11,6,"Widget8Layout")
+
+        self.bSup = QPushButton(self.Widget8,"bSup")
+        self.bSup.setMinimumSize(QSize(0,30))
+        self.bSup.setAutoDefault(1)
+
+        Widget8Layout.addWidget(self.bSup,4,0)
+
+        self.bOk = QPushButton(self.Widget8,"bOk")
+        self.bOk.setMinimumSize(QSize(0,30))
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+
+        Widget8Layout.addWidget(self.bOk,4,1)
+
+        self.bHelp = QPushButton(self.Widget8,"bHelp")
+        self.bHelp.setMinimumSize(QSize(0,30))
+        self.bHelp.setAutoDefault(1)
+
+        Widget8Layout.addWidget(self.bHelp,4,2)
+
+        self.Commentaire = QLabel(self.Widget8,"Commentaire")
+        self.Commentaire.setMinimumSize(QSize(311,30))
+
+        Widget8Layout.addMultiCellWidget(self.Commentaire,3,3,0,2)
+
+        self.textLabel2_2 = QLabel(self.Widget8,"textLabel2_2")
+
+        Widget8Layout.addMultiCellWidget(self.textLabel2_2,0,0,0,2)
+
+        self.LESDCO = QLineEdit(self.Widget8,"LESDCO")
+        self.LESDCO.setMinimumSize(QSize(300,40))
+
+        Widget8Layout.addMultiCellWidget(self.LESDCO,1,1,0,2)
+
+        self.textLabel2 = QLabel(self.Widget8,"textLabel2")
+
+        Widget8Layout.addMultiCellWidget(self.textLabel2,2,2,0,2)
+        self.tabuniqueinto.insertTab(self.Widget8,QString(""))
+
+        DUnSDCOLayout.addWidget(self.tabuniqueinto,0,0)
+
+        self.languageChange()
+
+        self.resize(QSize(461,480).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc)
+        self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed)
+        self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed)
+        self.connect(self.LESDCO,SIGNAL("returnPressed()"),self.LESDCOReturnPressed)
+
+        self.setTabOrder(self.LESDCO,self.tabuniqueinto)
+        self.setTabOrder(self.tabuniqueinto,self.bSup)
+        self.setTabOrder(self.bSup,self.bOk)
+        self.setTabOrder(self.bOk,self.bHelp)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("DUnIn"))
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(self.__tr("Alt+S"))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(self.__tr("Alt+D"))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+        self.Commentaire.setText(QString.null)
+        self.textLabel2_2.setText(self.__tr("<h1><font size=\"+2\">Nom du nouveau concept : </font></h1>"))
+        self.textLabel2.setText(self.__tr("<font size=\"+1\">Un objet de type CO est attendu</font>"))
+        self.tabuniqueinto.changeTab(self.Widget8,self.__tr("Saisir Valeur"))
+
+
+    def BSupPressed(self):
+        print "DUnSDCO.BSupPressed(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DUnSDCO.ViewDoc(): Not implemented yet"
+
+    def BOkPressed(self):
+        print "DUnSDCO.BOkPressed(): Not implemented yet"
+
+    def LESDCOReturnPressed(self):
+        print "DUnSDCO.LESDCOReturnPressed(): Not implemented yet"
+
+    def BOuiPressed(self):
+        print "DUnSDCO.BOuiPressed(): Not implemented yet"
+
+    def BNonPressed(self):
+        print "DUnSDCO.BNonPressed(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DUnSDCO",s,c)
diff --git a/Ui/desUniqueSDCO.ui b/Ui/desUniqueSDCO.ui
new file mode 100644 (file)
index 0000000..f847c8b
--- /dev/null
@@ -0,0 +1,203 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DUnSDCO</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DUnSDCO</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>461</width>
+            <height>480</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>350</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DUnIn</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QTabWidget" row="0" column="0">
+            <property name="name">
+                <cstring>tabuniqueinto</cstring>
+            </property>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Widget8</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Saisir Valeur</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QPushButton" row="4" column="0">
+                        <property name="name">
+                            <cstring>bSup</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&amp;Supprimer</string>
+                        </property>
+                        <property name="accel">
+                            <string>Alt+S</string>
+                        </property>
+                        <property name="autoDefault">
+                            <bool>true</bool>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>suppression du mot clef</string>
+                        </property>
+                    </widget>
+                    <widget class="QPushButton" row="4" column="1">
+                        <property name="name">
+                            <cstring>bOk</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&amp;Valider</string>
+                        </property>
+                        <property name="accel">
+                            <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+                        </property>
+                        <property name="autoDefault">
+                            <bool>true</bool>
+                        </property>
+                        <property name="default">
+                            <bool>true</bool>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>validation de la saisie</string>
+                        </property>
+                    </widget>
+                    <widget class="QPushButton" row="4" column="2">
+                        <property name="name">
+                            <cstring>bHelp</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&amp;Documentation</string>
+                        </property>
+                        <property name="accel">
+                            <string>Alt+D</string>
+                        </property>
+                        <property name="autoDefault">
+                            <bool>true</bool>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>affichage documentation aster</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="3" column="0" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>Commentaire</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>311</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string></string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="0" column="0" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>textLabel2_2</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;h1&gt;&lt;font size="+2"&gt;Nom du nouveau concept : &lt;/font&gt;&lt;/h1&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QLineEdit" row="1" column="0" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>LESDCO</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>300</width>
+                                <height>40</height>
+                            </size>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="2" column="0" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>textLabel2</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;font size="+1"&gt;Un objet de type CO est attendu&lt;/font&gt;</string>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>bHelp</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnSDCO</receiver>
+        <slot>ViewDoc()</slot>
+    </connection>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnSDCO</receiver>
+        <slot>BOkPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bSup</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnSDCO</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+    <connection>
+        <sender>LESDCO</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DUnSDCO</receiver>
+        <slot>LESDCOReturnPressed()</slot>
+    </connection>
+</connections>
+<tabstops>
+    <tabstop>LESDCO</tabstop>
+    <tabstop>tabuniqueinto</tabstop>
+    <tabstop>bSup</tabstop>
+    <tabstop>bOk</tabstop>
+    <tabstop>bHelp</tabstop>
+</tabstops>
+<slots>
+    <slot>BSupPressed()</slot>
+    <slot>ViewDoc()</slot>
+    <slot>BOkPressed()</slot>
+    <slot>LESDCOReturnPressed()</slot>
+    <slot>BOuiPressed()</slot>
+    <slot>BNonPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desUniqueSDCOInto.py b/Ui/desUniqueSDCOInto.py
new file mode 100644 (file)
index 0000000..4a7a9d2
--- /dev/null
@@ -0,0 +1,151 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desUniqueSDCOInto.ui'
+#
+# Created: ven avr 4 11:27:09 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DUnSDCOInto(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DUnSDCOInto")
+
+        self.setMinimumSize(QSize(350,0))
+
+        DUnSDCOIntoLayout = QGridLayout(self,1,1,11,6,"DUnSDCOIntoLayout")
+
+        self.tabuniqueinto = QTabWidget(self,"tabuniqueinto")
+
+        self.Widget8 = QWidget(self.tabuniqueinto,"Widget8")
+        Widget8Layout = QGridLayout(self.Widget8,1,1,11,6,"Widget8Layout")
+
+        self.textLabel2 = QLabel(self.Widget8,"textLabel2")
+
+        Widget8Layout.addMultiCellWidget(self.textLabel2,0,0,0,2)
+
+        self.LBSDCO = QListBox(self.Widget8,"LBSDCO")
+
+        Widget8Layout.addMultiCellWidget(self.LBSDCO,1,1,0,2)
+
+        self.textLabel2_3 = QLabel(self.Widget8,"textLabel2_3")
+
+        Widget8Layout.addMultiCellWidget(self.textLabel2_3,5,5,0,2)
+
+        self.Commentaire = QLabel(self.Widget8,"Commentaire")
+        self.Commentaire.setMinimumSize(QSize(420,30))
+
+        Widget8Layout.addMultiCellWidget(self.Commentaire,4,4,0,2)
+
+        layout3 = QGridLayout(None,1,1,0,6,"layout3")
+
+        Widget8Layout.addMultiCellLayout(layout3,2,2,0,2)
+
+        layout6 = QHBoxLayout(None,0,6,"layout6")
+
+        self.frame3 = QFrame(self.Widget8,"frame3")
+        self.frame3.setMinimumSize(QSize(190,50))
+        self.frame3.setFrameShape(QFrame.StyledPanel)
+        self.frame3.setFrameShadow(QFrame.Raised)
+
+        self.textLabel2_2 = QLabel(self.frame3,"textLabel2_2")
+        self.textLabel2_2.setGeometry(QRect(20,10,150,30))
+        layout6.addWidget(self.frame3)
+
+        self.LESDCO = QLineEdit(self.Widget8,"LESDCO")
+        self.LESDCO.setMinimumSize(QSize(220,40))
+        layout6.addWidget(self.LESDCO)
+
+        Widget8Layout.addMultiCellLayout(layout6,3,3,0,2)
+
+        self.bSup = QPushButton(self.Widget8,"bSup")
+        self.bSup.setMinimumSize(QSize(0,30))
+        self.bSup.setAutoDefault(1)
+
+        Widget8Layout.addWidget(self.bSup,6,0)
+
+        self.bOk = QPushButton(self.Widget8,"bOk")
+        self.bOk.setMinimumSize(QSize(0,30))
+        self.bOk.setAutoDefault(1)
+        self.bOk.setDefault(1)
+
+        Widget8Layout.addWidget(self.bOk,6,1)
+
+        self.bHelp = QPushButton(self.Widget8,"bHelp")
+        self.bHelp.setMinimumSize(QSize(0,30))
+        self.bHelp.setAutoDefault(1)
+
+        Widget8Layout.addWidget(self.bHelp,6,2)
+        self.tabuniqueinto.insertTab(self.Widget8,QString(""))
+
+        DUnSDCOIntoLayout.addWidget(self.tabuniqueinto,0,0)
+
+        self.languageChange()
+
+        self.resize(QSize(482,480).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc)
+        self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed)
+        self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed)
+        self.connect(self.LBSDCO,SIGNAL("clicked(QListBoxItem*)"),self.LBSDCOReturnPressed)
+        self.connect(self.LESDCO,SIGNAL("returnPressed()"),self.LESDCOReturnPressed)
+
+        self.setTabOrder(self.LESDCO,self.LBSDCO)
+        self.setTabOrder(self.LBSDCO,self.tabuniqueinto)
+        self.setTabOrder(self.tabuniqueinto,self.bSup)
+        self.setTabOrder(self.bSup,self.bOk)
+        self.setTabOrder(self.bOk,self.bHelp)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("DUnIn"))
+        self.textLabel2.setText(self.__trUtf8("\x3c\x66\x6f\x6e\x74\x20\x73\x69\x7a\x65\x3d\x22\x2b\x31\x22\x3e\x3c\x75\x3e\x53\x74\x72\x75\x63\x74\x75\x72\x65\x73\x20\x64\x65\x20\x64\x6f\x6e\x6e\xc3\xa9\x65\x73\x20\x64\x75\x20\x74\x79\x70\x65\x20\x72\x65\x71\x75\x69\x73\x20\x70\x61\x72\x20\x6c\x27\x6f\x62\x6a\x65\x74\x20\x63\x6f\x75\x72\x61\x6e\x74\x20\x3c\x2f\x75\x3e\x3c\x2f\x66\x6f\x6e\x74\x3e"))
+        self.textLabel2_3.setText(self.__tr("<font size=\"+1\">Un objet de type CO est attendu</font>"))
+        self.Commentaire.setText(QString.null)
+        self.textLabel2_2.setText(self.__tr("<font size=\"+1\"> Nom concept : </font>"))
+        self.bSup.setText(self.__tr("&Supprimer"))
+        self.bSup.setAccel(self.__tr("Alt+S"))
+        QToolTip.add(self.bSup,self.__tr("suppression du mot clef"))
+        self.bOk.setText(self.__tr("&Valider"))
+        self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))
+        QToolTip.add(self.bOk,self.__tr("validation de la saisie"))
+        self.bHelp.setText(self.__tr("&Documentation"))
+        self.bHelp.setAccel(self.__tr("Alt+D"))
+        QToolTip.add(self.bHelp,self.__tr("affichage documentation aster"))
+        self.tabuniqueinto.changeTab(self.Widget8,self.__tr("Saisir Valeur"))
+
+
+    def BSupPressed(self):
+        print "DUnSDCOInto.BSupPressed(): Not implemented yet"
+
+    def ViewDoc(self):
+        print "DUnSDCOInto.ViewDoc(): Not implemented yet"
+
+    def BOkPressed(self):
+        print "DUnSDCOInto.BOkPressed(): Not implemented yet"
+
+    def LESDCOReturnPressed(self):
+        print "DUnSDCOInto.LESDCOReturnPressed(): Not implemented yet"
+
+    def BOuiPressed(self):
+        print "DUnSDCOInto.BOuiPressed(): Not implemented yet"
+
+    def BNonPressed(self):
+        print "DUnSDCOInto.BNonPressed(): Not implemented yet"
+
+    def LBSDCOReturnPressed(self):
+        print "DUnSDCOInto.LBSDCOReturnPressed(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DUnSDCOInto",s,c)
+
+    def __trUtf8(self,s,c = None):
+        return qApp.translate("DUnSDCOInto",s,c,QApplication.UnicodeUTF8)
diff --git a/Ui/desUniqueSDCOInto.ui b/Ui/desUniqueSDCOInto.ui
new file mode 100644 (file)
index 0000000..3849072
--- /dev/null
@@ -0,0 +1,269 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DUnSDCOInto</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DUnSDCOInto</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>482</width>
+            <height>480</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>350</width>
+            <height>0</height>
+        </size>
+    </property>
+    <property name="caption">
+        <string>DUnIn</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QTabWidget" row="0" column="0">
+            <property name="name">
+                <cstring>tabuniqueinto</cstring>
+            </property>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>Widget8</cstring>
+                </property>
+                <attribute name="title">
+                    <string>Saisir Valeur</string>
+                </attribute>
+                <grid>
+                    <property name="name">
+                        <cstring>unnamed</cstring>
+                    </property>
+                    <widget class="QLabel" row="0" column="0" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>textLabel2</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;font size="+1"&gt;&lt;u&gt;Structures de données du type requis par l'objet courant &lt;/u&gt;&lt;/font&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QListBox" row="1" column="0" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>LBSDCO</cstring>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="5" column="0" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>textLabel2_3</cstring>
+                        </property>
+                        <property name="text">
+                            <string>&lt;font size="+1"&gt;Un objet de type CO est attendu&lt;/font&gt;</string>
+                        </property>
+                    </widget>
+                    <widget class="QLabel" row="4" column="0" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>Commentaire</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>420</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string></string>
+                        </property>
+                    </widget>
+                    <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>layout3</cstring>
+                        </property>
+                        <grid>
+                            <property name="name">
+                                <cstring>unnamed</cstring>
+                            </property>
+                        </grid>
+                    </widget>
+                    <widget class="QLayoutWidget" row="3" column="0" rowspan="1" colspan="3">
+                        <property name="name">
+                            <cstring>layout6</cstring>
+                        </property>
+                        <hbox>
+                            <property name="name">
+                                <cstring>unnamed</cstring>
+                            </property>
+                            <widget class="QFrame">
+                                <property name="name">
+                                    <cstring>frame3</cstring>
+                                </property>
+                                <property name="minimumSize">
+                                    <size>
+                                        <width>190</width>
+                                        <height>50</height>
+                                    </size>
+                                </property>
+                                <property name="frameShape">
+                                    <enum>StyledPanel</enum>
+                                </property>
+                                <property name="frameShadow">
+                                    <enum>Raised</enum>
+                                </property>
+                                <widget class="QLabel">
+                                    <property name="name">
+                                        <cstring>textLabel2_2</cstring>
+                                    </property>
+                                    <property name="geometry">
+                                        <rect>
+                                            <x>20</x>
+                                            <y>10</y>
+                                            <width>150</width>
+                                            <height>30</height>
+                                        </rect>
+                                    </property>
+                                    <property name="text">
+                                        <string>&lt;font size="+1"&gt; Nom concept : &lt;/font&gt;</string>
+                                    </property>
+                                </widget>
+                            </widget>
+                            <widget class="QLineEdit">
+                                <property name="name">
+                                    <cstring>LESDCO</cstring>
+                                </property>
+                                <property name="minimumSize">
+                                    <size>
+                                        <width>220</width>
+                                        <height>40</height>
+                                    </size>
+                                </property>
+                            </widget>
+                        </hbox>
+                    </widget>
+                    <widget class="QPushButton" row="6" column="0">
+                        <property name="name">
+                            <cstring>bSup</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&amp;Supprimer</string>
+                        </property>
+                        <property name="accel">
+                            <string>Alt+S</string>
+                        </property>
+                        <property name="autoDefault">
+                            <bool>true</bool>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>suppression du mot clef</string>
+                        </property>
+                    </widget>
+                    <widget class="QPushButton" row="6" column="1">
+                        <property name="name">
+                            <cstring>bOk</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&amp;Valider</string>
+                        </property>
+                        <property name="accel">
+                            <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+                        </property>
+                        <property name="autoDefault">
+                            <bool>true</bool>
+                        </property>
+                        <property name="default">
+                            <bool>true</bool>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>validation de la saisie</string>
+                        </property>
+                    </widget>
+                    <widget class="QPushButton" row="6" column="2">
+                        <property name="name">
+                            <cstring>bHelp</cstring>
+                        </property>
+                        <property name="minimumSize">
+                            <size>
+                                <width>0</width>
+                                <height>30</height>
+                            </size>
+                        </property>
+                        <property name="text">
+                            <string>&amp;Documentation</string>
+                        </property>
+                        <property name="accel">
+                            <string>Alt+D</string>
+                        </property>
+                        <property name="autoDefault">
+                            <bool>true</bool>
+                        </property>
+                        <property name="toolTip" stdset="0">
+                            <string>affichage documentation aster</string>
+                        </property>
+                    </widget>
+                </grid>
+            </widget>
+        </widget>
+    </grid>
+</widget>
+<connections>
+    <connection>
+        <sender>bHelp</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnSDCOInto</receiver>
+        <slot>ViewDoc()</slot>
+    </connection>
+    <connection>
+        <sender>bOk</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnSDCOInto</receiver>
+        <slot>BOkPressed()</slot>
+    </connection>
+    <connection>
+        <sender>bSup</sender>
+        <signal>clicked()</signal>
+        <receiver>DUnSDCOInto</receiver>
+        <slot>BSupPressed()</slot>
+    </connection>
+    <connection>
+        <sender>LBSDCO</sender>
+        <signal>clicked(QListBoxItem*)</signal>
+        <receiver>DUnSDCOInto</receiver>
+        <slot>LBSDCOReturnPressed()</slot>
+    </connection>
+    <connection>
+        <sender>LESDCO</sender>
+        <signal>returnPressed()</signal>
+        <receiver>DUnSDCOInto</receiver>
+        <slot>LESDCOReturnPressed()</slot>
+    </connection>
+</connections>
+<tabstops>
+    <tabstop>LESDCO</tabstop>
+    <tabstop>LBSDCO</tabstop>
+    <tabstop>tabuniqueinto</tabstop>
+    <tabstop>bSup</tabstop>
+    <tabstop>bOk</tabstop>
+    <tabstop>bHelp</tabstop>
+</tabstops>
+<slots>
+    <slot>BSupPressed()</slot>
+    <slot>ViewDoc()</slot>
+    <slot>BOkPressed()</slot>
+    <slot>LESDCOReturnPressed()</slot>
+    <slot>BOuiPressed()</slot>
+    <slot>BNonPressed()</slot>
+    <slot>LBSDCOReturnPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/desVisu.py b/Ui/desVisu.py
new file mode 100644 (file)
index 0000000..0957153
--- /dev/null
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desVisu.ui'
+#
+# Created: mar mar 25 10:05:09 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+
+class DVisu(QWidget):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QWidget.__init__(self,parent,name,fl)
+
+        if not name:
+            self.setName("DVisu")
+
+
+        DVisuLayout = QGridLayout(self,1,1,11,6,"DVisuLayout")
+
+        self.TB = QTextBrowser(self,"TB")
+
+        DVisuLayout.addWidget(self.TB,0,0)
+
+        self.languageChange()
+
+        self.resize(QSize(501,394).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("Visualisation Include Materiau"))
+
+
+    def __tr(self,s,c = None):
+        return qApp.translate("DVisu",s,c)
diff --git a/Ui/desVisu.ui b/Ui/desVisu.ui
new file mode 100644 (file)
index 0000000..3f61d74
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DVisu</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DVisu</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>501</width>
+            <height>394</height>
+        </rect>
+    </property>
+    <property name="caption">
+        <string>Visualisation Include Materiau</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <widget class="QTextBrowser" row="0" column="0">
+            <property name="name">
+                <cstring>TB</cstring>
+            </property>
+        </widget>
+    </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/Ui/image120.gif b/Ui/image120.gif
new file mode 100644 (file)
index 0000000..1834870
Binary files /dev/null and b/Ui/image120.gif differ
diff --git a/Ui/image120.png b/Ui/image120.png
new file mode 100644 (file)
index 0000000..264a970
Binary files /dev/null and b/Ui/image120.png differ
diff --git a/Ui/image240.gif b/Ui/image240.gif
new file mode 100644 (file)
index 0000000..2ed5874
Binary files /dev/null and b/Ui/image240.gif differ
diff --git a/Ui/makefile b/Ui/makefile
new file mode 100644 (file)
index 0000000..430af33
--- /dev/null
@@ -0,0 +1,15 @@
+PYUIC = pyuic
+.PHONY : all
+.SUFFIXES : .ui .py
+
+
+PY_FILES = desChoixCata.py desCommande.py desCommentaire.py desError.py desFormule.py desInactif.py \
+       desInclude.py desListeParam.py desMacro.py desMCFact.py desMCListAjout.py desParam.py \
+       desPlusieursBase.py desPlusieursInto.py desPoursuite.py desRacine.py desSelectVal.py \
+       desUniqueASSD.py desUniqueBase.py desUniqueComp.py desUniqueInto.py desUniqueSDCOInto.py \
+       desUniqueSDCO.py desVisu.py myMain.py aideQT.py OptionsEditeur.py OptionsPdf.py
+
+%.py:%.ui
+       ${PYUIC} -o $@ $<
+
+all : $(PY_FILES)
diff --git a/Ui/myMain.py b/Ui/myMain.py
new file mode 100644 (file)
index 0000000..c19f142
--- /dev/null
@@ -0,0 +1,553 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'myMain.ui'
+#
+# Created: Thu Jun 19 11:40:51 2008
+#      by: The PyQt User Interface Compiler (pyuic) 3.16
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+image0_data = \
+    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
+    "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \
+    "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \
+    "\x74\x49\x44\x41\x54\x38\x8d\xed\xd5\xc1\x09\xc0" \
+    "\x20\x0c\x05\xd0\x6f\xe9\x36\x81\x2c\x10\xb2\xff" \
+    "\xdd\x85\xd2\x53\x85\xb6\xa9\x91\x48\x0f\x05\x3f" \
+    "\x08\x1a\xf0\x29\x12\x10\xf8\x28\xc5\xa9\xd9\xc4" \
+    "\xde\x96\xcd\x2b\x9a\xd9\xeb\x00\x00\x66\x0e\x2f" \
+    "\xe0\xc2\x51\x98\x39\xc4\xf7\x0c\x4c\x44\x6d\x5e" \
+    "\x6b\x35\x38\xcf\x92\x82\x45\xe4\xb2\xf6\xf0\x14" \
+    "\xac\xaa\x8f\xda\x1d\x4f\xc1\xa5\x74\x1b\x22\x07" \
+    "\x9f\x9d\x11\x1d\x96\xea\x8a\x91\x2c\x78\xc1\x0b" \
+    "\xee\x64\xe6\x07\x19\xf5\x7e\x92\x03\xad\x45\x2a" \
+    "\x04\xcc\x4e\x50\x20\x00\x00\x00\x00\x49\x45\x4e" \
+    "\x44\xae\x42\x60\x82"
+image1_data = \
+    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
+    "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \
+    "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \
+    "\x99\x49\x44\x41\x54\x38\x8d\xed\x94\x41\x0e\x85" \
+    "\x20\x0c\x44\x5f\x89\xc7\x36\x7f\x61\xbc\x77\x5d" \
+    "\x28\x48\xa4\x28\x60\xff\xce\xd9\x54\x8b\xbe\x8e" \
+    "\x13\x04\x3e\x1d\x92\x81\x77\xf4\x81\xa1\x23\xdc" \
+    "\x2b\x34\xf6\xf4\x7a\x3d\xe2\xb8\x65\xa8\x84\x3f" \
+    "\x40\x01\x98\x2a\x0b\x3d\x5f\x62\xc5\x83\x00\xaa" \
+    "\x1a\xd7\x05\x50\x44\x9a\xb9\xd5\x07\xa7\x73\xa8" \
+    "\xa4\xba\x4f\x92\xa2\xdf\x33\x3c\x64\xc6\x3b\xeb" \
+    "\xbd\x82\xe5\xb8\xad\xde\xcb\xcc\x78\x20\xeb\x42" \
+    "\x66\xc6\x39\x74\x5d\xfa\x80\xf3\x6f\xaf\x66\xc6" \
+    "\x6f\xa1\x9c\x3f\x88\x2f\xb4\x70\xec\x05\xcd\xc0" \
+    "\xbe\xd0\x78\x93\xf6\x8e\x17\x14\x92\x63\x5f\x68" \
+    "\x6c\x3e\xef\xf6\xba\x3c\x8f\xdd\x36\x6d\xc4\xc0" \
+    "\x45\x2c\x87\x81\xf8\x08\x00\x00\x00\x00\x49\x45" \
+    "\x4e\x44\xae\x42\x60\x82"
+image2_data = \
+    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
+    "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \
+    "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \
+    "\xa0\x49\x44\x41\x54\x38\x8d\xd5\x95\x4d\x0a\x80" \
+    "\x20\x10\x85\x9f\xd1\x46\x68\xe1\x8d\xe6\x62\xd2" \
+    "\x22\xbc\x98\x37\x6a\x21\xb4\xac\x45\x19\x92\xc6" \
+    "\x64\x69\xe0\xb7\xf1\x87\xf1\xf1\x1c\x47\x05\x2a" \
+    "\x21\x8e\x76\x2d\xad\xdb\xfb\x9e\x99\xf6\x56\x8f" \
+    "\x80\xb5\x36\x4b\x85\x88\xce\x35\x44\x04\x00\xe8" \
+    "\x0a\x39\x8c\xe8\xf9\x90\x34\xd2\x29\x2c\xc3\x7c" \
+    "\x8e\xbd\x53\x0f\xeb\x58\x3a\x05\xe9\x54\x34\x1f" \
+    "\x8a\x02\x7b\x2a\x7d\x3a\x1f\x09\xbf\x85\x4d\xc5" \
+    "\xd5\xd9\x53\xaa\x39\x6e\x4f\x38\xca\xb1\x99\xe2" \
+    "\xd2\xe1\x08\xab\xe1\x56\xf8\x2e\x30\x97\x7f\xcb" \
+    "\x4d\x8f\xf9\x42\xd7\x5d\xbe\xbe\xd2\xe1\x43\x95" \
+    "\x3a\x93\xf6\xca\xad\x3d\x61\x11\xf4\x4b\x7d\x4f" \
+    "\x82\x0f\xf9\xc0\x06\x9b\xb5\x1e\xcd\xed\x31\x8c" \
+    "\x5c\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60" \
+    "\x82"
+image3_data = \
+    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
+    "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \
+    "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \
+    "\x73\x49\x44\x41\x54\x38\x8d\xed\x92\xc1\x0e\x80" \
+    "\x20\x08\x40\xb1\xef\x66\x1d\x1c\xff\x4d\x87\x6a" \
+    "\xa8\x88\xa1\x76\x69\xf9\x36\x0f\x28\x3e\xd8\x00" \
+    "\x60\xf1\x59\x42\x5f\x3a\x71\xf5\x36\x02\xe0\x8e" \
+    "\x99\x2b\x09\x88\x01\xd0\x28\x54\x17\x6a\xe4\x7f" \
+    "\x21\xce\x1f\xb5\xb0\x5d\x38\xed\xdc\x90\x60\xd0" \
+    "\xf1\x13\x79\x63\x5b\x3b\xc9\x2b\xd5\x18\xe2\x39" \
+    "\xa9\x43\xec\x1d\x5a\xb7\x78\x5c\xee\x10\x7b\xe4" \
+    "\xb2\x15\xaf\x40\x91\xf8\x94\xde\x47\x18\x1e\xce" \
+    "\xa5\x9e\xde\x9e\xc5\x9f\x38\x00\x62\xac\x28\xb1" \
+    "\xe3\xd7\x01\xd9\x00\x00\x00\x00\x49\x45\x4e\x44" \
+    "\xae\x42\x60\x82"
+image4_data = \
+    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
+    "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \
+    "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \
+    "\x74\x49\x44\x41\x54\x38\x8d\xed\x92\xc1\x0a\xc0" \
+    "\x20\x08\x40\x6d\xdf\x2d\x3b\x84\xff\xed\x0e\xa3" \
+    "\x58\x6a\x26\xd1\x65\xe0\x83\x0e\xa5\x3e\x85\x04" \
+    "\x48\x7e\x4b\x91\x0f\x54\x89\xf1\x9e\xa5\xa3\xca" \
+    "\x0f\x8a\x89\x63\x65\xb3\x06\xc4\x2d\xd6\x13\xc6" \
+    "\x49\xbd\xc2\x59\x83\x16\x13\x62\x19\xf0\xf9\x36" \
+    "\xc0\xa2\xef\x00\xd7\x5a\x62\x61\x4d\x3a\xb2\x29" \
+    "\x96\xf2\xa3\x62\xff\xa3\x37\xc5\xeb\xed\xe9\x62" \
+    "\xaa\xd1\xa2\xe8\x4a\xaa\xa2\xf7\x50\xdd\x12\x74" \
+    "\x8c\x0f\xd0\xab\x93\x24\x67\x78\x00\x59\x6e\x28" \
+    "\xb1\x74\x3f\x46\x86\x00\x00\x00\x00\x49\x45\x4e" \
+    "\x44\xae\x42\x60\x82"
+image5_data = \
+    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
+    "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \
+    "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \
+    "\x82\x49\x44\x41\x54\x38\x8d\xcd\xd3\x41\x12\x80" \
+    "\x20\x08\x05\x50\xe8\xe0\x2e\xbc\x38\xad\x32\x73" \
+    "\x50\x3e\x48\x53\x7f\xe3\xe4\x8c\x4f\x24\x25\xfa" \
+    "\x28\xe2\x9c\x6f\x39\x92\x0b\xf9\x27\x6c\xb6\x01" \
+    "\x85\x35\x88\x77\x61\x13\x88\xc2\x57\x64\x18\xcd" \
+    "\xa0\x15\xf5\x20\xb4\xe6\xb5\x5b\xe1\x09\xdc\x06" \
+    "\x22\xb8\xe2\x2a\xcf\x31\x05\x6e\x18\xdf\xdf\xf8" \
+    "\x06\x06\xaa\x55\x1c\xc6\x35\x64\xc4\xdc\xf8\x0c" \
+    "\xd0\x20\x1d\x57\x7a\x5c\x85\xa8\x84\x5f\xdc\x02" \
+    "\x5e\xa5\x30\x7a\xfc\xcd\x07\xe2\x3a\x1d\xf2\x83" \
+    "\xec\x2b\x37\xd9\xad\x5f\xb4\xdf\xef\xd4\x9c\xfb" \
+    "\xf7\x2f\xac\x98\xc8\xcc\x89\x00\x00\x00\x00\x49" \
+    "\x45\x4e\x44\xae\x42\x60\x82"
+image6_data = \
+    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
+    "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \
+    "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \
+    "\xbf\x49\x44\x41\x54\x38\x8d\xd5\x93\x41\x0a\x83" \
+    "\x30\x10\x45\xdf\x48\x8e\xe5\x1d\xbc\x8c\x3b\xa9" \
+    "\x8b\xf4\x6a\x9e\xab\xd3\x85\x35\x0d\x26\x63\x62" \
+    "\x44\x4a\x3f\x0c\x42\x66\xfc\xf3\xf8\x24\xf0\x6f" \
+    "\x12\x40\x2b\x66\xda\x8c\x55\xf3\xde\x22\x12\xcf" \
+    "\x9d\x92\xcb\x98\xc0\xba\x2d\x7c\x45\x44\xcf\x9a" \
+    "\x07\x63\x8b\xba\xd5\x3c\x44\x91\x23\x5e\xcf\x7c" \
+    "\xc1\x62\x36\x97\xa9\x25\x40\xc1\x1f\xf4\xfd\xa7" \
+    "\x52\x75\x01\x5d\x24\xa9\x38\x9e\x7d\x6f\x53\xdf" \
+    "\x4f\xe4\xcc\xab\x32\x3e\xea\x0f\x03\xc0\xc4\xb2" \
+    "\xa0\x71\x2c\xe6\xad\xd8\x9b\x59\xb7\x66\x1c\x3b" \
+    "\xe0\x95\x98\x5f\x26\x16\x79\xee\x4e\xbc\xc2\x2c" \
+    "\x97\x88\x55\x1f\xe6\xa2\xcb\xc4\x96\x9a\x89\x4b" \
+    "\xcb\x6f\x23\xee\x36\x1a\xab\x62\xe2\x52\xc5\x72" \
+    "\x94\xdf\xbf\xb6\x10\xbb\xf2\xc8\x97\xb8\xa4\x6c" \
+    "\xc6\x67\x7e\xaa\x51\x95\x71\xfa\x08\x7e\xa8\x37" \
+    "\x62\xda\x9a\xba\xcb\x20\x23\x5f\x00\x00\x00\x00" \
+    "\x49\x45\x4e\x44\xae\x42\x60\x82"
+image7_data = \
+    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
+    "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \
+    "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \
+    "\xd5\x49\x44\x41\x54\x38\x8d\xc5\x95\x5d\x0a\x84" \
+    "\x30\x0c\x84\x27\xe2\xa9\x0a\x9e\x6c\x8b\x0f\x4b" \
+    "\x3d\xd9\x82\xd7\xca\x3e\x58\xd7\xfe\x4c\xd0\xba" \
+    "\x5d\x76\x40\x02\x4d\xf2\x65\xda\x0a\x05\x7e\x24" \
+    "\x39\xc9\xeb\x8d\x9e\xaa\x88\x41\xa0\xc9\xaa\xd8" \
+    "\xc8\x2a\xb3\x2f\x9c\x42\x5b\xe1\xe3\x0e\x0d\xcf" \
+    "\x00\xc0\x03\x08\xf0\xb3\xa7\xa0\x74\x10\xa9\xd7" \
+    "\x14\x2e\x00\xb4\x2c\x5a\x5f\xab\x69\x6b\x97\x9b" \
+    "\x1c\x83\x7f\xc0\xc3\x16\xb6\xe4\x16\x5b\x64\xf7" \
+    "\x8d\x71\x63\x59\x91\x9b\xdc\x45\x70\xde\x47\xc0" \
+    "\x47\x32\xdd\x5e\x5b\xcc\x35\xf0\xc9\x77\x62\xae" \
+    "\x78\x79\x36\xdc\xcf\x75\x13\x57\x7e\x79\xf4\x8c" \
+    "\x4b\x27\xaa\x0f\x13\x27\xb2\x40\xf5\x11\x7f\xcb" \
+    "\xe3\x48\xaa\x33\xb6\xe0\x22\x4b\x05\x4d\x07\x46" \
+    "\xb8\x02\x5e\x2e\x3b\x3e\x73\xcd\xe0\xdd\x1c\x97" \
+    "\xf0\x2e\x8e\xd9\xd0\xaf\x1d\xb3\x81\x22\x4b\xdf" \
+    "\x33\xee\xe6\x98\xa9\x34\xa0\xf6\x17\xb4\x55\x40" \
+    "\xd0\x0b\xcf\x4c\xa0\x8f\xc0\xdf\xf4\x06\xe3\x25" \
+    "\xc1\x98\x1b\xc4\x18\x76\x00\x00\x00\x00\x49\x45" \
+    "\x4e\x44\xae\x42\x60\x82"
+image8_data = \
+    "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \
+    "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \
+    "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x02" \
+    "\x5d\x49\x44\x41\x54\x38\x8d\xd5\x93\xa1\x72\xdb" \
+    "\x40\x10\x86\x3f\x67\x0a\x56\xec\xc4\x22\x78\xd0" \
+    "\x65\x36\x93\xa0\xc2\x1c\x68\xd6\xc2\xe6\x0d\xf2" \
+    "\x1a\x81\x81\x11\x34\x94\x99\xc2\x54\xa8\x32\x9b" \
+    "\x55\xf0\xe0\x89\xdd\xb1\x5b\xa6\x02\xb7\x9d\x66" \
+    "\x92\xd6\x99\xb6\xd3\x99\xfe\xe8\x6e\x67\xe7\xdb" \
+    "\x7f\x77\xef\xe0\x7f\xd3\xe2\xc7\x4b\xd7\x75\xb3" \
+    "\x73\x0e\xef\x3d\x51\x15\x00\x23\x82\xb5\x16\x6b" \
+    "\x2d\x57\x57\x57\x8b\x17\x29\xbf\x02\xb7\x6d\x3b" \
+    "\x0f\x87\x03\xb9\x2d\x58\xae\xd7\x60\x04\x00\xef" \
+    "\x1c\xe3\xc7\x03\x06\xa8\xaa\x8a\xeb\xeb\xeb\x57" \
+    "\xc1\x17\xdf\xa0\x6d\xdb\x52\x5d\xd7\x54\xef\xb6" \
+    "\x00\xa8\x2a\x49\x13\x8a\x12\x35\x32\xec\x3a\xc4" \
+    "\x2b\x9b\xcd\xe6\x55\xce\x2f\xfa\xbe\x9f\x87\xc3" \
+    "\x40\xfd\xe1\x3d\xcb\x4d\x8d\xaa\xa2\x4e\x48\xee" \
+    "\x12\xc6\x82\x38\x08\xc1\x07\x96\x9b\x1a\x8a\x9c" \
+    "\xe3\xf1\xf8\xaa\x51\x5c\x38\xe7\xc8\xad\xa5\xaa" \
+    "\x6b\x00\xc4\x5f\x12\x9c\x67\xd2\x23\x93\x8c\x88" \
+    "\xe6\xc8\x60\xd1\x18\xb1\xd5\x92\xd1\x39\xba\xae" \
+    "\x9b\xcf\x83\xa7\x89\x65\xb5\x46\x51\x34\x80\x1b" \
+    "\x1d\x2e\x1f\x49\x45\xc0\xe3\x50\x09\x64\x08\xea" \
+    "\x15\x44\x90\xc2\xe0\xbd\x3f\xef\x58\x53\xc2\xe4" \
+    "\x86\xa0\x01\x9f\x4d\x84\xf5\x84\x18\x41\x83\x62" \
+    "\xb0\x40\x8e\x8b\x23\xc9\x24\x50\x10\x93\x31\x4d" \
+    "\xd3\x59\xf0\x1b\x80\x98\x14\x11\x20\x25\x14\x40" \
+    "\x15\xf1\x96\x4c\x0b\xbc\x1b\x48\x4b\x07\xe4\x68" \
+    "\x88\x80\xc0\x29\xeb\xd7\x8e\x41\x41\xf5\xb4\x34" \
+    "\xfd\x76\x86\x4c\x05\x3f\x1e\x08\x4b\x0f\x85\x80" \
+    "\x26\x54\x40\x63\x40\x44\xce\x83\x8b\xbc\xc0\x39" \
+    "\x87\xa6\x13\x50\xa3\xa2\x28\x5e\x1d\x5a\x44\x14" \
+    "\xd0\x70\x8a\xa5\x98\x08\x21\x62\xad\x3d\x0f\xb6" \
+    "\xd6\xe2\x87\xcf\xa4\x98\x50\x8d\x27\x40\x50\x44" \
+    "\x73\x70\x42\x8c\x91\xaf\x8d\x10\xfd\x44\x81\x60" \
+    "\x8c\x39\x0b\x5e\x00\xdc\xdd\xdd\xcd\x8e\x80\xa9" \
+    "\xde\x42\x02\x48\xe8\x04\x84\x08\x56\xf0\x3e\x02" \
+    "\x90\x7d\x72\x94\x65\xc9\xba\x5a\xe3\x46\x87\x31" \
+    "\xe6\xa7\x9f\xe5\x02\x60\xb5\x5a\x61\x02\xc4\xee" \
+    "\x40\xa6\x89\x4c\x33\xf2\xcb\x0c\xb1\x06\x51\x28" \
+    "\x14\xf8\xf8\x99\xb2\x2c\xb9\xb9\xb9\x59\xb8\xd1" \
+    "\xf1\xf8\xf8\x48\xd3\x34\xb4\x6d\xfb\xe2\x9b\xfe" \
+    "\x5e\xad\xef\xfb\xf9\x78\x3c\x32\x3a\x87\x18\x81" \
+    "\xec\xb4\x20\x0d\x11\x51\xa8\xeb\x9a\xed\x76\xbb" \
+    "\x00\x18\x86\x61\xee\xba\x8e\xfd\x7e\x8f\x31\x86" \
+    "\xed\x76\xcb\x6a\xb5\x7a\xe2\xfe\x59\x1b\x5d\xd7" \
+    "\xcd\xde\x7b\x62\x8c\x88\x08\x79\x9e\x63\xad\xa5" \
+    "\xaa\xaa\x67\xb9\xbb\xdd\x6e\x6e\x9a\x06\xef\x3d" \
+    "\x75\x5d\x3f\x29\xfe\xc7\xea\xfb\x7e\xbe\xbd\xbd" \
+    "\x9d\xad\xb5\x73\x59\x96\xf3\xfd\xfd\xfd\xfc\xa2" \
+    "\xe3\xdf\xd5\xc3\xc3\xc3\xdc\x34\x0d\xd3\x34\xb1" \
+    "\xd9\x6c\xfe\x1e\x18\x4e\x63\xdc\xef\xf7\xa4\x94" \
+    "\xfe\x26\xf6\x1f\xe9\x0b\xbc\x4c\x5e\x59\xd6\x14" \
+    "\xca\xf4\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42" \
+    "\x60\x82"
+
+class Eficas(QMainWindow):
+    def __init__(self,parent = None,name = None,fl = 0):
+        QMainWindow.__init__(self,parent,name,fl)
+        self.statusBar()
+
+        self.image0 = QPixmap()
+        self.image0.loadFromData(image0_data,"PNG")
+        self.image1 = QPixmap()
+        self.image1.loadFromData(image1_data,"PNG")
+        self.image2 = QPixmap()
+        self.image2.loadFromData(image2_data,"PNG")
+        self.image3 = QPixmap()
+        self.image3.loadFromData(image3_data,"PNG")
+        self.image4 = QPixmap()
+        self.image4.loadFromData(image4_data,"PNG")
+        self.image5 = QPixmap()
+        self.image5.loadFromData(image5_data,"PNG")
+        self.image6 = QPixmap()
+        self.image6.loadFromData(image6_data,"PNG")
+        self.image7 = QPixmap()
+        self.image7.loadFromData(image7_data,"PNG")
+        self.image8 = QPixmap()
+        self.image8.loadFromData(image8_data,"PNG")
+        if not name:
+            self.setName("Eficas")
+
+        self.setEnabled(1)
+        self.setSizePolicy(QSizePolicy(QSizePolicy.Minimum,QSizePolicy.Minimum,0,0,self.sizePolicy().hasHeightForWidth()))
+        self.setMinimumSize(QSize(21,336))
+        self.setBackgroundOrigin(QMainWindow.WidgetOrigin)
+        f = QFont(self.font())
+        self.setFont(f)
+
+        self.setCentralWidget(QWidget(self,"qt_central_widget"))
+
+        self.line1 = QFrame(self.centralWidget(),"line1")
+        self.line1.setGeometry(QRect(-30,-10,930,20))
+        self.line1.setFrameShape(QFrame.HLine)
+        self.line1.setFrameShadow(QFrame.Sunken)
+        self.line1.setFrameShape(QFrame.HLine)
+
+        self.fileNewAction = QAction(self,"fileNewAction")
+        self.fileNewAction.setIconSet(QIconSet(self.image0))
+        self.fileOpenAction = QAction(self,"fileOpenAction")
+        self.fileOpenAction.setIconSet(QIconSet(self.image1))
+        self.fileSaveAction = QAction(self,"fileSaveAction")
+        self.fileSaveAction.setIconSet(QIconSet(self.image2))
+        self.fileSaveAsAction = QAction(self,"fileSaveAsAction")
+        self.fileExitAction = QAction(self,"fileExitAction")
+        self.editUndoAction = QAction(self,"editUndoAction")
+        self.editUndoAction.setEnabled(0)
+        self.editUndoAction.setIconSet(QIconSet(self.image3))
+        self.editRedoAction = QAction(self,"editRedoAction")
+        self.editRedoAction.setEnabled(0)
+        self.editRedoAction.setIconSet(QIconSet(self.image4))
+        self.editCutAction = QAction(self,"editCutAction")
+        self.editCutAction.setIconSet(QIconSet(self.image5))
+        self.editCopyAction = QAction(self,"editCopyAction")
+        self.editCopyAction.setIconSet(QIconSet(self.image6))
+        self.editPasteAction = QAction(self,"editPasteAction")
+        self.editPasteAction.setIconSet(QIconSet(self.image7))
+        self.jdcFichierResultatAction = QAction(self,"jdcFichierResultatAction")
+        self.jdcFichierResultatAction.setEnabled(1)
+        self.jdcFichierResultatAction.setIconSet(QIconSet(self.image8))
+        self.helpContentsAction = QAction(self,"helpContentsAction")
+        self.helpIndexAction = QAction(self,"helpIndexAction")
+        self.helpAboutAction = QAction(self,"helpAboutAction")
+        self.helpAboutAction.setOn(0)
+        self.fileSaveCloseAction = QAction(self,"fileSaveCloseAction")
+        self.fileCloseAction = QAction(self,"fileCloseAction")
+        self.fileNewViewAction = QAction(self,"fileNewViewAction")
+        self.fileNewViewAction.setEnabled(0)
+        self.fileCloseAllAction = QAction(self,"fileCloseAllAction")
+        self.jdcRapportDeValidationAction = QAction(self,"jdcRapportDeValidationAction")
+        self.jdcFichierSourceAction = QAction(self,"jdcFichierSourceAction")
+        self.traduitV7V8Action = QAction(self,"traduitV7V8Action")
+        self.aidenew_itemAction = QAction(self,"aidenew_itemAction")
+        self.fileNewInclude = QAction(self,"fileNewInclude")
+        self.optionEditeurAction = QAction(self,"optionEditeurAction")
+        self.optionPdfAction = QAction(self,"optionPdfAction")
+
+
+        self.toolBar = QToolBar(QString(""),self,Qt.DockTop)
+
+        self.toolBar.setFrameShape(QToolBar.MenuBarPanel)
+        self.toolBar.setHorizontallyStretchable(0)
+        self.fileNewAction.addTo(self.toolBar)
+        self.fileSaveAction.addTo(self.toolBar)
+        self.fileOpenAction.addTo(self.toolBar)
+        self.fileSaveAsAction.addTo(self.toolBar)
+        self.editCutAction.addTo(self.toolBar)
+        self.editPasteAction.addTo(self.toolBar)
+        self.jdcFichierResultatAction.addTo(self.toolBar)
+        self.fileExitAction.addTo(self.toolBar)
+        self.toolBar.addSeparator()
+
+
+        self.MenuBar = QMenuBar(self,"MenuBar")
+
+        self.MenuBar.setMargin(2)
+
+        self.Fichier = QPopupMenu(self)
+        self.fileNewAction.addTo(self.Fichier)
+        self.fileNewInclude.addTo(self.Fichier)
+        self.fileOpenAction.addTo(self.Fichier)
+        self.fileSaveAction.addTo(self.Fichier)
+        self.fileSaveAsAction.addTo(self.Fichier)
+        self.fileCloseAction.addTo(self.Fichier)
+        self.fileCloseAllAction.addTo(self.Fichier)
+        self.Fichier.insertSeparator()
+        self.Fichier.insertSeparator()
+        self.fileExitAction.addTo(self.Fichier)
+        self.MenuBar.insertItem(QString(""),self.Fichier,2)
+
+        self.Edition = QPopupMenu(self)
+        self.Edition.insertSeparator()
+        self.editCutAction.addTo(self.Edition)
+        self.editCopyAction.addTo(self.Edition)
+        self.editPasteAction.addTo(self.Edition)
+        self.MenuBar.insertItem(QString(""),self.Edition,3)
+
+        self.JdC = QPopupMenu(self)
+        self.jdcRapportDeValidationAction.addTo(self.JdC)
+        self.jdcFichierSourceAction.addTo(self.JdC)
+        self.jdcFichierResultatAction.addTo(self.JdC)
+        self.MenuBar.insertItem(QString(""),self.JdC,4)
+
+        self.Aide = QPopupMenu(self)
+        self.aidenew_itemAction.addTo(self.Aide)
+        self.MenuBar.insertItem(QString(""),self.Aide,5)
+
+        self.Options = QPopupMenu(self)
+        self.optionEditeurAction.addTo(self.Options)
+        self.optionPdfAction.addTo(self.Options)
+        self.MenuBar.insertItem(QString(""),self.Options,6)
+
+        self.Traduction = QPopupMenu(self)
+        self.traduitV7V8Action.addTo(self.Traduction)
+        self.MenuBar.insertItem(QString(""),self.Traduction,7)
+
+        self.Patrons = QPopupMenu(self)
+        self.MenuBar.insertItem(QString(""),self.Patrons,8)
+
+
+        self.languageChange()
+
+        self.resize(QSize(902,594).expandedTo(self.minimumSizeHint()))
+        self.clearWState(Qt.WState_Polished)
+
+        self.connect(self.fileNewAction,SIGNAL("activated()"),self.fileNew)
+        self.connect(self.fileOpenAction,SIGNAL("activated()"),self.fileOpen)
+        self.connect(self.fileSaveAction,SIGNAL("activated()"),self.fileSave)
+        self.connect(self.fileSaveAsAction,SIGNAL("activated()"),self.fileSaveAs)
+        self.connect(self.fileExitAction,SIGNAL("activated()"),self.fileExit)
+        self.connect(self.editUndoAction,SIGNAL("activated()"),self.editUndo)
+        self.connect(self.editRedoAction,SIGNAL("activated()"),self.editRedo)
+        self.connect(self.editCutAction,SIGNAL("activated()"),self.editCut)
+        self.connect(self.editPasteAction,SIGNAL("activated()"),self.editPaste)
+        self.connect(self.jdcFichierResultatAction,SIGNAL("activated()"),self.visuJdcPy)
+        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.fileCloseAction,SIGNAL("activated()"),self.fileClose)
+        self.connect(self.fileNewViewAction,SIGNAL("activated()"),self.fileNewView)
+        self.connect(self.fileCloseAllAction,SIGNAL("activated()"),self.fileCloseAll)
+        self.connect(self.editCopyAction,SIGNAL("activated()"),self.editCopy)
+        self.connect(self.jdcRapportDeValidationAction,SIGNAL("activated()"),self.jdcRapport)
+        self.connect(self.jdcFichierSourceAction,SIGNAL("activated()"),self.jdcFichierSource)
+        self.connect(self.traduitV7V8Action,SIGNAL("activated()"),self.traductionV7V8)
+        self.connect(self.aidenew_itemAction,SIGNAL("activated()"),self.helpAbout)
+        self.connect(self.fileNewInclude,SIGNAL("activated()"),self.NewInclude)
+        self.connect(self.optionEditeurAction,SIGNAL("activated()"),self.optionEditeur)
+        self.connect(self.optionPdfAction,SIGNAL("activated()"),self.optionPdf)
+
+
+    def languageChange(self):
+        self.setCaption(self.__tr("Eficas "))
+        self.fileNewAction.setText(self.__tr("Nouveau"))
+        self.fileNewAction.setMenuText(self.__tr("&Nouveau"))
+        self.fileNewAction.setAccel(self.__tr("Ctrl+N"))
+        self.fileOpenAction.setText(self.__tr("Ouvrir"))
+        self.fileOpenAction.setMenuText(self.__tr("&Ouvrir"))
+        self.fileOpenAction.setAccel(self.__tr("Ctrl+O"))
+        self.fileSaveAction.setText(self.__tr("Enregistrer"))
+        self.fileSaveAction.setMenuText(self.__tr("&Enregistrer"))
+        self.fileSaveAction.setAccel(self.__tr("Ctrl+E"))
+        self.fileSaveAsAction.setText(self.__tr("Enregistrer Sous"))
+        self.fileSaveAsAction.setMenuText(self.__tr("Enregistrer Sous"))
+        self.fileSaveAsAction.setAccel(QString.null)
+        self.fileExitAction.setText(self.__tr("Quitter"))
+        self.fileExitAction.setMenuText(self.__tr("Q&uitter"))
+        self.fileExitAction.setAccel(QString.null)
+        self.editUndoAction.setText(self.__tr("Undo"))
+        self.editUndoAction.setMenuText(self.__tr("&Undo"))
+        self.editUndoAction.setAccel(self.__tr("Ctrl+Z"))
+        self.editRedoAction.setText(self.__tr("Redo"))
+        self.editRedoAction.setMenuText(self.__tr("&Redo"))
+        self.editRedoAction.setAccel(self.__tr("Ctrl+Y"))
+        self.editCutAction.setText(self.__tr("Couper"))
+        self.editCutAction.setMenuText(self.__tr("C&ouper"))
+        self.editCutAction.setAccel(self.__tr("Ctrl+X"))
+        self.editCopyAction.setText(self.__tr("Copier"))
+        self.editCopyAction.setMenuText(self.__tr("&Copier"))
+        self.editCopyAction.setAccel(self.__tr("Ctrl+C"))
+        self.editPasteAction.setText(self.__tr("Coller"))
+        self.editPasteAction.setMenuText(self.__tr("&Coller"))
+        self.editPasteAction.setAccel(self.__tr("Ctrl+V"))
+        self.jdcFichierResultatAction.setText(self.__tr("Fichier Resultat"))
+        self.jdcFichierResultatAction.setMenuText(self.__tr("Fichier Resultat"))
+        self.jdcFichierResultatAction.setAccel(self.__tr("Ctrl+F"))
+        self.helpContentsAction.setText(self.__tr("Contents"))
+        self.helpContentsAction.setMenuText(self.__tr("&Contents..."))
+        self.helpContentsAction.setAccel(QString.null)
+        self.helpIndexAction.setText(self.__tr("Index"))
+        self.helpIndexAction.setMenuText(self.__tr("&Index..."))
+        self.helpIndexAction.setAccel(QString.null)
+        self.helpAboutAction.setText(self.__tr("About"))
+        self.helpAboutAction.setMenuText(self.__tr("&About"))
+        self.helpAboutAction.setAccel(QString.null)
+        self.fileSaveCloseAction.setText(self.__tr("Fermer"))
+        self.fileSaveCloseAction.setMenuText(self.__tr("Fermer"))
+        self.fileCloseAction.setText(self.__tr("Fermer"))
+        self.fileCloseAction.setMenuText(self.__tr("Fermer"))
+        self.fileCloseAction.setAccel(self.__tr("Ctrl+W"))
+        self.fileNewViewAction.setText(self.__tr("New view"))
+        self.fileCloseAllAction.setText(self.__tr("Tout Fermer"))
+        self.fileCloseAllAction.setMenuText(self.__tr("Tout Fermer"))
+        self.jdcRapportDeValidationAction.setText(self.__tr("Rapport de validation"))
+        self.jdcRapportDeValidationAction.setMenuText(self.__tr("Rapport de validation"))
+        self.jdcRapportDeValidationAction.setAccel(self.__tr("Ctrl+R"))
+        self.jdcFichierSourceAction.setText(self.__tr("Fichier source"))
+        self.jdcFichierSourceAction.setMenuText(self.__tr("Fichier source"))
+        self.jdcFichierSourceAction.setAccel(self.__tr("Ctrl+B"))
+        self.traduitV7V8Action.setText(self.__tr("traduitV7V8"))
+        self.traduitV7V8Action.setMenuText(self.__tr("traduitV7V8"))
+        self.aidenew_itemAction.setText(self.__tr("Eficas"))
+        self.fileNewInclude.setText(self.__tr("Nouvel Include"))
+        self.fileNewInclude.setMenuText(self.__tr("Nouvel Include"))
+        self.optionEditeurAction.setText(self.__tr("Parametres Eficas"))
+        self.optionEditeurAction.setMenuText(self.__tr("Parametres Eficas"))
+        self.optionPdfAction.setText(self.__tr("Lecteur Pdf"))
+        self.optionPdfAction.setMenuText(self.__tr("Lecteur Pdf"))
+        self.toolBar.setLabel(self.__tr("Tools"))
+        if self.MenuBar.findItem(2):
+            self.MenuBar.findItem(2).setText(self.__tr("&Fichier"))
+        if self.MenuBar.findItem(3):
+            self.MenuBar.findItem(3).setText(self.__tr("&Edition"))
+        if self.MenuBar.findItem(4):
+            self.MenuBar.findItem(4).setText(self.__tr("JdC"))
+        if self.MenuBar.findItem(5):
+            self.MenuBar.findItem(5).setText(self.__tr("&Aide"))
+        if self.MenuBar.findItem(6):
+            self.MenuBar.findItem(6).setText(self.__tr("Options"))
+        if self.MenuBar.findItem(7):
+            self.MenuBar.findItem(7).setText(self.__tr("Traduction"))
+        if self.MenuBar.findItem(8):
+            self.MenuBar.findItem(8).setText(self.__tr("Patrons"))
+
+
+    def fileNew(self):
+        print "Eficas.fileNew(): Not implemented yet"
+
+    def fileOpen(self):
+        print "Eficas.fileOpen(): Not implemented yet"
+
+    def fileSave(self):
+        print "Eficas.fileSave(): Not implemented yet"
+
+    def fileSaveAs(self):
+        print "Eficas.fileSaveAs(): Not implemented yet"
+
+    def filePrint(self):
+        print "Eficas.filePrint(): Not implemented yet"
+
+    def fileExit(self):
+        print "Eficas.fileExit(): Not implemented yet"
+
+    def editUndo(self):
+        print "Eficas.editUndo(): Not implemented yet"
+
+    def editRedo(self):
+        print "Eficas.editRedo(): Not implemented yet"
+
+    def jdcFichierSource(self):
+        print "Eficas.jdcFichierSource(): Not implemented yet"
+
+    def fileNewView(self):
+        print "Eficas.fileNewView(): Not implemented yet"
+
+    def editPaste(self):
+        print "Eficas.editPaste(): Not implemented yet"
+
+    def visuJdcPy(self):
+        print "Eficas.visuJdcPy(): Not implemented yet"
+
+    def helpIndex(self):
+        print "Eficas.helpIndex(): Not implemented yet"
+
+    def helpContents(self):
+        print "Eficas.helpContents(): Not implemented yet"
+
+    def helpAbout(self):
+        print "Eficas.helpAbout(): Not implemented yet"
+
+    def fileClose(self):
+        print "Eficas.fileClose(): Not implemented yet"
+
+    def fileCloseAll(self):
+        print "Eficas.fileCloseAll(): Not implemented yet"
+
+    def jdcRapport(self):
+        print "Eficas.jdcRapport(): Not implemented yet"
+
+    def editCut(self):
+        print "Eficas.editCut(): Not implemented yet"
+
+    def editCopy(self):
+        print "Eficas.editCopy(): Not implemented yet"
+
+    def traductionV7V8(self):
+        print "Eficas.traductionV7V8(): Not implemented yet"
+
+    def NewInclude(self):
+        print "Eficas.NewInclude(): Not implemented yet"
+
+    def optionEditeur(self):
+        print "Eficas.optionEditeur(): Not implemented yet"
+
+    def optionPdf(self):
+        print "Eficas.optionPdf(): Not implemented yet"
+
+    def __tr(self,s,c = None):
+        return qApp.translate("Eficas",s,c)
diff --git a/Ui/myMain.ui b/Ui/myMain.ui
new file mode 100644 (file)
index 0000000..51aee70
--- /dev/null
@@ -0,0 +1,710 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>Eficas</class>
+<widget class="QMainWindow">
+    <property name="name">
+        <cstring>Eficas</cstring>
+    </property>
+    <property name="enabled">
+        <bool>true</bool>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>902</width>
+            <height>594</height>
+        </rect>
+    </property>
+    <property name="minimumSize">
+        <size>
+            <width>21</width>
+            <height>349</height>
+        </size>
+    </property>
+    <property name="backgroundOrigin">
+        <enum>WidgetOrigin</enum>
+    </property>
+    <property name="font">
+        <font>
+        </font>
+    </property>
+    <property name="caption">
+        <string>Eficas </string>
+    </property>
+    <widget class="Line">
+        <property name="name">
+            <cstring>line1</cstring>
+        </property>
+        <property name="geometry">
+            <rect>
+                <x>-30</x>
+                <y>-10</y>
+                <width>930</width>
+                <height>20</height>
+            </rect>
+        </property>
+        <property name="frameShape">
+            <enum>HLine</enum>
+        </property>
+        <property name="frameShadow">
+            <enum>Sunken</enum>
+        </property>
+        <property name="orientation">
+            <enum>Horizontal</enum>
+        </property>
+    </widget>
+</widget>
+<menubar>
+    <property name="name">
+        <cstring>MenuBar</cstring>
+    </property>
+    <property name="margin">
+        <number>2</number>
+    </property>
+    <item text="&amp;Fichier" name="Fichier">
+        <action name="fileNewAction"/>
+        <action name="fileNewInclude"/>
+        <action name="fileOpenAction"/>
+        <action name="fileSaveAction"/>
+        <action name="fileSaveAsAction"/>
+        <action name="fileCloseAction"/>
+        <action name="fileCloseAllAction"/>
+        <separator/>
+        <separator/>
+        <action name="fileExitAction"/>
+    </item>
+    <item text="&amp;Edition" name="Edition">
+        <separator/>
+        <action name="editCutAction"/>
+        <action name="editCopyAction"/>
+        <action name="editPasteAction"/>
+    </item>
+    <item text="JdC" name="JdC">
+        <action name="jdcRapportDeValidationAction"/>
+        <action name="jdcFichierSourceAction"/>
+        <action name="jdcFichierResultatAction"/>
+    </item>
+    <item text="&amp;Aide" name="Aide">
+        <action name="aidenew_itemAction"/>
+    </item>
+    <item text="Options" name="Options">
+        <action name="optionEditeurAction"/>
+        <action name="optionPdfAction"/>
+    </item>
+    <item text="Traduction" name="Traduction">
+        <action name="traduitV7V8Action"/>
+        <action name="traduitV8V9Action"/>
+    </item>
+    <item text="Patrons" name="Patrons">
+    </item>
+</menubar>
+<toolbars>
+    <toolbar dock="2">
+        <property name="name">
+            <cstring>toolBar</cstring>
+        </property>
+        <property name="frameShape">
+            <enum>MenuBarPanel</enum>
+        </property>
+        <property name="horizontallyStretchable">
+            <bool>false</bool>
+        </property>
+        <property name="label">
+            <string>Tools</string>
+        </property>
+        <action name="fileNewAction"/>
+        <action name="fileSaveAction"/>
+        <action name="fileOpenAction"/>
+        <action name="fileSaveAsAction"/>
+        <action name="editCutAction"/>
+        <action name="editPasteAction"/>
+        <action name="jdcFichierResultatAction"/>
+        <action name="fileExitAction"/>
+        <separator/>
+    </toolbar>
+</toolbars>
+<actions>
+    <action>
+        <property name="name">
+            <cstring>fileNewAction</cstring>
+        </property>
+        <property name="iconSet">
+            <iconset>image0</iconset>
+        </property>
+        <property name="text">
+            <string>Nouveau</string>
+        </property>
+        <property name="menuText">
+            <string>&amp;Nouveau</string>
+        </property>
+        <property name="accel">
+            <string>Ctrl+N</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>fileOpenAction</cstring>
+        </property>
+        <property name="iconSet">
+            <iconset>image1</iconset>
+        </property>
+        <property name="text">
+            <string>Ouvrir</string>
+        </property>
+        <property name="menuText">
+            <string>&amp;Ouvrir</string>
+        </property>
+        <property name="accel">
+            <string>Ctrl+O</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>fileSaveAction</cstring>
+        </property>
+        <property name="iconSet">
+            <iconset>image2</iconset>
+        </property>
+        <property name="text">
+            <string>Enregistrer</string>
+        </property>
+        <property name="menuText">
+            <string>Enregistrer</string>
+        </property>
+        <property name="accel">
+            <string>Ctrl+S</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>fileSaveAsAction</cstring>
+        </property>
+        <property name="text">
+            <string>Enregistrer Sous</string>
+        </property>
+        <property name="menuText">
+            <string>Enregistrer Sous</string>
+        </property>
+        <property name="accel">
+            <string></string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>fileExitAction</cstring>
+        </property>
+        <property name="text">
+            <string>Quitter</string>
+        </property>
+        <property name="menuText">
+            <string>Q&amp;uitter</string>
+        </property>
+        <property name="accel">
+            <string></string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>editUndoAction</cstring>
+        </property>
+        <property name="enabled">
+            <bool>false</bool>
+        </property>
+        <property name="iconSet">
+            <iconset>image3</iconset>
+        </property>
+        <property name="text">
+            <string>Undo</string>
+        </property>
+        <property name="menuText">
+            <string>&amp;Undo</string>
+        </property>
+        <property name="accel">
+            <string>Ctrl+Z</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>editRedoAction</cstring>
+        </property>
+        <property name="enabled">
+            <bool>false</bool>
+        </property>
+        <property name="iconSet">
+            <iconset>image4</iconset>
+        </property>
+        <property name="text">
+            <string>Redo</string>
+        </property>
+        <property name="menuText">
+            <string>&amp;Redo</string>
+        </property>
+        <property name="accel">
+            <string>Ctrl+Y</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>editCutAction</cstring>
+        </property>
+        <property name="iconSet">
+            <iconset>image5</iconset>
+        </property>
+        <property name="text">
+            <string>Couper</string>
+        </property>
+        <property name="menuText">
+            <string>C&amp;ouper</string>
+        </property>
+        <property name="accel">
+            <string>Ctrl+X</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>editCopyAction</cstring>
+        </property>
+        <property name="iconSet">
+            <iconset>image6</iconset>
+        </property>
+        <property name="text">
+            <string>Copier</string>
+        </property>
+        <property name="menuText">
+            <string>&amp;Copier</string>
+        </property>
+        <property name="accel">
+            <string>Ctrl+C</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>editPasteAction</cstring>
+        </property>
+        <property name="iconSet">
+            <iconset>image7</iconset>
+        </property>
+        <property name="text">
+            <string>Coller</string>
+        </property>
+        <property name="menuText">
+            <string>&amp;Coller</string>
+        </property>
+        <property name="accel">
+            <string>Ctrl+V</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>jdcFichierResultatAction</cstring>
+        </property>
+        <property name="enabled">
+            <bool>true</bool>
+        </property>
+        <property name="iconSet">
+            <iconset>image8</iconset>
+        </property>
+        <property name="text">
+            <string>Fichier Resultat</string>
+        </property>
+        <property name="menuText">
+            <string>Fichier Resultat</string>
+        </property>
+        <property name="accel">
+            <string>Ctrl+F</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>helpContentsAction</cstring>
+        </property>
+        <property name="text">
+            <string>Contents</string>
+        </property>
+        <property name="menuText">
+            <string>&amp;Contents...</string>
+        </property>
+        <property name="accel">
+            <string></string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>helpIndexAction</cstring>
+        </property>
+        <property name="text">
+            <string>Index</string>
+        </property>
+        <property name="menuText">
+            <string>&amp;Index...</string>
+        </property>
+        <property name="accel">
+            <string></string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>helpAboutAction</cstring>
+        </property>
+        <property name="on">
+            <bool>false</bool>
+        </property>
+        <property name="text">
+            <string>About</string>
+        </property>
+        <property name="menuText">
+            <string>&amp;About</string>
+        </property>
+        <property name="accel">
+            <string></string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>fileSaveCloseAction</cstring>
+        </property>
+        <property name="text">
+            <string>Fermer</string>
+        </property>
+        <property name="menuText">
+            <string>Fermer</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>fileCloseAction</cstring>
+        </property>
+        <property name="text">
+            <string>Fermer</string>
+        </property>
+        <property name="menuText">
+            <string>Fermer</string>
+        </property>
+        <property name="accel">
+            <string>Ctrl+W</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>fileNewViewAction</cstring>
+        </property>
+        <property name="enabled">
+            <bool>false</bool>
+        </property>
+        <property name="text">
+            <string>New view</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>fileCloseAllAction</cstring>
+        </property>
+        <property name="text">
+            <string>Tout Fermer</string>
+        </property>
+        <property name="menuText">
+            <string>Tout Fermer</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>jdcRapportDeValidationAction</cstring>
+        </property>
+        <property name="text">
+            <string>Rapport de validation</string>
+        </property>
+        <property name="menuText">
+            <string>Rapport de validation</string>
+        </property>
+        <property name="accel">
+            <string>Ctrl+R</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>jdcFichierSourceAction</cstring>
+        </property>
+        <property name="text">
+            <string>Fichier source</string>
+        </property>
+        <property name="menuText">
+            <string>Fichier source</string>
+        </property>
+        <property name="accel">
+            <string>Ctrl+B</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>traduitV7V8Action</cstring>
+        </property>
+        <property name="text">
+            <string>traduitV7V8</string>
+        </property>
+        <property name="menuText">
+            <string>traduitV7V8</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>traduitV8V9Action</cstring>
+        </property>
+        <property name="text">
+            <string>traduitV8V9</string>
+        </property>
+        <property name="menuText">
+            <string>traduitV8V9</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>aidenew_itemAction</cstring>
+        </property>
+        <property name="text">
+            <string>Eficas</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>fileNewInclude</cstring>
+        </property>
+        <property name="text">
+            <string>Nouvel Include</string>
+        </property>
+        <property name="menuText">
+            <string>Nouvel Include</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>optionEditeurAction</cstring>
+        </property>
+        <property name="text">
+            <string>Parametres Eficas</string>
+        </property>
+        <property name="menuText">
+            <string>Parametres Eficas</string>
+        </property>
+    </action>
+    <action>
+        <property name="name">
+            <cstring>optionPdfAction</cstring>
+        </property>
+        <property name="text">
+            <string>Lecteur Pdf</string>
+        </property>
+        <property name="menuText">
+            <string>Lecteur Pdf</string>
+        </property>
+    </action>
+</actions>
+<images>
+    <image name="image0">
+        <data format="PNG" length="173">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000007449444154388dedd5c109c0200c05d06fe936812c10b2ffdd85d25385b6a991480f053f081af0291210f828c5a9d9c4de96cd2b9ad9eb0000660e2fe0c2519839c4f70c4c446d5e6b3538cf928245e4b2f6f014acaa8fda1d4fc1a5741b22079f9d111d96ea8a912c78c10bee64e60719f57e9203ad452a04cc4e50200000000049454e44ae426082</data>
+    </image>
+    <image name="image1">
+        <data format="PNG" length="210">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000009949444154388ded94410e85200c445f89c7367f61bc775d2848a42860ffced9548bbe8e13043e1d928177f481a123dc2b34f6f47a3de2b865a8843f4001982a0b3d5f62c58300aa1ad70550449ab9d507a773a8a4ba4f92a2df333c64c63bebbd82e5b8addecbcc7820eb4266c639745dfa80f36faf66c66fa19c3f882fb470ec05cdc0bed07893f68e171492635f686c3eeff6ba3c8fdd366dc4c0452c8781f8080000000049454e44ae426082</data>
+    </image>
+    <image name="image2">
+        <data format="PNG" length="217">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000a049444154388dd5954d0a802010859fd14668e18de662d222bc98376a21b4ac451992c66469e0b7f187f1f11c47052a218e762daddbfb9e99f6568f80b5364b8588ce35440400e80a398ce8f99034d2292cc37c8ebd530feb583a05e954341f8a027b2a7d3a1f09bf854dc5d5d953aa396e4f38cab199e2d2e108abe156f82e30977fcb4d8ff942d75dbebed2e143953a93f6caad3d6111f44b7d4f820ff9c0069bb51ecded318c5c0000000049454e44ae426082</data>
+    </image>
+    <image name="image3">
+        <data format="PNG" length="172">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000007349444154388ded92c10e80200840b1ef661d1cff4d876aa888a17669f9360f283ed80060f159425f3a71f53602e08e992b098801d02854176ae47f21ce1fb5b05d38eddc9060d0f11379635b3bc92bd518e239a943ec1d5ab7785cee107be4b215af4091f894de47181ecea59ede9ec59f380062ac28b1e3d701d90000000049454e44ae426082</data>
+    </image>
+    <image name="image4">
+        <data format="PNG" length="173">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000007449444154388ded92c10ac02008406ddf2d3b84ffed0ea3586a26d165e0830ea53e8504487e4b910f5489f19ea5a3ca0f8a896365b306c42dd613c649bdc2598316136219f0f936c0a2ef00d75a62614d3ab22996f2a362ffa337c5ebede962aad1a2e84aaaa2f750dd12748c0fd0ab9324677800596e28b1743f46860000000049454e44ae426082</data>
+    </image>
+    <image name="image5">
+        <data format="PNG" length="187">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000008249444154388dcdd341128020080550e8e02ebc38ad3273503e48537fe3e48c4f2425fa28e29c6f39920bf9276cb60185358877611388c2576418cda015f520b4e6b55be109dc0622b8e22acf31056e18dfdff80606aa551cc63564c4dcf80cd0201d577a5c85a8845fdc025ea5307afccd07e23a1df283ec2b37d9ad5fb4dfefd49cfbf72fac98c8cc890000000049454e44ae426082</data>
+    </image>
+    <image name="image6">
+        <data format="PNG" length="248">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000bf49444154388dd593410a83301045df488ee51dbc8c3ba98bf46a9eabd385350d266362444a3f0c4266fcf3f824f06f12402b66da8c55f3de2212cf9d92cb98c0ba2d7c4544cf9a07638bbad53c4491235ecf7cc1623697a92540c11ff4fda75275015d24a9389e7d6f53df4fe4ccab323eea0f03c0c4b2a0712ce6add89b59b7661c3be095985f261679ee4ebcc22c9788551fe6a2cbc4969a894bcb6f23ee361aab62e252c57294dfbfb610bbf2c897b8a46cc6677eaa519571fa087ea83762da9abacb20235f0000000049454e44ae426082</data>
+    </image>
+    <image name="image7">
+        <data format="PNG" length="270">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000d549444154388dc5955d0a84300c8427e2a90a9e6c8b0f4b3dd982d7ca3e58d7fe4cd0ba5d7640024df265da0a057e2439c9eb8d9eaa8841a0c9aad8c82ab32f9c425be1e30e0dcf00c00308f0b3a7a07410a9d7142e00b42c5a5fab696b979b1c837fc0c316b6e4165b64f78d716359919bdc4570de47c04732dd5e5bcc35f0c97762ae787936dccf7513577e79f48c4b27aa0f1327b240f5117fcbe348aa33b6e0224b054d0746b8025e2e3b3e73cde0dd1c97f02e8ed9d0af1db381224bdf33eee698a934a0f617b45540d00bcf4ca08fc0dff406e325c1981bc418760000000049454e44ae426082</data>
+    </image>
+    <image name="image8">
+        <data format="PNG" length="662">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000025d49444154388dd593a172db4010863f670a56ecc42278d0653693a0c21c68d6c2e60df21a818111349499c254a8329b55f0e089ddb15ba602b79d6692d699b6d399fee86e67e7db7f77efe07fd3e2c74bd775b3730eef3d5115002382b5166b2d5757578b1729bf02b76d3b0f8703b92d58aed7600400ef1ce3c70306a8aa8aebebeb57c117dfa06ddb525dd754efb600a82a49138a123532ec3ac42b9bcde655ce2ffabe9f87c340fde13dcb4d8daaa24e48ee12c6823808c107969b1a8a9ce3f1f8aa515c38e7c8ada5aa6b00c45f129c67d223938c88e6c860d118b1d592d139baae9bcf83a78965b5465134801b1d2e1f4945c0e350096408ea154490c2e0bd3fef5853c2e486a0019f4d84f58418418362b0408e8b23c924501093314dd359f01b809814112025144015f1964c0bbc1b484b07e4688880c029ebd78e4141f5b434fd76864c053f1e084b0f8580265440634044ce838bbcc03987a61350a3a2285e1d5a4414d0708aa598082162ad3d0fb6d6e287cfa498508d274050447370428c91af8d10fd4481608c390b5e00dcddddcd8e80a9de420248e804840856f03e02907d729465c9ba5ae3468731e6a79fe50260b55a6102c4ee40a6894c33f2cb0cb106512814f8f899b22cb9b9b959b8d1f1f8f848d334b46dfbe29bfe5eadeffbf9783c323a871881ecb4200d1151a8eb9aed76bb00188661eeba8efd7e8f3186ed76cb6ab57ae2fe591b5dd7cdde7b628c8808799e63ada5aaaa67b9bbdd6e6e9a06ef3d755d3f29fec7eafb7ebebdbd9dadb5735996f3fdfdfdfca2e3dfd5c3c3c3dc340dd334b1d96cfe1e184e63dceff7a494fe26f61fe90bbc4c5e59d614caf40000000049454e44ae426082</data>
+    </image>
+</images>
+<connections>
+    <connection>
+        <sender>fileNewAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>fileNew()</slot>
+    </connection>
+    <connection>
+        <sender>fileOpenAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>fileOpen()</slot>
+    </connection>
+    <connection>
+        <sender>fileSaveAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>fileSave()</slot>
+    </connection>
+    <connection>
+        <sender>fileSaveAsAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>fileSaveAs()</slot>
+    </connection>
+    <connection>
+        <sender>fileExitAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>fileExit()</slot>
+    </connection>
+    <connection>
+        <sender>editUndoAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>editUndo()</slot>
+    </connection>
+    <connection>
+        <sender>editRedoAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>editRedo()</slot>
+    </connection>
+    <connection>
+        <sender>editCutAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>editCut()</slot>
+    </connection>
+    <connection>
+        <sender>editPasteAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>editPaste()</slot>
+    </connection>
+    <connection>
+        <sender>jdcFichierResultatAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>visuJdcPy()</slot>
+    </connection>
+    <connection>
+        <sender>helpIndexAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>helpIndex()</slot>
+    </connection>
+    <connection>
+        <sender>helpContentsAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>helpContents()</slot>
+    </connection>
+    <connection>
+        <sender>helpAboutAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>helpAbout()</slot>
+    </connection>
+    <connection>
+        <sender>fileCloseAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>fileClose()</slot>
+    </connection>
+    <connection>
+        <sender>fileNewViewAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>fileNewView()</slot>
+    </connection>
+    <connection>
+        <sender>fileCloseAllAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>fileCloseAll()</slot>
+    </connection>
+    <connection>
+        <sender>editCopyAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>editCopy()</slot>
+    </connection>
+    <connection>
+        <sender>jdcRapportDeValidationAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>jdcRapport()</slot>
+    </connection>
+    <connection>
+        <sender>jdcFichierSourceAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>jdcFichierSource()</slot>
+    </connection>
+    <connection>
+        <sender>traduitV7V8Action</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>traductionV7V8()</slot>
+    </connection>
+    <connection>
+        <sender>traduitV8V9Action</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>traductionV8V9()</slot>
+    </connection>
+    <connection>
+        <sender>aidenew_itemAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>helpAbout()</slot>
+    </connection>
+    <connection>
+        <sender>fileNewInclude</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>NewInclude()</slot>
+    </connection>
+    <connection>
+        <sender>optionEditeurAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>optionEditeur()</slot>
+    </connection>
+    <connection>
+        <sender>optionPdfAction</sender>
+        <signal>activated()</signal>
+        <receiver>Eficas</receiver>
+        <slot>optionPdf()</slot>
+    </connection>
+</connections>
+<slots>
+    <slot>fileNew()</slot>
+    <slot>fileOpen()</slot>
+    <slot>fileSave()</slot>
+    <slot>fileSaveAs()</slot>
+    <slot>filePrint()</slot>
+    <slot>fileExit()</slot>
+    <slot>editUndo()</slot>
+    <slot>editRedo()</slot>
+    <slot>jdcFichierSource()</slot>
+    <slot>fileNewView()</slot>
+    <slot>editPaste()</slot>
+    <slot>visuJdcPy()</slot>
+    <slot>helpIndex()</slot>
+    <slot>helpContents()</slot>
+    <slot>helpAbout()</slot>
+    <slot>fileClose()</slot>
+    <slot>fileCloseAll()</slot>
+    <slot>jdcRapport()</slot>
+    <slot>editCut()</slot>
+    <slot>editCopy()</slot>
+    <slot>traductionV7V8()</slot>
+    <slot>traductionV8V9()</slot>
+    <slot>NewInclude()</slot>
+    <slot>optionEditeur()</slot>
+    <slot>optionPdf()</slot>
+</slots>
+<layoutdefaults spacing="2" margin="2"/>
+</UI>
diff --git a/UiQT4/OptionsEditeur.py b/UiQT4/OptionsEditeur.py
new file mode 100644 (file)
index 0000000..6435e88
--- /dev/null
@@ -0,0 +1,103 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'OptionsEditeur.ui'
+#
+# Created: Wed Jul  9 10:12:47 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_desOptions(object):
+    def setupUi(self, desOptions):
+        desOptions.setObjectName("desOptions")
+        desOptions.resize(570,474)
+        self.groupBox1 = QtGui.QGroupBox(desOptions)
+        self.groupBox1.setGeometry(QtCore.QRect(11,11,548,191))
+        self.groupBox1.setObjectName("groupBox1")
+        self.textLabel1_3 = QtGui.QLabel(self.groupBox1)
+        self.textLabel1_3.setGeometry(QtCore.QRect(30,60,280,20))
+        self.textLabel1_3.setWordWrap(False)
+        self.textLabel1_3.setObjectName("textLabel1_3")
+        self.textLabel1_2_2 = QtGui.QLabel(self.groupBox1)
+        self.textLabel1_2_2.setGeometry(QtCore.QRect(30,120,280,20))
+        self.textLabel1_2_2.setWordWrap(False)
+        self.textLabel1_2_2.setObjectName("textLabel1_2_2")
+        self.CBVersions = QtGui.QComboBox(self.groupBox1)
+        self.CBVersions.setGeometry(QtCore.QRect(30,20,90,30))
+        self.CBVersions.setObjectName("CBVersions")
+        self.LERepMat = QtGui.QLineEdit(self.groupBox1)
+        self.LERepMat.setGeometry(QtCore.QRect(30,140,501,31))
+        self.LERepMat.setObjectName("LERepMat")
+        self.LERepCata = QtGui.QLineEdit(self.groupBox1)
+        self.LERepCata.setGeometry(QtCore.QRect(30,80,501,31))
+        self.LERepCata.setObjectName("LERepCata")
+        self.Bok = QtGui.QPushButton(self.groupBox1)
+        self.Bok.setGeometry(QtCore.QRect(440,20,90,31))
+        self.Bok.setAutoDefault(False)
+        self.Bok.setObjectName("Bok")
+        self.groupBox2 = QtGui.QGroupBox(desOptions)
+        self.groupBox2.setGeometry(QtCore.QRect(11,208,548,90))
+        self.groupBox2.setObjectName("groupBox2")
+        self.LEVersionAjout = QtGui.QLineEdit(self.groupBox2)
+        self.LEVersionAjout.setGeometry(QtCore.QRect(120,31,101,30))
+        self.LEVersionAjout.setObjectName("LEVersionAjout")
+        self.LEVersionSup = QtGui.QLineEdit(self.groupBox2)
+        self.LEVersionSup.setGeometry(QtCore.QRect(410,30,101,30))
+        self.LEVersionSup.setObjectName("LEVersionSup")
+        self.PBSup = QtGui.QPushButton(self.groupBox2)
+        self.PBSup.setGeometry(QtCore.QRect(300,20,101,41))
+        self.PBSup.setObjectName("PBSup")
+        self.PBajout = QtGui.QPushButton(self.groupBox2)
+        self.PBajout.setGeometry(QtCore.QRect(10,20,101,41))
+        self.PBajout.setObjectName("PBajout")
+        self.PBQuit = QtGui.QPushButton(desOptions)
+        self.PBQuit.setGeometry(QtCore.QRect(400,420,151,31))
+        self.PBQuit.setMinimumSize(QtCore.QSize(0,30))
+        self.PBQuit.setObjectName("PBQuit")
+        self.groupBox3 = QtGui.QGroupBox(desOptions)
+        self.groupBox3.setGeometry(QtCore.QRect(10,310,548,90))
+        self.groupBox3.setObjectName("groupBox3")
+        self.LERepDoc = QtGui.QLineEdit(self.groupBox3)
+        self.LERepDoc.setGeometry(QtCore.QRect(20,50,520,31))
+        self.LERepDoc.setObjectName("LERepDoc")
+        self.textLabel1 = QtGui.QLabel(self.groupBox3)
+        self.textLabel1.setGeometry(QtCore.QRect(20,20,280,30))
+        self.textLabel1.setWordWrap(False)
+        self.textLabel1.setObjectName("textLabel1")
+        self.Bdefaut = QtGui.QCheckBox(desOptions)
+        self.Bdefaut.setGeometry(QtCore.QRect(10,430,340,20))
+        font = QtGui.QFont()
+        font.setPointSize(12)
+        self.Bdefaut.setFont(font)
+        self.Bdefaut.setObjectName("Bdefaut")
+
+        self.retranslateUi(desOptions)
+
+    def retranslateUi(self, desOptions):
+        desOptions.setWindowTitle(QtGui.QApplication.translate("desOptions", "Options Aster", None, QtGui.QApplication.UnicodeUTF8))
+        self.groupBox1.setTitle(QtGui.QApplication.translate("desOptions", "Configurer une Version", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_3.setText(QtGui.QApplication.translate("desOptions", "Répertoire d\'accès au catalogue :", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_2_2.setText(QtGui.QApplication.translate("desOptions", "Répertoire d\'accès aux matériaux :", None, QtGui.QApplication.UnicodeUTF8))
+        self.Bok.setText(QtGui.QApplication.translate("desOptions", "Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.groupBox2.setTitle(QtGui.QApplication.translate("desOptions", "Gérer les versions", None, QtGui.QApplication.UnicodeUTF8))
+        self.PBSup.setText(QtGui.QApplication.translate("desOptions", "Supprimer\n"
+"Version :", None, QtGui.QApplication.UnicodeUTF8))
+        self.PBajout.setText(QtGui.QApplication.translate("desOptions", "Ajouter\n"
+"Version :", None, QtGui.QApplication.UnicodeUTF8))
+        self.PBQuit.setText(QtGui.QApplication.translate("desOptions", "Quitter", None, QtGui.QApplication.UnicodeUTF8))
+        self.groupBox3.setTitle(QtGui.QApplication.translate("desOptions", "Doc", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1.setText(QtGui.QApplication.translate("desOptions", "Repertoire d\'acces à la documentation :", None, QtGui.QApplication.UnicodeUTF8))
+        self.Bdefaut.setText(QtGui.QApplication.translate("desOptions", "Reinitialiser avec les valeurs par defaut", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    desOptions = QtGui.QDialog()
+    ui = Ui_desOptions()
+    ui.setupUi(desOptions)
+    desOptions.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/OptionsEditeur.ui b/UiQT4/OptionsEditeur.ui
new file mode 100644 (file)
index 0000000..bbe72dd
--- /dev/null
@@ -0,0 +1,258 @@
+<ui version="4.0" stdsetdef="1" >
+  <author></author>
+  <comment></comment>
+  <exportmacro></exportmacro>
+  <class>desOptions</class>
+  <widget class="QDialog" name="desOptions" >
+    <property name="geometry" >
+      <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>570</width>
+        <height>474</height>
+      </rect>
+    </property>
+    <property name="windowTitle" >
+      <string>Options Aster</string>
+    </property>
+    <widget class="QGroupBox" name="groupBox1" >
+      <property name="geometry" >
+        <rect>
+          <x>11</x>
+          <y>11</y>
+          <width>548</width>
+          <height>191</height>
+        </rect>
+      </property>
+      <property name="title" >
+        <string>Configurer une Version</string>
+      </property>
+      <widget class="QLabel" name="textLabel1_3" >
+        <property name="geometry" >
+          <rect>
+            <x>30</x>
+            <y>60</y>
+            <width>280</width>
+            <height>20</height>
+          </rect>
+        </property>
+        <property name="text" >
+          <string>Répertoire d'accès au catalogue :</string>
+        </property>
+        <property name="wordWrap" >
+          <bool>false</bool>
+        </property>
+      </widget>
+      <widget class="QLabel" name="textLabel1_2_2" >
+        <property name="geometry" >
+          <rect>
+            <x>30</x>
+            <y>120</y>
+            <width>280</width>
+            <height>20</height>
+          </rect>
+        </property>
+        <property name="text" >
+          <string>Répertoire d'accès aux matériaux :</string>
+        </property>
+        <property name="wordWrap" >
+          <bool>false</bool>
+        </property>
+      </widget>
+      <widget class="QComboBox" name="CBVersions" >
+        <property name="geometry" >
+          <rect>
+            <x>30</x>
+            <y>20</y>
+            <width>90</width>
+            <height>30</height>
+          </rect>
+        </property>
+      </widget>
+      <widget class="QLineEdit" name="LERepMat" >
+        <property name="geometry" >
+          <rect>
+            <x>30</x>
+            <y>140</y>
+            <width>501</width>
+            <height>31</height>
+          </rect>
+        </property>
+        <property name="text" >
+          <string/>
+        </property>
+      </widget>
+      <widget class="QLineEdit" name="LERepCata" >
+        <property name="geometry" >
+          <rect>
+            <x>30</x>
+            <y>80</y>
+            <width>501</width>
+            <height>31</height>
+          </rect>
+        </property>
+        <property name="text" >
+          <string/>
+        </property>
+      </widget>
+      <widget class="QPushButton" name="Bok" >
+        <property name="geometry" >
+          <rect>
+            <x>440</x>
+            <y>20</y>
+            <width>90</width>
+            <height>31</height>
+          </rect>
+        </property>
+        <property name="text" >
+          <string>Valider</string>
+        </property>
+        <property name="autoDefault" >
+          <bool>false</bool>
+        </property>
+      </widget>
+    </widget>
+    <widget class="QGroupBox" name="groupBox2" >
+      <property name="geometry" >
+        <rect>
+          <x>11</x>
+          <y>208</y>
+          <width>548</width>
+          <height>90</height>
+        </rect>
+      </property>
+      <property name="title" >
+        <string>Gérer les versions</string>
+      </property>
+      <widget class="QLineEdit" name="LEVersionAjout" >
+        <property name="geometry" >
+          <rect>
+            <x>120</x>
+            <y>31</y>
+            <width>101</width>
+            <height>30</height>
+          </rect>
+        </property>
+      </widget>
+      <widget class="QLineEdit" name="LEVersionSup" >
+        <property name="geometry" >
+          <rect>
+            <x>410</x>
+            <y>30</y>
+            <width>101</width>
+            <height>30</height>
+          </rect>
+        </property>
+      </widget>
+      <widget class="QPushButton" name="PBSup" >
+        <property name="geometry" >
+          <rect>
+            <x>300</x>
+            <y>20</y>
+            <width>101</width>
+            <height>41</height>
+          </rect>
+        </property>
+        <property name="text" >
+          <string>Supprimer
+Version :</string>
+        </property>
+      </widget>
+      <widget class="QPushButton" name="PBajout" >
+        <property name="geometry" >
+          <rect>
+            <x>10</x>
+            <y>20</y>
+            <width>101</width>
+            <height>41</height>
+          </rect>
+        </property>
+        <property name="text" >
+          <string>Ajouter
+Version :</string>
+        </property>
+      </widget>
+    </widget>
+    <widget class="QPushButton" name="PBQuit" >
+      <property name="geometry" >
+        <rect>
+          <x>400</x>
+          <y>420</y>
+          <width>151</width>
+          <height>31</height>
+        </rect>
+      </property>
+      <property name="minimumSize" >
+        <size>
+          <width>0</width>
+          <height>30</height>
+        </size>
+      </property>
+      <property name="text" >
+        <string>Quitter</string>
+      </property>
+    </widget>
+    <widget class="QGroupBox" name="groupBox3" >
+      <property name="geometry" >
+        <rect>
+          <x>10</x>
+          <y>310</y>
+          <width>548</width>
+          <height>90</height>
+        </rect>
+      </property>
+      <property name="title" >
+        <string>Doc</string>
+      </property>
+      <widget class="QLineEdit" name="LERepDoc" >
+        <property name="geometry" >
+          <rect>
+            <x>20</x>
+            <y>50</y>
+            <width>520</width>
+            <height>31</height>
+          </rect>
+        </property>
+        <property name="text" >
+          <string/>
+        </property>
+      </widget>
+      <widget class="QLabel" name="textLabel1" >
+        <property name="geometry" >
+          <rect>
+            <x>20</x>
+            <y>20</y>
+            <width>280</width>
+            <height>30</height>
+          </rect>
+        </property>
+        <property name="text" >
+          <string>Repertoire d'acces à la documentation :</string>
+        </property>
+        <property name="wordWrap" >
+          <bool>false</bool>
+        </property>
+      </widget>
+    </widget>
+    <widget class="QCheckBox" name="Bdefaut" >
+      <property name="geometry" >
+        <rect>
+          <x>10</x>
+          <y>430</y>
+          <width>340</width>
+          <height>20</height>
+        </rect>
+      </property>
+      <property name="font" >
+        <font>
+          <pointsize>12</pointsize>
+        </font>
+      </property>
+      <property name="text" >
+        <string>Reinitialiser avec les valeurs par defaut</string>
+      </property>
+    </widget>
+  </widget>
+  <layoutdefault spacing="6" margin="11" />
+  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+</ui>
diff --git a/UiQT4/OptionsPdf.py b/UiQT4/OptionsPdf.py
new file mode 100644 (file)
index 0000000..d20115f
--- /dev/null
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'OptionsPdf.ui'
+#
+# Created: Wed Jul  9 10:12:47 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_desPdf(object):
+    def setupUi(self, desPdf):
+        desPdf.setObjectName("desPdf")
+        desPdf.resize(538,142)
+        self.textLabel1_2 = QtGui.QLabel(desPdf)
+        self.textLabel1_2.setGeometry(QtCore.QRect(20,10,280,20))
+        self.textLabel1_2.setWordWrap(False)
+        self.textLabel1_2.setObjectName("textLabel1_2")
+        self.BCancel = QtGui.QPushButton(desPdf)
+        self.BCancel.setGeometry(QtCore.QRect(450,90,70,31))
+        self.BCancel.setObjectName("BCancel")
+        self.LERepPdf = QtGui.QLineEdit(desPdf)
+        self.LERepPdf.setGeometry(QtCore.QRect(20,40,501,31))
+        self.LERepPdf.setObjectName("LERepPdf")
+        self.Bok = QtGui.QPushButton(desPdf)
+        self.Bok.setGeometry(QtCore.QRect(350,90,70,31))
+        self.Bok.setObjectName("Bok")
+
+        self.retranslateUi(desPdf)
+        desPdf.setTabOrder(self.LERepPdf,self.Bok)
+        desPdf.setTabOrder(self.Bok,self.BCancel)
+
+    def retranslateUi(self, desPdf):
+        desPdf.setWindowTitle(QtGui.QApplication.translate("desPdf", "desPdf", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_2.setText(QtGui.QApplication.translate("desPdf", "Lecteur Pdf", None, QtGui.QApplication.UnicodeUTF8))
+        self.BCancel.setText(QtGui.QApplication.translate("desPdf", "Cancel", None, QtGui.QApplication.UnicodeUTF8))
+        self.LERepPdf.setText(QtGui.QApplication.translate("desPdf", "acroread", None, QtGui.QApplication.UnicodeUTF8))
+        self.Bok.setText(QtGui.QApplication.translate("desPdf", "Ok", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    desPdf = QtGui.QDialog()
+    ui = Ui_desPdf()
+    ui.setupUi(desPdf)
+    desPdf.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/OptionsPdf.ui b/UiQT4/OptionsPdf.ui
new file mode 100644 (file)
index 0000000..83a4a41
--- /dev/null
@@ -0,0 +1,81 @@
+<ui version="4.0" stdsetdef="1" >
+  <author></author>
+  <comment></comment>
+  <exportmacro></exportmacro>
+  <class>desPdf</class>
+  <widget class="QDialog" name="desPdf" >
+    <property name="geometry" >
+      <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>538</width>
+        <height>142</height>
+      </rect>
+    </property>
+    <property name="windowTitle" >
+      <string>desPdf</string>
+    </property>
+    <widget class="QLabel" name="textLabel1_2" >
+      <property name="geometry" >
+        <rect>
+          <x>20</x>
+          <y>10</y>
+          <width>280</width>
+          <height>20</height>
+        </rect>
+      </property>
+      <property name="text" >
+        <string>Lecteur Pdf</string>
+      </property>
+      <property name="wordWrap" >
+        <bool>false</bool>
+      </property>
+    </widget>
+    <widget class="QPushButton" name="BCancel" >
+      <property name="geometry" >
+        <rect>
+          <x>450</x>
+          <y>90</y>
+          <width>70</width>
+          <height>31</height>
+        </rect>
+      </property>
+      <property name="text" >
+        <string>Cancel</string>
+      </property>
+    </widget>
+    <widget class="QLineEdit" name="LERepPdf" >
+      <property name="geometry" >
+        <rect>
+          <x>20</x>
+          <y>40</y>
+          <width>501</width>
+          <height>31</height>
+        </rect>
+      </property>
+      <property name="text" >
+        <string>acroread</string>
+      </property>
+    </widget>
+    <widget class="QPushButton" name="Bok" >
+      <property name="geometry" >
+        <rect>
+          <x>350</x>
+          <y>90</y>
+          <width>70</width>
+          <height>31</height>
+        </rect>
+      </property>
+      <property name="text" >
+        <string>Ok</string>
+      </property>
+    </widget>
+  </widget>
+  <layoutdefault spacing="6" margin="11" />
+  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+  <tabstops>
+    <tabstop>LERepPdf</tabstop>
+    <tabstop>Bok</tabstop>
+    <tabstop>BCancel</tabstop>
+  </tabstops>
+</ui>
diff --git a/UiQT4/__init__.py b/UiQT4/__init__.py
new file mode 100644 (file)
index 0000000..21d22fb
--- /dev/null
@@ -0,0 +1,24 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce package contient les fonctionnalités  nécessaires
+    pour l'éditeur graphique QT
+"""
diff --git a/UiQT4/aideQT.py b/UiQT4/aideQT.py
new file mode 100644 (file)
index 0000000..d736e7c
--- /dev/null
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'aideQT.ui'
+#
+# Created: Wed Jul  9 10:12:47 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_Aide(object):
+    def setupUi(self, Aide):
+        Aide.setObjectName("Aide")
+        Aide.resize(602,480)
+        self.gridLayout = QtGui.QGridLayout(Aide)
+        self.gridLayout.setObjectName("gridLayout")
+        self.TB1 = QtGui.QTextBrowser(Aide)
+        self.TB1.setObjectName("TB1")
+        self.gridLayout.addWidget(self.TB1,0,0,1,4)
+        self.PBIndex = QtGui.QPushButton(Aide)
+        self.PBIndex.setMinimumSize(QtCore.QSize(0,30))
+        self.PBIndex.setObjectName("PBIndex")
+        self.gridLayout.addWidget(self.PBIndex,1,0,1,1)
+        self.PBBack = QtGui.QPushButton(Aide)
+        self.PBBack.setEnabled(True)
+        self.PBBack.setMinimumSize(QtCore.QSize(0,30))
+        self.PBBack.setObjectName("PBBack")
+        self.gridLayout.addWidget(self.PBBack,1,1,1,1)
+        self.PBForward = QtGui.QPushButton(Aide)
+        self.PBForward.setEnabled(True)
+        self.PBForward.setMinimumSize(QtCore.QSize(0,30))
+        self.PBForward.setObjectName("PBForward")
+        self.gridLayout.addWidget(self.PBForward,1,2,1,1)
+        spacerItem = QtGui.QSpacerItem(311,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
+        self.gridLayout.addItem(spacerItem,1,3,1,1)
+
+        self.retranslateUi(Aide)
+        QtCore.QMetaObject.connectSlotsByName(Aide)
+
+    def retranslateUi(self, Aide):
+        Aide.setWindowTitle(QtGui.QApplication.translate("Aide", "Aide", None, QtGui.QApplication.UnicodeUTF8))
+        self.PBIndex.setText(QtGui.QApplication.translate("Aide", "Index", None, QtGui.QApplication.UnicodeUTF8))
+        self.PBBack.setText(QtGui.QApplication.translate("Aide", "Back", None, QtGui.QApplication.UnicodeUTF8))
+        self.PBForward.setText(QtGui.QApplication.translate("Aide", "Forward", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    Aide = QtGui.QWidget()
+    ui = Ui_Aide()
+    ui.setupUi(Aide)
+    Aide.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/aideQT.ui b/UiQT4/aideQT.ui
new file mode 100644 (file)
index 0000000..4470631
--- /dev/null
@@ -0,0 +1,86 @@
+<ui version="4.0" >
+ <class>Aide</class>
+ <widget class="QWidget" name="Aide" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>602</width>
+    <height>480</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Aide</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" >
+   <item row="0" column="0" colspan="4" >
+    <widget class="QTextBrowser" name="TB1" />
+   </item>
+   <item row="1" column="0" >
+    <widget class="QPushButton" name="PBIndex" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="text" >
+      <string>Index</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1" >
+    <widget class="QPushButton" name="PBBack" >
+     <property name="enabled" >
+      <bool>true</bool>
+     </property>
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="text" >
+      <string>Back</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="2" >
+    <widget class="QPushButton" name="PBForward" >
+     <property name="enabled" >
+      <bool>true</bool>
+     </property>
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="text" >
+      <string>Forward</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="3" >
+    <spacer name="spacer1" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeType" >
+      <enum>QSizePolicy::Expanding</enum>
+     </property>
+     <property name="sizeHint" stdset="0" >
+      <size>
+       <width>311</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desChoixCata.py b/UiQT4/desChoixCata.py
new file mode 100644 (file)
index 0000000..d35f39f
--- /dev/null
@@ -0,0 +1,78 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desChoixCata.ui'
+#
+# Created: Wed Jul 16 16:27:33 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DChoixCata(object):
+    def setupUi(self, DChoixCata):
+        DChoixCata.setObjectName("DChoixCata")
+        DChoixCata.resize(547,192)
+        DChoixCata.setSizeGripEnabled(True)
+        self.gridLayout = QtGui.QGridLayout(DChoixCata)
+        self.gridLayout.setObjectName("gridLayout")
+        self.TLNb = QtGui.QLabel(DChoixCata)
+        self.TLNb.setMinimumSize(QtCore.QSize(30,0))
+        self.TLNb.setWordWrap(False)
+        self.TLNb.setObjectName("TLNb")
+        self.gridLayout.addWidget(self.TLNb,0,0,1,1)
+        self.CBChoixCata = QtGui.QComboBox(DChoixCata)
+        self.CBChoixCata.setEnabled(True)
+        self.CBChoixCata.setMinimumSize(QtCore.QSize(125,41))
+        self.CBChoixCata.setMaximumSize(QtCore.QSize(150,16777215))
+        self.CBChoixCata.setObjectName("CBChoixCata")
+        self.gridLayout.addWidget(self.CBChoixCata,0,1,2,1)
+        self.textLabel1_2 = QtGui.QLabel(DChoixCata)
+        self.textLabel1_2.setMinimumSize(QtCore.QSize(60,60))
+        self.textLabel1_2.setWordWrap(False)
+        self.textLabel1_2.setObjectName("textLabel1_2")
+        self.gridLayout.addWidget(self.textLabel1_2,1,0,1,1)
+        self.frame3 = QtGui.QFrame(DChoixCata)
+        self.frame3.setFrameShape(QtGui.QFrame.StyledPanel)
+        self.frame3.setFrameShadow(QtGui.QFrame.Raised)
+        self.frame3.setObjectName("frame3")
+        self.horizontalLayout = QtGui.QHBoxLayout(self.frame3)
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.buttonOk = QtGui.QPushButton(self.frame3)
+        self.buttonOk.setAutoDefault(True)
+        self.buttonOk.setDefault(True)
+        self.buttonOk.setObjectName("buttonOk")
+        self.horizontalLayout.addWidget(self.buttonOk)
+        spacerItem = QtGui.QSpacerItem(334,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem)
+        self.buttonCancel = QtGui.QPushButton(self.frame3)
+        self.buttonCancel.setAutoDefault(True)
+        self.buttonCancel.setObjectName("buttonCancel")
+        self.horizontalLayout.addWidget(self.buttonCancel)
+        self.gridLayout.addWidget(self.frame3,2,0,1,2)
+
+        self.retranslateUi(DChoixCata)
+        QtCore.QMetaObject.connectSlotsByName(DChoixCata)
+
+    def retranslateUi(self, DChoixCata):
+        DChoixCata.setWindowTitle(QtGui.QApplication.translate("DChoixCata", "Choix d\'une version du code Aster", None, QtGui.QApplication.UnicodeUTF8))
+        self.TLNb.setText(QtGui.QApplication.translate("DChoixCata", "2 versions sont disponibles", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_2.setText(QtGui.QApplication.translate("DChoixCata", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
+"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
+"p, li { white-space: pre-wrap; }\n"
+"</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
+"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:large;\">Veuillez choisir celle avec laquelle</span></p>\n"
+"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:large;\"><span style=\" font-size:large;\"> vous souhaitez travailler</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
+        self.buttonOk.setText(QtGui.QApplication.translate("DChoixCata", "&OK", None, QtGui.QApplication.UnicodeUTF8))
+        self.buttonCancel.setText(QtGui.QApplication.translate("DChoixCata", "&Cancel", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DChoixCata = QtGui.QDialog()
+    ui = Ui_DChoixCata()
+    ui.setupUi(DChoixCata)
+    DChoixCata.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desChoixCata.ui b/UiQT4/desChoixCata.ui
new file mode 100644 (file)
index 0000000..a59643f
--- /dev/null
@@ -0,0 +1,139 @@
+<ui version="4.0" >
+ <class>DChoixCata</class>
+ <widget class="QDialog" name="DChoixCata" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>547</width>
+    <height>192</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Choix d'une version du code Aster</string>
+  </property>
+  <property name="sizeGripEnabled" >
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" >
+   <item row="0" column="0" >
+    <widget class="QLabel" name="TLNb" >
+     <property name="minimumSize" >
+      <size>
+       <width>30</width>
+       <height>0</height>
+      </size>
+     </property>
+     <property name="text" >
+      <string>2 versions sont disponibles</string>
+     </property>
+     <property name="wordWrap" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item rowspan="2" row="0" column="1" >
+    <widget class="QComboBox" name="CBChoixCata" >
+     <property name="enabled" >
+      <bool>true</bool>
+     </property>
+     <property name="minimumSize" >
+      <size>
+       <width>125</width>
+       <height>41</height>
+      </size>
+     </property>
+     <property name="maximumSize" >
+      <size>
+       <width>150</width>
+       <height>16777215</height>
+      </size>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" >
+    <widget class="QLabel" name="textLabel1_2" >
+     <property name="minimumSize" >
+      <size>
+       <width>60</width>
+       <height>60</height>
+      </size>
+     </property>
+     <property name="text" >
+      <string>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+p, li { white-space: pre-wrap; }
+&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+&lt;p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-size:large;">Veuillez choisir celle avec laquelle&lt;/span>&lt;/p>
+&lt;p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:large;">&lt;span style=" font-size:large;"> vous souhaitez travailler&lt;/span>&lt;/p>&lt;/body>&lt;/html></string>
+     </property>
+     <property name="wordWrap" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" colspan="2" >
+    <widget class="QFrame" name="frame3" >
+     <property name="frameShape" >
+      <enum>QFrame::StyledPanel</enum>
+     </property>
+     <property name="frameShadow" >
+      <enum>QFrame::Raised</enum>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout" >
+      <item>
+       <widget class="QPushButton" name="buttonOk" >
+        <property name="text" >
+         <string>&amp;OK</string>
+        </property>
+        <property name="shortcut" >
+         <string/>
+        </property>
+        <property name="autoDefault" >
+         <bool>true</bool>
+        </property>
+        <property name="default" >
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <spacer name="horizontalSpacer" >
+        <property name="orientation" >
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0" >
+         <size>
+          <width>334</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item>
+       <widget class="QPushButton" name="buttonCancel" >
+        <property name="text" >
+         <string>&amp;Cancel</string>
+        </property>
+        <property name="shortcut" >
+         <string/>
+        </property>
+        <property name="autoDefault" >
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+  <zorder>frame3</zorder>
+  <zorder>TLNb</zorder>
+  <zorder>textLabel1_2</zorder>
+  <zorder>CBChoixCata</zorder>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desCommande.py b/UiQT4/desCommande.py
new file mode 100644 (file)
index 0000000..03e404f
--- /dev/null
@@ -0,0 +1,186 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desCommande.ui'
+#
+# Created: Tue Sep 23 10:19:58 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DComm(object):
+    def setupUi(self, DComm):
+        DComm.setObjectName("DComm")
+        DComm.resize(505,483)
+        DComm.setMinimumSize(QtCore.QSize(505,0))
+        self.gridlayout = QtGui.QGridLayout(DComm)
+        self.gridlayout.setObjectName("gridlayout")
+        self.Commentaire = QtGui.QLabel(DComm)
+        self.Commentaire.setFrameShape(QtGui.QFrame.NoFrame)
+        self.Commentaire.setFrameShadow(QtGui.QFrame.Plain)
+        self.Commentaire.setWordWrap(False)
+        self.Commentaire.setObjectName("Commentaire")
+        self.gridlayout.addWidget(self.Commentaire,1,0,1,3)
+        self.bOk = QtGui.QPushButton(DComm)
+        self.bOk.setMinimumSize(QtCore.QSize(0,30))
+        self.bOk.setAutoDefault(True)
+        self.bOk.setDefault(True)
+        self.bOk.setObjectName("bOk")
+        self.gridlayout.addWidget(self.bOk,2,1,1,1)
+        self.bSup = QtGui.QPushButton(DComm)
+        self.bSup.setMinimumSize(QtCore.QSize(0,30))
+        self.bSup.setAutoDefault(True)
+        self.bSup.setObjectName("bSup")
+        self.gridlayout.addWidget(self.bSup,2,0,1,1)
+        self.bHelp = QtGui.QPushButton(DComm)
+        self.bHelp.setMinimumSize(QtCore.QSize(0,30))
+        self.bHelp.setAutoDefault(True)
+        self.bHelp.setObjectName("bHelp")
+        self.gridlayout.addWidget(self.bHelp,2,2,1,1)
+        self.TWChoix = QtGui.QTabWidget(DComm)
+        self.TWChoix.setObjectName("TWChoix")
+        self.MotClef = QtGui.QWidget()
+        self.MotClef.setGeometry(QtCore.QRect(0,0,483,372))
+        self.MotClef.setObjectName("MotClef")
+        self.gridLayout_3 = QtGui.QGridLayout(self.MotClef)
+        self.gridLayout_3.setObjectName("gridLayout_3")
+        self.textLabel1 = QtGui.QLabel(self.MotClef)
+        self.textLabel1.setMinimumSize(QtCore.QSize(0,0))
+        self.textLabel1.setWordWrap(False)
+        self.textLabel1.setObjectName("textLabel1")
+        self.gridLayout_3.addWidget(self.textLabel1,0,0,1,1)
+        self.textLabel1_2 = QtGui.QLabel(self.MotClef)
+        self.textLabel1_2.setWordWrap(False)
+        self.textLabel1_2.setObjectName("textLabel1_2")
+        self.gridLayout_3.addWidget(self.textLabel1_2,0,1,1,1)
+        self.LBMCPermis = QtGui.QListWidget(self.MotClef)
+        self.LBMCPermis.setObjectName("LBMCPermis")
+        self.gridLayout_3.addWidget(self.LBMCPermis,1,0,1,1)
+        self.LBRegles = QtGui.QListWidget(self.MotClef)
+        self.LBRegles.setObjectName("LBRegles")
+        self.gridLayout_3.addWidget(self.LBRegles,1,1,1,1)
+        self.TWChoix.addTab(self.MotClef,"")
+        self.Concept = QtGui.QWidget()
+        self.Concept.setGeometry(QtCore.QRect(0,0,483,372))
+        self.Concept.setObjectName("Concept")
+        self.gridlayout1 = QtGui.QGridLayout(self.Concept)
+        self.gridlayout1.setObjectName("gridlayout1")
+        self.groupBox1 = QtGui.QGroupBox(self.Concept)
+        self.groupBox1.setObjectName("groupBox1")
+        self.textLabel1_3 = QtGui.QLabel(self.groupBox1)
+        self.textLabel1_3.setGeometry(QtCore.QRect(80,50,130,31))
+        self.textLabel1_3.setWordWrap(False)
+        self.textLabel1_3.setObjectName("textLabel1_3")
+        self.textLabel1_3_2 = QtGui.QLabel(self.groupBox1)
+        self.textLabel1_3_2.setGeometry(QtCore.QRect(80,170,150,31))
+        self.textLabel1_3_2.setWordWrap(False)
+        self.textLabel1_3_2.setObjectName("textLabel1_3_2")
+        self.LENomConcept = QtGui.QLineEdit(self.groupBox1)
+        self.LENomConcept.setGeometry(QtCore.QRect(80,110,310,30))
+        self.LENomConcept.setObjectName("LENomConcept")
+        self.textLabel3 = QtGui.QLabel(self.groupBox1)
+        self.textLabel3.setGeometry(QtCore.QRect(10,200,290,31))
+        self.textLabel3.setWordWrap(False)
+        self.textLabel3.setObjectName("textLabel3")
+        self.typeConcept = QtGui.QLabel(self.groupBox1)
+        self.typeConcept.setGeometry(QtCore.QRect(310,200,130,31))
+        self.typeConcept.setWordWrap(False)
+        self.typeConcept.setObjectName("typeConcept")
+        self.gridlayout1.addWidget(self.groupBox1,0,0,1,1)
+        self.TWChoix.addTab(self.Concept,"")
+        self.Commande = QtGui.QWidget()
+        self.Commande.setGeometry(QtCore.QRect(0,0,483,372))
+        self.Commande.setObjectName("Commande")
+        self.gridLayout_2 = QtGui.QGridLayout(self.Commande)
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.textLabel1_4 = QtGui.QLabel(self.Commande)
+        self.textLabel1_4.setWordWrap(False)
+        self.textLabel1_4.setObjectName("textLabel1_4")
+        self.gridLayout_2.addWidget(self.textLabel1_4,0,0,1,1)
+        self.horizontalLayout = QtGui.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.textLabel6 = QtGui.QLabel(self.Commande)
+        self.textLabel6.setMinimumSize(QtCore.QSize(50,30))
+        self.textLabel6.setWordWrap(False)
+        self.textLabel6.setObjectName("textLabel6")
+        self.horizontalLayout.addWidget(self.textLabel6)
+        self.LEFiltre = QtGui.QLineEdit(self.Commande)
+        self.LEFiltre.setMinimumSize(QtCore.QSize(160,30))
+        self.LEFiltre.setObjectName("LEFiltre")
+        self.horizontalLayout.addWidget(self.LEFiltre)
+        self.BNext = QtGui.QPushButton(self.Commande)
+        self.BNext.setObjectName("BNext")
+        self.horizontalLayout.addWidget(self.BNext)
+        self.gridLayout_2.addLayout(self.horizontalLayout,1,0,1,1)
+        self.groupBox = QtGui.QGroupBox(self.Commande)
+        self.groupBox.setObjectName("groupBox")
+        self.gridLayout = QtGui.QGridLayout(self.groupBox)
+        self.gridLayout.setObjectName("gridLayout")
+        self.RBalpha = QtGui.QRadioButton(self.groupBox)
+        self.RBalpha.setChecked(True)
+        self.RBalpha.setObjectName("RBalpha")
+        self.gridLayout.addWidget(self.RBalpha,0,0,1,1)
+        self.RBGroupe = QtGui.QRadioButton(self.groupBox)
+        self.RBGroupe.setObjectName("RBGroupe")
+        self.gridLayout.addWidget(self.RBGroupe,1,0,1,1)
+        self.gridLayout_2.addWidget(self.groupBox,0,1,2,1)
+        self.LBNouvCommande = QtGui.QListWidget(self.Commande)
+        self.LBNouvCommande.setObjectName("LBNouvCommande")
+        self.gridLayout_2.addWidget(self.LBNouvCommande,2,0,1,2)
+        self.textLabel4 = QtGui.QLabel(self.Commande)
+        self.textLabel4.setWordWrap(False)
+        self.textLabel4.setObjectName("textLabel4")
+        self.gridLayout_2.addWidget(self.textLabel4,3,0,1,2)
+        self.TWChoix.addTab(self.Commande,"")
+        self.gridlayout.addWidget(self.TWChoix,0,0,1,3)
+
+        self.retranslateUi(DComm)
+        self.TWChoix.setCurrentIndex(0)
+        QtCore.QMetaObject.connectSlotsByName(DComm)
+        DComm.setTabOrder(self.LEFiltre,self.LENomConcept)
+        DComm.setTabOrder(self.LENomConcept,self.TWChoix)
+        DComm.setTabOrder(self.TWChoix,self.LBNouvCommande)
+        DComm.setTabOrder(self.LBNouvCommande,self.bOk)
+        DComm.setTabOrder(self.bOk,self.bSup)
+        DComm.setTabOrder(self.bSup,self.bHelp)
+
+    def retranslateUi(self, DComm):
+        DComm.setWindowTitle(QtGui.QApplication.translate("DComm", "DComm", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setToolTip(QtGui.QApplication.translate("DComm", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setText(QtGui.QApplication.translate("DComm", "&Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setShortcut(QtGui.QApplication.translate("DComm", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setToolTip(QtGui.QApplication.translate("DComm", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DComm", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DComm", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setToolTip(QtGui.QApplication.translate("DComm", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setText(QtGui.QApplication.translate("DComm", "&Documentation", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setShortcut(QtGui.QApplication.translate("DComm", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1.setText(QtGui.QApplication.translate("DComm", "<h3><p align=\"center\"><u><b>Mots Clefs Permis</b></u></p></h3>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_2.setText(QtGui.QApplication.translate("DComm", "<h3><p align=\"center\"><u><b>Règles</b></u></p></h3>", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.MotClef), QtGui.QApplication.translate("DComm", "Ajouter Mot-Clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.groupBox1.setTitle(QtGui.QApplication.translate("DComm", "Concept", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_3.setText(QtGui.QApplication.translate("DComm", "<u>Nom du concept :</u>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_3_2.setText(QtGui.QApplication.translate("DComm", "<u>Type du concept :</u>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel3.setText(QtGui.QApplication.translate("DComm", "L\'opérateur retourne un concept de type :", None, QtGui.QApplication.UnicodeUTF8))
+        self.typeConcept.setText(QtGui.QApplication.translate("DComm", "TypeDuConcept", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.Concept), QtGui.QApplication.translate("DComm", "Nommer Concept", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_4.setText(QtGui.QApplication.translate("DComm", "<b><u>Commandes :</u></b>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel6.setText(QtGui.QApplication.translate("DComm", "Filtre", None, QtGui.QApplication.UnicodeUTF8))
+        self.BNext.setText(QtGui.QApplication.translate("DComm", "Suivant", None, QtGui.QApplication.UnicodeUTF8))
+        self.groupBox.setTitle(QtGui.QApplication.translate("DComm", "Affichage", None, QtGui.QApplication.UnicodeUTF8))
+        self.RBalpha.setText(QtGui.QApplication.translate("DComm", "alphabétique", None, QtGui.QApplication.UnicodeUTF8))
+        self.RBGroupe.setText(QtGui.QApplication.translate("DComm", "par groupe", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel4.setText(QtGui.QApplication.translate("DComm", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DComm", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DComm = QtGui.QWidget()
+    ui = Ui_DComm()
+    ui.setupUi(DComm)
+    DComm.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desCommande.ui b/UiQT4/desCommande.ui
new file mode 100644 (file)
index 0000000..9cdc181
--- /dev/null
@@ -0,0 +1,373 @@
+<ui version="4.0" >
+ <class>DComm</class>
+ <widget class="QWidget" name="DComm" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>505</width>
+    <height>483</height>
+   </rect>
+  </property>
+  <property name="minimumSize" >
+   <size>
+    <width>505</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle" >
+   <string>DComm</string>
+  </property>
+  <layout class="QGridLayout" >
+   <item row="1" column="0" colspan="3" >
+    <widget class="QLabel" name="Commentaire" >
+     <property name="frameShape" >
+      <enum>QFrame::NoFrame</enum>
+     </property>
+     <property name="frameShadow" >
+      <enum>QFrame::Plain</enum>
+     </property>
+     <property name="text" >
+      <string/>
+     </property>
+     <property name="wordWrap" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1" >
+    <widget class="QPushButton" name="bOk" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>validation de la saisie</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Valider</string>
+     </property>
+     <property name="shortcut" >
+      <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+     <property name="default" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" >
+    <widget class="QPushButton" name="bSup" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>suppression du mot clef</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Supprimer</string>
+     </property>
+     <property name="shortcut" >
+      <string>Alt+S</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="2" >
+    <widget class="QPushButton" name="bHelp" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>affichage documentation aster</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Documentation</string>
+     </property>
+     <property name="shortcut" >
+      <string>Alt+D</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0" colspan="3" >
+    <widget class="QTabWidget" name="TWChoix" >
+     <property name="currentIndex" >
+      <number>0</number>
+     </property>
+     <widget class="QWidget" name="MotClef" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>483</width>
+        <height>372</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Ajouter Mot-Clef</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_3" >
+       <item row="0" column="0" >
+        <widget class="QLabel" name="textLabel1" >
+         <property name="minimumSize" >
+          <size>
+           <width>0</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>&lt;h3>&lt;p align="center">&lt;u>&lt;b>Mots Clefs Permis&lt;/b>&lt;/u>&lt;/p>&lt;/h3></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1" >
+        <widget class="QLabel" name="textLabel1_2" >
+         <property name="text" >
+          <string>&lt;h3>&lt;p align="center">&lt;u>&lt;b>Règles&lt;/b>&lt;/u>&lt;/p>&lt;/h3></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0" >
+        <widget class="QListWidget" name="LBMCPermis" />
+       </item>
+       <item row="1" column="1" >
+        <widget class="QListWidget" name="LBRegles" />
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="Concept" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>483</width>
+        <height>372</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Nommer Concept</string>
+      </attribute>
+      <layout class="QGridLayout" >
+       <item row="0" column="0" >
+        <widget class="QGroupBox" name="groupBox1" >
+         <property name="title" >
+          <string>Concept</string>
+         </property>
+         <widget class="QLabel" name="textLabel1_3" >
+          <property name="geometry" >
+           <rect>
+            <x>80</x>
+            <y>50</y>
+            <width>130</width>
+            <height>31</height>
+           </rect>
+          </property>
+          <property name="text" >
+           <string>&lt;u>Nom du concept :&lt;/u></string>
+          </property>
+          <property name="wordWrap" >
+           <bool>false</bool>
+          </property>
+         </widget>
+         <widget class="QLabel" name="textLabel1_3_2" >
+          <property name="geometry" >
+           <rect>
+            <x>80</x>
+            <y>170</y>
+            <width>150</width>
+            <height>31</height>
+           </rect>
+          </property>
+          <property name="text" >
+           <string>&lt;u>Type du concept :&lt;/u></string>
+          </property>
+          <property name="wordWrap" >
+           <bool>false</bool>
+          </property>
+         </widget>
+         <widget class="QLineEdit" name="LENomConcept" >
+          <property name="geometry" >
+           <rect>
+            <x>80</x>
+            <y>110</y>
+            <width>310</width>
+            <height>30</height>
+           </rect>
+          </property>
+         </widget>
+         <widget class="QLabel" name="textLabel3" >
+          <property name="geometry" >
+           <rect>
+            <x>10</x>
+            <y>200</y>
+            <width>290</width>
+            <height>31</height>
+           </rect>
+          </property>
+          <property name="text" >
+           <string>L'opérateur retourne un concept de type :</string>
+          </property>
+          <property name="wordWrap" >
+           <bool>false</bool>
+          </property>
+         </widget>
+         <widget class="QLabel" name="typeConcept" >
+          <property name="geometry" >
+           <rect>
+            <x>310</x>
+            <y>200</y>
+            <width>130</width>
+            <height>31</height>
+           </rect>
+          </property>
+          <property name="text" >
+           <string>TypeDuConcept</string>
+          </property>
+          <property name="wordWrap" >
+           <bool>false</bool>
+          </property>
+         </widget>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="Commande" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>483</width>
+        <height>372</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Nouvelle Commande</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_2" >
+       <item row="0" column="0" >
+        <widget class="QLabel" name="textLabel1_4" >
+         <property name="text" >
+          <string>&lt;b>&lt;u>Commandes :&lt;/u>&lt;/b></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0" >
+        <layout class="QHBoxLayout" name="horizontalLayout" >
+         <item>
+          <widget class="QLabel" name="textLabel6" >
+           <property name="minimumSize" >
+            <size>
+             <width>50</width>
+             <height>30</height>
+            </size>
+           </property>
+           <property name="text" >
+            <string>Filtre</string>
+           </property>
+           <property name="wordWrap" >
+            <bool>false</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLineEdit" name="LEFiltre" >
+           <property name="minimumSize" >
+            <size>
+             <width>160</width>
+             <height>30</height>
+            </size>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="BNext" >
+           <property name="text" >
+            <string>Suivant</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item rowspan="2" row="0" column="1" >
+        <widget class="QGroupBox" name="groupBox" >
+         <property name="title" >
+          <string>Affichage</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout" >
+          <item row="0" column="0" >
+           <widget class="QRadioButton" name="RBalpha" >
+            <property name="text" >
+             <string>alphabétique</string>
+            </property>
+            <property name="checked" >
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0" >
+           <widget class="QRadioButton" name="RBGroupe" >
+            <property name="text" >
+             <string>par groupe</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item row="2" column="0" colspan="2" >
+        <widget class="QListWidget" name="LBNouvCommande" />
+       </item>
+       <item row="3" column="0" colspan="2" >
+        <widget class="QLabel" name="textLabel4" >
+         <property name="text" >
+          <string>La commande choisie sera ajoutée APRES la commande courante</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <tabstops>
+  <tabstop>LEFiltre</tabstop>
+  <tabstop>LENomConcept</tabstop>
+  <tabstop>TWChoix</tabstop>
+  <tabstop>LBNouvCommande</tabstop>
+  <tabstop>bOk</tabstop>
+  <tabstop>bSup</tabstop>
+  <tabstop>bHelp</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desCommentaire.py b/UiQT4/desCommentaire.py
new file mode 100644 (file)
index 0000000..d4b7a5e
--- /dev/null
@@ -0,0 +1,132 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desCommentaire.ui'
+#
+# Created: Wed Jul 23 12:00:45 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DComment(object):
+    def setupUi(self, DComment):
+        DComment.setObjectName("DComment")
+        DComment.resize(505,482)
+        DComment.setMinimumSize(QtCore.QSize(505,0))
+        self.gridlayout = QtGui.QGridLayout(DComment)
+        self.gridlayout.setObjectName("gridlayout")
+        self.bOk = QtGui.QPushButton(DComment)
+        self.bOk.setMinimumSize(QtCore.QSize(0,30))
+        self.bOk.setAutoDefault(True)
+        self.bOk.setDefault(True)
+        self.bOk.setObjectName("bOk")
+        self.gridlayout.addWidget(self.bOk,2,1,1,1)
+        self.bSup = QtGui.QPushButton(DComment)
+        self.bSup.setMinimumSize(QtCore.QSize(0,30))
+        self.bSup.setAutoDefault(True)
+        self.bSup.setObjectName("bSup")
+        self.gridlayout.addWidget(self.bSup,2,0,1,1)
+        self.bHelp = QtGui.QPushButton(DComment)
+        self.bHelp.setMinimumSize(QtCore.QSize(0,30))
+        self.bHelp.setAutoDefault(True)
+        self.bHelp.setObjectName("bHelp")
+        self.gridlayout.addWidget(self.bHelp,2,2,1,1)
+        self.Commentaire = QtGui.QLabel(DComment)
+        self.Commentaire.setFrameShape(QtGui.QFrame.NoFrame)
+        self.Commentaire.setFrameShadow(QtGui.QFrame.Plain)
+        self.Commentaire.setWordWrap(False)
+        self.Commentaire.setObjectName("Commentaire")
+        self.gridlayout.addWidget(self.Commentaire,1,0,1,3)
+        self.TWChoix = QtGui.QTabWidget(DComment)
+        self.TWChoix.setObjectName("TWChoix")
+        self.Valeur_Parametre = QtGui.QWidget()
+        self.Valeur_Parametre.setGeometry(QtCore.QRect(0,0,483,371))
+        self.Valeur_Parametre.setObjectName("Valeur_Parametre")
+        self.gridLayout = QtGui.QGridLayout(self.Valeur_Parametre)
+        self.gridLayout.setObjectName("gridLayout")
+        self.textCommentaire = QtGui.QTextEdit(self.Valeur_Parametre)
+        self.textCommentaire.setObjectName("textCommentaire")
+        self.gridLayout.addWidget(self.textCommentaire,0,0,1,1)
+        self.TWChoix.addTab(self.Valeur_Parametre,"")
+        self.Commande = QtGui.QWidget()
+        self.Commande.setGeometry(QtCore.QRect(0,0,483,371))
+        self.Commande.setObjectName("Commande")
+        self.gridLayout_4 = QtGui.QGridLayout(self.Commande)
+        self.gridLayout_4.setObjectName("gridLayout_4")
+        self.textLabel1_4 = QtGui.QLabel(self.Commande)
+        self.textLabel1_4.setWordWrap(False)
+        self.textLabel1_4.setObjectName("textLabel1_4")
+        self.gridLayout_4.addWidget(self.textLabel1_4,0,0,1,3)
+        self.groupBox = QtGui.QGroupBox(self.Commande)
+        self.groupBox.setObjectName("groupBox")
+        self.gridLayout_3 = QtGui.QGridLayout(self.groupBox)
+        self.gridLayout_3.setObjectName("gridLayout_3")
+        self.RBalpha = QtGui.QRadioButton(self.groupBox)
+        self.RBalpha.setChecked(True)
+        self.RBalpha.setObjectName("RBalpha")
+        self.gridLayout_3.addWidget(self.RBalpha,0,0,1,1)
+        self.RBGroupe = QtGui.QRadioButton(self.groupBox)
+        self.RBGroupe.setObjectName("RBGroupe")
+        self.gridLayout_3.addWidget(self.RBGroupe,1,0,1,1)
+        self.gridLayout_4.addWidget(self.groupBox,0,3,2,1)
+        self.textLabel6_2 = QtGui.QLabel(self.Commande)
+        self.textLabel6_2.setMinimumSize(QtCore.QSize(50,30))
+        self.textLabel6_2.setWordWrap(False)
+        self.textLabel6_2.setObjectName("textLabel6_2")
+        self.gridLayout_4.addWidget(self.textLabel6_2,1,0,1,1)
+        self.LEFiltre = QtGui.QLineEdit(self.Commande)
+        self.LEFiltre.setMinimumSize(QtCore.QSize(160,30))
+        self.LEFiltre.setObjectName("LEFiltre")
+        self.gridLayout_4.addWidget(self.LEFiltre,1,1,1,1)
+        self.BNext = QtGui.QPushButton(self.Commande)
+        self.BNext.setObjectName("BNext")
+        self.gridLayout_4.addWidget(self.BNext,1,2,1,1)
+        self.LBNouvCommande = QtGui.QListWidget(self.Commande)
+        self.LBNouvCommande.setObjectName("LBNouvCommande")
+        self.gridLayout_4.addWidget(self.LBNouvCommande,2,0,1,4)
+        self.textLabel4 = QtGui.QLabel(self.Commande)
+        self.textLabel4.setWordWrap(False)
+        self.textLabel4.setObjectName("textLabel4")
+        self.gridLayout_4.addWidget(self.textLabel4,3,0,1,4)
+        self.TWChoix.addTab(self.Commande,"")
+        self.gridlayout.addWidget(self.TWChoix,0,0,1,3)
+
+        self.retranslateUi(DComment)
+        self.TWChoix.setCurrentIndex(0)
+        QtCore.QMetaObject.connectSlotsByName(DComment)
+        DComment.setTabOrder(self.TWChoix,self.bOk)
+        DComment.setTabOrder(self.bOk,self.bSup)
+        DComment.setTabOrder(self.bSup,self.bHelp)
+
+    def retranslateUi(self, DComment):
+        DComment.setWindowTitle(QtGui.QApplication.translate("DComment", "DComm", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setToolTip(QtGui.QApplication.translate("DComment", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setText(QtGui.QApplication.translate("DComment", "&Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setShortcut(QtGui.QApplication.translate("DComment", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setToolTip(QtGui.QApplication.translate("DComment", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DComment", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DComment", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setToolTip(QtGui.QApplication.translate("DComment", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setText(QtGui.QApplication.translate("DComment", "&Documentation", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setShortcut(QtGui.QApplication.translate("DComment", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.Valeur_Parametre), QtGui.QApplication.translate("DComment", "Commentaire", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_4.setText(QtGui.QApplication.translate("DComment", "<b><u>Commandes :</u></b>", None, QtGui.QApplication.UnicodeUTF8))
+        self.groupBox.setTitle(QtGui.QApplication.translate("DComment", "Affichage", None, QtGui.QApplication.UnicodeUTF8))
+        self.RBalpha.setText(QtGui.QApplication.translate("DComment", "alphabétique", None, QtGui.QApplication.UnicodeUTF8))
+        self.RBGroupe.setText(QtGui.QApplication.translate("DComment", "par groupe", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel6_2.setText(QtGui.QApplication.translate("DComment", "Filtre", None, QtGui.QApplication.UnicodeUTF8))
+        self.BNext.setText(QtGui.QApplication.translate("DComment", "Suivant", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel4.setText(QtGui.QApplication.translate("DComment", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DComment", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DComment = QtGui.QWidget()
+    ui = Ui_DComment()
+    ui.setupUi(DComment)
+    DComment.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desCommentaire.ui b/UiQT4/desCommentaire.ui
new file mode 100644 (file)
index 0000000..1202e7b
--- /dev/null
@@ -0,0 +1,241 @@
+<ui version="4.0" >
+ <class>DComment</class>
+ <widget class="QWidget" name="DComment" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>505</width>
+    <height>482</height>
+   </rect>
+  </property>
+  <property name="minimumSize" >
+   <size>
+    <width>505</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle" >
+   <string>DComm</string>
+  </property>
+  <layout class="QGridLayout" >
+   <item row="2" column="1" >
+    <widget class="QPushButton" name="bOk" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>validation de la saisie</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Valider</string>
+     </property>
+     <property name="shortcut" >
+      <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+     <property name="default" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" >
+    <widget class="QPushButton" name="bSup" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>suppression du mot clef</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Supprimer</string>
+     </property>
+     <property name="shortcut" >
+      <string>Alt+S</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="2" >
+    <widget class="QPushButton" name="bHelp" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>affichage documentation aster</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Documentation</string>
+     </property>
+     <property name="shortcut" >
+      <string>Alt+D</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" colspan="3" >
+    <widget class="QLabel" name="Commentaire" >
+     <property name="frameShape" >
+      <enum>QFrame::NoFrame</enum>
+     </property>
+     <property name="frameShadow" >
+      <enum>QFrame::Plain</enum>
+     </property>
+     <property name="text" >
+      <string/>
+     </property>
+     <property name="wordWrap" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0" colspan="3" >
+    <widget class="QTabWidget" name="TWChoix" >
+     <property name="currentIndex" >
+      <number>0</number>
+     </property>
+     <widget class="QWidget" name="Valeur_Parametre" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>483</width>
+        <height>371</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Commentaire</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout" >
+       <item row="0" column="0" >
+        <widget class="QTextEdit" name="textCommentaire" />
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="Commande" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>483</width>
+        <height>371</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Nouvelle Commande</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_4" >
+       <item row="0" column="0" colspan="3" >
+        <widget class="QLabel" name="textLabel1_4" >
+         <property name="text" >
+          <string>&lt;b>&lt;u>Commandes :&lt;/u>&lt;/b></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item rowspan="2" row="0" column="3" >
+        <widget class="QGroupBox" name="groupBox" >
+         <property name="title" >
+          <string>Affichage</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout_3" >
+          <item row="0" column="0" >
+           <widget class="QRadioButton" name="RBalpha" >
+            <property name="text" >
+             <string>alphabétique</string>
+            </property>
+            <property name="checked" >
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0" >
+           <widget class="QRadioButton" name="RBGroupe" >
+            <property name="text" >
+             <string>par groupe</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item row="1" column="0" >
+        <widget class="QLabel" name="textLabel6_2" >
+         <property name="minimumSize" >
+          <size>
+           <width>50</width>
+           <height>30</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>Filtre</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1" >
+        <widget class="QLineEdit" name="LEFiltre" >
+         <property name="minimumSize" >
+          <size>
+           <width>160</width>
+           <height>30</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="2" >
+        <widget class="QPushButton" name="BNext" >
+         <property name="text" >
+          <string>Suivant</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" colspan="4" >
+        <widget class="QListWidget" name="LBNouvCommande" />
+       </item>
+       <item row="3" column="0" colspan="4" >
+        <widget class="QLabel" name="textLabel4" >
+         <property name="text" >
+          <string>La commande choisie sera ajoutée APRES la commande courante</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <tabstops>
+  <tabstop>TWChoix</tabstop>
+  <tabstop>bOk</tabstop>
+  <tabstop>bSup</tabstop>
+  <tabstop>bHelp</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desError.py b/UiQT4/desError.py
new file mode 100644 (file)
index 0000000..31da9ec
--- /dev/null
@@ -0,0 +1,63 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desError.ui'
+#
+# Created: Wed Jul  9 10:11:20 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DError(object):
+    def setupUi(self, DError):
+        DError.setObjectName("DError")
+        DError.resize(482,480)
+        DError.setMinimumSize(QtCore.QSize(350,0))
+        self.gridLayout = QtGui.QGridLayout(DError)
+        self.gridLayout.setObjectName("gridLayout")
+        self.textBrowser = QtGui.QTextBrowser(DError)
+        self.textBrowser.setObjectName("textBrowser")
+        self.gridLayout.addWidget(self.textBrowser,0,0,1,1)
+        self.hboxlayout = QtGui.QHBoxLayout()
+        self.hboxlayout.setObjectName("hboxlayout")
+        spacerItem = QtGui.QSpacerItem(171,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
+        self.hboxlayout.addItem(spacerItem)
+        self.bSup = QtGui.QPushButton(DError)
+        self.bSup.setAutoDefault(True)
+        self.bSup.setObjectName("bSup")
+        self.hboxlayout.addWidget(self.bSup)
+        spacerItem1 = QtGui.QSpacerItem(171,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
+        self.hboxlayout.addItem(spacerItem1)
+        self.gridLayout.addLayout(self.hboxlayout,1,0,1,1)
+
+        self.retranslateUi(DError)
+        QtCore.QMetaObject.connectSlotsByName(DError)
+
+    def retranslateUi(self, DError):
+        DError.setWindowTitle(QtGui.QApplication.translate("DError", "DInactif", None, QtGui.QApplication.UnicodeUTF8))
+        self.textBrowser.setHtml(QtGui.QApplication.translate("DError", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
+"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
+"p, li { white-space: pre-wrap; }\n"
+"</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
+"<p align=\"center\" style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"></p>\n"
+"<p align=\"center\" style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;\"></p>\n"
+"<p align=\"center\" style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;\"></p>\n"
+"<p align=\"center\" style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;\"></p>\n"
+"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;\">Le noeud selectionné</p>\n"
+"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;\">ne correspond pas</p>\n"
+"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;\">à un noeud actif</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setToolTip(QtGui.QApplication.translate("DError", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DError", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DError", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DError = QtGui.QWidget()
+    ui = Ui_DError()
+    ui.setupUi(DError)
+    DError.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desError.ui b/UiQT4/desError.ui
new file mode 100644 (file)
index 0000000..f265353
--- /dev/null
@@ -0,0 +1,97 @@
+<ui version="4.0" >
+ <class>DError</class>
+ <widget class="QWidget" name="DError" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>482</width>
+    <height>480</height>
+   </rect>
+  </property>
+  <property name="minimumSize" >
+   <size>
+    <width>350</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle" >
+   <string>DInactif</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" >
+   <item row="0" column="0" >
+    <widget class="QTextBrowser" name="textBrowser" >
+     <property name="html" >
+      <string>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+p, li { white-space: pre-wrap; }
+&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+&lt;p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;/p>
+&lt;p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">&lt;/p>
+&lt;p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">&lt;/p>
+&lt;p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">&lt;/p>
+&lt;p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">Le noeud selectionné&lt;/p>
+&lt;p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">ne correspond pas&lt;/p>
+&lt;p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">à un noeud actif&lt;/p>&lt;/body>&lt;/html></string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" >
+    <layout class="QHBoxLayout" >
+     <item>
+      <spacer name="spacer1_2" >
+       <property name="orientation" >
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeType" >
+        <enum>QSizePolicy::Expanding</enum>
+       </property>
+       <property name="sizeHint" stdset="0" >
+        <size>
+         <width>171</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="bSup" >
+       <property name="toolTip" >
+        <string>suppression du mot clef</string>
+       </property>
+       <property name="text" >
+        <string>&amp;Supprimer</string>
+       </property>
+       <property name="shortcut" >
+        <string>Alt+S</string>
+       </property>
+       <property name="autoDefault" >
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="spacer1" >
+       <property name="orientation" >
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeType" >
+        <enum>QSizePolicy::Expanding</enum>
+       </property>
+       <property name="sizeHint" stdset="0" >
+        <size>
+         <width>171</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desFormule.py b/UiQT4/desFormule.py
new file mode 100644 (file)
index 0000000..2ac2323
--- /dev/null
@@ -0,0 +1,207 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desFormule.ui'
+#
+# Created: Wed Jul 23 11:43:53 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DFormule(object):
+    def setupUi(self, DFormule):
+        DFormule.setObjectName("DFormule")
+        DFormule.resize(529,493)
+        DFormule.setMinimumSize(QtCore.QSize(505,0))
+        self.gridlayout = QtGui.QGridLayout(DFormule)
+        self.gridlayout.setObjectName("gridlayout")
+        self.hboxlayout = QtGui.QHBoxLayout()
+        self.hboxlayout.setObjectName("hboxlayout")
+        self.bSup = QtGui.QPushButton(DFormule)
+        self.bSup.setMinimumSize(QtCore.QSize(0,30))
+        self.bSup.setAutoDefault(True)
+        self.bSup.setObjectName("bSup")
+        self.hboxlayout.addWidget(self.bSup)
+        self.bOk = QtGui.QPushButton(DFormule)
+        self.bOk.setMinimumSize(QtCore.QSize(0,30))
+        self.bOk.setAutoDefault(True)
+        self.bOk.setDefault(True)
+        self.bOk.setObjectName("bOk")
+        self.hboxlayout.addWidget(self.bOk)
+        self.bHelp = QtGui.QPushButton(DFormule)
+        self.bHelp.setMinimumSize(QtCore.QSize(0,30))
+        self.bHelp.setAutoDefault(True)
+        self.bHelp.setObjectName("bHelp")
+        self.hboxlayout.addWidget(self.bHelp)
+        self.gridlayout.addLayout(self.hboxlayout,2,0,1,1)
+        self.Commentaire = QtGui.QLabel(DFormule)
+        self.Commentaire.setWordWrap(False)
+        self.Commentaire.setObjectName("Commentaire")
+        self.gridlayout.addWidget(self.Commentaire,1,0,1,1)
+        self.TWChoix = QtGui.QTabWidget(DFormule)
+        self.TWChoix.setObjectName("TWChoix")
+        self.Formule = QtGui.QWidget()
+        self.Formule.setGeometry(QtCore.QRect(0,0,507,384))
+        self.Formule.setObjectName("Formule")
+        self.gridlayout1 = QtGui.QGridLayout(self.Formule)
+        self.gridlayout1.setObjectName("gridlayout1")
+        self.textLabel1 = QtGui.QLabel(self.Formule)
+        self.textLabel1.setMinimumSize(QtCore.QSize(0,0))
+        self.textLabel1.setWordWrap(False)
+        self.textLabel1.setObjectName("textLabel1")
+        self.gridlayout1.addWidget(self.textLabel1,0,0,1,1)
+        self.textLabel1_3 = QtGui.QLabel(self.Formule)
+        self.textLabel1_3.setWordWrap(False)
+        self.textLabel1_3.setObjectName("textLabel1_3")
+        self.gridlayout1.addWidget(self.textLabel1_3,6,0,1,2)
+        self.hboxlayout1 = QtGui.QHBoxLayout()
+        self.hboxlayout1.setObjectName("hboxlayout1")
+        self.LENomFormule = QtGui.QLineEdit(self.Formule)
+        self.LENomFormule.setMinimumSize(QtCore.QSize(0,40))
+        self.LENomFormule.setObjectName("LENomFormule")
+        self.hboxlayout1.addWidget(self.LENomFormule)
+        self.hboxlayout2 = QtGui.QHBoxLayout()
+        self.hboxlayout2.setObjectName("hboxlayout2")
+        self.textLabel1_6 = QtGui.QLabel(self.Formule)
+        self.textLabel1_6.setWordWrap(False)
+        self.textLabel1_6.setObjectName("textLabel1_6")
+        self.hboxlayout2.addWidget(self.textLabel1_6)
+        self.LENomsArgs = QtGui.QLineEdit(self.Formule)
+        self.LENomsArgs.setMinimumSize(QtCore.QSize(230,40))
+        self.LENomsArgs.setObjectName("LENomsArgs")
+        self.hboxlayout2.addWidget(self.LENomsArgs)
+        self.textLabel1_6_2 = QtGui.QLabel(self.Formule)
+        self.textLabel1_6_2.setWordWrap(False)
+        self.textLabel1_6_2.setObjectName("textLabel1_6_2")
+        self.hboxlayout2.addWidget(self.textLabel1_6_2)
+        self.hboxlayout1.addLayout(self.hboxlayout2)
+        self.gridlayout1.addLayout(self.hboxlayout1,2,0,1,2)
+        self.textLabel2 = QtGui.QLabel(self.Formule)
+        self.textLabel2.setWordWrap(False)
+        self.textLabel2.setObjectName("textLabel2")
+        self.gridlayout1.addWidget(self.textLabel2,1,1,1,1)
+        self.textLabel1_3_2 = QtGui.QLabel(self.Formule)
+        self.textLabel1_3_2.setWordWrap(False)
+        self.textLabel1_3_2.setObjectName("textLabel1_3_2")
+        self.gridlayout1.addWidget(self.textLabel1_3_2,7,0,1,2)
+        self.textLabel2_2 = QtGui.QLabel(self.Formule)
+        self.textLabel2_2.setWordWrap(False)
+        self.textLabel2_2.setObjectName("textLabel2_2")
+        self.gridlayout1.addWidget(self.textLabel2_2,3,0,1,2)
+        self.textLabel1_5 = QtGui.QLabel(self.Formule)
+        self.textLabel1_5.setMinimumSize(QtCore.QSize(0,0))
+        self.textLabel1_5.setWordWrap(False)
+        self.textLabel1_5.setObjectName("textLabel1_5")
+        self.gridlayout1.addWidget(self.textLabel1_5,4,0,1,2)
+        self.LECorpsFormule = QtGui.QLineEdit(self.Formule)
+        self.LECorpsFormule.setMinimumSize(QtCore.QSize(0,30))
+        self.LECorpsFormule.setObjectName("LECorpsFormule")
+        self.gridlayout1.addWidget(self.LECorpsFormule,5,0,1,2)
+        self.textLabel1_2 = QtGui.QLabel(self.Formule)
+        self.textLabel1_2.setWordWrap(False)
+        self.textLabel1_2.setObjectName("textLabel1_2")
+        self.gridlayout1.addWidget(self.textLabel1_2,0,1,1,1)
+        self.TWChoix.addTab(self.Formule,"")
+        self.Commande = QtGui.QWidget()
+        self.Commande.setGeometry(QtCore.QRect(0,0,507,384))
+        self.Commande.setObjectName("Commande")
+        self.gridLayout_2 = QtGui.QGridLayout(self.Commande)
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.textLabel1_4 = QtGui.QLabel(self.Commande)
+        self.textLabel1_4.setWordWrap(False)
+        self.textLabel1_4.setObjectName("textLabel1_4")
+        self.gridLayout_2.addWidget(self.textLabel1_4,0,0,1,1)
+        self.groupBox = QtGui.QGroupBox(self.Commande)
+        self.groupBox.setObjectName("groupBox")
+        self.gridLayout = QtGui.QGridLayout(self.groupBox)
+        self.gridLayout.setObjectName("gridLayout")
+        self.RBalpha = QtGui.QRadioButton(self.groupBox)
+        self.RBalpha.setChecked(True)
+        self.RBalpha.setObjectName("RBalpha")
+        self.gridLayout.addWidget(self.RBalpha,0,0,1,1)
+        self.RBGroupe = QtGui.QRadioButton(self.groupBox)
+        self.RBGroupe.setObjectName("RBGroupe")
+        self.gridLayout.addWidget(self.RBGroupe,1,0,1,1)
+        self.gridLayout_2.addWidget(self.groupBox,0,1,2,1)
+        self.horizontalLayout = QtGui.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.textLabel6 = QtGui.QLabel(self.Commande)
+        self.textLabel6.setMinimumSize(QtCore.QSize(50,30))
+        self.textLabel6.setWordWrap(False)
+        self.textLabel6.setObjectName("textLabel6")
+        self.horizontalLayout.addWidget(self.textLabel6)
+        self.LEFiltre = QtGui.QLineEdit(self.Commande)
+        self.LEFiltre.setMinimumSize(QtCore.QSize(160,30))
+        self.LEFiltre.setObjectName("LEFiltre")
+        self.horizontalLayout.addWidget(self.LEFiltre)
+        self.BNext = QtGui.QPushButton(self.Commande)
+        self.BNext.setObjectName("BNext")
+        self.horizontalLayout.addWidget(self.BNext)
+        self.gridLayout_2.addLayout(self.horizontalLayout,1,0,1,1)
+        self.LBNouvCommande = QtGui.QListWidget(self.Commande)
+        self.LBNouvCommande.setObjectName("LBNouvCommande")
+        self.gridLayout_2.addWidget(self.LBNouvCommande,2,0,1,2)
+        self.textLabel4 = QtGui.QLabel(self.Commande)
+        self.textLabel4.setWordWrap(False)
+        self.textLabel4.setObjectName("textLabel4")
+        self.gridLayout_2.addWidget(self.textLabel4,3,0,1,2)
+        self.TWChoix.addTab(self.Commande,"")
+        self.gridlayout.addWidget(self.TWChoix,0,0,1,1)
+
+        self.retranslateUi(DFormule)
+        self.TWChoix.setCurrentIndex(0)
+        QtCore.QMetaObject.connectSlotsByName(DFormule)
+        DFormule.setTabOrder(self.LEFiltre,self.LENomFormule)
+        DFormule.setTabOrder(self.LENomFormule,self.LENomsArgs)
+        DFormule.setTabOrder(self.LENomsArgs,self.LECorpsFormule)
+        DFormule.setTabOrder(self.LECorpsFormule,self.bSup)
+        DFormule.setTabOrder(self.bSup,self.bOk)
+        DFormule.setTabOrder(self.bOk,self.bHelp)
+        DFormule.setTabOrder(self.bHelp,self.TWChoix)
+        DFormule.setTabOrder(self.TWChoix,self.RBalpha)
+        DFormule.setTabOrder(self.RBalpha,self.RBGroupe)
+        DFormule.setTabOrder(self.RBGroupe,self.LBNouvCommande)
+
+    def retranslateUi(self, DFormule):
+        DFormule.setWindowTitle(QtGui.QApplication.translate("DFormule", "DMacro", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setToolTip(QtGui.QApplication.translate("DFormule", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DFormule", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DFormule", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setToolTip(QtGui.QApplication.translate("DFormule", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setText(QtGui.QApplication.translate("DFormule", "&Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setShortcut(QtGui.QApplication.translate("DFormule", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setToolTip(QtGui.QApplication.translate("DFormule", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setText(QtGui.QApplication.translate("DFormule", "&Documentation", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setShortcut(QtGui.QApplication.translate("DFormule", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1.setText(QtGui.QApplication.translate("DFormule", "<h3><p align=\"center\"><u><b>Nom de la formule</b></u></p></h3>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_3.setText(QtGui.QApplication.translate("DFormule", "Retour-Chariot permet de vérifier que l\'expression est valide.", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_6.setText(QtGui.QApplication.translate("DFormule", "<h1><b>(</b></h1>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_6_2.setText(QtGui.QApplication.translate("DFormule", "<h1><b>)</b></h1>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel2.setText(QtGui.QApplication.translate("DFormule", "variables séparées par des \",\"\n"
+"          par ex. : x,y,z", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_3_2.setText(QtGui.QApplication.translate("DFormule", "Ce n\'est qu\'après avoir appuyé sur le bouton Valider que les nouvelles\n"
+"valeurs seront effectivement prises en compte", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel2_2.setText(QtGui.QApplication.translate("DFormule", "<font size=\"+4\" face=\"Helvetica\"><b>=</b></font>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_5.setText(QtGui.QApplication.translate("DFormule", "<h3><p align=\"center\"><u><b>Expression</b></u></p></h3>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_2.setText(QtGui.QApplication.translate("DFormule", "<h3><p align=\"center\"><u><b>Arguments</b></u></p></h3>", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.Formule), QtGui.QApplication.translate("DFormule", "Définition Formule", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_4.setText(QtGui.QApplication.translate("DFormule", "<b><u>Commandes :</u></b>", None, QtGui.QApplication.UnicodeUTF8))
+        self.groupBox.setTitle(QtGui.QApplication.translate("DFormule", "Affichage", None, QtGui.QApplication.UnicodeUTF8))
+        self.RBalpha.setText(QtGui.QApplication.translate("DFormule", "alphabétique", None, QtGui.QApplication.UnicodeUTF8))
+        self.RBGroupe.setText(QtGui.QApplication.translate("DFormule", "par groupe", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel6.setText(QtGui.QApplication.translate("DFormule", "Filtre", None, QtGui.QApplication.UnicodeUTF8))
+        self.BNext.setText(QtGui.QApplication.translate("DFormule", "Suivant", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel4.setText(QtGui.QApplication.translate("DFormule", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DFormule", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DFormule = QtGui.QWidget()
+    ui = Ui_DFormule()
+    ui.setupUi(DFormule)
+    DFormule.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desFormule.ui b/UiQT4/desFormule.ui
new file mode 100644 (file)
index 0000000..e0d4f44
--- /dev/null
@@ -0,0 +1,389 @@
+<ui version="4.0" >
+ <class>DFormule</class>
+ <widget class="QWidget" name="DFormule" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>529</width>
+    <height>493</height>
+   </rect>
+  </property>
+  <property name="minimumSize" >
+   <size>
+    <width>505</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle" >
+   <string>DMacro</string>
+  </property>
+  <layout class="QGridLayout" >
+   <item row="2" column="0" >
+    <layout class="QHBoxLayout" >
+     <item>
+      <widget class="QPushButton" name="bSup" >
+       <property name="minimumSize" >
+        <size>
+         <width>0</width>
+         <height>30</height>
+        </size>
+       </property>
+       <property name="toolTip" >
+        <string>suppression du mot clef</string>
+       </property>
+       <property name="text" >
+        <string>&amp;Supprimer</string>
+       </property>
+       <property name="shortcut" >
+        <string>Alt+S</string>
+       </property>
+       <property name="autoDefault" >
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="bOk" >
+       <property name="minimumSize" >
+        <size>
+         <width>0</width>
+         <height>30</height>
+        </size>
+       </property>
+       <property name="toolTip" >
+        <string>validation de la saisie</string>
+       </property>
+       <property name="text" >
+        <string>&amp;Valider</string>
+       </property>
+       <property name="shortcut" >
+        <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+       </property>
+       <property name="autoDefault" >
+        <bool>true</bool>
+       </property>
+       <property name="default" >
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="bHelp" >
+       <property name="minimumSize" >
+        <size>
+         <width>0</width>
+         <height>30</height>
+        </size>
+       </property>
+       <property name="toolTip" >
+        <string>affichage documentation aster</string>
+       </property>
+       <property name="text" >
+        <string>&amp;Documentation</string>
+       </property>
+       <property name="shortcut" >
+        <string>Alt+D</string>
+       </property>
+       <property name="autoDefault" >
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0" >
+    <widget class="QLabel" name="Commentaire" >
+     <property name="text" >
+      <string/>
+     </property>
+     <property name="wordWrap" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0" >
+    <widget class="QTabWidget" name="TWChoix" >
+     <property name="currentIndex" >
+      <number>0</number>
+     </property>
+     <widget class="QWidget" name="Formule" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>507</width>
+        <height>384</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Définition Formule</string>
+      </attribute>
+      <layout class="QGridLayout" >
+       <item row="0" column="0" >
+        <widget class="QLabel" name="textLabel1" >
+         <property name="minimumSize" >
+          <size>
+           <width>0</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>&lt;h3>&lt;p align="center">&lt;u>&lt;b>Nom de la formule&lt;/b>&lt;/u>&lt;/p>&lt;/h3></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="6" column="0" colspan="2" >
+        <widget class="QLabel" name="textLabel1_3" >
+         <property name="text" >
+          <string>Retour-Chariot permet de vérifier que l'expression est valide.</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" colspan="2" >
+        <layout class="QHBoxLayout" >
+         <item>
+          <widget class="QLineEdit" name="LENomFormule" >
+           <property name="minimumSize" >
+            <size>
+             <width>0</width>
+             <height>40</height>
+            </size>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" >
+           <item>
+            <widget class="QLabel" name="textLabel1_6" >
+             <property name="text" >
+              <string>&lt;h1>&lt;b>(&lt;/b>&lt;/h1></string>
+             </property>
+             <property name="wordWrap" >
+              <bool>false</bool>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLineEdit" name="LENomsArgs" >
+             <property name="minimumSize" >
+              <size>
+               <width>230</width>
+               <height>40</height>
+              </size>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLabel" name="textLabel1_6_2" >
+             <property name="text" >
+              <string>&lt;h1>&lt;b>)&lt;/b>&lt;/h1></string>
+             </property>
+             <property name="wordWrap" >
+              <bool>false</bool>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+       <item row="1" column="1" >
+        <widget class="QLabel" name="textLabel2" >
+         <property name="text" >
+          <string>variables séparées par des ","
+          par ex. : x,y,z</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="7" column="0" colspan="2" >
+        <widget class="QLabel" name="textLabel1_3_2" >
+         <property name="text" >
+          <string>Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
+valeurs seront effectivement prises en compte</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="0" colspan="2" >
+        <widget class="QLabel" name="textLabel2_2" >
+         <property name="text" >
+          <string>&lt;font size="+4" face="Helvetica">&lt;b>=&lt;/b>&lt;/font></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="0" colspan="2" >
+        <widget class="QLabel" name="textLabel1_5" >
+         <property name="minimumSize" >
+          <size>
+           <width>0</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>&lt;h3>&lt;p align="center">&lt;u>&lt;b>Expression&lt;/b>&lt;/u>&lt;/p>&lt;/h3></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="0" colspan="2" >
+        <widget class="QLineEdit" name="LECorpsFormule" >
+         <property name="minimumSize" >
+          <size>
+           <width>0</width>
+           <height>30</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1" >
+        <widget class="QLabel" name="textLabel1_2" >
+         <property name="text" >
+          <string>&lt;h3>&lt;p align="center">&lt;u>&lt;b>Arguments&lt;/b>&lt;/u>&lt;/p>&lt;/h3></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="Commande" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>507</width>
+        <height>384</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Nouvelle Commande</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_2" >
+       <item row="0" column="0" >
+        <widget class="QLabel" name="textLabel1_4" >
+         <property name="text" >
+          <string>&lt;b>&lt;u>Commandes :&lt;/u>&lt;/b></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item rowspan="2" row="0" column="1" >
+        <widget class="QGroupBox" name="groupBox" >
+         <property name="title" >
+          <string>Affichage</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout" >
+          <item row="0" column="0" >
+           <widget class="QRadioButton" name="RBalpha" >
+            <property name="text" >
+             <string>alphabétique</string>
+            </property>
+            <property name="checked" >
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0" >
+           <widget class="QRadioButton" name="RBGroupe" >
+            <property name="text" >
+             <string>par groupe</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item row="1" column="0" >
+        <layout class="QHBoxLayout" name="horizontalLayout" >
+         <item>
+          <widget class="QLabel" name="textLabel6" >
+           <property name="minimumSize" >
+            <size>
+             <width>50</width>
+             <height>30</height>
+            </size>
+           </property>
+           <property name="text" >
+            <string>Filtre</string>
+           </property>
+           <property name="wordWrap" >
+            <bool>false</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLineEdit" name="LEFiltre" >
+           <property name="minimumSize" >
+            <size>
+             <width>160</width>
+             <height>30</height>
+            </size>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="BNext" >
+           <property name="text" >
+            <string>Suivant</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item row="2" column="0" colspan="2" >
+        <widget class="QListWidget" name="LBNouvCommande" />
+       </item>
+       <item row="3" column="0" colspan="2" >
+        <widget class="QLabel" name="textLabel4" >
+         <property name="text" >
+          <string>La commande choisie sera ajoutée APRES la commande courante</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <tabstops>
+  <tabstop>LEFiltre</tabstop>
+  <tabstop>LENomFormule</tabstop>
+  <tabstop>LENomsArgs</tabstop>
+  <tabstop>LECorpsFormule</tabstop>
+  <tabstop>bSup</tabstop>
+  <tabstop>bOk</tabstop>
+  <tabstop>bHelp</tabstop>
+  <tabstop>TWChoix</tabstop>
+  <tabstop>RBalpha</tabstop>
+  <tabstop>RBGroupe</tabstop>
+  <tabstop>LBNouvCommande</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desInactif.py b/UiQT4/desInactif.py
new file mode 100644 (file)
index 0000000..7a8ce1d
--- /dev/null
@@ -0,0 +1,66 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desInactif.ui'
+#
+# Created: Wed Jul  9 10:11:21 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DInactif(object):
+    def setupUi(self, DInactif):
+        DInactif.setObjectName("DInactif")
+        DInactif.resize(452,480)
+        DInactif.setMinimumSize(QtCore.QSize(350,0))
+        self.gridLayout = QtGui.QGridLayout(DInactif)
+        self.gridLayout.setObjectName("gridLayout")
+        self.textLabel1_3 = QtGui.QLabel(DInactif)
+        self.textLabel1_3.setWordWrap(False)
+        self.textLabel1_3.setObjectName("textLabel1_3")
+        self.gridLayout.addWidget(self.textLabel1_3,0,0,1,3)
+        self.textLabel1 = QtGui.QLabel(DInactif)
+        self.textLabel1.setWordWrap(False)
+        self.textLabel1.setObjectName("textLabel1")
+        self.gridLayout.addWidget(self.textLabel1,1,0,1,3)
+        spacerItem = QtGui.QSpacerItem(167,146,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
+        self.gridLayout.addItem(spacerItem,2,0,1,1)
+        self.bSup = QtGui.QPushButton(DInactif)
+        self.bSup.setAutoDefault(True)
+        self.bSup.setObjectName("bSup")
+        self.gridLayout.addWidget(self.bSup,2,1,1,1)
+        spacerItem1 = QtGui.QSpacerItem(166,146,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
+        self.gridLayout.addItem(spacerItem1,2,2,1,1)
+
+        self.retranslateUi(DInactif)
+        QtCore.QMetaObject.connectSlotsByName(DInactif)
+
+    def retranslateUi(self, DInactif):
+        DInactif.setWindowTitle(QtGui.QApplication.translate("DInactif", "DInactif", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_3.setText(QtGui.QApplication.translate("DInactif", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
+"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
+"p, li { white-space: pre-wrap; }\n"
+"</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
+"<p align=\"center\" style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:x-large;\"><span style=\" font-size:x-large;\">Le noeud sélectionné ne correspond</span></p>\n"
+"<p align=\"center\" style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:x-large;\"><span style=\" font-size:x-large;\"> pas à un objet actif.</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1.setText(QtGui.QApplication.translate("DInactif", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
+"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
+"p, li { white-space: pre-wrap; }\n"
+"</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
+"<p align=\"center\" style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:x-large;\"><span style=\" font-size:x-large;\">Seules les commandes placées</span></p>\n"
+"<p align=\"center\" style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:x-large;\"><span style=\" font-size:x-large;\"> entre : DEBUT / FIN sont actives </span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setToolTip(QtGui.QApplication.translate("DInactif", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DInactif", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DInactif", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DInactif = QtGui.QWidget()
+    ui = Ui_DInactif()
+    ui.setupUi(DInactif)
+    DInactif.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desInactif.ui b/UiQT4/desInactif.ui
new file mode 100644 (file)
index 0000000..cc49e51
--- /dev/null
@@ -0,0 +1,106 @@
+<ui version="4.0" >
+ <class>DInactif</class>
+ <widget class="QWidget" name="DInactif" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>452</width>
+    <height>480</height>
+   </rect>
+  </property>
+  <property name="minimumSize" >
+   <size>
+    <width>350</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle" >
+   <string>DInactif</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" >
+   <item row="0" column="0" colspan="3" >
+    <widget class="QLabel" name="textLabel1_3" >
+     <property name="text" >
+      <string>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+p, li { white-space: pre-wrap; }
+&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+&lt;p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:x-large;">&lt;span style=" font-size:x-large;">Le noeud sélectionné ne correspond&lt;/span>&lt;/p>
+&lt;p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:x-large;">&lt;span style=" font-size:x-large;"> pas à un objet actif.&lt;/span>&lt;/p>&lt;/body>&lt;/html></string>
+     </property>
+     <property name="wordWrap" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" colspan="3" >
+    <widget class="QLabel" name="textLabel1" >
+     <property name="text" >
+      <string>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+p, li { white-space: pre-wrap; }
+&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+&lt;p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:x-large;">&lt;span style=" font-size:x-large;">Seules les commandes placées&lt;/span>&lt;/p>
+&lt;p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:x-large;">&lt;span style=" font-size:x-large;"> entre : DEBUT / FIN sont actives &lt;/span>&lt;/p>&lt;/body>&lt;/html></string>
+     </property>
+     <property name="wordWrap" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" >
+    <spacer name="spacer2" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeType" >
+      <enum>QSizePolicy::Expanding</enum>
+     </property>
+     <property name="sizeHint" stdset="0" >
+      <size>
+       <width>167</width>
+       <height>146</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="2" column="1" >
+    <widget class="QPushButton" name="bSup" >
+     <property name="toolTip" >
+      <string>suppression du mot clef</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Supprimer</string>
+     </property>
+     <property name="shortcut" >
+      <string>Alt+S</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="2" >
+    <spacer name="spacer1" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeType" >
+      <enum>QSizePolicy::Expanding</enum>
+     </property>
+     <property name="sizeHint" stdset="0" >
+      <size>
+       <width>166</width>
+       <height>146</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desInclude.py b/UiQT4/desInclude.py
new file mode 100644 (file)
index 0000000..73a967c
--- /dev/null
@@ -0,0 +1,207 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desInclude.ui'
+#
+# Created: Tue Oct  7 16:59:34 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DInc1(object):
+    def setupUi(self, DInc1):
+        DInc1.setObjectName("DInc1")
+        DInc1.resize(521,511)
+        DInc1.setMinimumSize(QtCore.QSize(505,0))
+        self.gridlayout = QtGui.QGridLayout(DInc1)
+        self.gridlayout.setObjectName("gridlayout")
+        self.bOk = QtGui.QPushButton(DInc1)
+        self.bOk.setMinimumSize(QtCore.QSize(0,30))
+        self.bOk.setAutoDefault(True)
+        self.bOk.setDefault(True)
+        self.bOk.setObjectName("bOk")
+        self.gridlayout.addWidget(self.bOk,2,1,1,1)
+        self.bHelp = QtGui.QPushButton(DInc1)
+        self.bHelp.setMinimumSize(QtCore.QSize(0,30))
+        self.bHelp.setAutoDefault(True)
+        self.bHelp.setObjectName("bHelp")
+        self.gridlayout.addWidget(self.bHelp,2,2,1,1)
+        self.bSup = QtGui.QPushButton(DInc1)
+        self.bSup.setMinimumSize(QtCore.QSize(0,30))
+        self.bSup.setAutoDefault(True)
+        self.bSup.setObjectName("bSup")
+        self.gridlayout.addWidget(self.bSup,2,0,1,1)
+        self.Commentaire = QtGui.QLabel(DInc1)
+        self.Commentaire.setWordWrap(False)
+        self.Commentaire.setObjectName("Commentaire")
+        self.gridlayout.addWidget(self.Commentaire,1,0,1,3)
+        self.TWChoix = QtGui.QTabWidget(DInc1)
+        self.TWChoix.setObjectName("TWChoix")
+        self.MotClef = QtGui.QWidget()
+        self.MotClef.setGeometry(QtCore.QRect(0,0,499,400))
+        self.MotClef.setObjectName("MotClef")
+        self.gridlayout1 = QtGui.QGridLayout(self.MotClef)
+        self.gridlayout1.setObjectName("gridlayout1")
+        self.LBMCPermis = QtGui.QListWidget(self.MotClef)
+        self.LBMCPermis.setMinimumSize(QtCore.QSize(0,0))
+        self.LBMCPermis.setObjectName("LBMCPermis")
+        self.gridlayout1.addWidget(self.LBMCPermis,1,0,1,1)
+        self.textLabel1 = QtGui.QLabel(self.MotClef)
+        self.textLabel1.setMinimumSize(QtCore.QSize(0,0))
+        self.textLabel1.setWordWrap(False)
+        self.textLabel1.setObjectName("textLabel1")
+        self.gridlayout1.addWidget(self.textLabel1,0,0,1,1)
+        self.LBRegles = QtGui.QListWidget(self.MotClef)
+        self.LBRegles.setObjectName("LBRegles")
+        self.gridlayout1.addWidget(self.LBRegles,1,1,1,1)
+        self.textLabel1_2 = QtGui.QLabel(self.MotClef)
+        self.textLabel1_2.setWordWrap(False)
+        self.textLabel1_2.setObjectName("textLabel1_2")
+        self.gridlayout1.addWidget(self.textLabel1_2,0,1,1,1)
+        self.TWChoix.addTab(self.MotClef,"")
+        self.Commande = QtGui.QWidget()
+        self.Commande.setGeometry(QtCore.QRect(0,0,499,400))
+        self.Commande.setObjectName("Commande")
+        self.gridLayout_2 = QtGui.QGridLayout(self.Commande)
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.textLabel1_4 = QtGui.QLabel(self.Commande)
+        self.textLabel1_4.setWordWrap(False)
+        self.textLabel1_4.setObjectName("textLabel1_4")
+        self.gridLayout_2.addWidget(self.textLabel1_4,0,0,1,3)
+        self.groupBox = QtGui.QGroupBox(self.Commande)
+        self.groupBox.setObjectName("groupBox")
+        self.gridLayout = QtGui.QGridLayout(self.groupBox)
+        self.gridLayout.setObjectName("gridLayout")
+        self.RBalpha = QtGui.QRadioButton(self.groupBox)
+        self.RBalpha.setChecked(True)
+        self.RBalpha.setObjectName("RBalpha")
+        self.gridLayout.addWidget(self.RBalpha,0,0,1,1)
+        self.RBGroupe = QtGui.QRadioButton(self.groupBox)
+        self.RBGroupe.setObjectName("RBGroupe")
+        self.gridLayout.addWidget(self.RBGroupe,1,0,1,1)
+        self.gridLayout_2.addWidget(self.groupBox,0,3,2,1)
+        self.textLabel6 = QtGui.QLabel(self.Commande)
+        self.textLabel6.setMinimumSize(QtCore.QSize(50,30))
+        self.textLabel6.setWordWrap(False)
+        self.textLabel6.setObjectName("textLabel6")
+        self.gridLayout_2.addWidget(self.textLabel6,1,0,1,1)
+        self.LEFiltre = QtGui.QLineEdit(self.Commande)
+        self.LEFiltre.setMinimumSize(QtCore.QSize(160,30))
+        self.LEFiltre.setObjectName("LEFiltre")
+        self.gridLayout_2.addWidget(self.LEFiltre,1,1,1,1)
+        self.BNext = QtGui.QPushButton(self.Commande)
+        self.BNext.setObjectName("BNext")
+        self.gridLayout_2.addWidget(self.BNext,1,2,1,1)
+        self.LBNouvCommande = QtGui.QListWidget(self.Commande)
+        self.LBNouvCommande.setObjectName("LBNouvCommande")
+        self.gridLayout_2.addWidget(self.LBNouvCommande,2,0,1,4)
+        self.textLabel4 = QtGui.QLabel(self.Commande)
+        self.textLabel4.setWordWrap(False)
+        self.textLabel4.setObjectName("textLabel4")
+        self.gridLayout_2.addWidget(self.textLabel4,3,0,1,4)
+        self.TWChoix.addTab(self.Commande,"")
+        self.maPageOk = QtGui.QWidget()
+        self.maPageOk.setGeometry(QtCore.QRect(0,0,499,400))
+        self.maPageOk.setObjectName("maPageOk")
+        self.textLabel1_3 = QtGui.QLabel(self.maPageOk)
+        self.textLabel1_3.setGeometry(QtCore.QRect(30,40,440,41))
+        self.textLabel1_3.setWordWrap(False)
+        self.textLabel1_3.setObjectName("textLabel1_3")
+        self.LENomFichier = QtGui.QLineEdit(self.maPageOk)
+        self.LENomFichier.setGeometry(QtCore.QRect(18,117,450,40))
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.LENomFichier.sizePolicy().hasHeightForWidth())
+        self.LENomFichier.setSizePolicy(sizePolicy)
+        self.LENomFichier.setMinimumSize(QtCore.QSize(450,40))
+        self.LENomFichier.setObjectName("LENomFichier")
+        self.BBrowse = QtGui.QPushButton(self.maPageOk)
+        self.BBrowse.setGeometry(QtCore.QRect(280,240,161,41))
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.BBrowse.sizePolicy().hasHeightForWidth())
+        self.BBrowse.setSizePolicy(sizePolicy)
+        self.BBrowse.setObjectName("BBrowse")
+        self.BChangeFile = QtGui.QPushButton(self.maPageOk)
+        self.BChangeFile.setGeometry(QtCore.QRect(280,290,161,41))
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.BChangeFile.sizePolicy().hasHeightForWidth())
+        self.BChangeFile.setSizePolicy(sizePolicy)
+        self.BChangeFile.setObjectName("BChangeFile")
+        self.TWChoix.addTab(self.maPageOk,"")
+        self.maPageBad = QtGui.QWidget()
+        self.maPageBad.setGeometry(QtCore.QRect(0,0,499,400))
+        self.maPageBad.setObjectName("maPageBad")
+        self.gridlayout2 = QtGui.QGridLayout(self.maPageBad)
+        self.gridlayout2.setObjectName("gridlayout2")
+        self.textLabel1_5 = QtGui.QLabel(self.maPageBad)
+        self.textLabel1_5.setWordWrap(False)
+        self.textLabel1_5.setObjectName("textLabel1_5")
+        self.gridlayout2.addWidget(self.textLabel1_5,0,0,1,1)
+        self.TWChoix.addTab(self.maPageBad,"")
+        self.gridlayout.addWidget(self.TWChoix,0,0,1,3)
+
+        self.retranslateUi(DInc1)
+        self.TWChoix.setCurrentIndex(2)
+        QtCore.QMetaObject.connectSlotsByName(DInc1)
+        DInc1.setTabOrder(self.LEFiltre,self.LENomFichier)
+        DInc1.setTabOrder(self.LENomFichier,self.bHelp)
+        DInc1.setTabOrder(self.bHelp,self.bSup)
+        DInc1.setTabOrder(self.bSup,self.bOk)
+        DInc1.setTabOrder(self.bOk,self.TWChoix)
+        DInc1.setTabOrder(self.TWChoix,self.LBMCPermis)
+        DInc1.setTabOrder(self.LBMCPermis,self.LBRegles)
+        DInc1.setTabOrder(self.LBRegles,self.LBNouvCommande)
+        DInc1.setTabOrder(self.LBNouvCommande,self.RBalpha)
+        DInc1.setTabOrder(self.RBalpha,self.BBrowse)
+        DInc1.setTabOrder(self.BBrowse,self.BChangeFile)
+
+    def retranslateUi(self, DInc1):
+        DInc1.setWindowTitle(QtGui.QApplication.translate("DInc1", "DMacro", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setToolTip(QtGui.QApplication.translate("DInc1", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setText(QtGui.QApplication.translate("DInc1", "&Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setShortcut(QtGui.QApplication.translate("DInc1", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setToolTip(QtGui.QApplication.translate("DInc1", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setText(QtGui.QApplication.translate("DInc1", "&Documentation", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setShortcut(QtGui.QApplication.translate("DInc1", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setToolTip(QtGui.QApplication.translate("DInc1", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DInc1", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DInc1", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1.setText(QtGui.QApplication.translate("DInc1", "<h3><p align=\"center\"><u><b>Mots Clefs Permis</b></u></p></h3>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_2.setText(QtGui.QApplication.translate("DInc1", "<h3><p align=\"center\"><u><b>Régles</b></u></p></h3>", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.MotClef), QtGui.QApplication.translate("DInc1", "Ajouter Mot-Clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_4.setText(QtGui.QApplication.translate("DInc1", "<b><u>Commandes :</u></b>", None, QtGui.QApplication.UnicodeUTF8))
+        self.groupBox.setTitle(QtGui.QApplication.translate("DInc1", "Affichage", None, QtGui.QApplication.UnicodeUTF8))
+        self.RBalpha.setText(QtGui.QApplication.translate("DInc1", "alphabétique", None, QtGui.QApplication.UnicodeUTF8))
+        self.RBGroupe.setText(QtGui.QApplication.translate("DInc1", "par groupe", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel6.setText(QtGui.QApplication.translate("DInc1", "Filtre", None, QtGui.QApplication.UnicodeUTF8))
+        self.BNext.setText(QtGui.QApplication.translate("DInc1", "Suivant", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel4.setText(QtGui.QApplication.translate("DInc1", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DInc1", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_3.setText(QtGui.QApplication.translate("DInc1", "<font size=\"+1\">La commande INCLUDE requiert un nom de Fichier :</font>", None, QtGui.QApplication.UnicodeUTF8))
+        self.BBrowse.setText(QtGui.QApplication.translate("DInc1", "Edit", None, QtGui.QApplication.UnicodeUTF8))
+        self.BChangeFile.setText(QtGui.QApplication.translate("DInc1", "Autre Fichier", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.maPageOk), QtGui.QApplication.translate("DInc1", "Fichier Include", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_5.setText(QtGui.QApplication.translate("DInc1", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
+"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
+"p, li { white-space: pre-wrap; }\n"
+"</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
+"<p align=\"center\" style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:large;\"><span style=\" font-size:11pt; font-weight:600;\">La commande INCLUDE n\'a pas de fichier associé. </span></p>\n"
+"<p align=\"center\" style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; font-weight:600;\"><span style=\" font-size:large;\">Il faut d\'abord choisir un numéro d\'unité</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.maPageBad), QtGui.QApplication.translate("DInc1", "Fichier Inc", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DInc1 = QtGui.QWidget()
+    ui = Ui_DInc1()
+    ui.setupUi(DInc1)
+    DInc1.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desInclude.ui b/UiQT4/desInclude.ui
new file mode 100644 (file)
index 0000000..dc21a3f
--- /dev/null
@@ -0,0 +1,398 @@
+<ui version="4.0" >
+ <class>DInc1</class>
+ <widget class="QWidget" name="DInc1" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>521</width>
+    <height>511</height>
+   </rect>
+  </property>
+  <property name="minimumSize" >
+   <size>
+    <width>505</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle" >
+   <string>DMacro</string>
+  </property>
+  <layout class="QGridLayout" >
+   <item row="2" column="1" >
+    <widget class="QPushButton" name="bOk" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>validation de la saisie</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Valider</string>
+     </property>
+     <property name="shortcut" >
+      <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+     <property name="default" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="2" >
+    <widget class="QPushButton" name="bHelp" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>affichage documentation aster</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Documentation</string>
+     </property>
+     <property name="shortcut" >
+      <string>Alt+D</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" >
+    <widget class="QPushButton" name="bSup" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>suppression du mot clef</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Supprimer</string>
+     </property>
+     <property name="shortcut" >
+      <string>Alt+S</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" colspan="3" >
+    <widget class="QLabel" name="Commentaire" >
+     <property name="text" >
+      <string/>
+     </property>
+     <property name="wordWrap" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0" colspan="3" >
+    <widget class="QTabWidget" name="TWChoix" >
+     <property name="currentIndex" >
+      <number>2</number>
+     </property>
+     <widget class="QWidget" name="MotClef" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>499</width>
+        <height>400</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Ajouter Mot-Clef</string>
+      </attribute>
+      <layout class="QGridLayout" >
+       <item row="1" column="0" >
+        <widget class="QListWidget" name="LBMCPermis" >
+         <property name="minimumSize" >
+          <size>
+           <width>0</width>
+           <height>0</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="0" >
+        <widget class="QLabel" name="textLabel1" >
+         <property name="minimumSize" >
+          <size>
+           <width>0</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>&lt;h3>&lt;p align="center">&lt;u>&lt;b>Mots Clefs Permis&lt;/b>&lt;/u>&lt;/p>&lt;/h3></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1" >
+        <widget class="QListWidget" name="LBRegles" />
+       </item>
+       <item row="0" column="1" >
+        <widget class="QLabel" name="textLabel1_2" >
+         <property name="text" >
+          <string>&lt;h3>&lt;p align="center">&lt;u>&lt;b>Régles&lt;/b>&lt;/u>&lt;/p>&lt;/h3></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="Commande" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>499</width>
+        <height>400</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Nouvelle Commande</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_2" >
+       <item row="0" column="0" colspan="3" >
+        <widget class="QLabel" name="textLabel1_4" >
+         <property name="text" >
+          <string>&lt;b>&lt;u>Commandes :&lt;/u>&lt;/b></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item rowspan="2" row="0" column="3" >
+        <widget class="QGroupBox" name="groupBox" >
+         <property name="title" >
+          <string>Affichage</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout" >
+          <item row="0" column="0" >
+           <widget class="QRadioButton" name="RBalpha" >
+            <property name="text" >
+             <string>alphabétique</string>
+            </property>
+            <property name="checked" >
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0" >
+           <widget class="QRadioButton" name="RBGroupe" >
+            <property name="text" >
+             <string>par groupe</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item row="1" column="0" >
+        <widget class="QLabel" name="textLabel6" >
+         <property name="minimumSize" >
+          <size>
+           <width>50</width>
+           <height>30</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>Filtre</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1" >
+        <widget class="QLineEdit" name="LEFiltre" >
+         <property name="minimumSize" >
+          <size>
+           <width>160</width>
+           <height>30</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="2" >
+        <widget class="QPushButton" name="BNext" >
+         <property name="text" >
+          <string>Suivant</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" colspan="4" >
+        <widget class="QListWidget" name="LBNouvCommande" />
+       </item>
+       <item row="3" column="0" colspan="4" >
+        <widget class="QLabel" name="textLabel4" >
+         <property name="text" >
+          <string>La commande choisie sera ajoutée APRES la commande courante</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="maPageOk" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>499</width>
+        <height>400</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Fichier Include</string>
+      </attribute>
+      <widget class="QLabel" name="textLabel1_3" >
+       <property name="geometry" >
+        <rect>
+         <x>30</x>
+         <y>40</y>
+         <width>440</width>
+         <height>41</height>
+        </rect>
+       </property>
+       <property name="text" >
+        <string>&lt;font size="+1">La commande INCLUDE requiert un nom de Fichier :&lt;/font></string>
+       </property>
+       <property name="wordWrap" >
+        <bool>false</bool>
+       </property>
+      </widget>
+      <widget class="QLineEdit" name="LENomFichier" >
+       <property name="geometry" >
+        <rect>
+         <x>18</x>
+         <y>117</y>
+         <width>450</width>
+         <height>40</height>
+        </rect>
+       </property>
+       <property name="sizePolicy" >
+        <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize" >
+        <size>
+         <width>450</width>
+         <height>40</height>
+        </size>
+       </property>
+      </widget>
+      <widget class="QPushButton" name="BBrowse" >
+       <property name="geometry" >
+        <rect>
+         <x>280</x>
+         <y>240</y>
+         <width>161</width>
+         <height>41</height>
+        </rect>
+       </property>
+       <property name="sizePolicy" >
+        <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text" >
+        <string>Edit</string>
+       </property>
+      </widget>
+      <widget class="QPushButton" name="BChangeFile" >
+       <property name="geometry" >
+        <rect>
+         <x>280</x>
+         <y>290</y>
+         <width>161</width>
+         <height>41</height>
+        </rect>
+       </property>
+       <property name="sizePolicy" >
+        <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text" >
+        <string>Autre Fichier</string>
+       </property>
+      </widget>
+     </widget>
+     <widget class="QWidget" name="maPageBad" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>499</width>
+        <height>400</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Fichier Inc</string>
+      </attribute>
+      <layout class="QGridLayout" >
+       <item row="0" column="0" >
+        <widget class="QLabel" name="textLabel1_5" >
+         <property name="text" >
+          <string>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+p, li { white-space: pre-wrap; }
+&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+&lt;p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:large;">&lt;span style=" font-size:11pt; font-weight:600;">La commande INCLUDE n'a pas de fichier associé. &lt;/span>&lt;/p>
+&lt;p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; font-weight:600;">&lt;span style=" font-size:large;">Il faut d'abord choisir un numéro d'unité&lt;/span>&lt;/p>&lt;/body>&lt;/html></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <tabstops>
+  <tabstop>LEFiltre</tabstop>
+  <tabstop>LENomFichier</tabstop>
+  <tabstop>bHelp</tabstop>
+  <tabstop>bSup</tabstop>
+  <tabstop>bOk</tabstop>
+  <tabstop>TWChoix</tabstop>
+  <tabstop>LBMCPermis</tabstop>
+  <tabstop>LBRegles</tabstop>
+  <tabstop>LBNouvCommande</tabstop>
+  <tabstop>RBalpha</tabstop>
+  <tabstop>BBrowse</tabstop>
+  <tabstop>BChangeFile</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desListeParam.py b/UiQT4/desListeParam.py
new file mode 100644 (file)
index 0000000..ade7e63
--- /dev/null
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desListeParam.ui'
+#
+# Created: Fri Jul 18 16:24:34 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DLisParam(object):
+    def setupUi(self, DLisParam):
+        DLisParam.setObjectName("DLisParam")
+        DLisParam.resize(413,394)
+        self.gridlayout = QtGui.QGridLayout(DLisParam)
+        self.gridlayout.setObjectName("gridlayout")
+        self.LBParam = QtGui.QListWidget(DLisParam)
+        self.LBParam.setObjectName("LBParam")
+        self.gridlayout.addWidget(self.LBParam,0,0,1,1)
+
+        self.retranslateUi(DLisParam)
+
+    def retranslateUi(self, DLisParam):
+        DLisParam.setWindowTitle(QtGui.QApplication.translate("DLisParam", "Sélection de paramétres", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DLisParam = QtGui.QWidget()
+    ui = Ui_DLisParam()
+    ui.setupUi(DLisParam)
+    DLisParam.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desListeParam.ui b/UiQT4/desListeParam.ui
new file mode 100644 (file)
index 0000000..0e3a9fe
--- /dev/null
@@ -0,0 +1,26 @@
+<ui version="4.0" stdsetdef="1" >
+  <author></author>
+  <comment></comment>
+  <exportmacro></exportmacro>
+  <class>DLisParam</class>
+  <widget class="QWidget" name="DLisParam" >
+    <property name="geometry" >
+      <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>413</width>
+        <height>394</height>
+      </rect>
+    </property>
+    <property name="windowTitle" >
+      <string>Sélection de paramétres</string>
+    </property>
+    <layout class="QGridLayout" >
+      <item row="0" column="0" >
+        <widget class="QListWidget" name="LBParam" />
+      </item>
+    </layout>
+  </widget>
+  <layoutdefault spacing="6" margin="11" />
+  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+</ui>
diff --git a/UiQT4/desMCFact.py b/UiQT4/desMCFact.py
new file mode 100644 (file)
index 0000000..ede8054
--- /dev/null
@@ -0,0 +1,87 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desMCFact.ui'
+#
+# Created: Fri Jul 18 16:24:34 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DMCFact(object):
+    def setupUi(self, DMCFact):
+        DMCFact.setObjectName("DMCFact")
+        DMCFact.resize(511,499)
+        DMCFact.setMinimumSize(QtCore.QSize(505,0))
+        self.gridlayout = QtGui.QGridLayout(DMCFact)
+        self.gridlayout.setObjectName("gridlayout")
+        self.TWChoix = QtGui.QTabWidget(DMCFact)
+        self.TWChoix.setObjectName("TWChoix")
+        self.MotClef = QtGui.QWidget()
+        self.MotClef.setObjectName("MotClef")
+        self.gridlayout1 = QtGui.QGridLayout(self.MotClef)
+        self.gridlayout1.setObjectName("gridlayout1")
+        self.textLabel1 = QtGui.QLabel(self.MotClef)
+        self.textLabel1.setMinimumSize(QtCore.QSize(0,0))
+        self.textLabel1.setWordWrap(False)
+        self.textLabel1.setObjectName("textLabel1")
+        self.gridlayout1.addWidget(self.textLabel1,0,0,1,1)
+        self.LBMCPermis = QtGui.QListWidget(self.MotClef)
+        self.LBMCPermis.setMinimumSize(QtCore.QSize(0,0))
+        self.LBMCPermis.setObjectName("LBMCPermis")
+        self.gridlayout1.addWidget(self.LBMCPermis,1,0,1,1)
+        self.LBRegles = QtGui.QListWidget(self.MotClef)
+        self.LBRegles.setObjectName("LBRegles")
+        self.gridlayout1.addWidget(self.LBRegles,1,1,1,1)
+        self.textLabel1_2 = QtGui.QLabel(self.MotClef)
+        self.textLabel1_2.setWordWrap(False)
+        self.textLabel1_2.setObjectName("textLabel1_2")
+        self.gridlayout1.addWidget(self.textLabel1_2,0,1,1,1)
+        self.TWChoix.addTab(self.MotClef,"")
+        self.gridlayout.addWidget(self.TWChoix,0,0,1,3)
+        self.bSup = QtGui.QPushButton(DMCFact)
+        self.bSup.setAutoDefault(True)
+        self.bSup.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DMCFact", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bSup.setObjectName("bSup")
+        self.gridlayout.addWidget(self.bSup,2,0,1,1)
+        self.Commentaire = QtGui.QLabel(DMCFact)
+        self.Commentaire.setWordWrap(False)
+        self.Commentaire.setObjectName("Commentaire")
+        self.gridlayout.addWidget(self.Commentaire,1,0,1,3)
+        self.bHelp = QtGui.QPushButton(DMCFact)
+        self.bHelp.setAutoDefault(True)
+        self.bHelp.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DMCFact", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bHelp.setObjectName("bHelp")
+        self.gridlayout.addWidget(self.bHelp,2,2,1,1)
+        self.bOk = QtGui.QPushButton(DMCFact)
+        self.bOk.setAutoDefault(True)
+        self.bOk.setDefault(True)
+        self.bOk.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DMCFact", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bOk.setObjectName("bOk")
+        self.gridlayout.addWidget(self.bOk,2,1,1,1)
+
+        self.retranslateUi(DMCFact)
+
+    def retranslateUi(self, DMCFact):
+        DMCFact.setWindowTitle(QtGui.QApplication.translate("DMCFact", "DMacro", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1.setText(QtGui.QApplication.translate("DMCFact", "<h3><p align=\"center\"><u><b>Mots Clefs Permis</b></u></p></h3>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_2.setText(QtGui.QApplication.translate("DMCFact", "<h3><p align=\"center\"><u><b>Régles</b></u></p></h3>", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.MotClef), QtGui.QApplication.translate("DMCFact", "Ajouter Mot-Clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DMCFact", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DMCFact", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setText(QtGui.QApplication.translate("DMCFact", "&Documentation", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setShortcut(QtGui.QApplication.translate("DMCFact", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setText(QtGui.QApplication.translate("DMCFact", "&Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setShortcut(QtGui.QApplication.translate("DMCFact", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DMCFact = QtGui.QWidget()
+    ui = Ui_DMCFact()
+    ui.setupUi(DMCFact)
+    DMCFact.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desMCFact.ui b/UiQT4/desMCFact.ui
new file mode 100644 (file)
index 0000000..8eb9080
--- /dev/null
@@ -0,0 +1,140 @@
+<ui version="4.0" stdsetdef="1" >
+  <author></author>
+  <comment></comment>
+  <exportmacro></exportmacro>
+  <class>DMCFact</class>
+  <widget class="QWidget" name="DMCFact" >
+    <property name="geometry" >
+      <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>511</width>
+        <height>499</height>
+      </rect>
+    </property>
+    <property name="minimumSize" >
+      <size>
+        <width>505</width>
+        <height>0</height>
+      </size>
+    </property>
+    <property name="windowTitle" >
+      <string>DMacro</string>
+    </property>
+    <layout class="QGridLayout" >
+      <item rowspan="1" row="0" column="0" colspan="3" >
+        <widget class="QTabWidget" name="TWChoix" >
+          <widget class="QWidget" name="MotClef" >
+            <attribute name="title" >
+              <string>Ajouter Mot-Clef</string>
+            </attribute>
+            <layout class="QGridLayout" >
+              <item row="0" column="0" >
+                <widget class="QLabel" name="textLabel1" >
+                  <property name="minimumSize" >
+                    <size>
+                      <width>0</width>
+                      <height>0</height>
+                    </size>
+                  </property>
+                  <property name="text" >
+                    <string>&lt;h3>&lt;p align="center">&lt;u>&lt;b>Mots Clefs Permis&lt;/b>&lt;/u>&lt;/p>&lt;/h3></string>
+                  </property>
+                  <property name="wordWrap" >
+                    <bool>false</bool>
+                  </property>
+                </widget>
+              </item>
+              <item row="1" column="0" >
+                <widget class="QListWidget" name="LBMCPermis" >
+                  <property name="minimumSize" >
+                    <size>
+                      <width>0</width>
+                      <height>0</height>
+                    </size>
+                  </property>
+                </widget>
+              </item>
+              <item row="1" column="1" >
+                <widget class="QListWidget" name="LBRegles" />
+              </item>
+              <item row="0" column="1" >
+                <widget class="QLabel" name="textLabel1_2" >
+                  <property name="text" >
+                    <string>&lt;h3>&lt;p align="center">&lt;u>&lt;b>Régles&lt;/b>&lt;/u>&lt;/p>&lt;/h3></string>
+                  </property>
+                  <property name="wordWrap" >
+                    <bool>false</bool>
+                  </property>
+                </widget>
+              </item>
+            </layout>
+          </widget>
+        </widget>
+      </item>
+      <item row="2" column="0" >
+        <widget class="QPushButton" name="bSup" >
+          <property name="text" >
+            <string>&amp;Supprimer</string>
+          </property>
+          <property name="shortcut" >
+            <string>Alt+S</string>
+          </property>
+          <property name="autoDefault" >
+            <bool>true</bool>
+          </property>
+          <property name="toolTip" stdset="0" >
+            <string>suppression du mot clef</string>
+          </property>
+        </widget>
+      </item>
+      <item rowspan="1" row="1" column="0" colspan="3" >
+        <widget class="QLabel" name="Commentaire" >
+          <property name="text" >
+            <string/>
+          </property>
+          <property name="wordWrap" >
+            <bool>false</bool>
+          </property>
+        </widget>
+      </item>
+      <item row="2" column="2" >
+        <widget class="QPushButton" name="bHelp" >
+          <property name="text" >
+            <string>&amp;Documentation</string>
+          </property>
+          <property name="shortcut" >
+            <string>Alt+D</string>
+          </property>
+          <property name="autoDefault" >
+            <bool>true</bool>
+          </property>
+          <property name="toolTip" stdset="0" >
+            <string>affichage documentation aster</string>
+          </property>
+        </widget>
+      </item>
+      <item row="2" column="1" >
+        <widget class="QPushButton" name="bOk" >
+          <property name="text" >
+            <string>&amp;Valider</string>
+          </property>
+          <property name="shortcut" >
+            <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+          </property>
+          <property name="autoDefault" >
+            <bool>true</bool>
+          </property>
+          <property name="default" >
+            <bool>true</bool>
+          </property>
+          <property name="toolTip" stdset="0" >
+            <string>validation de la saisie</string>
+          </property>
+        </widget>
+      </item>
+    </layout>
+  </widget>
+  <layoutdefault spacing="6" margin="11" />
+  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+</ui>
diff --git a/UiQT4/desMCListAjout.py b/UiQT4/desMCListAjout.py
new file mode 100644 (file)
index 0000000..f01c732
--- /dev/null
@@ -0,0 +1,101 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desMCListAjout.ui'
+#
+# Created: Wed Jul  9 10:11:21 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DMCListAjout(object):
+    def setupUi(self, DMCListAjout):
+        DMCListAjout.setObjectName("DMCListAjout")
+        DMCListAjout.resize(459,472)
+        DMCListAjout.setMinimumSize(QtCore.QSize(350,0))
+        self.gridlayout = QtGui.QGridLayout(DMCListAjout)
+        self.gridlayout.setObjectName("gridlayout")
+        self.textLabel1 = QtGui.QLabel(DMCListAjout)
+        self.textLabel1.setWordWrap(False)
+        self.textLabel1.setObjectName("textLabel1")
+        self.gridlayout.addWidget(self.textLabel1,1,0,1,3)
+        self.textLabel1_2 = QtGui.QLabel(DMCListAjout)
+        self.textLabel1_2.setWordWrap(False)
+        self.textLabel1_2.setObjectName("textLabel1_2")
+        self.gridlayout.addWidget(self.textLabel1_2,2,0,1,3)
+        self.hboxlayout = QtGui.QHBoxLayout()
+        self.hboxlayout.setObjectName("hboxlayout")
+        spacerItem = QtGui.QSpacerItem(60,21,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
+        self.hboxlayout.addItem(spacerItem)
+        self.bAjout = QtGui.QPushButton(DMCListAjout)
+        self.bAjout.setAutoDefault(True)
+        self.bAjout.setDefault(True)
+        self.bAjout.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DMCListAjout", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bAjout.setObjectName("bAjout")
+        self.hboxlayout.addWidget(self.bAjout)
+        spacerItem1 = QtGui.QSpacerItem(80,21,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
+        self.hboxlayout.addItem(spacerItem1)
+        self.gridlayout.addLayout(self.hboxlayout,8,0,1,3)
+        spacerItem2 = QtGui.QSpacerItem(21,40,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        self.gridlayout.addItem(spacerItem2,9,1,1,1)
+        self.textLabel1_2_2 = QtGui.QLabel(DMCListAjout)
+        self.textLabel1_2_2.setWordWrap(False)
+        self.textLabel1_2_2.setObjectName("textLabel1_2_2")
+        self.gridlayout.addWidget(self.textLabel1_2_2,6,0,1,3)
+        spacerItem3 = QtGui.QSpacerItem(20,20,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        self.gridlayout.addItem(spacerItem3,7,1,1,1)
+        self.MCFacteur = QtGui.QLabel(DMCListAjout)
+        self.MCFacteur.setWordWrap(False)
+        self.MCFacteur.setObjectName("MCFacteur")
+        self.gridlayout.addWidget(self.MCFacteur,4,0,1,3)
+        spacerItem4 = QtGui.QSpacerItem(21,31,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        self.gridlayout.addItem(spacerItem4,5,1,1,1)
+        spacerItem5 = QtGui.QSpacerItem(21,51,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        self.gridlayout.addItem(spacerItem5,3,1,1,1)
+        spacerItem6 = QtGui.QSpacerItem(41,51,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        self.gridlayout.addItem(spacerItem6,0,1,1,1)
+        self.bSup = QtGui.QPushButton(DMCListAjout)
+        self.bSup.setAutoDefault(True)
+        self.bSup.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DMCListAjout", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bSup.setObjectName("bSup")
+        self.gridlayout.addWidget(self.bSup,10,0,1,1)
+        self.bOk = QtGui.QPushButton(DMCListAjout)
+        self.bOk.setAutoDefault(True)
+        self.bOk.setDefault(True)
+        self.bOk.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DMCListAjout", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bOk.setObjectName("bOk")
+        self.gridlayout.addWidget(self.bOk,10,1,1,1)
+        self.bHelp = QtGui.QPushButton(DMCListAjout)
+        self.bHelp.setAutoDefault(True)
+        self.bHelp.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DMCListAjout", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bHelp.setObjectName("bHelp")
+        self.gridlayout.addWidget(self.bHelp,10,2,1,1)
+
+        self.retranslateUi(DMCListAjout)
+
+    def retranslateUi(self, DMCListAjout):
+        DMCListAjout.setWindowTitle(QtGui.QApplication.translate("DMCListAjout", "Form1", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1.setText(QtGui.QApplication.translate("DMCListAjout", "<p align=\"center\"><font size=\"+1\">Pour ajouter une autre occurrence</font></p>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_2.setText(QtGui.QApplication.translate("DMCListAjout", "<p align=\"center\"><font size=\"+1\">du mot clef-facteur</font> </p>", None, QtGui.QApplication.UnicodeUTF8))
+        self.bAjout.setText(QtGui.QApplication.translate("DMCListAjout", "&Ajouter", None, QtGui.QApplication.UnicodeUTF8))
+        self.bAjout.setShortcut(QtGui.QApplication.translate("DMCListAjout", "Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_2_2.setText(QtGui.QApplication.translate("DMCListAjout", "<p align=\"center\"><font size=\"+1\">cliquez ci-dessous</font> </p>", None, QtGui.QApplication.UnicodeUTF8))
+        self.MCFacteur.setText(QtGui.QApplication.translate("DMCListAjout", "<p align=\"center\">AFFE</p>", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DMCListAjout", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DMCListAjout", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setText(QtGui.QApplication.translate("DMCListAjout", "&Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setShortcut(QtGui.QApplication.translate("DMCListAjout", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setText(QtGui.QApplication.translate("DMCListAjout", "&Documentation", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setShortcut(QtGui.QApplication.translate("DMCListAjout", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DMCListAjout = QtGui.QWidget()
+    ui = Ui_DMCListAjout()
+    ui.setupUi(DMCListAjout)
+    DMCListAjout.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desMCListAjout.ui b/UiQT4/desMCListAjout.ui
new file mode 100644 (file)
index 0000000..e36dbfa
--- /dev/null
@@ -0,0 +1,255 @@
+<ui version="4.0" stdsetdef="1" >
+  <author></author>
+  <comment></comment>
+  <exportmacro></exportmacro>
+  <class>DMCListAjout</class>
+  <widget class="QWidget" name="DMCListAjout" >
+    <property name="geometry" >
+      <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>459</width>
+        <height>472</height>
+      </rect>
+    </property>
+    <property name="minimumSize" >
+      <size>
+        <width>350</width>
+        <height>0</height>
+      </size>
+    </property>
+    <property name="windowTitle" >
+      <string>Form1</string>
+    </property>
+    <layout class="QGridLayout" >
+      <item rowspan="1" row="1" column="0" colspan="3" >
+        <widget class="QLabel" name="textLabel1" >
+          <property name="text" >
+            <string>&lt;p align="center">&lt;font size="+1">Pour ajouter une autre occurrence&lt;/font>&lt;/p></string>
+          </property>
+          <property name="wordWrap" >
+            <bool>false</bool>
+          </property>
+        </widget>
+      </item>
+      <item rowspan="1" row="2" column="0" colspan="3" >
+        <widget class="QLabel" name="textLabel1_2" >
+          <property name="text" >
+            <string>&lt;p align="center">&lt;font size="+1">du mot clef-facteur&lt;/font> &lt;/p></string>
+          </property>
+          <property name="wordWrap" >
+            <bool>false</bool>
+          </property>
+        </widget>
+      </item>
+      <item rowspan="1" row="8" column="0" colspan="3" >
+        <layout class="QHBoxLayout" >
+          <item>
+            <spacer name="spacer4" >
+              <property name="sizeHint" >
+                <size>
+                  <width>60</width>
+                  <height>21</height>
+                </size>
+              </property>
+              <property name="sizeType" >
+                <enum>QSizePolicy::Expanding</enum>
+              </property>
+              <property name="orientation" >
+                <enum>Qt::Horizontal</enum>
+              </property>
+            </spacer>
+          </item>
+          <item>
+            <widget class="QPushButton" name="bAjout" >
+              <property name="text" >
+                <string>&amp;Ajouter</string>
+              </property>
+              <property name="shortcut" >
+                <string>Alt+A</string>
+              </property>
+              <property name="autoDefault" >
+                <bool>true</bool>
+              </property>
+              <property name="default" >
+                <bool>true</bool>
+              </property>
+              <property name="toolTip" stdset="0" >
+                <string>validation de la saisie</string>
+              </property>
+            </widget>
+          </item>
+          <item>
+            <spacer name="spacer2" >
+              <property name="sizeHint" >
+                <size>
+                  <width>80</width>
+                  <height>21</height>
+                </size>
+              </property>
+              <property name="sizeType" >
+                <enum>QSizePolicy::Expanding</enum>
+              </property>
+              <property name="orientation" >
+                <enum>Qt::Horizontal</enum>
+              </property>
+            </spacer>
+          </item>
+        </layout>
+      </item>
+      <item row="9" column="1" >
+        <spacer name="spacer1" >
+          <property name="sizeHint" >
+            <size>
+              <width>21</width>
+              <height>40</height>
+            </size>
+          </property>
+          <property name="sizeType" >
+            <enum>QSizePolicy::Expanding</enum>
+          </property>
+          <property name="orientation" >
+            <enum>Qt::Vertical</enum>
+          </property>
+        </spacer>
+      </item>
+      <item rowspan="1" row="6" column="0" colspan="3" >
+        <widget class="QLabel" name="textLabel1_2_2" >
+          <property name="text" >
+            <string>&lt;p align="center">&lt;font size="+1">cliquez ci-dessous&lt;/font> &lt;/p></string>
+          </property>
+          <property name="wordWrap" >
+            <bool>false</bool>
+          </property>
+        </widget>
+      </item>
+      <item row="7" column="1" >
+        <spacer name="spacer5" >
+          <property name="sizeHint" >
+            <size>
+              <width>20</width>
+              <height>20</height>
+            </size>
+          </property>
+          <property name="sizeType" >
+            <enum>QSizePolicy::Expanding</enum>
+          </property>
+          <property name="orientation" >
+            <enum>Qt::Vertical</enum>
+          </property>
+        </spacer>
+      </item>
+      <item rowspan="1" row="4" column="0" colspan="3" >
+        <widget class="QLabel" name="MCFacteur" >
+          <property name="text" >
+            <string>&lt;p align="center">AFFE&lt;/p></string>
+          </property>
+          <property name="wordWrap" >
+            <bool>false</bool>
+          </property>
+        </widget>
+      </item>
+      <item row="5" column="1" >
+        <spacer name="spacer6" >
+          <property name="sizeHint" >
+            <size>
+              <width>21</width>
+              <height>31</height>
+            </size>
+          </property>
+          <property name="sizeType" >
+            <enum>QSizePolicy::Expanding</enum>
+          </property>
+          <property name="orientation" >
+            <enum>Qt::Vertical</enum>
+          </property>
+        </spacer>
+      </item>
+      <item row="3" column="1" >
+        <spacer name="spacer7" >
+          <property name="sizeHint" >
+            <size>
+              <width>21</width>
+              <height>51</height>
+            </size>
+          </property>
+          <property name="sizeType" >
+            <enum>QSizePolicy::Expanding</enum>
+          </property>
+          <property name="orientation" >
+            <enum>Qt::Vertical</enum>
+          </property>
+        </spacer>
+      </item>
+      <item row="0" column="1" >
+        <spacer name="spacer8" >
+          <property name="sizeHint" >
+            <size>
+              <width>41</width>
+              <height>51</height>
+            </size>
+          </property>
+          <property name="sizeType" >
+            <enum>QSizePolicy::Expanding</enum>
+          </property>
+          <property name="orientation" >
+            <enum>Qt::Vertical</enum>
+          </property>
+        </spacer>
+      </item>
+      <item row="10" column="0" >
+        <widget class="QPushButton" name="bSup" >
+          <property name="text" >
+            <string>&amp;Supprimer</string>
+          </property>
+          <property name="shortcut" >
+            <string>Alt+S</string>
+          </property>
+          <property name="autoDefault" >
+            <bool>true</bool>
+          </property>
+          <property name="toolTip" stdset="0" >
+            <string>suppression du mot clef</string>
+          </property>
+        </widget>
+      </item>
+      <item row="10" column="1" >
+        <widget class="QPushButton" name="bOk" >
+          <property name="text" >
+            <string>&amp;Valider</string>
+          </property>
+          <property name="shortcut" >
+            <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+          </property>
+          <property name="autoDefault" >
+            <bool>true</bool>
+          </property>
+          <property name="default" >
+            <bool>true</bool>
+          </property>
+          <property name="toolTip" stdset="0" >
+            <string>validation de la saisie</string>
+          </property>
+        </widget>
+      </item>
+      <item row="10" column="2" >
+        <widget class="QPushButton" name="bHelp" >
+          <property name="text" >
+            <string>&amp;Documentation</string>
+          </property>
+          <property name="shortcut" >
+            <string>Alt+D</string>
+          </property>
+          <property name="autoDefault" >
+            <bool>true</bool>
+          </property>
+          <property name="toolTip" stdset="0" >
+            <string>affichage documentation aster</string>
+          </property>
+        </widget>
+      </item>
+    </layout>
+  </widget>
+  <layoutdefault spacing="6" margin="11" />
+  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+</ui>
diff --git a/UiQT4/desParam.py b/UiQT4/desParam.py
new file mode 100644 (file)
index 0000000..cee894d
--- /dev/null
@@ -0,0 +1,170 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desParam.ui'
+#
+# Created: Wed Sep 10 11:20:17 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DParam(object):
+    def setupUi(self, DParam):
+        DParam.setObjectName("DParam")
+        DParam.resize(505,483)
+        DParam.setMinimumSize(QtCore.QSize(505,0))
+        self.gridlayout = QtGui.QGridLayout(DParam)
+        self.gridlayout.setObjectName("gridlayout")
+        self.Commentaire = QtGui.QLabel(DParam)
+        self.Commentaire.setFrameShape(QtGui.QFrame.NoFrame)
+        self.Commentaire.setFrameShadow(QtGui.QFrame.Plain)
+        self.Commentaire.setWordWrap(False)
+        self.Commentaire.setObjectName("Commentaire")
+        self.gridlayout.addWidget(self.Commentaire,1,0,1,3)
+        self.TWChoix = QtGui.QTabWidget(DParam)
+        self.TWChoix.setObjectName("TWChoix")
+        self.Valeur_Parametre = QtGui.QWidget()
+        self.Valeur_Parametre.setGeometry(QtCore.QRect(0,0,483,372))
+        self.Valeur_Parametre.setObjectName("Valeur_Parametre")
+        self.gridLayout_3 = QtGui.QGridLayout(self.Valeur_Parametre)
+        self.gridLayout_3.setObjectName("gridLayout_3")
+        self.textLabel2_2_2 = QtGui.QLabel(self.Valeur_Parametre)
+        self.textLabel2_2_2.setWordWrap(False)
+        self.textLabel2_2_2.setObjectName("textLabel2_2_2")
+        self.gridLayout_3.addWidget(self.textLabel2_2_2,0,1,1,1)
+        self.textLabel2_2 = QtGui.QLabel(self.Valeur_Parametre)
+        self.textLabel2_2.setWordWrap(False)
+        self.textLabel2_2.setObjectName("textLabel2_2")
+        self.gridLayout_3.addWidget(self.textLabel2_2,1,0,1,1)
+        self.lineEditNom = QtGui.QLineEdit(self.Valeur_Parametre)
+        self.lineEditNom.setMinimumSize(QtCore.QSize(231,31))
+        self.lineEditNom.setObjectName("lineEditNom")
+        self.gridLayout_3.addWidget(self.lineEditNom,1,1,1,1)
+        self.textLabel2 = QtGui.QLabel(self.Valeur_Parametre)
+        self.textLabel2.setWordWrap(False)
+        self.textLabel2.setObjectName("textLabel2")
+        self.gridLayout_3.addWidget(self.textLabel2,2,0,1,1)
+        self.lineEditVal = QtGui.QLineEdit(self.Valeur_Parametre)
+        self.lineEditVal.setMinimumSize(QtCore.QSize(231,31))
+        self.lineEditVal.setObjectName("lineEditVal")
+        self.gridLayout_3.addWidget(self.lineEditVal,2,1,1,1)
+        self.Commentaire2 = QtGui.QLabel(self.Valeur_Parametre)
+        self.Commentaire2.setWordWrap(False)
+        self.Commentaire2.setObjectName("Commentaire2")
+        self.gridLayout_3.addWidget(self.Commentaire2,3,0,1,2)
+        self.Commentaire_2 = QtGui.QLabel(self.Valeur_Parametre)
+        self.Commentaire_2.setWordWrap(False)
+        self.Commentaire_2.setObjectName("Commentaire_2")
+        self.gridLayout_3.addWidget(self.Commentaire_2,4,0,1,2)
+        self.TWChoix.addTab(self.Valeur_Parametre,"")
+        self.Commande = QtGui.QWidget()
+        self.Commande.setGeometry(QtCore.QRect(0,0,483,372))
+        self.Commande.setObjectName("Commande")
+        self.gridLayout_2 = QtGui.QGridLayout(self.Commande)
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.textLabel1_4 = QtGui.QLabel(self.Commande)
+        self.textLabel1_4.setWordWrap(False)
+        self.textLabel1_4.setObjectName("textLabel1_4")
+        self.gridLayout_2.addWidget(self.textLabel1_4,0,0,1,3)
+        self.groupBox = QtGui.QGroupBox(self.Commande)
+        self.groupBox.setObjectName("groupBox")
+        self.gridLayout = QtGui.QGridLayout(self.groupBox)
+        self.gridLayout.setObjectName("gridLayout")
+        self.RBGroupe = QtGui.QRadioButton(self.groupBox)
+        self.RBGroupe.setObjectName("RBGroupe")
+        self.gridLayout.addWidget(self.RBGroupe,1,0,1,1)
+        self.RBalpha = QtGui.QRadioButton(self.groupBox)
+        self.RBalpha.setChecked(True)
+        self.RBalpha.setObjectName("RBalpha")
+        self.gridLayout.addWidget(self.RBalpha,0,0,1,1)
+        self.gridLayout_2.addWidget(self.groupBox,0,3,2,1)
+        self.textLabel6 = QtGui.QLabel(self.Commande)
+        self.textLabel6.setMinimumSize(QtCore.QSize(50,30))
+        self.textLabel6.setWordWrap(False)
+        self.textLabel6.setObjectName("textLabel6")
+        self.gridLayout_2.addWidget(self.textLabel6,1,0,1,1)
+        self.LEFiltre = QtGui.QLineEdit(self.Commande)
+        self.LEFiltre.setMinimumSize(QtCore.QSize(160,30))
+        self.LEFiltre.setObjectName("LEFiltre")
+        self.gridLayout_2.addWidget(self.LEFiltre,1,1,1,1)
+        self.BNext = QtGui.QPushButton(self.Commande)
+        self.BNext.setObjectName("BNext")
+        self.gridLayout_2.addWidget(self.BNext,1,2,1,1)
+        self.LBNouvCommande = QtGui.QListWidget(self.Commande)
+        self.LBNouvCommande.setObjectName("LBNouvCommande")
+        self.gridLayout_2.addWidget(self.LBNouvCommande,2,0,1,4)
+        self.textLabel4 = QtGui.QLabel(self.Commande)
+        self.textLabel4.setWordWrap(False)
+        self.textLabel4.setObjectName("textLabel4")
+        self.gridLayout_2.addWidget(self.textLabel4,3,0,1,4)
+        self.TWChoix.addTab(self.Commande,"")
+        self.gridlayout.addWidget(self.TWChoix,0,0,1,3)
+        self.bOk = QtGui.QPushButton(DParam)
+        self.bOk.setMinimumSize(QtCore.QSize(0,30))
+        self.bOk.setAutoDefault(True)
+        self.bOk.setDefault(True)
+        self.bOk.setObjectName("bOk")
+        self.gridlayout.addWidget(self.bOk,2,1,1,1)
+        self.bSup = QtGui.QPushButton(DParam)
+        self.bSup.setMinimumSize(QtCore.QSize(0,30))
+        self.bSup.setAutoDefault(True)
+        self.bSup.setObjectName("bSup")
+        self.gridlayout.addWidget(self.bSup,2,0,1,1)
+        self.bHelp = QtGui.QPushButton(DParam)
+        self.bHelp.setMinimumSize(QtCore.QSize(0,30))
+        self.bHelp.setAutoDefault(True)
+        self.bHelp.setObjectName("bHelp")
+        self.gridlayout.addWidget(self.bHelp,2,2,1,1)
+
+        self.retranslateUi(DParam)
+        self.TWChoix.setCurrentIndex(0)
+        QtCore.QMetaObject.connectSlotsByName(DParam)
+        DParam.setTabOrder(self.LEFiltre,self.TWChoix)
+        DParam.setTabOrder(self.TWChoix,self.lineEditNom)
+        DParam.setTabOrder(self.lineEditNom,self.lineEditVal)
+        DParam.setTabOrder(self.lineEditVal,self.LBNouvCommande)
+        DParam.setTabOrder(self.LBNouvCommande,self.RBalpha)
+        DParam.setTabOrder(self.RBalpha,self.bOk)
+        DParam.setTabOrder(self.bOk,self.bSup)
+        DParam.setTabOrder(self.bSup,self.bHelp)
+
+    def retranslateUi(self, DParam):
+        DParam.setWindowTitle(QtGui.QApplication.translate("DParam", "DComm", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel2_2_2.setText(QtGui.QApplication.translate("DParam", "<u><b><p align=\"center\">Parametre</p></b></u>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel2_2.setText(QtGui.QApplication.translate("DParam", "<b> Nom: </b>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel2.setText(QtGui.QApplication.translate("DParam", "<b> Valeur: </b>", None, QtGui.QApplication.UnicodeUTF8))
+        self.Commentaire2.setText(QtGui.QApplication.translate("DParam", "Retour Chariot dans une sone de saisie permet de vérifier la \n"
+"validité de la valeur saisie.\n"
+"\n"
+"Les nouvelles valeurs ne seront prises  en compte qu\'après avoir \n"
+"appuyé sur  le bouton Valider.", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.Valeur_Parametre), QtGui.QApplication.translate("DParam", "Valeur Parametre", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_4.setText(QtGui.QApplication.translate("DParam", "<b><u>Commandes :</u></b>", None, QtGui.QApplication.UnicodeUTF8))
+        self.groupBox.setTitle(QtGui.QApplication.translate("DParam", "Affichage", None, QtGui.QApplication.UnicodeUTF8))
+        self.RBGroupe.setText(QtGui.QApplication.translate("DParam", "par groupe", None, QtGui.QApplication.UnicodeUTF8))
+        self.RBalpha.setText(QtGui.QApplication.translate("DParam", "alphabétique", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel6.setText(QtGui.QApplication.translate("DParam", "Filtre", None, QtGui.QApplication.UnicodeUTF8))
+        self.BNext.setText(QtGui.QApplication.translate("DParam", "Suivant", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel4.setText(QtGui.QApplication.translate("DParam", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DParam", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setToolTip(QtGui.QApplication.translate("DParam", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setText(QtGui.QApplication.translate("DParam", "&Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setShortcut(QtGui.QApplication.translate("DParam", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setToolTip(QtGui.QApplication.translate("DParam", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DParam", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DParam", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setToolTip(QtGui.QApplication.translate("DParam", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setText(QtGui.QApplication.translate("DParam", "&Documentation", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setShortcut(QtGui.QApplication.translate("DParam", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DParam = QtGui.QWidget()
+    ui = Ui_DParam()
+    ui.setupUi(DParam)
+    DParam.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desParam.ui b/UiQT4/desParam.ui
new file mode 100644 (file)
index 0000000..faf4ef1
--- /dev/null
@@ -0,0 +1,317 @@
+<ui version="4.0" >
+ <class>DParam</class>
+ <widget class="QWidget" name="DParam" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>505</width>
+    <height>483</height>
+   </rect>
+  </property>
+  <property name="minimumSize" >
+   <size>
+    <width>505</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle" >
+   <string>DComm</string>
+  </property>
+  <layout class="QGridLayout" >
+   <item row="1" column="0" colspan="3" >
+    <widget class="QLabel" name="Commentaire" >
+     <property name="frameShape" >
+      <enum>QFrame::NoFrame</enum>
+     </property>
+     <property name="frameShadow" >
+      <enum>QFrame::Plain</enum>
+     </property>
+     <property name="text" >
+      <string/>
+     </property>
+     <property name="wordWrap" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0" colspan="3" >
+    <widget class="QTabWidget" name="TWChoix" >
+     <property name="currentIndex" >
+      <number>0</number>
+     </property>
+     <widget class="QWidget" name="Valeur_Parametre" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>483</width>
+        <height>372</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Valeur Parametre</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_3" >
+       <item row="0" column="1" >
+        <widget class="QLabel" name="textLabel2_2_2" >
+         <property name="text" >
+          <string>&lt;u>&lt;b>&lt;p align="center">Parametre&lt;/p>&lt;/b>&lt;/u></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0" >
+        <widget class="QLabel" name="textLabel2_2" >
+         <property name="text" >
+          <string>&lt;b> Nom: &lt;/b></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1" >
+        <widget class="QLineEdit" name="lineEditNom" >
+         <property name="minimumSize" >
+          <size>
+           <width>231</width>
+           <height>31</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" >
+        <widget class="QLabel" name="textLabel2" >
+         <property name="text" >
+          <string>&lt;b> Valeur: &lt;/b></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="1" >
+        <widget class="QLineEdit" name="lineEditVal" >
+         <property name="minimumSize" >
+          <size>
+           <width>231</width>
+           <height>31</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="0" colspan="2" >
+        <widget class="QLabel" name="Commentaire2" >
+         <property name="text" >
+          <string>Retour Chariot dans une sone de saisie permet de vérifier la 
+validité de la valeur saisie.
+
+Les nouvelles valeurs ne seront prises  en compte qu'après avoir 
+appuyé sur  le bouton Valider.</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="0" colspan="2" >
+        <widget class="QLabel" name="Commentaire_2" >
+         <property name="text" >
+          <string/>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="Commande" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>483</width>
+        <height>372</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Nouvelle Commande</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_2" >
+       <item row="0" column="0" colspan="3" >
+        <widget class="QLabel" name="textLabel1_4" >
+         <property name="text" >
+          <string>&lt;b>&lt;u>Commandes :&lt;/u>&lt;/b></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item rowspan="2" row="0" column="3" >
+        <widget class="QGroupBox" name="groupBox" >
+         <property name="title" >
+          <string>Affichage</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout" >
+          <item row="1" column="0" >
+           <widget class="QRadioButton" name="RBGroupe" >
+            <property name="text" >
+             <string>par groupe</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="0" >
+           <widget class="QRadioButton" name="RBalpha" >
+            <property name="text" >
+             <string>alphabétique</string>
+            </property>
+            <property name="checked" >
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item row="1" column="0" >
+        <widget class="QLabel" name="textLabel6" >
+         <property name="minimumSize" >
+          <size>
+           <width>50</width>
+           <height>30</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>Filtre</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1" >
+        <widget class="QLineEdit" name="LEFiltre" >
+         <property name="minimumSize" >
+          <size>
+           <width>160</width>
+           <height>30</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="2" >
+        <widget class="QPushButton" name="BNext" >
+         <property name="text" >
+          <string>Suivant</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" colspan="4" >
+        <widget class="QListWidget" name="LBNouvCommande" />
+       </item>
+       <item row="3" column="0" colspan="4" >
+        <widget class="QLabel" name="textLabel4" >
+         <property name="text" >
+          <string>La commande choisie sera ajoutée APRES la commande courante</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+   <item row="2" column="1" >
+    <widget class="QPushButton" name="bOk" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>validation de la saisie</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Valider</string>
+     </property>
+     <property name="shortcut" >
+      <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+     <property name="default" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" >
+    <widget class="QPushButton" name="bSup" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>suppression du mot clef</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Supprimer</string>
+     </property>
+     <property name="shortcut" >
+      <string>Alt+S</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="2" >
+    <widget class="QPushButton" name="bHelp" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>affichage documentation aster</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Documentation</string>
+     </property>
+     <property name="shortcut" >
+      <string>Alt+D</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <tabstops>
+  <tabstop>LEFiltre</tabstop>
+  <tabstop>TWChoix</tabstop>
+  <tabstop>lineEditNom</tabstop>
+  <tabstop>lineEditVal</tabstop>
+  <tabstop>LBNouvCommande</tabstop>
+  <tabstop>RBalpha</tabstop>
+  <tabstop>bOk</tabstop>
+  <tabstop>bSup</tabstop>
+  <tabstop>bHelp</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desPlusieursBase.py b/UiQT4/desPlusieursBase.py
new file mode 100644 (file)
index 0000000..54c612b
--- /dev/null
@@ -0,0 +1,187 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desPlusieursBase.ui'
+#
+# Created: Fri Jul 18 16:24:35 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DPlusBase(object):
+    def setupUi(self, DPlusBase):
+        DPlusBase.setObjectName("DPlusBase")
+        DPlusBase.resize(552,480)
+        DPlusBase.setMinimumSize(QtCore.QSize(350,0))
+        self.gridlayout = QtGui.QGridLayout(DPlusBase)
+        self.gridlayout.setObjectName("gridlayout")
+        self.tabuniqueinto = QtGui.QTabWidget(DPlusBase)
+        self.tabuniqueinto.setObjectName("tabuniqueinto")
+        self.Widget8 = QtGui.QWidget()
+        self.Widget8.setGeometry(QtCore.QRect(0,0,530,435))
+        self.Widget8.setObjectName("Widget8")
+        self.gridlayout1 = QtGui.QGridLayout(self.Widget8)
+        self.gridlayout1.setObjectName("gridlayout1")
+        self.textLabel1 = QtGui.QLabel(self.Widget8)
+        self.textLabel1.setWordWrap(False)
+        self.textLabel1.setObjectName("textLabel1")
+        self.gridlayout1.addWidget(self.textLabel1,0,0,1,1)
+        self.LBValeurs = QtGui.QListWidget(self.Widget8)
+        self.LBValeurs.setMinimumSize(QtCore.QSize(200,0))
+        self.LBValeurs.setObjectName("LBValeurs")
+        self.gridlayout1.addWidget(self.LBValeurs,1,0,9,1)
+        spacerItem = QtGui.QSpacerItem(21,231,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        self.gridlayout1.addItem(spacerItem,5,1,5,2)
+        spacerItem1 = QtGui.QSpacerItem(31,30,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        self.gridlayout1.addItem(spacerItem1,0,1,1,2)
+        self.BAjout1Val = QtGui.QToolButton(self.Widget8)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.BAjout1Val.sizePolicy().hasHeightForWidth())
+        self.BAjout1Val.setSizePolicy(sizePolicy)
+        self.BAjout1Val.setMinimumSize(QtCore.QSize(40,30))
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap("../../EficasV1/Editeur/icons/arrow_left.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off)
+        self.BAjout1Val.setIcon(icon)
+        self.BAjout1Val.setObjectName("BAjout1Val")
+        self.gridlayout1.addWidget(self.BAjout1Val,2,1,1,2)
+        spacerItem2 = QtGui.QSpacerItem(150,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
+        self.gridlayout1.addItem(spacerItem2,8,2,1,3)
+        self.vboxlayout = QtGui.QVBoxLayout()
+        self.vboxlayout.setObjectName("vboxlayout")
+        self.bParam = QtGui.QPushButton(self.Widget8)
+        self.bParam.setMinimumSize(QtCore.QSize(0,30))
+        self.bParam.setAutoDefault(True)
+        self.bParam.setObjectName("bParam")
+        self.vboxlayout.addWidget(self.bParam)
+        self.bImport = QtGui.QPushButton(self.Widget8)
+        self.bImport.setMinimumSize(QtCore.QSize(0,30))
+        self.bImport.setAutoDefault(True)
+        self.bImport.setObjectName("bImport")
+        self.vboxlayout.addWidget(self.bImport)
+        self.gridlayout1.addLayout(self.vboxlayout,7,5,2,1)
+        spacerItem3 = QtGui.QSpacerItem(31,50,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        self.gridlayout1.addItem(spacerItem3,6,5,1,1)
+        spacerItem4 = QtGui.QSpacerItem(31,50,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        self.gridlayout1.addItem(spacerItem4,9,5,1,1)
+        self.BSalome = QtGui.QToolButton(self.Widget8)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.BSalome.sizePolicy().hasHeightForWidth())
+        self.BSalome.setSizePolicy(sizePolicy)
+        self.BSalome.setMinimumSize(QtCore.QSize(40,30))
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap("image240.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off)
+        self.BSalome.setIcon(icon)
+        self.BSalome.setObjectName("BSalome")
+        self.gridlayout1.addWidget(self.BSalome,4,3,1,1)
+        self.BView2D = QtGui.QPushButton(self.Widget8)
+        self.BView2D.setMinimumSize(QtCore.QSize(120,30))
+        self.BView2D.setObjectName("BView2D")
+        self.gridlayout1.addWidget(self.BView2D,4,4,1,2)
+        self.hboxlayout = QtGui.QHBoxLayout()
+        self.hboxlayout.setObjectName("hboxlayout")
+        self.textLabel1_2 = QtGui.QLabel(self.Widget8)
+        self.textLabel1_2.setWordWrap(False)
+        self.textLabel1_2.setObjectName("textLabel1_2")
+        self.hboxlayout.addWidget(self.textLabel1_2)
+        spacerItem5 = QtGui.QSpacerItem(111,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
+        self.hboxlayout.addItem(spacerItem5)
+        self.gridlayout1.addLayout(self.hboxlayout,0,3,2,3)
+        self.LEValeur = QtGui.QLineEdit(self.Widget8)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Minimum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.LEValeur.sizePolicy().hasHeightForWidth())
+        self.LEValeur.setSizePolicy(sizePolicy)
+        self.LEValeur.setMinimumSize(QtCore.QSize(220,30))
+        self.LEValeur.setObjectName("LEValeur")
+        self.gridlayout1.addWidget(self.LEValeur,2,3,2,3)
+        self.BSup1Val = QtGui.QToolButton(self.Widget8)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.BSup1Val.sizePolicy().hasHeightForWidth())
+        self.BSup1Val.setSizePolicy(sizePolicy)
+        self.BSup1Val.setMinimumSize(QtCore.QSize(40,30))
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap("../../EficasV1/Editeur/icons/arrow_right.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off)
+        self.BSup1Val.setIcon(icon)
+        self.BSup1Val.setObjectName("BSup1Val")
+        self.gridlayout1.addWidget(self.BSup1Val,3,1,2,2)
+        self.Commentaire = QtGui.QLabel(self.Widget8)
+        self.Commentaire.setMinimumSize(QtCore.QSize(0,60))
+        self.Commentaire.setWordWrap(False)
+        self.Commentaire.setObjectName("Commentaire")
+        self.gridlayout1.addWidget(self.Commentaire,5,3,1,3)
+        self.hboxlayout1 = QtGui.QHBoxLayout()
+        self.hboxlayout1.setObjectName("hboxlayout1")
+        self.bSup = QtGui.QPushButton(self.Widget8)
+        self.bSup.setMinimumSize(QtCore.QSize(0,30))
+        self.bSup.setAutoDefault(True)
+        self.bSup.setObjectName("bSup")
+        self.hboxlayout1.addWidget(self.bSup)
+        self.bOk = QtGui.QPushButton(self.Widget8)
+        self.bOk.setMinimumSize(QtCore.QSize(0,30))
+        self.bOk.setAutoDefault(True)
+        self.bOk.setDefault(True)
+        self.bOk.setObjectName("bOk")
+        self.hboxlayout1.addWidget(self.bOk)
+        self.bHelp = QtGui.QPushButton(self.Widget8)
+        self.bHelp.setMinimumSize(QtCore.QSize(0,30))
+        self.bHelp.setAutoDefault(True)
+        self.bHelp.setObjectName("bHelp")
+        self.hboxlayout1.addWidget(self.bHelp)
+        self.gridlayout1.addLayout(self.hboxlayout1,10,0,1,6)
+        self.tabuniqueinto.addTab(self.Widget8,"")
+        self.gridlayout.addWidget(self.tabuniqueinto,0,0,1,1)
+
+        self.retranslateUi(DPlusBase)
+        QtCore.QMetaObject.connectSlotsByName(DPlusBase)
+        DPlusBase.setTabOrder(self.LEValeur,self.tabuniqueinto)
+        DPlusBase.setTabOrder(self.tabuniqueinto,self.bSup)
+        DPlusBase.setTabOrder(self.bSup,self.bOk)
+        DPlusBase.setTabOrder(self.bOk,self.bHelp)
+        DPlusBase.setTabOrder(self.bHelp,self.bParam)
+        DPlusBase.setTabOrder(self.bParam,self.bImport)
+        DPlusBase.setTabOrder(self.bImport,self.LBValeurs)
+        DPlusBase.setTabOrder(self.LBValeurs,self.BView2D)
+
+    def retranslateUi(self, DPlusBase):
+        DPlusBase.setWindowTitle(QtGui.QApplication.translate("DPlusBase", "DUnIn", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1.setText(QtGui.QApplication.translate("DPlusBase", "<u><font size=\"+1\">Valeur(s) actuelle(s)</font></u>", None, QtGui.QApplication.UnicodeUTF8))
+        self.BAjout1Val.setToolTip(QtGui.QApplication.translate("DPlusBase", "ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)", None, QtGui.QApplication.UnicodeUTF8))
+        self.bParam.setToolTip(QtGui.QApplication.translate("DPlusBase", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.bParam.setText(QtGui.QApplication.translate("DPlusBase", "&Parametres", None, QtGui.QApplication.UnicodeUTF8))
+        self.bParam.setShortcut(QtGui.QApplication.translate("DPlusBase", "Alt+P", None, QtGui.QApplication.UnicodeUTF8))
+        self.bImport.setToolTip(QtGui.QApplication.translate("DPlusBase", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.bImport.setText(QtGui.QApplication.translate("DPlusBase", "&Importer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bImport.setShortcut(QtGui.QApplication.translate("DPlusBase", "Alt+I", None, QtGui.QApplication.UnicodeUTF8))
+        self.BSalome.setToolTip(QtGui.QApplication.translate("DPlusBase", "ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)", None, QtGui.QApplication.UnicodeUTF8))
+        self.BView2D.setText(QtGui.QApplication.translate("DPlusBase", "Visualiser", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_2.setText(QtGui.QApplication.translate("DPlusBase", "<font size=\"+1\">Valeur</font>", None, QtGui.QApplication.UnicodeUTF8))
+        self.BSup1Val.setToolTip(QtGui.QApplication.translate("DPlusBase", "enleve l occurence selectionnee", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setToolTip(QtGui.QApplication.translate("DPlusBase", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DPlusBase", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DPlusBase", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setToolTip(QtGui.QApplication.translate("DPlusBase", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setText(QtGui.QApplication.translate("DPlusBase", "&Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setShortcut(QtGui.QApplication.translate("DPlusBase", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setToolTip(QtGui.QApplication.translate("DPlusBase", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setText(QtGui.QApplication.translate("DPlusBase", "&Documentation", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setShortcut(QtGui.QApplication.translate("DPlusBase", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
+        self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DPlusBase", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DPlusBase = QtGui.QWidget()
+    ui = Ui_DPlusBase()
+    ui.setupUi(DPlusBase)
+    DPlusBase.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desPlusieursBase.ui b/UiQT4/desPlusieursBase.ui
new file mode 100644 (file)
index 0000000..6ad5312
--- /dev/null
@@ -0,0 +1,431 @@
+<ui version="4.0" >
+ <class>DPlusBase</class>
+ <widget class="QWidget" name="DPlusBase" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>552</width>
+    <height>480</height>
+   </rect>
+  </property>
+  <property name="minimumSize" >
+   <size>
+    <width>350</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle" >
+   <string>DUnIn</string>
+  </property>
+  <layout class="QGridLayout" >
+   <item row="0" column="0" >
+    <widget class="QTabWidget" name="tabuniqueinto" >
+     <widget class="QWidget" name="Widget8" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>530</width>
+        <height>435</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Saisir Valeur</string>
+      </attribute>
+      <layout class="QGridLayout" >
+       <item row="0" column="0" >
+        <widget class="QLabel" name="textLabel1" >
+         <property name="text" >
+          <string>&lt;u>&lt;font size="+1">Valeur(s) actuelle(s)&lt;/font>&lt;/u></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item rowspan="9" row="1" column="0" >
+        <widget class="QListWidget" name="LBValeurs" >
+         <property name="minimumSize" >
+          <size>
+           <width>200</width>
+           <height>0</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item rowspan="5" row="5" column="1" colspan="2" >
+        <spacer name="spacer4" >
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeType" >
+          <enum>QSizePolicy::Expanding</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>21</width>
+           <height>231</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="0" column="1" colspan="2" >
+        <spacer name="spacer3_3" >
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeType" >
+          <enum>QSizePolicy::Expanding</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>31</width>
+           <height>30</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="2" column="1" colspan="2" >
+        <widget class="QToolButton" name="BAjout1Val" >
+         <property name="sizePolicy" >
+          <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="minimumSize" >
+          <size>
+           <width>40</width>
+           <height>30</height>
+          </size>
+         </property>
+         <property name="toolTip" >
+          <string>ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)</string>
+         </property>
+         <property name="text" >
+          <string/>
+         </property>
+         <property name="icon" >
+          <iconset>
+           <normaloff>../../EficasV1/Editeur/icons/arrow_left.gif</normaloff>../../EficasV1/Editeur/icons/arrow_left.gif</iconset>
+         </property>
+        </widget>
+       </item>
+       <item row="8" column="2" colspan="3" >
+        <spacer name="spacer5" >
+         <property name="orientation" >
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeType" >
+          <enum>QSizePolicy::Expanding</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>150</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item rowspan="2" row="7" column="5" >
+        <layout class="QVBoxLayout" >
+         <item>
+          <widget class="QPushButton" name="bParam" >
+           <property name="minimumSize" >
+            <size>
+             <width>0</width>
+             <height>30</height>
+            </size>
+           </property>
+           <property name="toolTip" >
+            <string>suppression du mot clef</string>
+           </property>
+           <property name="text" >
+            <string>&amp;Parametres</string>
+           </property>
+           <property name="shortcut" >
+            <string>Alt+P</string>
+           </property>
+           <property name="autoDefault" >
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="bImport" >
+           <property name="minimumSize" >
+            <size>
+             <width>0</width>
+             <height>30</height>
+            </size>
+           </property>
+           <property name="toolTip" >
+            <string>suppression du mot clef</string>
+           </property>
+           <property name="text" >
+            <string>&amp;Importer</string>
+           </property>
+           <property name="shortcut" >
+            <string>Alt+I</string>
+           </property>
+           <property name="autoDefault" >
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item row="6" column="5" >
+        <spacer name="spacer3" >
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeType" >
+          <enum>QSizePolicy::Expanding</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>31</width>
+           <height>50</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="9" column="5" >
+        <spacer name="spacer3_2" >
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeType" >
+          <enum>QSizePolicy::Expanding</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>31</width>
+           <height>50</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="4" column="3" >
+        <widget class="QToolButton" name="BSalome" >
+         <property name="sizePolicy" >
+          <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="minimumSize" >
+          <size>
+           <width>40</width>
+           <height>30</height>
+          </size>
+         </property>
+         <property name="toolTip" >
+          <string>ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)</string>
+         </property>
+         <property name="text" >
+          <string/>
+         </property>
+         <property name="icon" >
+          <iconset>
+           <normaloff>image240.gif</normaloff>image240.gif</iconset>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="4" colspan="2" >
+        <widget class="QPushButton" name="BView2D" >
+         <property name="minimumSize" >
+          <size>
+           <width>120</width>
+           <height>30</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>Visualiser</string>
+         </property>
+        </widget>
+       </item>
+       <item rowspan="2" row="0" column="3" colspan="3" >
+        <layout class="QHBoxLayout" >
+         <item>
+          <widget class="QLabel" name="textLabel1_2" >
+           <property name="text" >
+            <string>&lt;font size="+1">Valeur&lt;/font></string>
+           </property>
+           <property name="wordWrap" >
+            <bool>false</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <spacer name="spacer6" >
+           <property name="orientation" >
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeType" >
+            <enum>QSizePolicy::Expanding</enum>
+           </property>
+           <property name="sizeHint" stdset="0" >
+            <size>
+             <width>111</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </item>
+       <item rowspan="2" row="2" column="3" colspan="3" >
+        <widget class="QLineEdit" name="LEValeur" >
+         <property name="sizePolicy" >
+          <sizepolicy vsizetype="Minimum" hsizetype="Minimum" >
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="minimumSize" >
+          <size>
+           <width>220</width>
+           <height>30</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item rowspan="2" row="3" column="1" colspan="2" >
+        <widget class="QToolButton" name="BSup1Val" >
+         <property name="sizePolicy" >
+          <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="minimumSize" >
+          <size>
+           <width>40</width>
+           <height>30</height>
+          </size>
+         </property>
+         <property name="toolTip" >
+          <string>enleve l occurence selectionnee</string>
+         </property>
+         <property name="text" >
+          <string/>
+         </property>
+         <property name="icon" >
+          <iconset>
+           <normaloff>../../EficasV1/Editeur/icons/arrow_right.gif</normaloff>../../EficasV1/Editeur/icons/arrow_right.gif</iconset>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="3" colspan="3" >
+        <widget class="QLabel" name="Commentaire" >
+         <property name="minimumSize" >
+          <size>
+           <width>0</width>
+           <height>60</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string/>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="10" column="0" colspan="6" >
+        <layout class="QHBoxLayout" >
+         <item>
+          <widget class="QPushButton" name="bSup" >
+           <property name="minimumSize" >
+            <size>
+             <width>0</width>
+             <height>30</height>
+            </size>
+           </property>
+           <property name="toolTip" >
+            <string>suppression du mot clef</string>
+           </property>
+           <property name="text" >
+            <string>&amp;Supprimer</string>
+           </property>
+           <property name="shortcut" >
+            <string>Alt+S</string>
+           </property>
+           <property name="autoDefault" >
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="bOk" >
+           <property name="minimumSize" >
+            <size>
+             <width>0</width>
+             <height>30</height>
+            </size>
+           </property>
+           <property name="toolTip" >
+            <string>validation de la saisie</string>
+           </property>
+           <property name="text" >
+            <string>&amp;Valider</string>
+           </property>
+           <property name="shortcut" >
+            <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+           </property>
+           <property name="autoDefault" >
+            <bool>true</bool>
+           </property>
+           <property name="default" >
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="bHelp" >
+           <property name="minimumSize" >
+            <size>
+             <width>0</width>
+             <height>30</height>
+            </size>
+           </property>
+           <property name="toolTip" >
+            <string>affichage documentation aster</string>
+           </property>
+           <property name="text" >
+            <string>&amp;Documentation</string>
+           </property>
+           <property name="shortcut" >
+            <string>Alt+D</string>
+           </property>
+           <property name="autoDefault" >
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <tabstops>
+  <tabstop>LEValeur</tabstop>
+  <tabstop>tabuniqueinto</tabstop>
+  <tabstop>bSup</tabstop>
+  <tabstop>bOk</tabstop>
+  <tabstop>bHelp</tabstop>
+  <tabstop>bParam</tabstop>
+  <tabstop>bImport</tabstop>
+  <tabstop>LBValeurs</tabstop>
+  <tabstop>BView2D</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desPlusieursInto.py b/UiQT4/desPlusieursInto.py
new file mode 100644 (file)
index 0000000..0af9546
--- /dev/null
@@ -0,0 +1,132 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desPlusieursInto.ui'
+#
+# Created: Fri Sep 26 11:16:49 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DPlusInto(object):
+    def setupUi(self, DPlusInto):
+        DPlusInto.setObjectName("DPlusInto")
+        DPlusInto.resize(482,480)
+        DPlusInto.setMinimumSize(QtCore.QSize(350,0))
+        self.gridlayout = QtGui.QGridLayout(DPlusInto)
+        self.gridlayout.setObjectName("gridlayout")
+        self.tabuniqueinto = QtGui.QTabWidget(DPlusInto)
+        self.tabuniqueinto.setObjectName("tabuniqueinto")
+        self.Widget8 = QtGui.QWidget()
+        self.Widget8.setGeometry(QtCore.QRect(0,0,460,435))
+        self.Widget8.setObjectName("Widget8")
+        self.gridlayout1 = QtGui.QGridLayout(self.Widget8)
+        self.gridlayout1.setObjectName("gridlayout1")
+        self.textLabel1 = QtGui.QLabel(self.Widget8)
+        self.textLabel1.setWordWrap(False)
+        self.textLabel1.setObjectName("textLabel1")
+        self.gridlayout1.addWidget(self.textLabel1,0,0,1,2)
+        self.bSup = QtGui.QPushButton(self.Widget8)
+        self.bSup.setMinimumSize(QtCore.QSize(130,30))
+        self.bSup.setAutoDefault(True)
+        self.bSup.setObjectName("bSup")
+        self.gridlayout1.addWidget(self.bSup,3,0,1,1)
+        self.bOk = QtGui.QPushButton(self.Widget8)
+        self.bOk.setMinimumSize(QtCore.QSize(130,30))
+        self.bOk.setAutoDefault(True)
+        self.bOk.setDefault(True)
+        self.bOk.setObjectName("bOk")
+        self.gridlayout1.addWidget(self.bOk,3,1,1,2)
+        self.bHelp = QtGui.QPushButton(self.Widget8)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(150)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.bHelp.sizePolicy().hasHeightForWidth())
+        self.bHelp.setSizePolicy(sizePolicy)
+        self.bHelp.setMinimumSize(QtCore.QSize(130,30))
+        self.bHelp.setAutoDefault(True)
+        self.bHelp.setObjectName("bHelp")
+        self.gridlayout1.addWidget(self.bHelp,3,3,1,1)
+        self.Commentaire = QtGui.QLabel(self.Widget8)
+        self.Commentaire.setMinimumSize(QtCore.QSize(0,40))
+        self.Commentaire.setWordWrap(False)
+        self.Commentaire.setObjectName("Commentaire")
+        self.gridlayout1.addWidget(self.Commentaire,2,0,1,4)
+        self.hboxlayout = QtGui.QHBoxLayout()
+        self.hboxlayout.setObjectName("hboxlayout")
+        self.LBValeurs = QtGui.QListWidget(self.Widget8)
+        self.LBValeurs.setObjectName("LBValeurs")
+        self.hboxlayout.addWidget(self.LBValeurs)
+        self.vboxlayout = QtGui.QVBoxLayout()
+        self.vboxlayout.setObjectName("vboxlayout")
+        spacerItem = QtGui.QSpacerItem(21,44,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        self.vboxlayout.addItem(spacerItem)
+        self.vboxlayout1 = QtGui.QVBoxLayout()
+        self.vboxlayout1.setObjectName("vboxlayout1")
+        self.BAjout1Val = QtGui.QToolButton(self.Widget8)
+        self.BAjout1Val.setMinimumSize(QtCore.QSize(40,31))
+        self.BAjout1Val.setMaximumSize(QtCore.QSize(40,31))
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap("../../EficasV1/Editeur/icons/arrow_left.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off)
+        self.BAjout1Val.setIcon(icon)
+        self.BAjout1Val.setObjectName("BAjout1Val")
+        self.vboxlayout1.addWidget(self.BAjout1Val)
+        self.BSup1Val = QtGui.QToolButton(self.Widget8)
+        self.BSup1Val.setMinimumSize(QtCore.QSize(40,31))
+        self.BSup1Val.setMaximumSize(QtCore.QSize(40,31))
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap("../Editeur/icons/arrow_right.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off)
+        self.BSup1Val.setIcon(icon)
+        self.BSup1Val.setObjectName("BSup1Val")
+        self.vboxlayout1.addWidget(self.BSup1Val)
+        spacerItem1 = QtGui.QSpacerItem(21,176,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        self.vboxlayout1.addItem(spacerItem1)
+        self.vboxlayout.addLayout(self.vboxlayout1)
+        self.hboxlayout.addLayout(self.vboxlayout)
+        self.listBoxVal = QtGui.QListWidget(self.Widget8)
+        self.listBoxVal.setObjectName("listBoxVal")
+        self.hboxlayout.addWidget(self.listBoxVal)
+        self.gridlayout1.addLayout(self.hboxlayout,1,0,1,4)
+        self.textLabel1_2 = QtGui.QLabel(self.Widget8)
+        self.textLabel1_2.setWordWrap(False)
+        self.textLabel1_2.setObjectName("textLabel1_2")
+        self.gridlayout1.addWidget(self.textLabel1_2,0,2,1,2)
+        self.tabuniqueinto.addTab(self.Widget8,"")
+        self.gridlayout.addWidget(self.tabuniqueinto,0,0,1,1)
+
+        self.retranslateUi(DPlusInto)
+        QtCore.QMetaObject.connectSlotsByName(DPlusInto)
+        DPlusInto.setTabOrder(self.listBoxVal,self.tabuniqueinto)
+        DPlusInto.setTabOrder(self.tabuniqueinto,self.bSup)
+        DPlusInto.setTabOrder(self.bSup,self.bOk)
+        DPlusInto.setTabOrder(self.bOk,self.bHelp)
+        DPlusInto.setTabOrder(self.bHelp,self.LBValeurs)
+
+    def retranslateUi(self, DPlusInto):
+        DPlusInto.setWindowTitle(QtGui.QApplication.translate("DPlusInto", "DUnIn", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1.setText(QtGui.QApplication.translate("DPlusInto", "<u><font size=\"+1\">Valeur(s) actuelle(s)</font></u>", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setToolTip(QtGui.QApplication.translate("DPlusInto", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DPlusInto", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DPlusInto", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setToolTip(QtGui.QApplication.translate("DPlusInto", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setText(QtGui.QApplication.translate("DPlusInto", "&Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setShortcut(QtGui.QApplication.translate("DPlusInto", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setToolTip(QtGui.QApplication.translate("DPlusInto", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setText(QtGui.QApplication.translate("DPlusInto", "&Documentation", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setShortcut(QtGui.QApplication.translate("DPlusInto", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
+        self.BAjout1Val.setToolTip(QtGui.QApplication.translate("DPlusInto", "enleve l occurence selectionnee", None, QtGui.QApplication.UnicodeUTF8))
+        self.BSup1Val.setToolTip(QtGui.QApplication.translate("DPlusInto", "ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_2.setText(QtGui.QApplication.translate("DPlusInto", "<u><font size=\"+1\">Valeur(s) possibles(s)</font></u>", None, QtGui.QApplication.UnicodeUTF8))
+        self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DPlusInto", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DPlusInto = QtGui.QWidget()
+    ui = Ui_DPlusInto()
+    ui.setupUi(DPlusInto)
+    DPlusInto.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desPlusieursInto.ui b/UiQT4/desPlusieursInto.ui
new file mode 100644 (file)
index 0000000..9fa87f7
--- /dev/null
@@ -0,0 +1,267 @@
+<ui version="4.0" >
+ <class>DPlusInto</class>
+ <widget class="QWidget" name="DPlusInto" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>482</width>
+    <height>480</height>
+   </rect>
+  </property>
+  <property name="minimumSize" >
+   <size>
+    <width>350</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle" >
+   <string>DUnIn</string>
+  </property>
+  <layout class="QGridLayout" >
+   <item row="0" column="0" >
+    <widget class="QTabWidget" name="tabuniqueinto" >
+     <widget class="QWidget" name="Widget8" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>460</width>
+        <height>435</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Saisir Valeur</string>
+      </attribute>
+      <layout class="QGridLayout" >
+       <item row="0" column="0" colspan="2" >
+        <widget class="QLabel" name="textLabel1" >
+         <property name="text" >
+          <string>&lt;u>&lt;font size="+1">Valeur(s) actuelle(s)&lt;/font>&lt;/u></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="0" >
+        <widget class="QPushButton" name="bSup" >
+         <property name="minimumSize" >
+          <size>
+           <width>130</width>
+           <height>30</height>
+          </size>
+         </property>
+         <property name="toolTip" >
+          <string>suppression du mot clef</string>
+         </property>
+         <property name="text" >
+          <string>&amp;Supprimer</string>
+         </property>
+         <property name="shortcut" >
+          <string>Alt+S</string>
+         </property>
+         <property name="autoDefault" >
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="1" colspan="2" >
+        <widget class="QPushButton" name="bOk" >
+         <property name="minimumSize" >
+          <size>
+           <width>130</width>
+           <height>30</height>
+          </size>
+         </property>
+         <property name="toolTip" >
+          <string>validation de la saisie</string>
+         </property>
+         <property name="text" >
+          <string>&amp;Valider</string>
+         </property>
+         <property name="shortcut" >
+          <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+         </property>
+         <property name="autoDefault" >
+          <bool>true</bool>
+         </property>
+         <property name="default" >
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="3" >
+        <widget class="QPushButton" name="bHelp" >
+         <property name="sizePolicy" >
+          <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
+           <horstretch>150</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="minimumSize" >
+          <size>
+           <width>130</width>
+           <height>30</height>
+          </size>
+         </property>
+         <property name="toolTip" >
+          <string>affichage documentation aster</string>
+         </property>
+         <property name="text" >
+          <string>&amp;Documentation</string>
+         </property>
+         <property name="shortcut" >
+          <string>Alt+D</string>
+         </property>
+         <property name="autoDefault" >
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" colspan="4" >
+        <widget class="QLabel" name="Commentaire" >
+         <property name="minimumSize" >
+          <size>
+           <width>0</width>
+           <height>40</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string/>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0" colspan="4" >
+        <layout class="QHBoxLayout" >
+         <item>
+          <widget class="QListWidget" name="LBValeurs" />
+         </item>
+         <item>
+          <layout class="QVBoxLayout" >
+           <item>
+            <spacer name="spacer2" >
+             <property name="orientation" >
+              <enum>Qt::Vertical</enum>
+             </property>
+             <property name="sizeType" >
+              <enum>QSizePolicy::Expanding</enum>
+             </property>
+             <property name="sizeHint" stdset="0" >
+              <size>
+               <width>21</width>
+               <height>44</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item>
+            <layout class="QVBoxLayout" >
+             <item>
+              <widget class="QToolButton" name="BAjout1Val" >
+               <property name="minimumSize" >
+                <size>
+                 <width>40</width>
+                 <height>31</height>
+                </size>
+               </property>
+               <property name="maximumSize" >
+                <size>
+                 <width>40</width>
+                 <height>31</height>
+                </size>
+               </property>
+               <property name="toolTip" >
+                <string>enleve l occurence selectionnee</string>
+               </property>
+               <property name="text" >
+                <string/>
+               </property>
+               <property name="icon" >
+                <iconset>
+                 <normaloff>../../EficasV1/Editeur/icons/arrow_left.gif</normaloff>../../EficasV1/Editeur/icons/arrow_left.gif</iconset>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QToolButton" name="BSup1Val" >
+               <property name="minimumSize" >
+                <size>
+                 <width>40</width>
+                 <height>31</height>
+                </size>
+               </property>
+               <property name="maximumSize" >
+                <size>
+                 <width>40</width>
+                 <height>31</height>
+                </size>
+               </property>
+               <property name="toolTip" >
+                <string>ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)</string>
+               </property>
+               <property name="text" >
+                <string/>
+               </property>
+               <property name="icon" >
+                <iconset>
+                 <normaloff>../Editeur/icons/arrow_right.gif</normaloff>../Editeur/icons/arrow_right.gif</iconset>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <spacer name="spacer3" >
+               <property name="orientation" >
+                <enum>Qt::Vertical</enum>
+               </property>
+               <property name="sizeType" >
+                <enum>QSizePolicy::Expanding</enum>
+               </property>
+               <property name="sizeHint" stdset="0" >
+                <size>
+                 <width>21</width>
+                 <height>176</height>
+                </size>
+               </property>
+              </spacer>
+             </item>
+            </layout>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <widget class="QListWidget" name="listBoxVal" />
+         </item>
+        </layout>
+       </item>
+       <item row="0" column="2" colspan="2" >
+        <widget class="QLabel" name="textLabel1_2" >
+         <property name="text" >
+          <string>&lt;u>&lt;font size="+1">Valeur(s) possibles(s)&lt;/font>&lt;/u></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <tabstops>
+  <tabstop>listBoxVal</tabstop>
+  <tabstop>tabuniqueinto</tabstop>
+  <tabstop>bSup</tabstop>
+  <tabstop>bOk</tabstop>
+  <tabstop>bHelp</tabstop>
+  <tabstop>LBValeurs</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desPoursuite.py b/UiQT4/desPoursuite.py
new file mode 100644 (file)
index 0000000..3b36f1c
--- /dev/null
@@ -0,0 +1,187 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desPoursuite.ui'
+#
+# Created: Fri Oct 10 11:42:29 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DPour(object):
+    def setupUi(self, DPour):
+        DPour.setObjectName("DPour")
+        DPour.resize(521,544)
+        DPour.setMinimumSize(QtCore.QSize(505,0))
+        self.gridlayout = QtGui.QGridLayout(DPour)
+        self.gridlayout.setObjectName("gridlayout")
+        self.TWChoix = QtGui.QTabWidget(DPour)
+        self.TWChoix.setObjectName("TWChoix")
+        self.MotClef = QtGui.QWidget()
+        self.MotClef.setGeometry(QtCore.QRect(0,0,499,433))
+        self.MotClef.setObjectName("MotClef")
+        self.gridLayout_4 = QtGui.QGridLayout(self.MotClef)
+        self.gridLayout_4.setObjectName("gridLayout_4")
+        self.textLabel1 = QtGui.QLabel(self.MotClef)
+        self.textLabel1.setMinimumSize(QtCore.QSize(0,0))
+        self.textLabel1.setWordWrap(False)
+        self.textLabel1.setObjectName("textLabel1")
+        self.gridLayout_4.addWidget(self.textLabel1,0,0,1,1)
+        self.textLabel1_2 = QtGui.QLabel(self.MotClef)
+        self.textLabel1_2.setWordWrap(False)
+        self.textLabel1_2.setObjectName("textLabel1_2")
+        self.gridLayout_4.addWidget(self.textLabel1_2,0,1,1,1)
+        self.LBMCPermis = QtGui.QListWidget(self.MotClef)
+        self.LBMCPermis.setMinimumSize(QtCore.QSize(0,0))
+        self.LBMCPermis.setObjectName("LBMCPermis")
+        self.gridLayout_4.addWidget(self.LBMCPermis,1,0,1,1)
+        self.LBRegles = QtGui.QListWidget(self.MotClef)
+        self.LBRegles.setObjectName("LBRegles")
+        self.gridLayout_4.addWidget(self.LBRegles,1,1,1,1)
+        self.TWChoix.addTab(self.MotClef,"")
+        self.Commande = QtGui.QWidget()
+        self.Commande.setGeometry(QtCore.QRect(0,0,499,433))
+        self.Commande.setObjectName("Commande")
+        self.gridLayout_3 = QtGui.QGridLayout(self.Commande)
+        self.gridLayout_3.setObjectName("gridLayout_3")
+        self.textLabel1_4 = QtGui.QLabel(self.Commande)
+        self.textLabel1_4.setWordWrap(False)
+        self.textLabel1_4.setObjectName("textLabel1_4")
+        self.gridLayout_3.addWidget(self.textLabel1_4,0,0,1,3)
+        self.groupBox = QtGui.QGroupBox(self.Commande)
+        self.groupBox.setObjectName("groupBox")
+        self.gridLayout = QtGui.QGridLayout(self.groupBox)
+        self.gridLayout.setObjectName("gridLayout")
+        self.RBalpha = QtGui.QRadioButton(self.groupBox)
+        self.RBalpha.setChecked(True)
+        self.RBalpha.setObjectName("RBalpha")
+        self.gridLayout.addWidget(self.RBalpha,0,0,1,1)
+        self.RBGroupe = QtGui.QRadioButton(self.groupBox)
+        self.RBGroupe.setObjectName("RBGroupe")
+        self.gridLayout.addWidget(self.RBGroupe,1,0,1,1)
+        self.gridLayout_3.addWidget(self.groupBox,0,3,2,1)
+        self.textLabel6 = QtGui.QLabel(self.Commande)
+        self.textLabel6.setMinimumSize(QtCore.QSize(50,30))
+        self.textLabel6.setWordWrap(False)
+        self.textLabel6.setObjectName("textLabel6")
+        self.gridLayout_3.addWidget(self.textLabel6,1,0,1,1)
+        self.LEFiltre = QtGui.QLineEdit(self.Commande)
+        self.LEFiltre.setMinimumSize(QtCore.QSize(160,30))
+        self.LEFiltre.setObjectName("LEFiltre")
+        self.gridLayout_3.addWidget(self.LEFiltre,1,1,1,1)
+        self.pushButton = QtGui.QPushButton(self.Commande)
+        self.pushButton.setObjectName("pushButton")
+        self.gridLayout_3.addWidget(self.pushButton,1,2,1,1)
+        self.LBNouvCommande = QtGui.QListWidget(self.Commande)
+        self.LBNouvCommande.setObjectName("LBNouvCommande")
+        self.gridLayout_3.addWidget(self.LBNouvCommande,2,0,1,4)
+        self.textLabel4 = QtGui.QLabel(self.Commande)
+        self.textLabel4.setWordWrap(False)
+        self.textLabel4.setObjectName("textLabel4")
+        self.gridLayout_3.addWidget(self.textLabel4,3,0,1,4)
+        self.TWChoix.addTab(self.Commande,"")
+        self.TabPage = QtGui.QWidget()
+        self.TabPage.setGeometry(QtCore.QRect(0,0,499,433))
+        self.TabPage.setObjectName("TabPage")
+        self.gridLayout_2 = QtGui.QGridLayout(self.TabPage)
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.textLabel1_3 = QtGui.QLabel(self.TabPage)
+        self.textLabel1_3.setWordWrap(False)
+        self.textLabel1_3.setObjectName("textLabel1_3")
+        self.gridLayout_2.addWidget(self.textLabel1_3,0,0,1,1)
+        self.LENomFichier = QtGui.QLineEdit(self.TabPage)
+        self.LENomFichier.setMinimumSize(QtCore.QSize(470,40))
+        self.LENomFichier.setObjectName("LENomFichier")
+        self.gridLayout_2.addWidget(self.LENomFichier,1,0,1,1)
+        spacerItem = QtGui.QSpacerItem(21,190,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        self.gridLayout_2.addItem(spacerItem,2,0,1,1)
+        self.hboxlayout = QtGui.QHBoxLayout()
+        self.hboxlayout.setObjectName("hboxlayout")
+        spacerItem1 = QtGui.QSpacerItem(331,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
+        self.hboxlayout.addItem(spacerItem1)
+        self.BBrowse = QtGui.QPushButton(self.TabPage)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.BBrowse.sizePolicy().hasHeightForWidth())
+        self.BBrowse.setSizePolicy(sizePolicy)
+        self.BBrowse.setMinimumSize(QtCore.QSize(140,50))
+        self.BBrowse.setObjectName("BBrowse")
+        self.hboxlayout.addWidget(self.BBrowse)
+        self.gridLayout_2.addLayout(self.hboxlayout,3,0,1,1)
+        spacerItem2 = QtGui.QSpacerItem(21,87,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        self.gridLayout_2.addItem(spacerItem2,4,0,1,1)
+        self.TWChoix.addTab(self.TabPage,"")
+        self.gridlayout.addWidget(self.TWChoix,0,0,1,3)
+        self.bSup = QtGui.QPushButton(DPour)
+        self.bSup.setMinimumSize(QtCore.QSize(0,30))
+        self.bSup.setAutoDefault(True)
+        self.bSup.setObjectName("bSup")
+        self.gridlayout.addWidget(self.bSup,2,0,1,1)
+        self.bOk = QtGui.QPushButton(DPour)
+        self.bOk.setMinimumSize(QtCore.QSize(0,30))
+        self.bOk.setAutoDefault(True)
+        self.bOk.setDefault(True)
+        self.bOk.setObjectName("bOk")
+        self.gridlayout.addWidget(self.bOk,2,1,1,1)
+        self.bHelp = QtGui.QPushButton(DPour)
+        self.bHelp.setMinimumSize(QtCore.QSize(0,30))
+        self.bHelp.setAutoDefault(True)
+        self.bHelp.setObjectName("bHelp")
+        self.gridlayout.addWidget(self.bHelp,2,2,1,1)
+        self.Commentaire = QtGui.QLabel(DPour)
+        self.Commentaire.setWordWrap(False)
+        self.Commentaire.setObjectName("Commentaire")
+        self.gridlayout.addWidget(self.Commentaire,1,0,1,3)
+
+        self.retranslateUi(DPour)
+        self.TWChoix.setCurrentIndex(0)
+        QtCore.QMetaObject.connectSlotsByName(DPour)
+        DPour.setTabOrder(self.LEFiltre,self.LENomFichier)
+        DPour.setTabOrder(self.LENomFichier,self.TWChoix)
+        DPour.setTabOrder(self.TWChoix,self.LBMCPermis)
+        DPour.setTabOrder(self.LBMCPermis,self.LBRegles)
+        DPour.setTabOrder(self.LBRegles,self.LBNouvCommande)
+        DPour.setTabOrder(self.LBNouvCommande,self.RBalpha)
+        DPour.setTabOrder(self.RBalpha,self.BBrowse)
+        DPour.setTabOrder(self.BBrowse,self.bSup)
+        DPour.setTabOrder(self.bSup,self.bOk)
+        DPour.setTabOrder(self.bOk,self.bHelp)
+
+    def retranslateUi(self, DPour):
+        DPour.setWindowTitle(QtGui.QApplication.translate("DPour", "DMacro", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1.setText(QtGui.QApplication.translate("DPour", "<h3><p align=\"center\"><u><b>Mots Clefs Permis</b></u></p></h3>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_2.setText(QtGui.QApplication.translate("DPour", "<h3><p align=\"center\"><u><b>Régles</b></u></p></h3>", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.MotClef), QtGui.QApplication.translate("DPour", "Ajouter Mot-Clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_4.setText(QtGui.QApplication.translate("DPour", "<b><u>Commandes :</u></b>", None, QtGui.QApplication.UnicodeUTF8))
+        self.groupBox.setTitle(QtGui.QApplication.translate("DPour", "Affichage", None, QtGui.QApplication.UnicodeUTF8))
+        self.RBalpha.setText(QtGui.QApplication.translate("DPour", "alphabétique", None, QtGui.QApplication.UnicodeUTF8))
+        self.RBGroupe.setText(QtGui.QApplication.translate("DPour", "par groupe", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel6.setText(QtGui.QApplication.translate("DPour", "Filtre", None, QtGui.QApplication.UnicodeUTF8))
+        self.pushButton.setText(QtGui.QApplication.translate("DPour", "Suivant", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel4.setText(QtGui.QApplication.translate("DPour", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DPour", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_3.setText(QtGui.QApplication.translate("DPour", "<font size=\"+1\">La commande POURSUITE requiert un nom de Fichier :</font>", None, QtGui.QApplication.UnicodeUTF8))
+        self.BBrowse.setText(QtGui.QApplication.translate("DPour", "Edit", None, QtGui.QApplication.UnicodeUTF8))
+        self.TWChoix.setTabText(self.TWChoix.indexOf(self.TabPage), QtGui.QApplication.translate("DPour", "Fichier Poursuite", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setToolTip(QtGui.QApplication.translate("DPour", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DPour", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DPour", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setToolTip(QtGui.QApplication.translate("DPour", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setText(QtGui.QApplication.translate("DPour", "&Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setShortcut(QtGui.QApplication.translate("DPour", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setToolTip(QtGui.QApplication.translate("DPour", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setText(QtGui.QApplication.translate("DPour", "&Documentation", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setShortcut(QtGui.QApplication.translate("DPour", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DPour = QtGui.QWidget()
+    ui = Ui_DPour()
+    ui.setupUi(DPour)
+    DPour.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desPoursuite.ui b/UiQT4/desPoursuite.ui
new file mode 100644 (file)
index 0000000..71a3501
--- /dev/null
@@ -0,0 +1,384 @@
+<ui version="4.0" >
+ <class>DPour</class>
+ <widget class="QWidget" name="DPour" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>521</width>
+    <height>544</height>
+   </rect>
+  </property>
+  <property name="minimumSize" >
+   <size>
+    <width>505</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle" >
+   <string>DMacro</string>
+  </property>
+  <layout class="QGridLayout" >
+   <item row="0" column="0" colspan="3" >
+    <widget class="QTabWidget" name="TWChoix" >
+     <property name="currentIndex" >
+      <number>0</number>
+     </property>
+     <widget class="QWidget" name="MotClef" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>499</width>
+        <height>433</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Ajouter Mot-Clef</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_4" >
+       <item row="0" column="0" >
+        <widget class="QLabel" name="textLabel1" >
+         <property name="minimumSize" >
+          <size>
+           <width>0</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>&lt;h3>&lt;p align="center">&lt;u>&lt;b>Mots Clefs Permis&lt;/b>&lt;/u>&lt;/p>&lt;/h3></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1" >
+        <widget class="QLabel" name="textLabel1_2" >
+         <property name="text" >
+          <string>&lt;h3>&lt;p align="center">&lt;u>&lt;b>Régles&lt;/b>&lt;/u>&lt;/p>&lt;/h3></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0" >
+        <widget class="QListWidget" name="LBMCPermis" >
+         <property name="minimumSize" >
+          <size>
+           <width>0</width>
+           <height>0</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1" >
+        <widget class="QListWidget" name="LBRegles" />
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="Commande" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>499</width>
+        <height>433</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Nouvelle Commande</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_3" >
+       <item row="0" column="0" colspan="3" >
+        <widget class="QLabel" name="textLabel1_4" >
+         <property name="text" >
+          <string>&lt;b>&lt;u>Commandes :&lt;/u>&lt;/b></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item rowspan="2" row="0" column="3" >
+        <widget class="QGroupBox" name="groupBox" >
+         <property name="title" >
+          <string>Affichage</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout" >
+          <item row="0" column="0" >
+           <widget class="QRadioButton" name="RBalpha" >
+            <property name="text" >
+             <string>alphabétique</string>
+            </property>
+            <property name="checked" >
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0" >
+           <widget class="QRadioButton" name="RBGroupe" >
+            <property name="text" >
+             <string>par groupe</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item row="1" column="0" >
+        <widget class="QLabel" name="textLabel6" >
+         <property name="minimumSize" >
+          <size>
+           <width>50</width>
+           <height>30</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>Filtre</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1" >
+        <widget class="QLineEdit" name="LEFiltre" >
+         <property name="minimumSize" >
+          <size>
+           <width>160</width>
+           <height>30</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="2" >
+        <widget class="QPushButton" name="pushButton" >
+         <property name="text" >
+          <string>Suivant</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" colspan="4" >
+        <widget class="QListWidget" name="LBNouvCommande" />
+       </item>
+       <item row="3" column="0" colspan="4" >
+        <widget class="QLabel" name="textLabel4" >
+         <property name="text" >
+          <string>La commande choisie sera ajoutée APRES la commande courante</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="TabPage" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>499</width>
+        <height>433</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Fichier Poursuite</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_2" >
+       <item row="0" column="0" >
+        <widget class="QLabel" name="textLabel1_3" >
+         <property name="text" >
+          <string>&lt;font size="+1">La commande POURSUITE requiert un nom de Fichier :&lt;/font></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0" >
+        <widget class="QLineEdit" name="LENomFichier" >
+         <property name="minimumSize" >
+          <size>
+           <width>470</width>
+           <height>40</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" >
+        <spacer name="spacer1" >
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeType" >
+          <enum>QSizePolicy::Expanding</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>21</width>
+           <height>190</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="3" column="0" >
+        <layout class="QHBoxLayout" >
+         <item>
+          <spacer name="spacer3" >
+           <property name="orientation" >
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeType" >
+            <enum>QSizePolicy::Expanding</enum>
+           </property>
+           <property name="sizeHint" stdset="0" >
+            <size>
+             <width>331</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <widget class="QPushButton" name="BBrowse" >
+           <property name="sizePolicy" >
+            <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="minimumSize" >
+            <size>
+             <width>140</width>
+             <height>50</height>
+            </size>
+           </property>
+           <property name="text" >
+            <string>Edit</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item row="4" column="0" >
+        <spacer name="spacer1_2" >
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeType" >
+          <enum>QSizePolicy::Expanding</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>21</width>
+           <height>87</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+   <item row="2" column="0" >
+    <widget class="QPushButton" name="bSup" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>suppression du mot clef</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Supprimer</string>
+     </property>
+     <property name="shortcut" >
+      <string>Alt+S</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1" >
+    <widget class="QPushButton" name="bOk" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>validation de la saisie</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Valider</string>
+     </property>
+     <property name="shortcut" >
+      <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+     <property name="default" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="2" >
+    <widget class="QPushButton" name="bHelp" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>affichage documentation aster</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Documentation</string>
+     </property>
+     <property name="shortcut" >
+      <string>Alt+D</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" colspan="3" >
+    <widget class="QLabel" name="Commentaire" >
+     <property name="text" >
+      <string/>
+     </property>
+     <property name="wordWrap" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <tabstops>
+  <tabstop>LEFiltre</tabstop>
+  <tabstop>LENomFichier</tabstop>
+  <tabstop>TWChoix</tabstop>
+  <tabstop>LBMCPermis</tabstop>
+  <tabstop>LBRegles</tabstop>
+  <tabstop>LBNouvCommande</tabstop>
+  <tabstop>RBalpha</tabstop>
+  <tabstop>BBrowse</tabstop>
+  <tabstop>bSup</tabstop>
+  <tabstop>bOk</tabstop>
+  <tabstop>bHelp</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desRacine.py b/UiQT4/desRacine.py
new file mode 100644 (file)
index 0000000..19def6b
--- /dev/null
@@ -0,0 +1,106 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desRacine.ui'
+#
+# Created: Tue Sep 23 10:19:58 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DRac(object):
+    def setupUi(self, DRac):
+        DRac.setObjectName("DRac")
+        DRac.resize(554,540)
+        DRac.setMinimumSize(QtCore.QSize(505,0))
+        self.gridLayout = QtGui.QGridLayout(DRac)
+        self.gridLayout.setObjectName("gridLayout")
+        self.textLabel1_4 = QtGui.QLabel(DRac)
+        self.textLabel1_4.setMinimumSize(QtCore.QSize(291,21))
+        self.textLabel1_4.setWordWrap(False)
+        self.textLabel1_4.setObjectName("textLabel1_4")
+        self.gridLayout.addWidget(self.textLabel1_4,0,0,2,5)
+        self.textLabel1_4_2 = QtGui.QLabel(DRac)
+        self.textLabel1_4_2.setWordWrap(False)
+        self.textLabel1_4_2.setObjectName("textLabel1_4_2")
+        self.gridLayout.addWidget(self.textLabel1_4_2,1,4,1,2)
+        self.RBalpha = QtGui.QRadioButton(DRac)
+        self.RBalpha.setChecked(True)
+        self.RBalpha.setObjectName("RBalpha")
+        self.gridLayout.addWidget(self.RBalpha,2,0,1,2)
+        self.RBGroupe = QtGui.QRadioButton(DRac)
+        self.RBGroupe.setObjectName("RBGroupe")
+        self.gridLayout.addWidget(self.RBGroupe,2,2,1,3)
+        self.textLabel6 = QtGui.QLabel(DRac)
+        self.textLabel6.setMinimumSize(QtCore.QSize(40,0))
+        self.textLabel6.setWordWrap(False)
+        self.textLabel6.setObjectName("textLabel6")
+        self.gridLayout.addWidget(self.textLabel6,3,0,1,1)
+        self.LEFiltre = QtGui.QLineEdit(DRac)
+        self.LEFiltre.setMinimumSize(QtCore.QSize(0,30))
+        self.LEFiltre.setObjectName("LEFiltre")
+        self.gridLayout.addWidget(self.LEFiltre,3,1,1,1)
+        self.BNext = QtGui.QPushButton(DRac)
+        self.BNext.setObjectName("BNext")
+        self.gridLayout.addWidget(self.BNext,3,2,1,1)
+        self.LBRegles = QtGui.QListWidget(DRac)
+        self.LBRegles.setMinimumSize(QtCore.QSize(0,0))
+        self.LBRegles.setObjectName("LBRegles")
+        self.gridLayout.addWidget(self.LBRegles,3,3,2,3)
+        self.LBNouvCommande = QtGui.QListWidget(DRac)
+        self.LBNouvCommande.setObjectName("LBNouvCommande")
+        self.gridLayout.addWidget(self.LBNouvCommande,4,0,1,3)
+        self.bSup = QtGui.QPushButton(DRac)
+        self.bSup.setMinimumSize(QtCore.QSize(160,30))
+        self.bSup.setAutoDefault(True)
+        self.bSup.setObjectName("bSup")
+        self.gridLayout.addWidget(self.bSup,5,0,1,2)
+        self.bOk = QtGui.QPushButton(DRac)
+        self.bOk.setMinimumSize(QtCore.QSize(160,30))
+        self.bOk.setAutoDefault(True)
+        self.bOk.setDefault(True)
+        self.bOk.setObjectName("bOk")
+        self.gridLayout.addWidget(self.bOk,5,2,1,3)
+        self.bHelp = QtGui.QPushButton(DRac)
+        self.bHelp.setMinimumSize(QtCore.QSize(160,30))
+        self.bHelp.setAutoDefault(True)
+        self.bHelp.setObjectName("bHelp")
+        self.gridLayout.addWidget(self.bHelp,5,5,1,1)
+
+        self.retranslateUi(DRac)
+        QtCore.QMetaObject.connectSlotsByName(DRac)
+        DRac.setTabOrder(self.LEFiltre,self.LBNouvCommande)
+        DRac.setTabOrder(self.LBNouvCommande,self.bSup)
+        DRac.setTabOrder(self.bSup,self.bOk)
+        DRac.setTabOrder(self.bOk,self.bHelp)
+        DRac.setTabOrder(self.bHelp,self.LBRegles)
+
+    def retranslateUi(self, DRac):
+        DRac.setWindowTitle(QtGui.QApplication.translate("DRac", "DMacro", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_4.setText(QtGui.QApplication.translate("DRac", "<b><u>Commandes :</u></b>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1_4_2.setText(QtGui.QApplication.translate("DRac", "<p align=\"center\"><b><u>Régles :</u></b></p>", None, QtGui.QApplication.UnicodeUTF8))
+        self.RBalpha.setText(QtGui.QApplication.translate("DRac", "alphabétique", None, QtGui.QApplication.UnicodeUTF8))
+        self.RBGroupe.setText(QtGui.QApplication.translate("DRac", "par groupe", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel6.setText(QtGui.QApplication.translate("DRac", "Filtre", None, QtGui.QApplication.UnicodeUTF8))
+        self.BNext.setText(QtGui.QApplication.translate("DRac", "Suivant", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setToolTip(QtGui.QApplication.translate("DRac", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DRac", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DRac", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setToolTip(QtGui.QApplication.translate("DRac", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setText(QtGui.QApplication.translate("DRac", "&Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setShortcut(QtGui.QApplication.translate("DRac", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setToolTip(QtGui.QApplication.translate("DRac", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setText(QtGui.QApplication.translate("DRac", "&Documentation", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setShortcut(QtGui.QApplication.translate("DRac", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DRac = QtGui.QWidget()
+    ui = Ui_DRac()
+    ui.setupUi(DRac)
+    DRac.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desRacine.ui b/UiQT4/desRacine.ui
new file mode 100644 (file)
index 0000000..d21e3ce
--- /dev/null
@@ -0,0 +1,194 @@
+<ui version="4.0" >
+ <class>DRac</class>
+ <widget class="QWidget" name="DRac" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>554</width>
+    <height>540</height>
+   </rect>
+  </property>
+  <property name="minimumSize" >
+   <size>
+    <width>505</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle" >
+   <string>DMacro</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" >
+   <item rowspan="2" row="0" column="0" colspan="5" >
+    <widget class="QLabel" name="textLabel1_4" >
+     <property name="minimumSize" >
+      <size>
+       <width>291</width>
+       <height>21</height>
+      </size>
+     </property>
+     <property name="text" >
+      <string>&lt;b>&lt;u>Commandes :&lt;/u>&lt;/b></string>
+     </property>
+     <property name="wordWrap" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="4" colspan="2" >
+    <widget class="QLabel" name="textLabel1_4_2" >
+     <property name="text" >
+      <string>&lt;p align="center">&lt;b>&lt;u>Régles :&lt;/u>&lt;/b>&lt;/p></string>
+     </property>
+     <property name="wordWrap" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" colspan="2" >
+    <widget class="QRadioButton" name="RBalpha" >
+     <property name="text" >
+      <string>alphabétique</string>
+     </property>
+     <property name="checked" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="2" colspan="3" >
+    <widget class="QRadioButton" name="RBGroupe" >
+     <property name="text" >
+      <string>par groupe</string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="0" >
+    <widget class="QLabel" name="textLabel6" >
+     <property name="minimumSize" >
+      <size>
+       <width>40</width>
+       <height>0</height>
+      </size>
+     </property>
+     <property name="text" >
+      <string>Filtre</string>
+     </property>
+     <property name="wordWrap" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1" >
+    <widget class="QLineEdit" name="LEFiltre" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="2" >
+    <widget class="QPushButton" name="BNext" >
+     <property name="text" >
+      <string>Suivant</string>
+     </property>
+    </widget>
+   </item>
+   <item rowspan="2" row="3" column="3" colspan="3" >
+    <widget class="QListWidget" name="LBRegles" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>0</height>
+      </size>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="0" colspan="3" >
+    <widget class="QListWidget" name="LBNouvCommande" />
+   </item>
+   <item row="5" column="0" colspan="2" >
+    <widget class="QPushButton" name="bSup" >
+     <property name="minimumSize" >
+      <size>
+       <width>160</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>suppression du mot clef</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Supprimer</string>
+     </property>
+     <property name="shortcut" >
+      <string>Alt+S</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="5" column="2" colspan="3" >
+    <widget class="QPushButton" name="bOk" >
+     <property name="minimumSize" >
+      <size>
+       <width>160</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>validation de la saisie</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Valider</string>
+     </property>
+     <property name="shortcut" >
+      <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+     <property name="default" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="5" column="5" >
+    <widget class="QPushButton" name="bHelp" >
+     <property name="minimumSize" >
+      <size>
+       <width>160</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>affichage documentation aster</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Documentation</string>
+     </property>
+     <property name="shortcut" >
+      <string>Alt+D</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <tabstops>
+  <tabstop>LEFiltre</tabstop>
+  <tabstop>LBNouvCommande</tabstop>
+  <tabstop>bSup</tabstop>
+  <tabstop>bOk</tabstop>
+  <tabstop>bHelp</tabstop>
+  <tabstop>LBRegles</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desSelectVal.py b/UiQT4/desSelectVal.py
new file mode 100644 (file)
index 0000000..914a3fa
--- /dev/null
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desSelectVal.ui'
+#
+# Created: Fri Sep 26 17:59:06 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DSelVal(object):
+    def setupUi(self, DSelVal):
+        DSelVal.setObjectName("DSelVal")
+        DSelVal.resize(469,624)
+        self.TBtext = QtGui.QTextEdit(DSelVal)
+        self.TBtext.setGeometry(QtCore.QRect(9,9,451,476))
+        self.TBtext.setObjectName("TBtext")
+        self.BImportSel = QtGui.QPushButton(DSelVal)
+        self.BImportSel.setGeometry(QtCore.QRect(220,520,208,27))
+        self.BImportSel.setObjectName("BImportSel")
+        self.BImportTout = QtGui.QPushButton(DSelVal)
+        self.BImportTout.setGeometry(QtCore.QRect(220,560,208,27))
+        self.BImportTout.setObjectName("BImportTout")
+        self.BGSeparateur = QtGui.QGroupBox(DSelVal)
+        self.BGSeparateur.setGeometry(QtCore.QRect(20,500,188,103))
+        self.BGSeparateur.setObjectName("BGSeparateur")
+        self.Bespace = QtGui.QRadioButton(self.BGSeparateur)
+        self.Bespace.setGeometry(QtCore.QRect(20,20,148,23))
+        self.Bespace.setChecked(True)
+        self.Bespace.setObjectName("Bespace")
+        self.Bvirgule = QtGui.QRadioButton(self.BGSeparateur)
+        self.Bvirgule.setGeometry(QtCore.QRect(20,40,148,23))
+        self.Bvirgule.setObjectName("Bvirgule")
+        self.BpointVirgule = QtGui.QRadioButton(self.BGSeparateur)
+        self.BpointVirgule.setGeometry(QtCore.QRect(20,60,148,23))
+        self.BpointVirgule.setObjectName("BpointVirgule")
+
+        self.retranslateUi(DSelVal)
+        QtCore.QMetaObject.connectSlotsByName(DSelVal)
+
+    def retranslateUi(self, DSelVal):
+        DSelVal.setWindowTitle(QtGui.QApplication.translate("DSelVal", "Sélection de valeurs", None, QtGui.QApplication.UnicodeUTF8))
+        self.BImportSel.setText(QtGui.QApplication.translate("DSelVal", "Ajouter Selection", None, QtGui.QApplication.UnicodeUTF8))
+        self.BImportTout.setText(QtGui.QApplication.translate("DSelVal", "Importer Tout", None, QtGui.QApplication.UnicodeUTF8))
+        self.BGSeparateur.setTitle(QtGui.QApplication.translate("DSelVal", "Separateur", None, QtGui.QApplication.UnicodeUTF8))
+        self.Bespace.setText(QtGui.QApplication.translate("DSelVal", "espace", None, QtGui.QApplication.UnicodeUTF8))
+        self.Bvirgule.setText(QtGui.QApplication.translate("DSelVal", "virgule", None, QtGui.QApplication.UnicodeUTF8))
+        self.BpointVirgule.setText(QtGui.QApplication.translate("DSelVal", "point-virgule", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DSelVal = QtGui.QWidget()
+    ui = Ui_DSelVal()
+    ui.setupUi(DSelVal)
+    DSelVal.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desSelectVal.ui b/UiQT4/desSelectVal.ui
new file mode 100644 (file)
index 0000000..48eb58c
--- /dev/null
@@ -0,0 +1,111 @@
+<ui version="4.0" >
+ <class>DSelVal</class>
+ <widget class="QWidget" name="DSelVal" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>469</width>
+    <height>624</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Sélection de valeurs</string>
+  </property>
+  <widget class="QTextEdit" name="TBtext" >
+   <property name="geometry" >
+    <rect>
+     <x>9</x>
+     <y>9</y>
+     <width>451</width>
+     <height>476</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="BImportSel" >
+   <property name="geometry" >
+    <rect>
+     <x>220</x>
+     <y>520</y>
+     <width>208</width>
+     <height>27</height>
+    </rect>
+   </property>
+   <property name="text" >
+    <string>Ajouter Selection</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="BImportTout" >
+   <property name="geometry" >
+    <rect>
+     <x>220</x>
+     <y>560</y>
+     <width>208</width>
+     <height>27</height>
+    </rect>
+   </property>
+   <property name="text" >
+    <string>Importer Tout</string>
+   </property>
+  </widget>
+  <widget class="QGroupBox" name="BGSeparateur" >
+   <property name="geometry" >
+    <rect>
+     <x>20</x>
+     <y>500</y>
+     <width>188</width>
+     <height>103</height>
+    </rect>
+   </property>
+   <property name="title" >
+    <string>Separateur</string>
+   </property>
+   <widget class="QRadioButton" name="Bespace" >
+    <property name="geometry" >
+     <rect>
+      <x>20</x>
+      <y>20</y>
+      <width>148</width>
+      <height>23</height>
+     </rect>
+    </property>
+    <property name="text" >
+     <string>espace</string>
+    </property>
+    <property name="checked" >
+     <bool>true</bool>
+    </property>
+   </widget>
+   <widget class="QRadioButton" name="Bvirgule" >
+    <property name="geometry" >
+     <rect>
+      <x>20</x>
+      <y>40</y>
+      <width>148</width>
+      <height>23</height>
+     </rect>
+    </property>
+    <property name="text" >
+     <string>virgule</string>
+    </property>
+   </widget>
+   <widget class="QRadioButton" name="BpointVirgule" >
+    <property name="geometry" >
+     <rect>
+      <x>20</x>
+      <y>60</y>
+      <width>148</width>
+      <height>23</height>
+     </rect>
+    </property>
+    <property name="text" >
+     <string>point-virgule</string>
+    </property>
+   </widget>
+  </widget>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desUniqueASSD.py b/UiQT4/desUniqueASSD.py
new file mode 100644 (file)
index 0000000..39863fb
--- /dev/null
@@ -0,0 +1,86 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desUniqueASSD.ui'
+#
+# Created: Fri Jul 18 16:24:35 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DUnASSD(object):
+    def setupUi(self, DUnASSD):
+        DUnASSD.setObjectName("DUnASSD")
+        DUnASSD.resize(482,480)
+        DUnASSD.setMinimumSize(QtCore.QSize(350,0))
+        self.gridlayout = QtGui.QGridLayout(DUnASSD)
+        self.gridlayout.setObjectName("gridlayout")
+        self.tabuniqueinto = QtGui.QTabWidget(DUnASSD)
+        self.tabuniqueinto.setObjectName("tabuniqueinto")
+        self.Widget8 = QtGui.QWidget()
+        self.Widget8.setObjectName("Widget8")
+        self.gridlayout1 = QtGui.QGridLayout(self.Widget8)
+        self.gridlayout1.setObjectName("gridlayout1")
+        self.textLabel2 = QtGui.QLabel(self.Widget8)
+        self.textLabel2.setMinimumSize(QtCore.QSize(436,50))
+        self.textLabel2.setWordWrap(False)
+        self.textLabel2.setObjectName("textLabel2")
+        self.gridlayout1.addWidget(self.textLabel2,0,0,1,1)
+        self.listBoxASSD = QtGui.QListWidget(self.Widget8)
+        self.listBoxASSD.setObjectName("listBoxASSD")
+        self.gridlayout1.addWidget(self.listBoxASSD,1,0,1,1)
+        self.Commentaire = QtGui.QLabel(self.Widget8)
+        self.Commentaire.setMinimumSize(QtCore.QSize(380,30))
+        self.Commentaire.setWordWrap(False)
+        self.Commentaire.setObjectName("Commentaire")
+        self.gridlayout1.addWidget(self.Commentaire,2,0,1,1)
+        self.hboxlayout = QtGui.QHBoxLayout()
+        self.hboxlayout.setObjectName("hboxlayout")
+        self.bSup = QtGui.QPushButton(self.Widget8)
+        self.bSup.setMinimumSize(QtCore.QSize(0,30))
+        self.bSup.setAutoDefault(True)
+        self.bSup.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnASSD", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bSup.setObjectName("bSup")
+        self.hboxlayout.addWidget(self.bSup)
+        self.bOk = QtGui.QPushButton(self.Widget8)
+        self.bOk.setMinimumSize(QtCore.QSize(0,30))
+        self.bOk.setAutoDefault(True)
+        self.bOk.setDefault(True)
+        self.bOk.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnASSD", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bOk.setObjectName("bOk")
+        self.hboxlayout.addWidget(self.bOk)
+        self.bHelp = QtGui.QPushButton(self.Widget8)
+        self.bHelp.setMinimumSize(QtCore.QSize(0,30))
+        self.bHelp.setAutoDefault(True)
+        self.bHelp.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnASSD", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bHelp.setObjectName("bHelp")
+        self.hboxlayout.addWidget(self.bHelp)
+        self.gridlayout1.addLayout(self.hboxlayout,3,0,1,1)
+        self.tabuniqueinto.addTab(self.Widget8,"")
+        self.gridlayout.addWidget(self.tabuniqueinto,0,0,1,1)
+
+        self.retranslateUi(DUnASSD)
+
+    def retranslateUi(self, DUnASSD):
+        DUnASSD.setWindowTitle(QtGui.QApplication.translate("DUnASSD", "DUnIn", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel2.setText(QtGui.QApplication.translate("DUnASSD", "<font size=\"+1\"><p align=\"center\">Structures de données du type\n"
+"requis par l\'objet courant :</p></font>", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DUnASSD", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DUnASSD", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setText(QtGui.QApplication.translate("DUnASSD", "&Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setShortcut(QtGui.QApplication.translate("DUnASSD", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setText(QtGui.QApplication.translate("DUnASSD", "&Documentation", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setShortcut(QtGui.QApplication.translate("DUnASSD", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
+        self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnASSD", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DUnASSD = QtGui.QWidget()
+    ui = Ui_DUnASSD()
+    ui.setupUi(DUnASSD)
+    DUnASSD.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desUniqueASSD.ui b/UiQT4/desUniqueASSD.ui
new file mode 100644 (file)
index 0000000..fd6ee2a
--- /dev/null
@@ -0,0 +1,149 @@
+<ui version="4.0" stdsetdef="1" >
+  <author></author>
+  <comment></comment>
+  <exportmacro></exportmacro>
+  <class>DUnASSD</class>
+  <widget class="QWidget" name="DUnASSD" >
+    <property name="geometry" >
+      <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>482</width>
+        <height>480</height>
+      </rect>
+    </property>
+    <property name="minimumSize" >
+      <size>
+        <width>350</width>
+        <height>0</height>
+      </size>
+    </property>
+    <property name="windowTitle" >
+      <string>DUnIn</string>
+    </property>
+    <layout class="QGridLayout" >
+      <item row="0" column="0" >
+        <widget class="QTabWidget" name="tabuniqueinto" >
+          <widget class="QWidget" name="Widget8" >
+            <attribute name="title" >
+              <string>Saisir Valeur</string>
+            </attribute>
+            <layout class="QGridLayout" >
+              <item row="0" column="0" >
+                <widget class="QLabel" name="textLabel2" >
+                  <property name="minimumSize" >
+                    <size>
+                      <width>436</width>
+                      <height>50</height>
+                    </size>
+                  </property>
+                  <property name="text" >
+                    <string>&lt;font size="+1">&lt;p align="center">Structures de données du type
+requis par l'objet courant :&lt;/p>&lt;/font></string>
+                  </property>
+                  <property name="wordWrap" >
+                    <bool>false</bool>
+                  </property>
+                </widget>
+              </item>
+              <item row="1" column="0" >
+                <widget class="QListWidget" name="listBoxASSD" />
+              </item>
+              <item row="2" column="0" >
+                <widget class="QLabel" name="Commentaire" >
+                  <property name="minimumSize" >
+                    <size>
+                      <width>380</width>
+                      <height>30</height>
+                    </size>
+                  </property>
+                  <property name="text" >
+                    <string/>
+                  </property>
+                  <property name="wordWrap" >
+                    <bool>false</bool>
+                  </property>
+                </widget>
+              </item>
+              <item row="3" column="0" >
+                <layout class="QHBoxLayout" >
+                  <item>
+                    <widget class="QPushButton" name="bSup" >
+                      <property name="minimumSize" >
+                        <size>
+                          <width>0</width>
+                          <height>30</height>
+                        </size>
+                      </property>
+                      <property name="text" >
+                        <string>&amp;Supprimer</string>
+                      </property>
+                      <property name="shortcut" >
+                        <string>Alt+S</string>
+                      </property>
+                      <property name="autoDefault" >
+                        <bool>true</bool>
+                      </property>
+                      <property name="toolTip" stdset="0" >
+                        <string>suppression du mot clef</string>
+                      </property>
+                    </widget>
+                  </item>
+                  <item>
+                    <widget class="QPushButton" name="bOk" >
+                      <property name="minimumSize" >
+                        <size>
+                          <width>0</width>
+                          <height>30</height>
+                        </size>
+                      </property>
+                      <property name="text" >
+                        <string>&amp;Valider</string>
+                      </property>
+                      <property name="shortcut" >
+                        <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+                      </property>
+                      <property name="autoDefault" >
+                        <bool>true</bool>
+                      </property>
+                      <property name="default" >
+                        <bool>true</bool>
+                      </property>
+                      <property name="toolTip" stdset="0" >
+                        <string>validation de la saisie</string>
+                      </property>
+                    </widget>
+                  </item>
+                  <item>
+                    <widget class="QPushButton" name="bHelp" >
+                      <property name="minimumSize" >
+                        <size>
+                          <width>0</width>
+                          <height>30</height>
+                        </size>
+                      </property>
+                      <property name="text" >
+                        <string>&amp;Documentation</string>
+                      </property>
+                      <property name="shortcut" >
+                        <string>Alt+D</string>
+                      </property>
+                      <property name="autoDefault" >
+                        <bool>true</bool>
+                      </property>
+                      <property name="toolTip" stdset="0" >
+                        <string>affichage documentation aster</string>
+                      </property>
+                    </widget>
+                  </item>
+                </layout>
+              </item>
+            </layout>
+          </widget>
+        </widget>
+      </item>
+    </layout>
+  </widget>
+  <layoutdefault spacing="6" margin="11" />
+  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+</ui>
diff --git a/UiQT4/desUniqueBase.py b/UiQT4/desUniqueBase.py
new file mode 100644 (file)
index 0000000..2652079
--- /dev/null
@@ -0,0 +1,122 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desUniqueBase.ui'
+#
+# Created: Thu Jul 24 10:46:31 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DUnBase(object):
+    def setupUi(self, DUnBase):
+        DUnBase.setObjectName("DUnBase")
+        DUnBase.resize(482,480)
+        DUnBase.setMinimumSize(QtCore.QSize(350,0))
+        self.gridlayout = QtGui.QGridLayout(DUnBase)
+        self.gridlayout.setObjectName("gridlayout")
+        self.tabuniqueinto = QtGui.QTabWidget(DUnBase)
+        self.tabuniqueinto.setObjectName("tabuniqueinto")
+        self.Widget8 = QtGui.QWidget()
+        self.Widget8.setGeometry(QtCore.QRect(0,0,460,435))
+        self.Widget8.setObjectName("Widget8")
+        self.gridlayout1 = QtGui.QGridLayout(self.Widget8)
+        self.gridlayout1.setObjectName("gridlayout1")
+        self.hboxlayout = QtGui.QHBoxLayout()
+        self.hboxlayout.setObjectName("hboxlayout")
+        self.textLabel2 = QtGui.QLabel(self.Widget8)
+        self.textLabel2.setWordWrap(False)
+        self.textLabel2.setObjectName("textLabel2")
+        self.hboxlayout.addWidget(self.textLabel2)
+        self.lineEditVal = QtGui.QLineEdit(self.Widget8)
+        self.lineEditVal.setMinimumSize(QtCore.QSize(290,50))
+        self.lineEditVal.setObjectName("lineEditVal")
+        self.hboxlayout.addWidget(self.lineEditVal)
+        self.gridlayout1.addLayout(self.hboxlayout,1,0,1,3)
+        spacerItem = QtGui.QSpacerItem(288,21,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
+        self.gridlayout1.addItem(spacerItem,0,0,1,2)
+        self.bParametres = QtGui.QPushButton(self.Widget8)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.bParametres.sizePolicy().hasHeightForWidth())
+        self.bParametres.setSizePolicy(sizePolicy)
+        self.bParametres.setMinimumSize(QtCore.QSize(140,30))
+        self.bParametres.setObjectName("bParametres")
+        self.gridlayout1.addWidget(self.bParametres,0,2,1,1)
+        self.bSup = QtGui.QPushButton(self.Widget8)
+        self.bSup.setMinimumSize(QtCore.QSize(0,30))
+        self.bSup.setAutoDefault(True)
+        self.bSup.setObjectName("bSup")
+        self.gridlayout1.addWidget(self.bSup,5,0,1,1)
+        self.bOk = QtGui.QPushButton(self.Widget8)
+        self.bOk.setMinimumSize(QtCore.QSize(0,30))
+        self.bOk.setAutoDefault(True)
+        self.bOk.setDefault(True)
+        self.bOk.setObjectName("bOk")
+        self.gridlayout1.addWidget(self.bOk,5,1,1,1)
+        self.bHelp = QtGui.QPushButton(self.Widget8)
+        self.bHelp.setMinimumSize(QtCore.QSize(0,30))
+        self.bHelp.setAutoDefault(True)
+        self.bHelp.setObjectName("bHelp")
+        self.gridlayout1.addWidget(self.bHelp,5,2,1,1)
+        spacerItem1 = QtGui.QSpacerItem(41,112,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        self.gridlayout1.addItem(spacerItem1,2,1,1,1)
+        spacerItem2 = QtGui.QSpacerItem(21,112,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        self.gridlayout1.addItem(spacerItem2,4,1,1,1)
+        self.Commentaire = QtGui.QLabel(self.Widget8)
+        self.Commentaire.setMinimumSize(QtCore.QSize(430,40))
+        self.Commentaire.setWordWrap(False)
+        self.Commentaire.setObjectName("Commentaire")
+        self.gridlayout1.addWidget(self.Commentaire,3,0,1,3)
+        self.BView2D = QtGui.QPushButton(self.Widget8)
+        self.BView2D.setMinimumSize(QtCore.QSize(110,40))
+        self.BView2D.setObjectName("BView2D")
+        self.gridlayout1.addWidget(self.BView2D,2,2,1,1)
+        self.BSalome = QtGui.QPushButton(self.Widget8)
+        self.BSalome.setMinimumSize(QtCore.QSize(50,40))
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap("image240.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off)
+        self.BSalome.setIcon(icon)
+        self.BSalome.setObjectName("BSalome")
+        self.gridlayout1.addWidget(self.BSalome,2,0,1,1)
+        self.tabuniqueinto.addTab(self.Widget8,"")
+        self.gridlayout.addWidget(self.tabuniqueinto,0,0,1,1)
+
+        self.retranslateUi(DUnBase)
+        QtCore.QMetaObject.connectSlotsByName(DUnBase)
+        DUnBase.setTabOrder(self.lineEditVal,self.bOk)
+        DUnBase.setTabOrder(self.bOk,self.bSup)
+        DUnBase.setTabOrder(self.bSup,self.BSalome)
+        DUnBase.setTabOrder(self.BSalome,self.bHelp)
+        DUnBase.setTabOrder(self.bHelp,self.BView2D)
+        DUnBase.setTabOrder(self.BView2D,self.bParametres)
+        DUnBase.setTabOrder(self.bParametres,self.tabuniqueinto)
+
+    def retranslateUi(self, DUnBase):
+        DUnBase.setWindowTitle(QtGui.QApplication.translate("DUnBase", "DUnIn", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel2.setText(QtGui.QApplication.translate("DUnBase", "<b><u><p align=\"center\">Valeur: </p></u></b>", None, QtGui.QApplication.UnicodeUTF8))
+        self.bParametres.setText(QtGui.QApplication.translate("DUnBase", "Parametres", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setToolTip(QtGui.QApplication.translate("DUnBase", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DUnBase", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DUnBase", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setToolTip(QtGui.QApplication.translate("DUnBase", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setText(QtGui.QApplication.translate("DUnBase", "&Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setShortcut(QtGui.QApplication.translate("DUnBase", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setToolTip(QtGui.QApplication.translate("DUnBase", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setText(QtGui.QApplication.translate("DUnBase", "&Documentation", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setShortcut(QtGui.QApplication.translate("DUnBase", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
+        self.BView2D.setText(QtGui.QApplication.translate("DUnBase", "Visualiser", None, QtGui.QApplication.UnicodeUTF8))
+        self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnBase", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DUnBase = QtGui.QWidget()
+    ui = Ui_DUnBase()
+    ui.setupUi(DUnBase)
+    DUnBase.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desUniqueBase.ui b/UiQT4/desUniqueBase.ui
new file mode 100644 (file)
index 0000000..c089a5f
--- /dev/null
@@ -0,0 +1,262 @@
+<ui version="4.0" >
+ <class>DUnBase</class>
+ <widget class="QWidget" name="DUnBase" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>482</width>
+    <height>480</height>
+   </rect>
+  </property>
+  <property name="minimumSize" >
+   <size>
+    <width>350</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle" >
+   <string>DUnIn</string>
+  </property>
+  <layout class="QGridLayout" >
+   <item row="0" column="0" >
+    <widget class="QTabWidget" name="tabuniqueinto" >
+     <widget class="QWidget" name="Widget8" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>460</width>
+        <height>435</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Saisir Valeur</string>
+      </attribute>
+      <layout class="QGridLayout" >
+       <item row="1" column="0" colspan="3" >
+        <layout class="QHBoxLayout" >
+         <item>
+          <widget class="QLabel" name="textLabel2" >
+           <property name="text" >
+            <string>&lt;b>&lt;u>&lt;p align="center">Valeur: &lt;/p>&lt;/u>&lt;/b></string>
+           </property>
+           <property name="wordWrap" >
+            <bool>false</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLineEdit" name="lineEditVal" >
+           <property name="minimumSize" >
+            <size>
+             <width>290</width>
+             <height>50</height>
+            </size>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item row="0" column="0" colspan="2" >
+        <spacer name="spacer1" >
+         <property name="orientation" >
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeType" >
+          <enum>QSizePolicy::Expanding</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>288</width>
+           <height>21</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="0" column="2" >
+        <widget class="QPushButton" name="bParametres" >
+         <property name="sizePolicy" >
+          <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="minimumSize" >
+          <size>
+           <width>140</width>
+           <height>30</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>Parametres</string>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="0" >
+        <widget class="QPushButton" name="bSup" >
+         <property name="minimumSize" >
+          <size>
+           <width>0</width>
+           <height>30</height>
+          </size>
+         </property>
+         <property name="toolTip" >
+          <string>suppression du mot clef</string>
+         </property>
+         <property name="text" >
+          <string>&amp;Supprimer</string>
+         </property>
+         <property name="shortcut" >
+          <string>Alt+S</string>
+         </property>
+         <property name="autoDefault" >
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="1" >
+        <widget class="QPushButton" name="bOk" >
+         <property name="minimumSize" >
+          <size>
+           <width>0</width>
+           <height>30</height>
+          </size>
+         </property>
+         <property name="toolTip" >
+          <string>validation de la saisie</string>
+         </property>
+         <property name="text" >
+          <string>&amp;Valider</string>
+         </property>
+         <property name="shortcut" >
+          <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+         </property>
+         <property name="autoDefault" >
+          <bool>true</bool>
+         </property>
+         <property name="default" >
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="2" >
+        <widget class="QPushButton" name="bHelp" >
+         <property name="minimumSize" >
+          <size>
+           <width>0</width>
+           <height>30</height>
+          </size>
+         </property>
+         <property name="toolTip" >
+          <string>affichage documentation aster</string>
+         </property>
+         <property name="text" >
+          <string>&amp;Documentation</string>
+         </property>
+         <property name="shortcut" >
+          <string>Alt+D</string>
+         </property>
+         <property name="autoDefault" >
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="1" >
+        <spacer name="spacer4" >
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeType" >
+          <enum>QSizePolicy::Expanding</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>41</width>
+           <height>112</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="4" column="1" >
+        <spacer name="spacer3" >
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeType" >
+          <enum>QSizePolicy::Expanding</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>21</width>
+           <height>112</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="3" column="0" colspan="3" >
+        <widget class="QLabel" name="Commentaire" >
+         <property name="minimumSize" >
+          <size>
+           <width>430</width>
+           <height>40</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string/>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="2" >
+        <widget class="QPushButton" name="BView2D" >
+         <property name="minimumSize" >
+          <size>
+           <width>110</width>
+           <height>40</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>Visualiser</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" >
+        <widget class="QPushButton" name="BSalome" >
+         <property name="minimumSize" >
+          <size>
+           <width>50</width>
+           <height>40</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string/>
+         </property>
+         <property name="icon" >
+          <iconset>
+           <normaloff>image240.gif</normaloff>image240.gif</iconset>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <tabstops>
+  <tabstop>lineEditVal</tabstop>
+  <tabstop>bOk</tabstop>
+  <tabstop>bSup</tabstop>
+  <tabstop>BSalome</tabstop>
+  <tabstop>bHelp</tabstop>
+  <tabstop>BView2D</tabstop>
+  <tabstop>bParametres</tabstop>
+  <tabstop>tabuniqueinto</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desUniqueComp.py b/UiQT4/desUniqueComp.py
new file mode 100644 (file)
index 0000000..1edb004
--- /dev/null
@@ -0,0 +1,104 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desUniqueComp.ui'
+#
+# Created: Wed Jul  9 10:31:14 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DUnComp(object):
+    def setupUi(self, DUnComp):
+        DUnComp.setObjectName("DUnComp")
+        DUnComp.resize(484,529)
+        DUnComp.setMinimumSize(QtCore.QSize(350,0))
+        self.gridlayout = QtGui.QGridLayout(DUnComp)
+        self.gridlayout.setObjectName("gridlayout")
+        self.tabuniqueinto = QtGui.QTabWidget(DUnComp)
+        self.tabuniqueinto.setObjectName("tabuniqueinto")
+        self.Widget8 = QtGui.QWidget()
+        self.Widget8.setGeometry(QtCore.QRect(0,0,462,484))
+        self.Widget8.setObjectName("Widget8")
+        self.gridLayout = QtGui.QGridLayout(self.Widget8)
+        self.gridLayout.setObjectName("gridLayout")
+        self.textLabel1 = QtGui.QLabel(self.Widget8)
+        self.textLabel1.setWordWrap(False)
+        self.textLabel1.setObjectName("textLabel1")
+        self.gridLayout.addWidget(self.textLabel1,0,0,1,2)
+        self.LEcomp = QtGui.QLineEdit(self.Widget8)
+        self.LEcomp.setMinimumSize(QtCore.QSize(390,40))
+        self.LEcomp.setObjectName("LEcomp")
+        self.gridLayout.addWidget(self.LEcomp,1,0,1,2)
+        self.groupBox = QtGui.QGroupBox(self.Widget8)
+        self.groupBox.setObjectName("groupBox")
+        self.RBRI = QtGui.QRadioButton(self.groupBox)
+        self.RBRI.setGeometry(QtCore.QRect(10,30,444,23))
+        self.RBRI.setObjectName("RBRI")
+        self.RBMP = QtGui.QRadioButton(self.groupBox)
+        self.RBMP.setGeometry(QtCore.QRect(10,50,444,23))
+        self.RBMP.setObjectName("RBMP")
+        self.gridLayout.addWidget(self.groupBox,2,0,1,2)
+        self.LEReel = QtGui.QLineEdit(self.Widget8)
+        self.LEReel.setMinimumSize(QtCore.QSize(190,40))
+        self.LEReel.setObjectName("LEReel")
+        self.gridLayout.addWidget(self.LEReel,3,0,1,1)
+        self.LEImag = QtGui.QLineEdit(self.Widget8)
+        self.LEImag.setMinimumSize(QtCore.QSize(190,40))
+        self.LEImag.setObjectName("LEImag")
+        self.gridLayout.addWidget(self.LEImag,3,1,1,1)
+        self.Commentaire = QtGui.QLabel(self.Widget8)
+        self.Commentaire.setWordWrap(False)
+        self.Commentaire.setObjectName("Commentaire")
+        self.gridLayout.addWidget(self.Commentaire,4,0,1,2)
+        self.horizontalLayout = QtGui.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.bSup = QtGui.QPushButton(self.Widget8)
+        self.bSup.setAutoDefault(True)
+        self.bSup.setObjectName("bSup")
+        self.horizontalLayout.addWidget(self.bSup)
+        self.bOk = QtGui.QPushButton(self.Widget8)
+        self.bOk.setAutoDefault(True)
+        self.bOk.setDefault(True)
+        self.bOk.setObjectName("bOk")
+        self.horizontalLayout.addWidget(self.bOk)
+        self.bHelp = QtGui.QPushButton(self.Widget8)
+        self.bHelp.setAutoDefault(True)
+        self.bHelp.setObjectName("bHelp")
+        self.horizontalLayout.addWidget(self.bHelp)
+        self.gridLayout.addLayout(self.horizontalLayout,5,0,1,2)
+        self.tabuniqueinto.addTab(self.Widget8,"")
+        self.gridlayout.addWidget(self.tabuniqueinto,0,0,1,1)
+
+        self.retranslateUi(DUnComp)
+        QtCore.QMetaObject.connectSlotsByName(DUnComp)
+
+    def retranslateUi(self, DUnComp):
+        DUnComp.setWindowTitle(QtGui.QApplication.translate("DUnComp", "DUnComp", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel1.setText(QtGui.QApplication.translate("DUnComp", "<font size=\"+2\">Complexe de la forme : a+bj</font>", None, QtGui.QApplication.UnicodeUTF8))
+        self.groupBox.setTitle(QtGui.QApplication.translate("DUnComp", "Ou", None, QtGui.QApplication.UnicodeUTF8))
+        self.RBRI.setText(QtGui.QApplication.translate("DUnComp", "RI   : Réel                                                 Imaginaire", None, QtGui.QApplication.UnicodeUTF8))
+        self.RBMP.setText(QtGui.QApplication.translate("DUnComp", "MP    : Module                                             Phase", None, QtGui.QApplication.UnicodeUTF8))
+        self.Commentaire.setText(QtGui.QApplication.translate("DUnComp", "<font size=\"+2\">Un complexe est attendu</font>", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setToolTip(QtGui.QApplication.translate("DUnComp", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DUnComp", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DUnComp", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setToolTip(QtGui.QApplication.translate("DUnComp", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setText(QtGui.QApplication.translate("DUnComp", "&Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setShortcut(QtGui.QApplication.translate("DUnComp", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setToolTip(QtGui.QApplication.translate("DUnComp", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setText(QtGui.QApplication.translate("DUnComp", "&Documentation", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setShortcut(QtGui.QApplication.translate("DUnComp", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
+        self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnComp", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DUnComp = QtGui.QWidget()
+    ui = Ui_DUnComp()
+    ui.setupUi(DUnComp)
+    DUnComp.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desUniqueComp.ui b/UiQT4/desUniqueComp.ui
new file mode 100644 (file)
index 0000000..dcf31b2
--- /dev/null
@@ -0,0 +1,188 @@
+<ui version="4.0" >
+ <class>DUnComp</class>
+ <widget class="QWidget" name="DUnComp" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>484</width>
+    <height>529</height>
+   </rect>
+  </property>
+  <property name="minimumSize" >
+   <size>
+    <width>350</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle" >
+   <string>DUnComp</string>
+  </property>
+  <layout class="QGridLayout" >
+   <item row="0" column="0" >
+    <widget class="QTabWidget" name="tabuniqueinto" >
+     <widget class="QWidget" name="Widget8" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>462</width>
+        <height>484</height>
+       </rect>
+      </property>
+      <attribute name="title" >
+       <string>Saisir Valeur</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout" >
+       <item row="0" column="0" colspan="2" >
+        <widget class="QLabel" name="textLabel1" >
+         <property name="text" >
+          <string>&lt;font size="+2">Complexe de la forme : a+bj&lt;/font></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0" colspan="2" >
+        <widget class="QLineEdit" name="LEcomp" >
+         <property name="minimumSize" >
+          <size>
+           <width>390</width>
+           <height>40</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" colspan="2" >
+        <widget class="QGroupBox" name="groupBox" >
+         <property name="title" >
+          <string>Ou</string>
+         </property>
+         <widget class="QRadioButton" name="RBRI" >
+          <property name="geometry" >
+           <rect>
+            <x>10</x>
+            <y>30</y>
+            <width>444</width>
+            <height>23</height>
+           </rect>
+          </property>
+          <property name="text" >
+           <string>RI   : Réel                                                     Imaginaire</string>
+          </property>
+         </widget>
+         <widget class="QRadioButton" name="RBMP" >
+          <property name="geometry" >
+           <rect>
+            <x>10</x>
+            <y>50</y>
+            <width>444</width>
+            <height>23</height>
+           </rect>
+          </property>
+          <property name="text" >
+           <string>MP  : Module                                                 Phase</string>
+          </property>
+         </widget>
+        </widget>
+       </item>
+       <item row="3" column="0" >
+        <widget class="QLineEdit" name="LEReel" >
+         <property name="minimumSize" >
+          <size>
+           <width>190</width>
+           <height>40</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="1" >
+        <widget class="QLineEdit" name="LEImag" >
+         <property name="minimumSize" >
+          <size>
+           <width>190</width>
+           <height>40</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="0" colspan="2" >
+        <widget class="QLabel" name="Commentaire" >
+         <property name="text" >
+          <string>&lt;font size="+2">Un complexe est attendu&lt;/font></string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="0" colspan="2" >
+        <layout class="QHBoxLayout" name="horizontalLayout" >
+         <item>
+          <widget class="QPushButton" name="bSup" >
+           <property name="toolTip" >
+            <string>suppression du mot clef</string>
+           </property>
+           <property name="text" >
+            <string>&amp;Supprimer</string>
+           </property>
+           <property name="shortcut" >
+            <string>Alt+S</string>
+           </property>
+           <property name="autoDefault" >
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="bOk" >
+           <property name="toolTip" >
+            <string>validation de la saisie</string>
+           </property>
+           <property name="text" >
+            <string>&amp;Valider</string>
+           </property>
+           <property name="shortcut" >
+            <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+           </property>
+           <property name="autoDefault" >
+            <bool>true</bool>
+           </property>
+           <property name="default" >
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="bHelp" >
+           <property name="toolTip" >
+            <string>affichage documentation aster</string>
+           </property>
+           <property name="text" >
+            <string>&amp;Documentation</string>
+           </property>
+           <property name="shortcut" >
+            <string>Alt+D</string>
+           </property>
+           <property name="autoDefault" >
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <tabstops>
+  <tabstop>LEcomp</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desUniqueInto.py b/UiQT4/desUniqueInto.py
new file mode 100644 (file)
index 0000000..5d9270f
--- /dev/null
@@ -0,0 +1,84 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desUniqueInto.ui'
+#
+# Created: Fri Jul 18 16:24:35 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DUnIn(object):
+    def setupUi(self, DUnIn):
+        DUnIn.setObjectName("DUnIn")
+        DUnIn.resize(482,480)
+        DUnIn.setMinimumSize(QtCore.QSize(350,0))
+        self.gridlayout = QtGui.QGridLayout(DUnIn)
+        self.gridlayout.setObjectName("gridlayout")
+        self.tabuniqueinto = QtGui.QTabWidget(DUnIn)
+        self.tabuniqueinto.setObjectName("tabuniqueinto")
+        self.Widget8 = QtGui.QWidget()
+        self.Widget8.setObjectName("Widget8")
+        self.gridlayout1 = QtGui.QGridLayout(self.Widget8)
+        self.gridlayout1.setObjectName("gridlayout1")
+        self.Commentaire = QtGui.QLabel(self.Widget8)
+        self.Commentaire.setMinimumSize(QtCore.QSize(420,30))
+        self.Commentaire.setWordWrap(False)
+        self.Commentaire.setObjectName("Commentaire")
+        self.gridlayout1.addWidget(self.Commentaire,2,0,1,1)
+        self.hboxlayout = QtGui.QHBoxLayout()
+        self.hboxlayout.setObjectName("hboxlayout")
+        self.bSup = QtGui.QPushButton(self.Widget8)
+        self.bSup.setMinimumSize(QtCore.QSize(0,30))
+        self.bSup.setAutoDefault(True)
+        self.bSup.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnIn", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bSup.setObjectName("bSup")
+        self.hboxlayout.addWidget(self.bSup)
+        self.bOk = QtGui.QPushButton(self.Widget8)
+        self.bOk.setMinimumSize(QtCore.QSize(0,30))
+        self.bOk.setAutoDefault(True)
+        self.bOk.setDefault(True)
+        self.bOk.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnIn", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bOk.setObjectName("bOk")
+        self.hboxlayout.addWidget(self.bOk)
+        self.bHelp = QtGui.QPushButton(self.Widget8)
+        self.bHelp.setMinimumSize(QtCore.QSize(0,30))
+        self.bHelp.setAutoDefault(True)
+        self.bHelp.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnIn", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bHelp.setObjectName("bHelp")
+        self.hboxlayout.addWidget(self.bHelp)
+        self.gridlayout1.addLayout(self.hboxlayout,3,0,1,1)
+        self.listBoxVal = QtGui.QListWidget(self.Widget8)
+        self.listBoxVal.setObjectName("listBoxVal")
+        self.gridlayout1.addWidget(self.listBoxVal,1,0,1,1)
+        self.textLabel2 = QtGui.QLabel(self.Widget8)
+        self.textLabel2.setWordWrap(False)
+        self.textLabel2.setObjectName("textLabel2")
+        self.gridlayout1.addWidget(self.textLabel2,0,0,1,1)
+        self.tabuniqueinto.addTab(self.Widget8,"")
+        self.gridlayout.addWidget(self.tabuniqueinto,0,0,1,1)
+
+        self.retranslateUi(DUnIn)
+
+    def retranslateUi(self, DUnIn):
+        DUnIn.setWindowTitle(QtGui.QApplication.translate("DUnIn", "DUnIn", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DUnIn", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DUnIn", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setText(QtGui.QApplication.translate("DUnIn", "&Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setShortcut(QtGui.QApplication.translate("DUnIn", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setText(QtGui.QApplication.translate("DUnIn", "&Documentation", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setShortcut(QtGui.QApplication.translate("DUnIn", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel2.setText(QtGui.QApplication.translate("DUnIn", "<b><u><p align=\"center\">Valeurs possibles</p></u></b>", None, QtGui.QApplication.UnicodeUTF8))
+        self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnIn", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DUnIn = QtGui.QWidget()
+    ui = Ui_DUnIn()
+    ui.setupUi(DUnIn)
+    DUnIn.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desUniqueInto.ui b/UiQT4/desUniqueInto.ui
new file mode 100644 (file)
index 0000000..7ab92b4
--- /dev/null
@@ -0,0 +1,142 @@
+<ui version="4.0" stdsetdef="1" >
+  <author></author>
+  <comment></comment>
+  <exportmacro></exportmacro>
+  <class>DUnIn</class>
+  <widget class="QWidget" name="DUnIn" >
+    <property name="geometry" >
+      <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>482</width>
+        <height>480</height>
+      </rect>
+    </property>
+    <property name="minimumSize" >
+      <size>
+        <width>350</width>
+        <height>0</height>
+      </size>
+    </property>
+    <property name="windowTitle" >
+      <string>DUnIn</string>
+    </property>
+    <layout class="QGridLayout" >
+      <item row="0" column="0" >
+        <widget class="QTabWidget" name="tabuniqueinto" >
+          <widget class="QWidget" name="Widget8" >
+            <attribute name="title" >
+              <string>Saisir Valeur</string>
+            </attribute>
+            <layout class="QGridLayout" >
+              <item row="2" column="0" >
+                <widget class="QLabel" name="Commentaire" >
+                  <property name="minimumSize" >
+                    <size>
+                      <width>420</width>
+                      <height>30</height>
+                    </size>
+                  </property>
+                  <property name="text" >
+                    <string/>
+                  </property>
+                  <property name="wordWrap" >
+                    <bool>false</bool>
+                  </property>
+                </widget>
+              </item>
+              <item row="3" column="0" >
+                <layout class="QHBoxLayout" >
+                  <item>
+                    <widget class="QPushButton" name="bSup" >
+                      <property name="minimumSize" >
+                        <size>
+                          <width>0</width>
+                          <height>30</height>
+                        </size>
+                      </property>
+                      <property name="text" >
+                        <string>&amp;Supprimer</string>
+                      </property>
+                      <property name="shortcut" >
+                        <string>Alt+S</string>
+                      </property>
+                      <property name="autoDefault" >
+                        <bool>true</bool>
+                      </property>
+                      <property name="toolTip" stdset="0" >
+                        <string>suppression du mot clef</string>
+                      </property>
+                    </widget>
+                  </item>
+                  <item>
+                    <widget class="QPushButton" name="bOk" >
+                      <property name="minimumSize" >
+                        <size>
+                          <width>0</width>
+                          <height>30</height>
+                        </size>
+                      </property>
+                      <property name="text" >
+                        <string>&amp;Valider</string>
+                      </property>
+                      <property name="shortcut" >
+                        <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+                      </property>
+                      <property name="autoDefault" >
+                        <bool>true</bool>
+                      </property>
+                      <property name="default" >
+                        <bool>true</bool>
+                      </property>
+                      <property name="toolTip" stdset="0" >
+                        <string>validation de la saisie</string>
+                      </property>
+                    </widget>
+                  </item>
+                  <item>
+                    <widget class="QPushButton" name="bHelp" >
+                      <property name="minimumSize" >
+                        <size>
+                          <width>0</width>
+                          <height>30</height>
+                        </size>
+                      </property>
+                      <property name="text" >
+                        <string>&amp;Documentation</string>
+                      </property>
+                      <property name="shortcut" >
+                        <string>Alt+D</string>
+                      </property>
+                      <property name="autoDefault" >
+                        <bool>true</bool>
+                      </property>
+                      <property name="toolTip" stdset="0" >
+                        <string>affichage documentation aster</string>
+                      </property>
+                    </widget>
+                  </item>
+                </layout>
+              </item>
+              <item row="1" column="0" >
+                <widget class="QListWidget" name="listBoxVal" />
+              </item>
+              <item row="0" column="0" >
+                <widget class="QLabel" name="textLabel2" >
+                  <property name="text" >
+                    <string>&lt;b>&lt;u>&lt;p align="center">Valeurs possibles&lt;/p>&lt;/u>&lt;/b></string>
+                  </property>
+                  <property name="wordWrap" >
+                    <bool>false</bool>
+                  </property>
+                </widget>
+              </item>
+            </layout>
+          </widget>
+        </widget>
+      </item>
+    </layout>
+  </widget>
+  <layoutdefault spacing="6" margin="11" />
+  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+</ui>
diff --git a/UiQT4/desUniqueSDCO.py b/UiQT4/desUniqueSDCO.py
new file mode 100644 (file)
index 0000000..e1381af
--- /dev/null
@@ -0,0 +1,91 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desUniqueSDCO.ui'
+#
+# Created: Wed Jul  9 10:11:22 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DUnSDCO(object):
+    def setupUi(self, DUnSDCO):
+        DUnSDCO.setObjectName("DUnSDCO")
+        DUnSDCO.resize(461,480)
+        DUnSDCO.setMinimumSize(QtCore.QSize(350,0))
+        self.gridlayout = QtGui.QGridLayout(DUnSDCO)
+        self.gridlayout.setObjectName("gridlayout")
+        self.tabuniqueinto = QtGui.QTabWidget(DUnSDCO)
+        self.tabuniqueinto.setObjectName("tabuniqueinto")
+        self.Widget8 = QtGui.QWidget()
+        self.Widget8.setObjectName("Widget8")
+        self.gridlayout1 = QtGui.QGridLayout(self.Widget8)
+        self.gridlayout1.setObjectName("gridlayout1")
+        self.bSup = QtGui.QPushButton(self.Widget8)
+        self.bSup.setMinimumSize(QtCore.QSize(0,30))
+        self.bSup.setAutoDefault(True)
+        self.bSup.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnSDCO", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bSup.setObjectName("bSup")
+        self.gridlayout1.addWidget(self.bSup,4,0,1,1)
+        self.bOk = QtGui.QPushButton(self.Widget8)
+        self.bOk.setMinimumSize(QtCore.QSize(0,30))
+        self.bOk.setAutoDefault(True)
+        self.bOk.setDefault(True)
+        self.bOk.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnSDCO", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bOk.setObjectName("bOk")
+        self.gridlayout1.addWidget(self.bOk,4,1,1,1)
+        self.bHelp = QtGui.QPushButton(self.Widget8)
+        self.bHelp.setMinimumSize(QtCore.QSize(0,30))
+        self.bHelp.setAutoDefault(True)
+        self.bHelp.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnSDCO", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bHelp.setObjectName("bHelp")
+        self.gridlayout1.addWidget(self.bHelp,4,2,1,1)
+        self.Commentaire = QtGui.QLabel(self.Widget8)
+        self.Commentaire.setMinimumSize(QtCore.QSize(311,30))
+        self.Commentaire.setWordWrap(False)
+        self.Commentaire.setObjectName("Commentaire")
+        self.gridlayout1.addWidget(self.Commentaire,3,0,1,3)
+        self.textLabel2_2 = QtGui.QLabel(self.Widget8)
+        self.textLabel2_2.setWordWrap(False)
+        self.textLabel2_2.setObjectName("textLabel2_2")
+        self.gridlayout1.addWidget(self.textLabel2_2,0,0,1,3)
+        self.LESDCO = QtGui.QLineEdit(self.Widget8)
+        self.LESDCO.setMinimumSize(QtCore.QSize(300,40))
+        self.LESDCO.setObjectName("LESDCO")
+        self.gridlayout1.addWidget(self.LESDCO,1,0,1,3)
+        self.textLabel2 = QtGui.QLabel(self.Widget8)
+        self.textLabel2.setWordWrap(False)
+        self.textLabel2.setObjectName("textLabel2")
+        self.gridlayout1.addWidget(self.textLabel2,2,0,1,3)
+        self.tabuniqueinto.addTab(self.Widget8,"")
+        self.gridlayout.addWidget(self.tabuniqueinto,0,0,1,1)
+
+        self.retranslateUi(DUnSDCO)
+        DUnSDCO.setTabOrder(self.LESDCO,self.tabuniqueinto)
+        DUnSDCO.setTabOrder(self.tabuniqueinto,self.bSup)
+        DUnSDCO.setTabOrder(self.bSup,self.bOk)
+        DUnSDCO.setTabOrder(self.bOk,self.bHelp)
+
+    def retranslateUi(self, DUnSDCO):
+        DUnSDCO.setWindowTitle(QtGui.QApplication.translate("DUnSDCO", "DUnIn", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DUnSDCO", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DUnSDCO", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setText(QtGui.QApplication.translate("DUnSDCO", "&Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setShortcut(QtGui.QApplication.translate("DUnSDCO", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setText(QtGui.QApplication.translate("DUnSDCO", "&Documentation", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setShortcut(QtGui.QApplication.translate("DUnSDCO", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel2_2.setText(QtGui.QApplication.translate("DUnSDCO", "<h1><font size=\"+2\">Nom du nouveau concept : </font></h1>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel2.setText(QtGui.QApplication.translate("DUnSDCO", "<font size=\"+1\">Un objet de type CO est attendu</font>", None, QtGui.QApplication.UnicodeUTF8))
+        self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnSDCO", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DUnSDCO = QtGui.QWidget()
+    ui = Ui_DUnSDCO()
+    ui.setupUi(DUnSDCO)
+    DUnSDCO.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desUniqueSDCO.ui b/UiQT4/desUniqueSDCO.ui
new file mode 100644 (file)
index 0000000..46a472c
--- /dev/null
@@ -0,0 +1,162 @@
+<ui version="4.0" stdsetdef="1" >
+  <author></author>
+  <comment></comment>
+  <exportmacro></exportmacro>
+  <class>DUnSDCO</class>
+  <widget class="QWidget" name="DUnSDCO" >
+    <property name="geometry" >
+      <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>461</width>
+        <height>480</height>
+      </rect>
+    </property>
+    <property name="minimumSize" >
+      <size>
+        <width>350</width>
+        <height>0</height>
+      </size>
+    </property>
+    <property name="windowTitle" >
+      <string>DUnIn</string>
+    </property>
+    <layout class="QGridLayout" >
+      <item row="0" column="0" >
+        <widget class="QTabWidget" name="tabuniqueinto" >
+          <widget class="QWidget" name="Widget8" >
+            <attribute name="title" >
+              <string>Saisir Valeur</string>
+            </attribute>
+            <layout class="QGridLayout" >
+              <item row="4" column="0" >
+                <widget class="QPushButton" name="bSup" >
+                  <property name="minimumSize" >
+                    <size>
+                      <width>0</width>
+                      <height>30</height>
+                    </size>
+                  </property>
+                  <property name="text" >
+                    <string>&amp;Supprimer</string>
+                  </property>
+                  <property name="shortcut" >
+                    <string>Alt+S</string>
+                  </property>
+                  <property name="autoDefault" >
+                    <bool>true</bool>
+                  </property>
+                  <property name="toolTip" stdset="0" >
+                    <string>suppression du mot clef</string>
+                  </property>
+                </widget>
+              </item>
+              <item row="4" column="1" >
+                <widget class="QPushButton" name="bOk" >
+                  <property name="minimumSize" >
+                    <size>
+                      <width>0</width>
+                      <height>30</height>
+                    </size>
+                  </property>
+                  <property name="text" >
+                    <string>&amp;Valider</string>
+                  </property>
+                  <property name="shortcut" >
+                    <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+                  </property>
+                  <property name="autoDefault" >
+                    <bool>true</bool>
+                  </property>
+                  <property name="default" >
+                    <bool>true</bool>
+                  </property>
+                  <property name="toolTip" stdset="0" >
+                    <string>validation de la saisie</string>
+                  </property>
+                </widget>
+              </item>
+              <item row="4" column="2" >
+                <widget class="QPushButton" name="bHelp" >
+                  <property name="minimumSize" >
+                    <size>
+                      <width>0</width>
+                      <height>30</height>
+                    </size>
+                  </property>
+                  <property name="text" >
+                    <string>&amp;Documentation</string>
+                  </property>
+                  <property name="shortcut" >
+                    <string>Alt+D</string>
+                  </property>
+                  <property name="autoDefault" >
+                    <bool>true</bool>
+                  </property>
+                  <property name="toolTip" stdset="0" >
+                    <string>affichage documentation aster</string>
+                  </property>
+                </widget>
+              </item>
+              <item rowspan="1" row="3" column="0" colspan="3" >
+                <widget class="QLabel" name="Commentaire" >
+                  <property name="minimumSize" >
+                    <size>
+                      <width>311</width>
+                      <height>30</height>
+                    </size>
+                  </property>
+                  <property name="text" >
+                    <string/>
+                  </property>
+                  <property name="wordWrap" >
+                    <bool>false</bool>
+                  </property>
+                </widget>
+              </item>
+              <item rowspan="1" row="0" column="0" colspan="3" >
+                <widget class="QLabel" name="textLabel2_2" >
+                  <property name="text" >
+                    <string>&lt;h1>&lt;font size="+2">Nom du nouveau concept : &lt;/font>&lt;/h1></string>
+                  </property>
+                  <property name="wordWrap" >
+                    <bool>false</bool>
+                  </property>
+                </widget>
+              </item>
+              <item rowspan="1" row="1" column="0" colspan="3" >
+                <widget class="QLineEdit" name="LESDCO" >
+                  <property name="minimumSize" >
+                    <size>
+                      <width>300</width>
+                      <height>40</height>
+                    </size>
+                  </property>
+                </widget>
+              </item>
+              <item rowspan="1" row="2" column="0" colspan="3" >
+                <widget class="QLabel" name="textLabel2" >
+                  <property name="text" >
+                    <string>&lt;font size="+1">Un objet de type CO est attendu&lt;/font></string>
+                  </property>
+                  <property name="wordWrap" >
+                    <bool>false</bool>
+                  </property>
+                </widget>
+              </item>
+            </layout>
+          </widget>
+        </widget>
+      </item>
+    </layout>
+  </widget>
+  <layoutdefault spacing="6" margin="11" />
+  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+  <tabstops>
+    <tabstop>LESDCO</tabstop>
+    <tabstop>tabuniqueinto</tabstop>
+    <tabstop>bSup</tabstop>
+    <tabstop>bOk</tabstop>
+    <tabstop>bHelp</tabstop>
+  </tabstops>
+</ui>
diff --git a/UiQT4/desUniqueSDCOInto.py b/UiQT4/desUniqueSDCOInto.py
new file mode 100644 (file)
index 0000000..718c787
--- /dev/null
@@ -0,0 +1,112 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desUniqueSDCOInto.ui'
+#
+# Created: Fri Jul 18 16:24:35 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DUnSDCOInto(object):
+    def setupUi(self, DUnSDCOInto):
+        DUnSDCOInto.setObjectName("DUnSDCOInto")
+        DUnSDCOInto.resize(482,480)
+        DUnSDCOInto.setMinimumSize(QtCore.QSize(350,0))
+        self.gridlayout = QtGui.QGridLayout(DUnSDCOInto)
+        self.gridlayout.setObjectName("gridlayout")
+        self.tabuniqueinto = QtGui.QTabWidget(DUnSDCOInto)
+        self.tabuniqueinto.setObjectName("tabuniqueinto")
+        self.Widget8 = QtGui.QWidget()
+        self.Widget8.setObjectName("Widget8")
+        self.gridlayout1 = QtGui.QGridLayout(self.Widget8)
+        self.gridlayout1.setObjectName("gridlayout1")
+        self.textLabel2 = QtGui.QLabel(self.Widget8)
+        self.textLabel2.setWordWrap(False)
+        self.textLabel2.setObjectName("textLabel2")
+        self.gridlayout1.addWidget(self.textLabel2,0,0,1,3)
+        self.LBSDCO = QtGui.QListWidget(self.Widget8)
+        self.LBSDCO.setObjectName("LBSDCO")
+        self.gridlayout1.addWidget(self.LBSDCO,1,0,1,3)
+        self.textLabel2_3 = QtGui.QLabel(self.Widget8)
+        self.textLabel2_3.setWordWrap(False)
+        self.textLabel2_3.setObjectName("textLabel2_3")
+        self.gridlayout1.addWidget(self.textLabel2_3,5,0,1,3)
+        self.Commentaire = QtGui.QLabel(self.Widget8)
+        self.Commentaire.setMinimumSize(QtCore.QSize(420,30))
+        self.Commentaire.setWordWrap(False)
+        self.Commentaire.setObjectName("Commentaire")
+        self.gridlayout1.addWidget(self.Commentaire,4,0,1,3)
+        self.gridlayout2 = QtGui.QGridLayout()
+        self.gridlayout2.setObjectName("gridlayout2")
+        self.gridlayout1.addLayout(self.gridlayout2,2,0,1,3)
+        self.hboxlayout = QtGui.QHBoxLayout()
+        self.hboxlayout.setObjectName("hboxlayout")
+        self.frame3 = QtGui.QFrame(self.Widget8)
+        self.frame3.setMinimumSize(QtCore.QSize(190,50))
+        self.frame3.setFrameShape(QtGui.QFrame.StyledPanel)
+        self.frame3.setFrameShadow(QtGui.QFrame.Raised)
+        self.frame3.setObjectName("frame3")
+        self.textLabel2_2 = QtGui.QLabel(self.frame3)
+        self.textLabel2_2.setGeometry(QtCore.QRect(20,10,150,30))
+        self.textLabel2_2.setWordWrap(False)
+        self.textLabel2_2.setObjectName("textLabel2_2")
+        self.hboxlayout.addWidget(self.frame3)
+        self.LESDCO = QtGui.QLineEdit(self.Widget8)
+        self.LESDCO.setMinimumSize(QtCore.QSize(220,40))
+        self.LESDCO.setObjectName("LESDCO")
+        self.hboxlayout.addWidget(self.LESDCO)
+        self.gridlayout1.addLayout(self.hboxlayout,3,0,1,3)
+        self.bSup = QtGui.QPushButton(self.Widget8)
+        self.bSup.setMinimumSize(QtCore.QSize(0,30))
+        self.bSup.setAutoDefault(True)
+        self.bSup.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnSDCOInto", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bSup.setObjectName("bSup")
+        self.gridlayout1.addWidget(self.bSup,6,0,1,1)
+        self.bOk = QtGui.QPushButton(self.Widget8)
+        self.bOk.setMinimumSize(QtCore.QSize(0,30))
+        self.bOk.setAutoDefault(True)
+        self.bOk.setDefault(True)
+        self.bOk.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnSDCOInto", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bOk.setObjectName("bOk")
+        self.gridlayout1.addWidget(self.bOk,6,1,1,1)
+        self.bHelp = QtGui.QPushButton(self.Widget8)
+        self.bHelp.setMinimumSize(QtCore.QSize(0,30))
+        self.bHelp.setAutoDefault(True)
+        self.bHelp.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnSDCOInto", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8)))
+        self.bHelp.setObjectName("bHelp")
+        self.gridlayout1.addWidget(self.bHelp,6,2,1,1)
+        self.tabuniqueinto.addTab(self.Widget8,"")
+        self.gridlayout.addWidget(self.tabuniqueinto,0,0,1,1)
+
+        self.retranslateUi(DUnSDCOInto)
+        DUnSDCOInto.setTabOrder(self.LESDCO,self.LBSDCO)
+        DUnSDCOInto.setTabOrder(self.LBSDCO,self.tabuniqueinto)
+        DUnSDCOInto.setTabOrder(self.tabuniqueinto,self.bSup)
+        DUnSDCOInto.setTabOrder(self.bSup,self.bOk)
+        DUnSDCOInto.setTabOrder(self.bOk,self.bHelp)
+
+    def retranslateUi(self, DUnSDCOInto):
+        DUnSDCOInto.setWindowTitle(QtGui.QApplication.translate("DUnSDCOInto", "DUnIn", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel2.setText(QtGui.QApplication.translate("DUnSDCOInto", "<font size=\"+1\"><u>Structures de données du type requis par l\'objet courant </u></font>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel2_3.setText(QtGui.QApplication.translate("DUnSDCOInto", "<font size=\"+1\">Un objet de type CO est attendu</font>", None, QtGui.QApplication.UnicodeUTF8))
+        self.textLabel2_2.setText(QtGui.QApplication.translate("DUnSDCOInto", "<font size=\"+1\"> Nom concept : </font>", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setText(QtGui.QApplication.translate("DUnSDCOInto", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bSup.setShortcut(QtGui.QApplication.translate("DUnSDCOInto", "Alt+S", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setText(QtGui.QApplication.translate("DUnSDCOInto", "&Valider", None, QtGui.QApplication.UnicodeUTF8))
+        self.bOk.setShortcut(QtGui.QApplication.translate("DUnSDCOInto", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setText(QtGui.QApplication.translate("DUnSDCOInto", "&Documentation", None, QtGui.QApplication.UnicodeUTF8))
+        self.bHelp.setShortcut(QtGui.QApplication.translate("DUnSDCOInto", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
+        self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnSDCOInto", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DUnSDCOInto = QtGui.QWidget()
+    ui = Ui_DUnSDCOInto()
+    ui.setupUi(DUnSDCOInto)
+    DUnSDCOInto.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desUniqueSDCOInto.ui b/UiQT4/desUniqueSDCOInto.ui
new file mode 100644 (file)
index 0000000..c42947b
--- /dev/null
@@ -0,0 +1,205 @@
+<ui version="4.0" stdsetdef="1" >
+  <author></author>
+  <comment></comment>
+  <exportmacro></exportmacro>
+  <class>DUnSDCOInto</class>
+  <widget class="QWidget" name="DUnSDCOInto" >
+    <property name="geometry" >
+      <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>482</width>
+        <height>480</height>
+      </rect>
+    </property>
+    <property name="minimumSize" >
+      <size>
+        <width>350</width>
+        <height>0</height>
+      </size>
+    </property>
+    <property name="windowTitle" >
+      <string>DUnIn</string>
+    </property>
+    <layout class="QGridLayout" >
+      <item row="0" column="0" >
+        <widget class="QTabWidget" name="tabuniqueinto" >
+          <widget class="QWidget" name="Widget8" >
+            <attribute name="title" >
+              <string>Saisir Valeur</string>
+            </attribute>
+            <layout class="QGridLayout" >
+              <item rowspan="1" row="0" column="0" colspan="3" >
+                <widget class="QLabel" name="textLabel2" >
+                  <property name="text" >
+                    <string>&lt;font size="+1">&lt;u>Structures de données du type requis par l'objet courant &lt;/u>&lt;/font></string>
+                  </property>
+                  <property name="wordWrap" >
+                    <bool>false</bool>
+                  </property>
+                </widget>
+              </item>
+              <item rowspan="1" row="1" column="0" colspan="3" >
+                <widget class="QListWidget" name="LBSDCO" />
+              </item>
+              <item rowspan="1" row="5" column="0" colspan="3" >
+                <widget class="QLabel" name="textLabel2_3" >
+                  <property name="text" >
+                    <string>&lt;font size="+1">Un objet de type CO est attendu&lt;/font></string>
+                  </property>
+                  <property name="wordWrap" >
+                    <bool>false</bool>
+                  </property>
+                </widget>
+              </item>
+              <item rowspan="1" row="4" column="0" colspan="3" >
+                <widget class="QLabel" name="Commentaire" >
+                  <property name="minimumSize" >
+                    <size>
+                      <width>420</width>
+                      <height>30</height>
+                    </size>
+                  </property>
+                  <property name="text" >
+                    <string/>
+                  </property>
+                  <property name="wordWrap" >
+                    <bool>false</bool>
+                  </property>
+                </widget>
+              </item>
+              <item rowspan="1" row="2" column="0" colspan="3" >
+                <layout class="QGridLayout" />
+              </item>
+              <item rowspan="1" row="3" column="0" colspan="3" >
+                <layout class="QHBoxLayout" >
+                  <item>
+                    <widget class="QFrame" name="frame3" >
+                      <property name="minimumSize" >
+                        <size>
+                          <width>190</width>
+                          <height>50</height>
+                        </size>
+                      </property>
+                      <property name="frameShape" >
+                        <enum>StyledPanel</enum>
+                      </property>
+                      <property name="frameShadow" >
+                        <enum>Raised</enum>
+                      </property>
+                      <widget class="QLabel" name="textLabel2_2" >
+                        <property name="geometry" >
+                          <rect>
+                            <x>20</x>
+                            <y>10</y>
+                            <width>150</width>
+                            <height>30</height>
+                          </rect>
+                        </property>
+                        <property name="text" >
+                          <string>&lt;font size="+1"> Nom concept : &lt;/font></string>
+                        </property>
+                        <property name="wordWrap" >
+                          <bool>false</bool>
+                        </property>
+                      </widget>
+                    </widget>
+                  </item>
+                  <item>
+                    <widget class="QLineEdit" name="LESDCO" >
+                      <property name="minimumSize" >
+                        <size>
+                          <width>220</width>
+                          <height>40</height>
+                        </size>
+                      </property>
+                    </widget>
+                  </item>
+                </layout>
+              </item>
+              <item row="6" column="0" >
+                <widget class="QPushButton" name="bSup" >
+                  <property name="minimumSize" >
+                    <size>
+                      <width>0</width>
+                      <height>30</height>
+                    </size>
+                  </property>
+                  <property name="text" >
+                    <string>&amp;Supprimer</string>
+                  </property>
+                  <property name="shortcut" >
+                    <string>Alt+S</string>
+                  </property>
+                  <property name="autoDefault" >
+                    <bool>true</bool>
+                  </property>
+                  <property name="toolTip" stdset="0" >
+                    <string>suppression du mot clef</string>
+                  </property>
+                </widget>
+              </item>
+              <item row="6" column="1" >
+                <widget class="QPushButton" name="bOk" >
+                  <property name="minimumSize" >
+                    <size>
+                      <width>0</width>
+                      <height>30</height>
+                    </size>
+                  </property>
+                  <property name="text" >
+                    <string>&amp;Valider</string>
+                  </property>
+                  <property name="shortcut" >
+                    <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+                  </property>
+                  <property name="autoDefault" >
+                    <bool>true</bool>
+                  </property>
+                  <property name="default" >
+                    <bool>true</bool>
+                  </property>
+                  <property name="toolTip" stdset="0" >
+                    <string>validation de la saisie</string>
+                  </property>
+                </widget>
+              </item>
+              <item row="6" column="2" >
+                <widget class="QPushButton" name="bHelp" >
+                  <property name="minimumSize" >
+                    <size>
+                      <width>0</width>
+                      <height>30</height>
+                    </size>
+                  </property>
+                  <property name="text" >
+                    <string>&amp;Documentation</string>
+                  </property>
+                  <property name="shortcut" >
+                    <string>Alt+D</string>
+                  </property>
+                  <property name="autoDefault" >
+                    <bool>true</bool>
+                  </property>
+                  <property name="toolTip" stdset="0" >
+                    <string>affichage documentation aster</string>
+                  </property>
+                </widget>
+              </item>
+            </layout>
+          </widget>
+        </widget>
+      </item>
+    </layout>
+  </widget>
+  <layoutdefault spacing="6" margin="11" />
+  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+  <tabstops>
+    <tabstop>LESDCO</tabstop>
+    <tabstop>LBSDCO</tabstop>
+    <tabstop>tabuniqueinto</tabstop>
+    <tabstop>bSup</tabstop>
+    <tabstop>bOk</tabstop>
+    <tabstop>bHelp</tabstop>
+  </tabstops>
+</ui>
diff --git a/UiQT4/desViewTexte.py b/UiQT4/desViewTexte.py
new file mode 100644 (file)
index 0000000..dac56f7
--- /dev/null
@@ -0,0 +1,47 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desViewTexte.ui'
+#
+# Created: Tue Sep  9 18:09:46 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_dView(object):
+    def setupUi(self, dView):
+        dView.setObjectName("dView")
+        dView.resize(400,322)
+        self.gridLayout = QtGui.QGridLayout(dView)
+        self.gridLayout.setObjectName("gridLayout")
+        self.view = QtGui.QTextBrowser(dView)
+        self.view.setObjectName("view")
+        self.gridLayout.addWidget(self.view,0,0,1,4)
+        spacerItem = QtGui.QSpacerItem(209,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
+        self.gridLayout.addItem(spacerItem,1,0,1,1)
+        self.bclose = QtGui.QPushButton(dView)
+        self.bclose.setObjectName("bclose")
+        self.gridLayout.addWidget(self.bclose,1,2,1,1)
+        self.bsave = QtGui.QPushButton(dView)
+        self.bsave.setObjectName("bsave")
+        self.gridLayout.addWidget(self.bsave,1,1,1,1)
+
+        self.retranslateUi(dView)
+        QtCore.QMetaObject.connectSlotsByName(dView)
+
+    def retranslateUi(self, dView):
+        dView.setWindowTitle(QtGui.QApplication.translate("dView", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
+        self.bclose.setText(QtGui.QApplication.translate("dView", "Fermer", None, QtGui.QApplication.UnicodeUTF8))
+        self.bsave.setText(QtGui.QApplication.translate("dView", "Sauver", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    dView = QtGui.QDialog()
+    ui = Ui_dView()
+    ui.setupUi(dView)
+    dView.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desViewTexte.ui b/UiQT4/desViewTexte.ui
new file mode 100644 (file)
index 0000000..6cfa950
--- /dev/null
@@ -0,0 +1,53 @@
+<ui version="4.0" >
+ <class>dView</class>
+ <widget class="QDialog" name="dView" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>322</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Dialog</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" >
+   <item row="0" column="0" colspan="4" >
+    <widget class="QTextBrowser" name="view" />
+   </item>
+   <item row="1" column="0" >
+    <spacer name="horizontalSpacer" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0" >
+      <size>
+       <width>209</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="1" column="2" >
+    <widget class="QPushButton" name="bclose" >
+     <property name="text" >
+      <string>Fermer</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1" >
+    <widget class="QPushButton" name="bsave" >
+     <property name="text" >
+      <string>Sauver</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+  <zorder>view</zorder>
+  <zorder>bclose</zorder>
+  <zorder>bsave</zorder>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desVisu.py b/UiQT4/desVisu.py
new file mode 100644 (file)
index 0000000..8a0e289
--- /dev/null
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'desVisu.ui'
+#
+# Created: Wed Jul  9 10:11:22 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_DVisu(object):
+    def setupUi(self, DVisu):
+        DVisu.setObjectName("DVisu")
+        DVisu.resize(501,394)
+        self.gridlayout = QtGui.QGridLayout(DVisu)
+        self.gridlayout.setObjectName("gridlayout")
+        self.TB = QtGui.QTextBrowser(DVisu)
+        self.TB.setObjectName("TB")
+        self.gridlayout.addWidget(self.TB,0,0,1,1)
+
+        self.retranslateUi(DVisu)
+
+    def retranslateUi(self, DVisu):
+        DVisu.setWindowTitle(QtGui.QApplication.translate("DVisu", "Visualisation Include Materiau", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    DVisu = QtGui.QWidget()
+    ui = Ui_DVisu()
+    ui.setupUi(DVisu)
+    DVisu.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/desVisu.ui b/UiQT4/desVisu.ui
new file mode 100644 (file)
index 0000000..536be1a
--- /dev/null
@@ -0,0 +1,26 @@
+<ui version="4.0" stdsetdef="1" >
+  <author></author>
+  <comment></comment>
+  <exportmacro></exportmacro>
+  <class>DVisu</class>
+  <widget class="QWidget" name="DVisu" >
+    <property name="geometry" >
+      <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>501</width>
+        <height>394</height>
+      </rect>
+    </property>
+    <property name="windowTitle" >
+      <string>Visualisation Include Materiau</string>
+    </property>
+    <layout class="QGridLayout" >
+      <item row="0" column="0" >
+        <widget class="QTextBrowser" name="TB" />
+      </item>
+    </layout>
+  </widget>
+  <layoutdefault spacing="6" margin="11" />
+  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+</ui>
diff --git a/UiQT4/image120.gif b/UiQT4/image120.gif
new file mode 100644 (file)
index 0000000..1834870
Binary files /dev/null and b/UiQT4/image120.gif differ
diff --git a/UiQT4/image120.png b/UiQT4/image120.png
new file mode 100644 (file)
index 0000000..264a970
Binary files /dev/null and b/UiQT4/image120.png differ
diff --git a/UiQT4/image240.gif b/UiQT4/image240.gif
new file mode 100644 (file)
index 0000000..2ed5874
Binary files /dev/null and b/UiQT4/image240.gif differ
diff --git a/UiQT4/makefile b/UiQT4/makefile
new file mode 100644 (file)
index 0000000..8327014
--- /dev/null
@@ -0,0 +1,16 @@
+PYUIC = pyuic4
+.PHONY : all
+.SUFFIXES : .ui .py
+
+
+PY_FILES = desChoixCata.py desCommande.py desCommentaire.py desError.py desFormule.py desInactif.py \
+       desInclude.py desListeParam.py  desMCFact.py desMCListAjout.py desParam.py \
+       desPlusieursBase.py desPlusieursInto.py desPoursuite.py desRacine.py desSelectVal.py \
+       desUniqueASSD.py desUniqueBase.py desUniqueComp.py desUniqueInto.py desUniqueSDCOInto.py \
+       desUniqueSDCO.py desVisu.py  aideQT.py OptionsEditeur.py OptionsPdf.py myMain.py \
+       desViewTexte.py
+
+%.py:%.ui
+       ${PYUIC} -x -o $@ $<
+
+all : $(PY_FILES)
diff --git a/UiQT4/myMain.py b/UiQT4/myMain.py
new file mode 100644 (file)
index 0000000..604403a
--- /dev/null
@@ -0,0 +1,186 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'myMain.ui'
+#
+# Created: Wed Sep 10 09:57:04 2008
+#      by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_Eficas(object):
+    def setupUi(self, Eficas):
+        Eficas.setObjectName("Eficas")
+        Eficas.resize(1406,600)
+        self.centralwidget = QtGui.QWidget(Eficas)
+        self.centralwidget.setGeometry(QtCore.QRect(0,68,1406,510))
+        self.centralwidget.setObjectName("centralwidget")
+        Eficas.setCentralWidget(self.centralwidget)
+        self.menubar = QtGui.QMenuBar(Eficas)
+        self.menubar.setGeometry(QtCore.QRect(0,0,1406,29))
+        self.menubar.setObjectName("menubar")
+        self.menuFichier = QtGui.QMenu(self.menubar)
+        self.menuFichier.setObjectName("menuFichier")
+        self.menuEdition = QtGui.QMenu(self.menubar)
+        self.menuEdition.setObjectName("menuEdition")
+        self.menuJdC = QtGui.QMenu(self.menubar)
+        self.menuJdC.setObjectName("menuJdC")
+        self.menu_Aide = QtGui.QMenu(self.menubar)
+        self.menu_Aide.setObjectName("menu_Aide")
+        self.menuOptions = QtGui.QMenu(self.menubar)
+        self.menuOptions.setObjectName("menuOptions")
+        self.menuTraduction = QtGui.QMenu(self.menubar)
+        self.menuTraduction.setObjectName("menuTraduction")
+        self.menuPatrons = QtGui.QMenu(self.menubar)
+        self.menuPatrons.setObjectName("menuPatrons")
+        Eficas.setMenuBar(self.menubar)
+        self.statusbar = QtGui.QStatusBar(Eficas)
+        self.statusbar.setGeometry(QtCore.QRect(0,578,1406,22))
+        self.statusbar.setObjectName("statusbar")
+        Eficas.setStatusBar(self.statusbar)
+        self.toolBar = QtGui.QToolBar(Eficas)
+        self.toolBar.setGeometry(QtCore.QRect(0,29,1406,39))
+        self.toolBar.setObjectName("toolBar")
+        Eficas.addToolBar(QtCore.Qt.TopToolBarArea,self.toolBar)
+        self.action_Nouveau = QtGui.QAction(Eficas)
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap("icons/New24.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off)
+        self.action_Nouveau.setIcon(icon)
+        self.action_Nouveau.setObjectName("action_Nouveau")
+        self.actionNouvel_Include = QtGui.QAction(Eficas)
+        self.actionNouvel_Include.setObjectName("actionNouvel_Include")
+        self.action_Ouvrir = QtGui.QAction(Eficas)
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap("icons/Open24.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off)
+        self.action_Ouvrir.setIcon(icon)
+        self.action_Ouvrir.setObjectName("action_Ouvrir")
+        self.actionEnregistrer = QtGui.QAction(Eficas)
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap("icons/Save24.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off)
+        self.actionEnregistrer.setIcon(icon)
+        self.actionEnregistrer.setObjectName("actionEnregistrer")
+        self.actionEnregistrer_sous = QtGui.QAction(Eficas)
+        self.actionEnregistrer_sous.setObjectName("actionEnregistrer_sous")
+        self.actionFermer = QtGui.QAction(Eficas)
+        self.actionFermer.setObjectName("actionFermer")
+        self.actionFermer_tout = QtGui.QAction(Eficas)
+        self.actionFermer_tout.setObjectName("actionFermer_tout")
+        self.actionCopier = QtGui.QAction(Eficas)
+        self.actionCopier.setObjectName("actionCopier")
+        self.actionCouper = QtGui.QAction(Eficas)
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap("icons/Cut24.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off)
+        self.actionCouper.setIcon(icon)
+        self.actionCouper.setObjectName("actionCouper")
+        self.actionColler = QtGui.QAction(Eficas)
+        self.actionColler.setObjectName("actionColler")
+        self.actionCopier1 = QtGui.QAction(Eficas)
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap("icons/Copy24.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off)
+        self.actionCopier1.setIcon(icon)
+        self.actionCopier1.setObjectName("actionCopier1")
+        self.actionColler1 = QtGui.QAction(Eficas)
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap("icons/Paste24.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off)
+        self.actionColler1.setIcon(icon)
+        self.actionColler1.setObjectName("actionColler1")
+        self.actionQuitter = QtGui.QAction(Eficas)
+        self.actionQuitter.setObjectName("actionQuitter")
+        self.actionRapport_de_Validation = QtGui.QAction(Eficas)
+        self.actionRapport_de_Validation.setObjectName("actionRapport_de_Validation")
+        self.actionFichier_Source = QtGui.QAction(Eficas)
+        self.actionFichier_Source.setObjectName("actionFichier_Source")
+        self.actionFichier_Resultat = QtGui.QAction(Eficas)
+        self.actionFichier_Resultat.setObjectName("actionFichier_Resultat")
+        self.actionParametres_Eficas = QtGui.QAction(Eficas)
+        self.actionParametres_Eficas.setObjectName("actionParametres_Eficas")
+        self.actionLecteur_Pdf = QtGui.QAction(Eficas)
+        self.actionLecteur_Pdf.setObjectName("actionLecteur_Pdf")
+        self.actionTraduitV7V8 = QtGui.QAction(Eficas)
+        self.actionTraduitV7V8.setObjectName("actionTraduitV7V8")
+        self.actionTraduitV8V9 = QtGui.QAction(Eficas)
+        self.actionTraduitV8V9.setObjectName("actionTraduitV8V9")
+        self.menuFichier.addAction(self.action_Nouveau)
+        self.menuFichier.addAction(self.actionNouvel_Include)
+        self.menuFichier.addAction(self.action_Ouvrir)
+        self.menuFichier.addSeparator()
+        self.menuFichier.addAction(self.actionEnregistrer)
+        self.menuFichier.addAction(self.actionEnregistrer_sous)
+        self.menuFichier.addAction(self.actionFermer)
+        self.menuFichier.addAction(self.actionFermer_tout)
+        self.menuFichier.addSeparator()
+        self.menuFichier.addAction(self.actionQuitter)
+        self.menuEdition.addAction(self.actionCouper)
+        self.menuEdition.addAction(self.actionCopier)
+        self.menuEdition.addAction(self.actionColler)
+        self.menuJdC.addAction(self.actionRapport_de_Validation)
+        self.menuJdC.addAction(self.actionFichier_Source)
+        self.menuJdC.addAction(self.actionFichier_Resultat)
+        self.menuOptions.addAction(self.actionParametres_Eficas)
+        self.menuOptions.addAction(self.actionLecteur_Pdf)
+        self.menuTraduction.addAction(self.actionTraduitV7V8)
+        self.menuTraduction.addAction(self.actionTraduitV8V9)
+        self.menubar.addAction(self.menuFichier.menuAction())
+        self.menubar.addAction(self.menuEdition.menuAction())
+        self.menubar.addAction(self.menuJdC.menuAction())
+        self.menubar.addAction(self.menu_Aide.menuAction())
+        self.menubar.addAction(self.menuOptions.menuAction())
+        self.menubar.addAction(self.menuTraduction.menuAction())
+        self.menubar.addAction(self.menuPatrons.menuAction())
+        self.toolBar.addAction(self.action_Nouveau)
+        self.toolBar.addAction(self.action_Ouvrir)
+        self.toolBar.addAction(self.actionEnregistrer)
+        self.toolBar.addSeparator()
+        self.toolBar.addAction(self.actionCouper)
+        self.toolBar.addAction(self.actionCopier)
+        self.toolBar.addAction(self.actionColler)
+
+        self.retranslateUi(Eficas)
+        QtCore.QMetaObject.connectSlotsByName(Eficas)
+
+    def retranslateUi(self, Eficas):
+        Eficas.setWindowTitle(QtGui.QApplication.translate("Eficas", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
+        self.menuFichier.setTitle(QtGui.QApplication.translate("Eficas", "&Fichier", None, QtGui.QApplication.UnicodeUTF8))
+        self.menuEdition.setTitle(QtGui.QApplication.translate("Eficas", "Edition", None, QtGui.QApplication.UnicodeUTF8))
+        self.menuJdC.setTitle(QtGui.QApplication.translate("Eficas", "JdC", None, QtGui.QApplication.UnicodeUTF8))
+        self.menu_Aide.setTitle(QtGui.QApplication.translate("Eficas", "&Aide", None, QtGui.QApplication.UnicodeUTF8))
+        self.menuOptions.setTitle(QtGui.QApplication.translate("Eficas", "Options", None, QtGui.QApplication.UnicodeUTF8))
+        self.menuTraduction.setTitle(QtGui.QApplication.translate("Eficas", "Traduction", None, QtGui.QApplication.UnicodeUTF8))
+        self.menuPatrons.setTitle(QtGui.QApplication.translate("Eficas", "Patrons", None, QtGui.QApplication.UnicodeUTF8))
+        self.toolBar.setWindowTitle(QtGui.QApplication.translate("Eficas", "toolBar", None, QtGui.QApplication.UnicodeUTF8))
+        self.action_Nouveau.setText(QtGui.QApplication.translate("Eficas", "&Nouveau", None, QtGui.QApplication.UnicodeUTF8))
+        self.action_Nouveau.setShortcut(QtGui.QApplication.translate("Eficas", "Ctrl+N", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionNouvel_Include.setText(QtGui.QApplication.translate("Eficas", "Nouvel Include", None, QtGui.QApplication.UnicodeUTF8))
+        self.action_Ouvrir.setText(QtGui.QApplication.translate("Eficas", "&Ouvrir", None, QtGui.QApplication.UnicodeUTF8))
+        self.action_Ouvrir.setShortcut(QtGui.QApplication.translate("Eficas", "Ctrl+O", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionEnregistrer.setText(QtGui.QApplication.translate("Eficas", "Enregistrer", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionEnregistrer.setShortcut(QtGui.QApplication.translate("Eficas", "Shift+E", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionEnregistrer_sous.setText(QtGui.QApplication.translate("Eficas", "Enregistrer sous", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionFermer.setText(QtGui.QApplication.translate("Eficas", "Fermer ", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionFermer.setShortcut(QtGui.QApplication.translate("Eficas", "Ctrl+W", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionFermer_tout.setText(QtGui.QApplication.translate("Eficas", "Fermer tout", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionCopier.setText(QtGui.QApplication.translate("Eficas", "Copier", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionCouper.setText(QtGui.QApplication.translate("Eficas", "Couper", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionColler.setText(QtGui.QApplication.translate("Eficas", "Coller", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionCopier1.setText(QtGui.QApplication.translate("Eficas", "Copier", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionColler1.setText(QtGui.QApplication.translate("Eficas", "Coller", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionQuitter.setText(QtGui.QApplication.translate("Eficas", "Quitter", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionRapport_de_Validation.setText(QtGui.QApplication.translate("Eficas", "Rapport de Validation", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionFichier_Source.setText(QtGui.QApplication.translate("Eficas", "Fichier Source", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionFichier_Resultat.setText(QtGui.QApplication.translate("Eficas", "Fichier Résultat", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionParametres_Eficas.setText(QtGui.QApplication.translate("Eficas", "Parametres Eficas", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionLecteur_Pdf.setText(QtGui.QApplication.translate("Eficas", "Lecteur Pdf", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionTraduitV7V8.setText(QtGui.QApplication.translate("Eficas", "TraduitV7V8", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionTraduitV8V9.setText(QtGui.QApplication.translate("Eficas", "TraduitV8V9", None, QtGui.QApplication.UnicodeUTF8))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    Eficas = QtGui.QMainWindow()
+    ui = Ui_Eficas()
+    ui.setupUi(Eficas)
+    Eficas.show()
+    sys.exit(app.exec_())
+
diff --git a/UiQT4/myMain.ui b/UiQT4/myMain.ui
new file mode 100644 (file)
index 0000000..0112d9c
--- /dev/null
@@ -0,0 +1,272 @@
+<ui version="4.0" >
+ <class>Eficas</class>
+ <widget class="QMainWindow" name="Eficas" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1406</width>
+    <height>600</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>MainWindow</string>
+  </property>
+  <widget class="QWidget" name="centralwidget" >
+   <property name="geometry" >
+    <rect>
+     <x>0</x>
+     <y>68</y>
+     <width>1406</width>
+     <height>510</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QMenuBar" name="menubar" >
+   <property name="geometry" >
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>1406</width>
+     <height>29</height>
+    </rect>
+   </property>
+   <widget class="QMenu" name="menuFichier" >
+    <property name="title" >
+     <string>&amp;Fichier</string>
+    </property>
+    <addaction name="action_Nouveau" />
+    <addaction name="actionNouvel_Include" />
+    <addaction name="action_Ouvrir" />
+    <addaction name="separator" />
+    <addaction name="actionEnregistrer" />
+    <addaction name="actionEnregistrer_sous" />
+    <addaction name="actionFermer" />
+    <addaction name="actionFermer_tout" />
+    <addaction name="separator" />
+    <addaction name="actionQuitter" />
+   </widget>
+   <widget class="QMenu" name="menuEdition" >
+    <property name="title" >
+     <string>Edition</string>
+    </property>
+    <addaction name="actionCouper" />
+    <addaction name="actionCopier" />
+    <addaction name="actionColler" />
+   </widget>
+   <widget class="QMenu" name="menuJdC" >
+    <property name="title" >
+     <string>JdC</string>
+    </property>
+    <addaction name="actionRapport_de_Validation" />
+    <addaction name="actionFichier_Source" />
+    <addaction name="actionFichier_Resultat" />
+   </widget>
+   <widget class="QMenu" name="menu_Aide" >
+    <property name="title" >
+     <string>&amp;Aide</string>
+    </property>
+   </widget>
+   <widget class="QMenu" name="menuOptions" >
+    <property name="title" >
+     <string>Options</string>
+    </property>
+    <addaction name="actionParametres_Eficas" />
+    <addaction name="actionLecteur_Pdf" />
+   </widget>
+   <widget class="QMenu" name="menuTraduction" >
+    <property name="title" >
+     <string>Traduction</string>
+    </property>
+    <addaction name="actionTraduitV7V8" />
+    <addaction name="actionTraduitV8V9" />
+   </widget>
+   <widget class="QMenu" name="menuPatrons" >
+    <property name="title" >
+     <string>Patrons</string>
+    </property>
+   </widget>
+   <addaction name="menuFichier" />
+   <addaction name="menuEdition" />
+   <addaction name="menuJdC" />
+   <addaction name="menu_Aide" />
+   <addaction name="menuOptions" />
+   <addaction name="menuTraduction" />
+   <addaction name="menuPatrons" />
+  </widget>
+  <widget class="QStatusBar" name="statusbar" >
+   <property name="geometry" >
+    <rect>
+     <x>0</x>
+     <y>578</y>
+     <width>1406</width>
+     <height>22</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QToolBar" name="toolBar" >
+   <property name="geometry" >
+    <rect>
+     <x>0</x>
+     <y>29</y>
+     <width>1406</width>
+     <height>39</height>
+    </rect>
+   </property>
+   <property name="windowTitle" >
+    <string>toolBar</string>
+   </property>
+   <attribute name="toolBarArea" >
+    <enum>TopToolBarArea</enum>
+   </attribute>
+   <attribute name="toolBarBreak" >
+    <bool>false</bool>
+   </attribute>
+   <addaction name="action_Nouveau" />
+   <addaction name="action_Ouvrir" />
+   <addaction name="actionEnregistrer" />
+   <addaction name="separator" />
+   <addaction name="actionCouper" />
+   <addaction name="actionCopier" />
+   <addaction name="actionColler" />
+  </widget>
+  <action name="action_Nouveau" >
+   <property name="icon" >
+    <iconset>
+     <normaloff>icons/New24.gif</normaloff>icons/New24.gif</iconset>
+   </property>
+   <property name="text" >
+    <string>&amp;Nouveau</string>
+   </property>
+   <property name="shortcut" >
+    <string>Ctrl+N</string>
+   </property>
+  </action>
+  <action name="actionNouvel_Include" >
+   <property name="text" >
+    <string>Nouvel Include</string>
+   </property>
+  </action>
+  <action name="action_Ouvrir" >
+   <property name="icon" >
+    <iconset>
+     <normaloff>icons/Open24.gif</normaloff>icons/Open24.gif</iconset>
+   </property>
+   <property name="text" >
+    <string>&amp;Ouvrir</string>
+   </property>
+   <property name="shortcut" >
+    <string>Ctrl+O</string>
+   </property>
+  </action>
+  <action name="actionEnregistrer" >
+   <property name="icon" >
+    <iconset>
+     <normaloff>icons/Save24.gif</normaloff>icons/Save24.gif</iconset>
+   </property>
+   <property name="text" >
+    <string>Enregistrer</string>
+   </property>
+   <property name="shortcut" >
+    <string>Shift+E</string>
+   </property>
+  </action>
+  <action name="actionEnregistrer_sous" >
+   <property name="text" >
+    <string>Enregistrer sous</string>
+   </property>
+  </action>
+  <action name="actionFermer" >
+   <property name="text" >
+    <string>Fermer </string>
+   </property>
+   <property name="shortcut" >
+    <string>Ctrl+W</string>
+   </property>
+  </action>
+  <action name="actionFermer_tout" >
+   <property name="text" >
+    <string>Fermer tout</string>
+   </property>
+  </action>
+  <action name="actionCopier" >
+   <property name="text" >
+    <string>Copier</string>
+   </property>
+  </action>
+  <action name="actionCouper" >
+   <property name="icon" >
+    <iconset>
+     <normaloff>icons/Cut24.gif</normaloff>icons/Cut24.gif</iconset>
+   </property>
+   <property name="text" >
+    <string>Couper</string>
+   </property>
+  </action>
+  <action name="actionColler" >
+   <property name="text" >
+    <string>Coller</string>
+   </property>
+  </action>
+  <action name="actionCopier" >
+   <property name="icon" >
+    <iconset>
+     <normaloff>icons/Copy24.gif</normaloff>icons/Copy24.gif</iconset>
+   </property>
+   <property name="text" >
+    <string>Copier</string>
+   </property>
+  </action>
+  <action name="actionColler" >
+   <property name="icon" >
+    <iconset>
+     <normaloff>icons/Paste24.gif</normaloff>icons/Paste24.gif</iconset>
+   </property>
+   <property name="text" >
+    <string>Coller</string>
+   </property>
+  </action>
+  <action name="actionQuitter" >
+   <property name="text" >
+    <string>Quitter</string>
+   </property>
+  </action>
+  <action name="actionRapport_de_Validation" >
+   <property name="text" >
+    <string>Rapport de Validation</string>
+   </property>
+  </action>
+  <action name="actionFichier_Source" >
+   <property name="text" >
+    <string>Fichier Source</string>
+   </property>
+  </action>
+  <action name="actionFichier_Resultat" >
+   <property name="text" >
+    <string>Fichier Résultat</string>
+   </property>
+  </action>
+  <action name="actionParametres_Eficas" >
+   <property name="text" >
+    <string>Parametres Eficas</string>
+   </property>
+  </action>
+  <action name="actionLecteur_Pdf" >
+   <property name="text" >
+    <string>Lecteur Pdf</string>
+   </property>
+  </action>
+  <action name="actionTraduitV7V8" >
+   <property name="text" >
+    <string>TraduitV7V8</string>
+   </property>
+  </action>
+  <action name="actionTraduitV8V9" >
+   <property name="text" >
+    <string>TraduitV8V9</string>
+   </property>
+  </action>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/convert/convert_openturns.py b/convert/convert_openturns.py
new file mode 100644 (file)
index 0000000..527e6f6
--- /dev/null
@@ -0,0 +1,128 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce module contient le plugin convertisseur de fichier
+    au format python pour EFICAS.
+
+    Un plugin convertisseur doit fournir deux attributs de classe :
+    extensions et formats et deux méthodes : readfile,convert.
+
+    L'attribut de classe extensions est une liste d'extensions
+    de fichiers préconisées pour ce type de format. Cette information
+    est seulement indicative.
+
+    L'attribut de classe formats est une liste de formats de sortie
+    supportés par le convertisseur. Les formats possibles sont :
+    eval, dict ou exec.
+    Le format eval est un texte source Python qui peut etre evalué. Le
+    résultat de l'évaluation est un objet Python quelconque.
+    Le format dict est un dictionnaire Python.
+    Le format exec est un texte source Python qui peut etre executé. 
+
+    La méthode readfile a pour fonction de lire un fichier dont le
+    nom est passé en argument de la fonction.
+       - convertisseur.readfile(nom_fichier)
+
+    La méthode convert a pour fonction de convertir le fichier
+    préalablement lu dans un objet du format passé en argument.
+       - objet=convertisseur.convert(outformat)
+
+    Ce convertisseur supporte le format de sortie exec
+
+"""
+import sys,string,traceback
+
+import parseur_python
+from Noyau import N_CR
+
+def entryPoint():
+   """
+       Retourne les informations nécessaires pour le chargeur de plugins
+       Ces informations sont retournées dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 'openturns',
+        # La factory pour créer une instance du plugin
+          'factory' : PythonParser,
+          }
+
+
+class PythonParser:
+   """
+       Ce convertisseur lit un fichier au format python avec la 
+       methode readfile : convertisseur.readfile(nom_fichier)
+       et retourne le texte au format outformat avec la 
+       methode convertisseur.convert(outformat)
+
+       Ses caractéristiques principales sont exposées dans 2 attributs 
+       de classe :
+          - extensions : qui donne une liste d'extensions de fichier préconisées
+          - formats : qui donne une liste de formats de sortie supportés
+   """
+   # Les extensions de fichier préconisées
+   extensions=('.py',)
+   # Les formats de sortie supportés (eval dict ou exec)
+   # Le format exec est du python executable (commande exec) converti avec PARSEUR_PYTHON
+   # Le format execnoparseur est du python executable (commande exec) non converti
+   formats=('exec','execnoparseur')
+
+   def __init__(self,cr=None):
+      # Si l'objet compte-rendu n'est pas fourni, on utilise le 
+      # compte-rendu standard
+      self.text=''
+      if cr :
+         self.cr=cr
+      else:
+         self.cr=N_CR.CR(debut='CR convertisseur format python',
+                         fin='fin CR format python')
+
+   def readfile(self,filename):
+      self.filename=filename
+      try:
+         self.text=open(filename).read()
+      except:
+         self.cr.fatal("Impossible ouvrir fichier %s" % filename)
+         return
+
+   def convert(self,outformat,appli=None):
+      if outformat == 'exec':
+         try:
+           #txt=parseur_python.PARSEUR_PYTHON(self.text).get_texte(appli)
+           #print txt
+           #return txt
+            return parseur_python.PARSEUR_PYTHON(self.text).get_texte(appli)
+         except:
+            # Erreur lors de la conversion
+            l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],
+                                         sys.exc_info()[2])
+            self.cr.exception("Impossible de convertir le fichier python \
+                               qui doit contenir des erreurs.\n \
+                               On retourne le fichier non converti \n \
+                               Prévenir la maintenance. \n" + string.join(l))
+            # On retourne néanmoins le source initial non converti (au cas où)
+            return self.text
+      elif outformat == 'execnoparseur':
+         return self.text
+      else:
+         raise "Format de sortie : %s, non supporté"
+         return None
+
diff --git a/generator/DefautASTER.py b/generator/DefautASTER.py
new file mode 100644 (file)
index 0000000..97e2226
--- /dev/null
@@ -0,0 +1,214 @@
+"""
+Ce module contient les variables
+par defaut pour Aster
+"""
+
+from OpenturnsSTD import STDGenerateur
+from OpenturnsXML import XMLGenerateur
+
+#====================================================
+# Preparation du fichier STD
+#====================================================
+# C.1. Parties du texte en dur dans le fichier STD
+#-------------------------------------------------
+
+DecalSTD     = "  "
+DecalSTDsaut = "\n  "
+
+TexteSTDFIN ="\n\nexcept : \n"
+TexteSTDFIN += DecalSTD + "error_message = sys.exc_type\n"
+TexteSTDFIN += "\nif error_message is not None :\n"
+TexteSTDFIN += DecalSTD + "texte  = \"\\n=================================================\""
+TexteSTDFIN += DecalSTD + "texte += \"\\nMessage d'erreur : \" + str(error_message)"
+TexteSTDFIN += DecalSTD + "texte += \"\\n=================================================\\n\""
+TexteSTDFIN += DecalSTD + "print texte"
+TexteSTDFIN += DecalSTD + "\nsys.exit(error_message)\n"
+
+# C.2. Definition de composants dans le fichier STD
+#--------------------------------------------------
+
+NomFunction              = "myFunction"
+NomPhysicalStartingPoint = "myPhysicalStartingPoint"
+NomCollection            = "myCollection"
+NomCopule                = "myCopula"
+NomDistribution          = "myDistribution"
+NomRandomVector_in       = "myRandomVector_in"
+NomRandomVector_out      = "myRandomVector_out"
+NomEvent                 = "myEvent"
+NomMethod                = "myMethod"
+NomAlgo                  = "myAlgo"
+NomRoot                  = "myRoot"
+NomSampling              = "mySampling"
+NomSolverSD              = "mySolver"
+NomResu                  = "myResu"
+
+class Defaut :
+# Cette classe ajoute les parametres par defaut propres au Solver Aster
+# Elle va d abord enrichir le dictionnaire DictMCVal avec des valeurs par defaut
+# C est la methode enrichitMCVal
+# Elle va ensuite enrichir les variables
+# C est la methode enrichitListeVariables
+  
+  def __init__(self, parent) :
+       self.parent=parent
+       self.enrichitMCVal()
+       self.enrichitListeVariables()
+
+
+  def enrichitMCVal(self) :
+  #=====================
+      # InformationSolver : nom du wrapper, type de fichiers d'echange, etc
+      #----------------------------------------------------------------------
+      # Ajoute les informations sur le wrapper 
+      #        nom du wrapper, type de fichiers d'echange, etc.
+       dico = { "WrapperPath" : "Code_Aster.so",
+                 "FunctionName" : "Code_Aster",
+                 "WrapCouplingMode" : "fork",
+                 "State" : "shared",
+                 "InDataTransfer" : "files",
+                 "OutDataTransfer" : "files",
+              }
+
+       self.parent.ajouteDictMCVal(dico)
+
+      #InformationSolverFile : parametres par defaut pour les fichiers d'echange
+      #--------------------------------------------------------------------------
+
+       liste = []
+       dicoIn = { "Id" : "file_in", "Type" : "in", "Name" : "StdIn", "Path" : "commandes_aster" }
+       liste.append(dicoIn)
+       dicoOut = { "Id" : "file_out", "Type" : "out", "Name" : "StdOut", "Path" : "resultats_aster", }
+       liste.append(dicoOut)
+       dicoFile={"exchange_file" : liste} 
+       self.parent.ajouteDictMCVal(dicoFile)
+
+# D.2. InformationSolverCommande : arguments, etc
+#-------------------------------------------------------------------------
+# InformationSolverCommande est un dictionnaire indexe par le nom du solveur externe appele.
+# InformationSolverCommande[solveur] est lui-meme un dictionnaire qui contient les parametres
+# supplementaires pour la commande.
+# Des parametres sont donnes sous forme de tuple : (ok/nok, "mot-cle") ou (ok/nok, "mot-cle", valeur)
+# . On ajoute seulement si ok
+# . Avec (ok/nok, "mot-cle"), on ajoute en arguments les couples ("mot-cle", nom_du_parametre)
+# . Avec (ok/nok, "mot-cle", valeur), on ajoute en arguments les couples ("mot-cle", valeur)
+
+
+#       dico = { "file_out"    : (1, "-fic_de_aster_vers_ot"),
+#                "variable_in" : (1, "-variable") }
+#       self.parent.InformationSolverCommande["Code_Aster"] = dico          
+
+
+  def enrichitListeVariables(self) :
+       # parametres par defaut pour chaque variable
+       #--------------------------------------------
+
+       dico_in = { "Regexp" : '"^" , "Name", "(.*)= *[0-9eE.+-]+([)]?;?)$"',
+                   "Format" : '"Name", "\\1=%20.13G\\2"'
+                 }
+       dico_out = { "Regexp" : '"(.*)"' }
+       self.parent.ajouteInfoVariables(dico_in,dico_out)          
+
+class MonSTDGenerateur(STDGenerateur) :
+
+  def CreeResu (self) :
+  #------------------
+    '''
+    Le resultat :
+    . Donnees :
+      . l'algorithme choisi.
+    . Resultats :
+      . Ecriture des odres d'impression.
+    '''
+    if self.DictMCVal.has_key("Analysis"):
+       self.Analysis = str(self.DictMCVal["Analysis"])
+    else :
+       self.Analysis = None
+    self.fic_resu_OpenTURNS = "fic_resu_OpenTURNS_glop"
+    Algorithm = str (self.DictMCVal["Algorithm"])
+    texte  = "\n\n# Le resultat\n"
+    texte += DecalSTDsaut + NomResu + " = " + NomAlgo +  ".getResult()"
+    texte += DecalSTDsaut + "###" + "print " + NomResu
+    texte += DecalSTDsaut + "text_resu  = \"Resultats\\n=======\\n\""
+
+#   Particularites des algorithmes de fiabilite
+
+    if self.Analysis in ( "Reliability", ) :
+      texte += DecalSTDsaut + "aux = " + NomResu + ".getIsStandardPointOriginInFailureSpace()"
+      texte += DecalSTDsaut + "if aux :"
+      texte += DecalSTDsaut + DecalSTD + "texte_bis = \"est\""
+      texte += DecalSTDsaut + "else :"
+      texte += DecalSTDsaut + DecalSTD + "texte_bis = \"n\'est pas\""
+      texte += DecalSTDsaut + "text_resu += \"\\nLe point initial \" + texte_bis + \" dans l\'espace de defaillance.\""
+      l_aux = [ ("Probabilite de defaillance", "EventProbability") ]
+      l_aux.append ( ("Indice de confiance generalise", "GeneralisedReliabilityIndex") )
+      l_aux.append ( ("Indice de confiance de Hasofer", "HasoferReliabilityIndex") )
+      for t_aux in l_aux :
+        texte += DecalSTDsaut + "text_resu += \"\\n" + t_aux[0] + " = \" + str(" \
+                              + NomResu + ".get" + t_aux[1] + "())"
+      l_aux = []
+      l_aux.append("StandardSpaceDesignPoint")
+      l_aux.append("PhysicalSpaceDesignPoint")
+      l_aux.append("ImportanceFactors")
+      texte += DecalSTDsaut + "l_aux_var = []"
+      for DictVariable in self.ListeVariables :
+        if ( DictVariable["Type"] == "in" ) :
+          texte += DecalSTDsaut + "l_aux_var.append(\"" + DictVariable["Name"] + "\")"
+      texte += DecalSTDsaut + "l_aux = []"
+      for type_resu in l_aux :
+        texte += DecalSTDsaut + "l_aux.append(" + NomResu + ".get" + type_resu + "())"
+      texte += DecalSTDsaut + "for resu in l_aux :"       
+      texte += DecalSTDsaut + DecalSTD + "if not resu.isEmpty() :"       
+      texte += DecalSTDsaut + DecalSTD + DecalSTD + "text_resu += \"\\n\" + resu.getName() + \" :\""       
+      texte += DecalSTDsaut + DecalSTD + DecalSTD + "size = resu.getDimension()"       
+      texte += DecalSTDsaut + DecalSTD + DecalSTD + "l_aux_1 = resu.getCollection()"       
+      texte += DecalSTDsaut + DecalSTD + DecalSTD + "for iaux in range(size) :"       
+      texte += DecalSTDsaut + DecalSTD + DecalSTD + DecalSTD + "text_resu += \"\\n. \" + l_aux_var[iaux] + \" : \" + str(l_aux_1[iaux])"       
+
+#   Particularites des algorithmes de simulation
+
+    if self.Analysis in ( "Simulation", ) :
+      l_aux = [ ("Probabilite de defaillance", "ProbabilityEstimate") ]
+      l_aux.append ( ("Variance", "VarianceEstimate") )
+      l_aux.append ( ("Nombre d\'iterations", "OuterSampling") )
+      for t_aux in l_aux :
+        texte += DecalSTDsaut + "text_resu += \"\\n" + t_aux[0] + " = \" + str(" \
+                              + NomResu + ".get" + t_aux[1] + "())"
+      texte += DecalSTDsaut + "text_resu += \"\\nNombre d'evaluations de l'etat limite = \" + str(" \
+                               + NomResu + ".getOuterSampling()*" + NomResu + ".getBlockSize())"
+      if self.DictMCVal.has_key("ConfidenceIntervalProbability") :
+        aux = self.DictMCVal["ConfidenceIntervalProbability"]
+        texte += DecalSTDsaut + "proba = " + NomResu + ".getProbabilityEstimate()"
+        texte += DecalSTDsaut + "t_aux = "
+        if ( type(aux) is type(0.) ) :
+          texte += "(" + str(aux) + ")"
+          t_aux = [ str(aux) ]
+        else :
+          texte += str(aux)
+        texte += DecalSTDsaut + "for val in t_aux :"
+        texte += DecalSTDsaut + DecalSTD + "length = " + NomResu + ".getConfidenceLength(val)"
+        texte += DecalSTDsaut + DecalSTD + "vinf = str( proba - 0.5*length )"
+        texte += DecalSTDsaut + DecalSTD + "vsup = str( proba + 0.5*length )"
+        texte += DecalSTDsaut + DecalSTD + "text_resu += \"\\nIntervalle de confiance a \" + str(val) + \" = [ \" "
+        texte += "+ vinf + \" , \" + vsup + \" ]\""
+
+#   Generalites
+
+    texte += DecalSTDsaut + "d_aux = {}"
+    texte += DecalSTDsaut + "d_aux[\"E\"] = ( \"de la fonction\", " + NomFunction + ".getEvaluationCallsNumber() )"
+    texte += DecalSTDsaut + "d_aux[\"G\"] = ( \"du gradient\", " + NomFunction + ".getGradientCallsNumber() )"
+    texte += DecalSTDsaut + "d_aux[\"H\"] = ( \"du hessien\", " + NomFunction + ".getHessianCallsNumber() )"
+    texte += DecalSTDsaut + "for cle in d_aux.keys() :"
+    texte += DecalSTDsaut + DecalSTD + "if d_aux[cle][1] > 0 :"
+    texte += DecalSTDsaut + DecalSTD + DecalSTD + "text_resu += \"\\nNombre d\'appels au solveur pour le calcul \"" \
+                                + " + d_aux[cle][0] + \" = \" + str(d_aux[cle][1])"
+
+#   Impression
+
+    texte += DecalSTDsaut + "print \"\\n\", text_resu, \"\\n\""
+    texte += DecalSTDsaut + "file_resu = open(\"" + self.fic_resu_OpenTURNS + "\", \"w\")"
+    texte += DecalSTDsaut + "file_resu.write(text_resu)"
+    texte += DecalSTDsaut + "file_resu.close()"
+    texte += DecalSTDsaut + "probability = " + NomResu + ".getEventProbability()"
+
+    return texte
+
diff --git a/generator/OpenturnsBase.py b/generator/OpenturnsBase.py
new file mode 100644 (file)
index 0000000..316a34e
--- /dev/null
@@ -0,0 +1,120 @@
+#@ AJOUT OpenturnsSolver Macro
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE
+
+"""
+Ce module contient la partie commune 
+aux generateurs XML et Etude d Openturns
+"""
+
+__revision__ = "V1.0"
+
+import os
+import sys
+
+path=os.getcwd()
+pathDef=path+"DefautOpenturns"
+
+sys.path.append(pathDef)
+
+
+#=============================================
+# La classe generale
+#=============================================
+
+class Generateur :
+
+  '''
+  Classe generale du generateur
+  DictMCVal : dictionnaire des mots-cles
+  ListeVariables : chaque variable est decrite par un dictionnaire ; cette liste les regroupe
+  DictLois : dictionnaires des lois
+  '''
+  def __init__ (self, DictMCVal, ListeVariables, DictLois ) :
+  #---------------------------------------------------------#
+    self.ListeVariables = ListeVariables
+    self.ListeVariablesIn = []
+    self.DictLois = DictLois
+    self.DictMCVal = DictMCVal
+    self.DictTypeVar = {}
+    self.nbVarIn = 0
+    self.creeInfoVar()
+    #
+    # On charge eventuellement le Solver par defaut
+    # et les valeurs par defaut du Solver (dans l init)
+    #
+    try :
+    #if 1 :
+        Solver = self.DictMCVal["PhysicalSolver"]
+        import_name = "Defaut"+Solver
+       self.module = __import__( import_name, globals(), locals() )
+       monDefaut = self.module.Defaut( self )
+    #else :
+    except:
+        self.module = None
+
+
+  def getSTDGenerateur(self) :
+  #--------------------------#
+    try :
+       gener = self.module.__dict__["MonSTDGenerateur"]
+       monSTDGenerateur=gener( self.DictMCVal, self.ListeVariablesIn, self.DictLois )
+    except :
+        from OpenturnsSTD import STDGenerateur
+        monSTDGenerateur = STDGenerateur( self.DictMCVal, self.ListeVariablesIn, self.DictLois )
+    return monSTDGenerateur
+      
+  def getXMLGenerateur(self) :
+  #--------------------------#
+    try :
+       gener = self.module.__dict__["MonXMLGenerateur"]
+       monXMLGenerateur=gener( self.DictMCVal, self.ListeVariables, self.DictLois )
+    except :
+        from OpenturnsXML import XMLGenerateur
+        monXMLGenerateur = XMLGenerateur( self.DictMCVal, self.ListeVariables, self.DictLois )
+    return monXMLGenerateur
+      
+  def creeInfoVar (self) :
+  #----------------------#
+    """
+    On repere les variables in/out et on les numerote.
+    """
+    num = 0
+    liste = []
+    for DictVariable in self.ListeVariables :
+      if not DictVariable.has_key("Type") : DictVariable["Type"] = "in"
+      self.DictTypeVar[num] = DictVariable["Type"]
+      if DictVariable["Type"] == "in" : 
+         self.nbVarIn = self.nbVarIn + 1
+         self.ListeVariablesIn.append( DictVariable )
+      liste.append( DictVariable )
+      num = num + 1
+    self.ListeVariables = liste
+
+
+  def ajouteDictMCVal(self, dicoPlus) :
+  #-----------------------------------#
+  # Appele par le classe Defaut du python specifique au code (exple DefautASTER.py)
+  # enrichit self.DictMCVal avec les valeurs donnees dans dicoPlus
+  # si elles ne sont pas deja dans le dictionnaire
+
+    for clef in dicoPlus.keys():
+        if not self.DictMCVal.has_key(clef) :
+          self.DictMCVal[clef] = dicoPlus[clef]
+
+  def ajouteInfoVariables (self, dicoVariablesIn, dicoVariablesOut) :
+  #-----------------------------------------------------------------#
+  # Appele par le classe Defaut du python specifique au code (exple DefautASTER.py)
+  # met a jour les dictionnaires qui decrivent les variables (regexp par exemple)
+    liste=[]
+    num = 0
+    for dictVariable in self.ListeVariables:
+         if self.DictTypeVar[num] == "in" :
+           dico = dicoVariablesIn
+        else :
+           dico = dicoVariablesOut
+        for nouvelleVariable in dico.keys() :
+           if not dictVariable.has_key(nouvelleVariable):
+              dictVariable[nouvelleVariable] = dico[nouvelleVariable]
+        liste.append( dictVariable )
+        num = num + 1
diff --git a/generator/OpenturnsSTD.py b/generator/OpenturnsSTD.py
new file mode 100644 (file)
index 0000000..9fb4b23
--- /dev/null
@@ -0,0 +1,419 @@
+#@ AJOUT OpenturnsSolver Macro
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE
+
+"""
+Ce module contient le generateur Etude pour Openturns
+"""
+
+__revision__ = "V1.0"
+
+import os
+
+
+
+#=============================================
+#  La classe de creation du fichier STD
+#=============================================
+
+class STDGenerateur :
+
+  '''
+  Generation du fichier pyhton
+  '''
+  def __init__ (self, DictMCVal, ListeVariables, DictLois ) :
+  #---------------------------------------------------------#
+
+    self.NomAlgo = "myAlgo"
+    self.DictMCVal = DictMCVal
+    self.ListeVariables = ListeVariables
+    self.DictLois = DictLois
+
+    self.ListeOrdreMCReliability = (
+      "MaximumIterationsNumber",
+      "MaximumAbsoluteError",
+      "RelativeAbsoluteError",
+      "MaximumConstraintError",
+      "MaximumResidualError",
+      )
+    self.ListeOrdreMCDirectionalSampling = (
+      "RootStrategy",
+      "SamplingStrategy",
+      )
+    self.ListeOrdreMCParametresAlgo = (
+      "BlockSize",
+      "MaximumCoefficientOfVariation",
+      ) 
+    self.ListeOrdreImportanceSampling = (
+      "ImportanceSampling_BlockSize",
+      "ImportanceSampling_MaximumCoefficientOfVariation",
+      "ImportanceSampling_MaximumOuterSampling",
+      ) 
+
+    # Ce dictionnaire contient la liste de tous les parametres possibles pour chaque loi
+    # Les parametres qui n'apparaissent pas ne pourront pas etre substitues dans le fichier
+    # produit (etude python), et donc n'apparaitront pas.
+    self.listeParamLoi = {
+      "Beta"            : ["Mu", "Sigma", "T", "R", "A", "B" ],
+      "Exponential"     : ["Lambda", "Gamma" ],
+      "Gamma"           : ["K", "Mu", "Sigma", "Lambda", "Gamma" ],
+      #"Geometric"       : ["P", ],
+      "Gumbel"          : ["Alpha","Beta","Mu","Sigma" ],
+      #"Histogram"       : ["Sup", "Values" ],
+      "LogNormal"       : ["MuLog", "SigmaLog", "Mu", "Sigma", "SigmaOverMu", "Gamma", ],
+      "Logistic"        : [ "Alpha", "Beta" ],
+      #"MultiNomial"     : [ "N", "Values" ],
+      "Normal"          : ["Mu", "Sigma" ],
+      "Poisson"         : [ "Lambda", ],
+      "Student"         : [ "Mu", "Nu" ],
+      "Triangular"      : [ "A", "M", "B" ],
+      "TruncatedNormal" : [ "MuN", "SigmaN", "A", "B" ],
+      "Uniform"         : [ "A", "B" ],
+      #"UserDefined"     : [ "Values", ],
+      "Weibull"         : [ "Alpha", "Beta", "Mu", "Sigma", "Gamma" ],
+      }
+
+    # Ce dictionnaire contient, pour chaque loi qui possede plusieurs parametrages possibles,
+    # la correspondance entre le parametrage et son "numero" pour Open TURNS.
+    self.listeParamLoiSettings = {
+      "Beta"      : { "RT"         : "0", "MuSigma" : "1" }, \
+      "Gamma"     : { "KLambda"    : "0", "MuSigma" : "1" }, \
+      "Gumbel"    : { "AlphaBeta"  : "0", "MuSigma" : "1" }, \
+      "LogNormal" : { "MuSigmaLog" : "0", "MuSigma" : "1", "MuSigmaOverMu" : "2" }, \
+      "Weibull"   : { "AlphaBeta"  : "0", "MuSigma" : "1" }, \
+      }
+
+                
+
+  def CreeSTD (self) :
+  #------------------
+    '''
+    Pilotage de la creation du fichier python
+    '''
+    self.texte  = self.CreeEntete() 
+    self.texte += self.CreeRandomGenerator() 
+    self.texte += self.CreeFunction() 
+    self.texte += self.CreeLois()
+    self.texte += self.CreeCopula() 
+    self.texte += self.CreeDistribution() 
+    self.texte += self.CreeRandomVector()
+    self.texte += self.CreeAnalyse()
+    self.texte += self.CreeResu()
+    self.texte += self.CreeTexteFin()
+    return self.texte
+
+#                      ______________________________________
+#
+#  Methodes liees a la creation de la partie Analayse
+#  Si le mot clef Analyse existe la methode portant le meme nom va etre appele
+#  Exple : si self.DictMCVal["Analysis"]=="Reliability" on appelle la methode Reliability(self)
+#
+  def CreeAnalyse (self) :
+  #----------------------
+  # Appelee  par CreeSTD
+    texte=""
+    if self.DictMCVal.has_key("Analysis"):
+       texte += apply( STDGenerateur.__dict__[self.DictMCVal["Analysis"]], (self,) )
+    return texte
+
+  def  Reliability (self) :
+  #------------------------
+  # Appelee eventuellement par CreeAnalyse
+    texte  = self.CreeEvent()
+    texte += "\n# La methode\n\n"
+    if not self.DictMCVal.has_key("Method"):
+       print 'Attention Mot Clef "Method" non renseigne'
+       return texte
+
+    texte += "   myMethod = "+ self.DictMCVal["Method"] + "()\n"
+    texte += "   myMethod.setSpecificParameters( " + self.DictMCVal["Method"] + "SpecificParameters() )\n"
+
+    for MC in self.ListeOrdreMCReliability :
+      if self.DictMCVal.has_key(MC) and self.DictMCVal[MC] != None :
+          texte += "   myMethod.set"+ MC +"( " + str(self.DictMCVal[MC]) + " )\n\n "
+
+    texte  += "\n# L'algorithme\n\n"
+    if not self.DictMCVal.has_key("Algorithm"):
+       print 'Attention Mot Clef "Algorithm" non renseigne'
+       return texte
+    texte += "   " + self.NomAlgo + " = " + str (self.DictMCVal["Algorithm"]) 
+    texte += "( NearestPointAlgorithm(myMethod), myEvent, myPhysicalStartingPoint )\n"
+    texte += "   " + self.NomAlgo + ".run()\n "
+   
+    if self.DictMCVal.has_key("ImportanceSampling") and self.DictMCVal["ImportanceSampling"]=="yes" :
+       texte += self.ImportanceSampling() 
+    return texte
+
+  def  Simulation (self) :
+  #------------------------
+  # Appelee eventuellement par CreeAnalyse
+    texte  = self.CreeEvent()
+    texte += "\n# L'algorithme\n\n"
+    if not self.DictMCVal.has_key("Algorithm"):
+       print 'Attention Mot Clef "Algorithm" non renseigne'
+       return texte
+    texte += "   " + self.NomAlgo + " = " + str (self.DictMCVal["Algorithm"]) 
+    texte += "( myEvent )\n"
+    if self.DictMCVal["Algorithm"] == "DirectionalSampling" : 
+       texte += self.DirectionalSampling()
+    texte += self.ParametresAlgo()
+    texte += "   " + self.NomAlgo + ".run() "
+    return texte
+
+
+  def DirectionalSampling (self) :
+  #-------------------------------
+  # Appelee eventuellement par Simulation
+    texte = ""
+    for MC in self.ListeOrdreMCDirectionalSampling :
+       if self.DictMCVal.has_key(MC) and self.DictMCVal[MC] != None :
+          texte += apply(STDGenerateur.__dict__[self.DictMCVal[MC]], (self,))
+    return texte
+
+  def RootStrategy(self):
+  #----------------------
+  # Appelee eventuellement par DirectionalSampling
+    texte = "   myRoot = " + self.DictMCVal["RootStrategy"] + "()\n"
+    if self.DictMCVal.has_key("Solver") and (self.DictMCVal["Solver"] != None) :
+       texte += "   mySolver = " + self.DictMCVal["Solver"] + "() \n"
+       texte += "   myRoot.setSolver( Solver( mySolver ) ) \n"
+    texte += "   " + self.NomAlgo + ".setRootStrategy( RootStrategy( myRoot )) \n"
+    return texte
+
+  def SamplingStrategy(self):
+  #--------------------------
+  # Appelee eventuellement par DirectionalSampling
+    texte += "   mySampling = " + self.DictMCVal["SamplingStrategy"] + "()\n"
+    texte += "   mySampling.setSamplingStrategy( SamplingStrategy( mySampling ) )\n"
+    return texte
+
+
+  def QuadraticCumul (self) :
+  #--------------------------
+  # Appelee eventuellement par CreeAnalyse
+    texte  = "\n# Cumul quadratique\n\n"
+    texte += "   myQuadraticCumul  = QuadraticCumul( myRandomVector_out)\n\n"
+    texte += "   firstOrderMean    = myQuadraticCumul.getMeanFirstOrder()\n"
+    texte += "   secondOrderMean   = myQuadraticCumul.getMeanSecondOrder()\n"
+    texte += "   covariance        = myQuadraticCumul.getCovariance()\n"
+    texte += "   importanceFactors = myQuadraticCumul.getImportanceFactors()\n"
+    return texte
+
+  def CreeEvent (self) :
+  #------------------
+  # Appelee eventuellement par Simulation et Reliability
+    texte  = "\n# L'evenement\n\n"
+    if not self.DictMCVal.has_key("Threshold") or not self.DictMCVal.has_key("ComparisonOperator"):
+       print 'Attention Mot Clef "Threshold" ou "ComparisonOperator"  non renseigne'
+       return texte
+    texte += "   seuil = " +str (self.DictMCVal["Threshold"]) + "\n"
+    texte += "   myEvent = Event(myRandomVector_out," 
+    texte += "ComparisonOperator(" + str (self.DictMCVal["ComparisonOperator"]) + "()), seuil) \n"
+    return texte
+
+  def ParametresAlgo( self ):
+  #---------------------------
+  # Appelee par Simulation
+
+    texte += "   nbMaxOutSampling = "
+
+    if self.DictMCVal["MaximumOuterSamplingType"] == "UserDefined" :
+       texte += str(self.DictMCVal["MaximumOuterSampling"])
+
+    elif self.DictMCVal["MaximumOuterSamplingType"] == "Wilks" :
+       texte += "Wilks.ComputeSampleSize( " + str(self.DictMCVal["Wilks_Alpha"]) + ", " \
+                 + str(self.DictMCVal["Wilks_Beta"]) + ", " + str(self.DictMCVal["Wilks_I"]) + " )"
+       texte += '\n   print "MaximumOuterSampling = ", nbMaxOutSampling, "\n" \n'
+
+    texte += "   " + NomAlgo + ".setMaximumOuterSampling(nbMaxOutSampling)"
+    for MC in self.ListeOrdreMCParametresAlgo :
+        if self.DictMCVal.has_key(MC) and self.DictMCVal[MC] != None :
+           texte += "   myMethod.set"+ MC +"(" + str(self.DictMCVal[MC]) + ")\n\n "
+
+#                      _____________________________________
+
+  def CreeRandomGenerator (self) :
+  #-------------------------------
+  # Appelee par CreeSTD
+    texte = ""
+    if self.DictMCVal.has_key("RandomGeneratorSeed") :
+      texte += "# We set the RandomGenerator seed in order to replay the study\n"
+      texte += "   RandomGenerator().SetSeed(%d)\n" % self.DictMCVal["RandomGeneratorSeed"]
+    return texte
+
+  def CreeFunction (self) :
+  #-------------------------
+  # Appelee par CreeSTD
+    '''
+    La fonction :
+    Remarque : le nom 'solver' est en dur ici. Il doit imperativement correspondre
+                 au nom du fichier xml : 'solver.xml'
+    '''
+    texte  = "\n# La fonction\n\n"
+    texte += '   myFunction = NumericalMathFunction(\"XXXXXX\")\n'
+    texte += '   dim = myFunction.getInputNumericalPointDimension()\n'
+    return texte
+
+
+  def CreeCopula (self) :
+  #------------------
+  # Appelee par CreeSTD
+    texte  = "\n# La copule\n\n"
+    texte += "   myCopula = IndependentCopula(dim)\n"
+    return texte
+
+
+  def CreeDistribution (self) :
+  #----------------------------
+  # Appelee par CreeSTD
+    texte  = "\n# La distribution\n\n"
+    texte +=  "   myDistribution = ComposedDistribution(myCollection, Copula(myCopula))\n"
+    return texte
+
+
+  def CreeRandomVector (self) :
+  #----------------------------
+  # Appelee par CreeSTD
+    texte  = "\n# Le Random Vector\n\n"
+    texte += "   myRandomVector_in  = RandomVector(Distribution(myDistribution))\n"
+    texte += "   myRandomVector_out = RandomVector(myFunction, myRandomVector_in)\n"
+    return texte
+
+
+# _______________________________
+
+
+
+  def ImportanceSampling (self) :
+  #-----------------------------
+  # Appele eventuellement par Reliability
+
+    texte  = "    temporaryResult = " + self.NomAlgo + ".getResult()\n\n"
+    texte += "   mean  = temporaryResult.getPhysicalSpaceDesignPoint()\n"
+    texte += "   sigma = NumericalPoint( mean.getDimension(), 1.0 )\n"
+    texte += "   R     = CorrelationMatrix( mean.getDimension() )\n"
+    texte += "   myImportance = Normal( mean, sigma, R )\n\n\n"
+
+    texte += "   importanceSamplingAlgo = ImportanceSampling( myEvent, Distribution( myImportance ) )\n\n"
+
+    for MC in self.ListeOrdreImportanceSampling :
+        if self.DictMCVal.has_key("MC") :
+           debut="   importanceSamplingAlgo.set"+MC.split("_")[-1]
+           texte += debut + "( " + str(self.DictMCVal[MC]) + " )\n"
+
+    texte += "\n   importanceSamplingAlgo.run()\n\n"
+    self.NomAlgo = "importanceSamplingAlgo"
+    return texte
+
+
+  def CreeResu (self) :
+  #------------------
+    '''
+    '''
+    texte  = "\n# Le resultat\n\n"
+    texte += " myResu  = " + self.NomAlgo +  ".getResult() \n"
+    texte += " probability = myResu.getEventProbability()"
+
+    return texte
+
+
+
+  def CreeLois (self) :
+  #------------------
+    '''
+    '''
+    code_erreur = 0
+    texte  = "\n# Les lois\n\n"
+    if self.DictMCVal.has_key("Analysis") and self.DictMCVal["Analysis"] == "Reliability" :
+      texte  += "   myPhysicalStartingPoint = NumericalPoint(dim, 0.0)\n"
+    texte += "   myCollection = DistributionCollection(dim)\n\n"
+
+    numVar = 0
+    for DictVariable in self.ListeVariables :
+
+       boolLoiDef = True
+       if DictVariable.has_key("MarginalDistribution") and DictVariable.has_key("Name"):
+          ConceptLoi = DictVariable["MarginalDistribution"]
+          NomLoi = DictVariable["Name"]+"_Dist"
+       else :
+          boolLoiDef = False
+       
+       if boolLoiDef and self.DictLois.has_key(ConceptLoi):
+          loi = self.DictLois[ConceptLoi]
+       else :
+          boolLoiDef = False
+      
+       if boolLoiDef and loi.has_key("Kind") :
+          TypeLoi = loi["Kind"]
+       else :
+          boolLoiDef = False
+
+       if not boolLoiDef or TypeLoi not in self.listeParamLoi.keys() : 
+          texte += " Loi " + TypeLoi +" non programmee \n"
+         numVar += 1
+         continue
+
+       ListeParametres = []
+       TexteParametres = ""
+       for Param in self.listeParamLoi[TypeLoi]:
+          if loi.has_key(Param) :
+             texte += "   " + NomLoi + "_" + Param + " = " + str(loi[Param]) + "\n" 
+            ListeParametres.append(NomLoi + "_" + Param) 
+            TexteParametres += NomLoi + "_" + Param + ","
+
+       texte += "   " + NomLoi + " = " + TypeLoi + "( " 
+
+       if loi.has_key("Settings" ) and self.listeParamLoiSettings.has_key(TypeLoi) \
+       and self.listeParamLoiSettings[TypeLoi].has_key(loi["Settings"]):
+          NumParam = self.listeParamLoiSettings[TypeLoi][loi["Settings"]]
+          texte += TexteParametres + NumParam +" )\n"
+       else :
+          texte += TexteParametres[:-1] + " )\n"
+
+       texte += "   " + NomLoi + '.setName( "'+DictVariable["Name"] +'" )\n'
+       texte += "   myCollection["+str(numVar)+"] = Distribution( "+NomLoi+" )\n"
+
+       if self.DictMCVal["Analysis"] == "Reliability" :
+          texte += "   myPhysicalStartingPoint["+str(numVar)+"] = "
+          if DictVariable.has_key("PhysicalStartingPoint") :
+             texte += str(DictVariable["PhysicalStartingPoint"]) +"\n\n"
+          else :
+             texte += NomLoi+".computeQuantile( 0.5 )[0]\n\n"
+
+       numVar += 1
+    return texte
+
+
+#                      _____________________________________________________
+
+  def CreeEntete (self) :
+  #------------------
+    '''
+    Entete :
+    '''
+
+    texte  = "#!/usr/bin/env python\n"
+    texte += "# -*- coding: iso-8859-1 -*-\n"
+    texte += "import sys\n"
+    texte += "import os\n"
+    if self.DictLois.has_key("dir_openturns_python") :
+      texte += "sys.path.append(\"" + self.DictLois["dir_openturns_python"] + "\")\n"
+    if self.DictLois.has_key("DTDDirectory") :
+      texte += "os.environ[\"OPENTURNS_WRAPPER_PATH\"] = \".:" + self.DictLois["DTDDirectory"] + "\"\n"
+    texte += "from openturns import *\n"
+    texte += "error_message = None\n"
+    texte += "try : \n"
+    return texte
+
+  def CreeTexteFin(self) :
+  #------------------------------------
+    texte ='\n\nexcept : \n'
+    texte += '   error_message = sys.exc_type\n'
+    texte += '   if error_message is not None :\n'
+    texte += '      texte  = "================================================= \\n"\n'
+    texte += '      texte += "     Message d\'erreur : \" + str(error_message)  + "\\n"\n'
+    texte += '      texte += "=================================================\\n"\n'
+    texte += '      print texte"\n'
+    texte += "sys.exit(error_message)\n"
+    return texte
+  
diff --git a/generator/OpenturnsXML.py b/generator/OpenturnsXML.py
new file mode 100644 (file)
index 0000000..7452d1f
--- /dev/null
@@ -0,0 +1,264 @@
+#@ AJOUT OpenturnsSolver Macro
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE
+
+"""
+Ce module contient le generateur XML pour Openturns
+"""
+
+#  Les variables
+#---------------------
+
+# OrdreVariable contient l'ordre des MC pour definir une variable en XML
+# dictMCXML a pour cle le nom du MC dans la commande,
+# Il contient aussi une liste donnant les informations suivantes
+#      0 : debut de ligne
+#      1 : fin de ligne
+#      2 : code : 0 : facultatif, 1 : obligatoire 
+# Type est sur la meme ligne que Name
+
+OrdreVariable = ( 'Name', 'Type', 'Comment', 'Unit', 'Regexp', 'Format' )
+dictMCXML = { "Name"    : ( '        <variable id="',  '" ',           1 ), 
+              "Type"    : ( 'type ="'               ,  '">\n',         1 ),
+              "Comment"        : ( '          <comment>'   ,  '</comment>\n', 0 ),
+              "Unit"   : ( '          <unit>'      ,  '</unit>\n',    0 ),
+              "Regexp" : ( '          <regexp>'    ,  '</regexp>\n',  0 ),
+              "Format" : ( '          <format>'    ,  '</format>\n',  0 ),
+              }
+
+
+#  Les fonctions du wrapper
+#--------------------------------
+# OrdreLibrary contient l'ordre des MC pour definir la partie library en XML
+# dictLibXML a pour cle le nom du MC dans la commande,
+# Il contient aussi une liste donnant les informations suivantes :
+#      0 : debut de ligne
+#      1 : milieu de ligne si le MC est present
+#      2 : milieu de ligne si le MC n est pas present
+#      3 : fin de ligne
+#   4 : code :  0 : facultatif, 1 : obligatoire sans defaut
+
+OrdreLibrary = ( 'FunctionName', 'GradientName', 'HessianName' )
+dictLibXML = { "FunctionName" : ( '\n\n      <!-- The function that we try to execute through the wrapper -->',
+                                  '\n      <function provided="yes">',
+                                  '\n      <function provided="no">',
+                                    '</function>',
+                                  1,
+                                  ),
+               "GradientName" : ( '\n\n      <!-- The gradient of the function -->',
+                                  '\n      <gradient provided="yes">',
+                                  '\n      <gradient provided="no">',
+                                  '</gradient>',
+                                  0,
+                                  ),
+               "HessianName"  : ( '\n\n      <!-- The hessian of the function wrapper -->',
+                                  '\n      <hessian provided="yes">',
+                                  '\n      <hessian provided="no">' ,
+                                  '</hessian>\n\n',
+                                  0,
+                                  ),
+               }
+
+#  Les communications du wrapper
+#--------------------------------
+# OrdreWrapMode contient l'ordre des MC pour definir la partie WrapMode en XML
+# dictWrMXML a pour cle le nom du MC dans la commande,
+# Il contient aussi une liste donnant les informations suivantes
+#      0 : debut de ligne
+#      1 : fin de ligne
+#      2 : code : 0 : facultatif, 1 : obligatoire sans defaut, 2 : obligatoire avec defaut
+#      3 : valeur par defaut eventuelle
+OrdreWrapMode = ( 'WrapCouplingMode', 'State', 'InDataTransfer', 'OutDataTransfer' )
+dictWrMXML = { "WrapCouplingMode" : ( '\n    <wrap-mode type="'        , '"'     ,  1 ),
+               "State"            : ( ' state="'                       , '">\n'  ,  2,  'shared">\n' ),
+              "InDataTransfer"   : ( '      <in-data-transfer mode="' , '" />\n',  0 ),
+              "OutDataTransfer"  : ( '      <out-data-transfer mode="', '" />\n',  0 ),
+               }
+
+# Les fichiers d'echange du wrapper
+#-----------------------------------------
+# OrdreExchangeFile contient l'ordre des MC pour definir la partie OrdreExchangeFile en XML
+# dictFilXML a pour cle le nom du MC dans la commande,
+# Il contient aussi une liste donnant les informations suivantes
+#      0 : debut de ligne
+#      1 : fin de ligne
+#      2 : code : 0 : facultatif, 1 : obligatoire sans defaut
+OrdreExchangeFile = ( 'Id', 'Type', 'Name', 'Path', 'Subst' )
+dictFilXML = { "Id"    : ( '\n      <file id="', '">'       ),
+              "Type"  : ( ' type="'           , '">'       ),
+              "Name"  : ( '\n        <name>'  , '</name>'  ),
+              "Path"  : ( '\n        <path>'  , '</path>'  ),
+              "Subst" : ( '\n        <subst>' , '</subst>' ),
+               }
+
+
+#==========================
+# La classe de creation XML 
+#==========================
+
+class XMLGenerateur :
+
+  '''
+  Generation du fichier XML
+  '''
+  def __init__ (self, DictMCVal, ListeVariables, DictLois ) :
+  #---------------------------------------------------------#
+    self.ListeFiles = []
+    self.DictMCVal = DictMCVal
+    self.ListeVariables = ListeVariables
+    self.DictLois = DictLois 
+
+  def CreeXML (self) :
+  #------------------#
+    '''
+    Pilotage general de la creation du fichier XML
+    '''
+    self.texte  = self.CreeEntete()
+    self.texte += self.CreeWrapperAndPath()
+    self.texte += self.CreeVariables()
+    self.texte += self.CreeLibrary()
+    self.texte += self.CreeFile()
+    self.texte += self.CreeWrapMode()
+    self.texte += self.CreeCommande()
+    return self.texte
+
+
+  def CreeEntete (self) :
+  #---------------------#
+    '''
+    La variable DTDDirectory doit etre dans DictMCVal
+    '''
+    #PN a faire : recuperer DTDDirectory dans editeur.ini
+    texte = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"
+    if self.DictMCVal.has_key("DTDDirectory")  :
+      aux = os.path.join(self.DictMCVal["DTDDirectory"], "wrapper.dtd")
+      texte += "<!DOCTYPE wrapper SYSTEM \"" + aux + "\">\n"
+    texte += '\n<wrapper>\n'
+    texte += '\n  <library>\n\n'
+    return texte
+
+
+  def CreeWrapperAndPath (self) :
+  #-----------------------------#
+    texte  = '    <!-- The path of the shared object -->\n'
+    texte += '    <path>'
+    if self.DictMCVal.has_key("WrapperPath") :
+      texte += self.DictMCVal["WrapperPath"]
+    else :
+      print "*********************************************"
+      print "*          ERREUR GENERATION XML            *"
+      print "*       champ WrapperPath non rempli        *"
+      print "*********************************************"
+    texte += '</path>\n\n\n'
+
+    return texte
+
+
+  def CreeVariables (self) :
+  #------------------------#
+    texte  ='    <!-- This section describes all exchanges data between the wrapper and the platform -->\n'
+    texte +='    <description>\n\n'
+    texte +='      <!-- Those variables are substituted in the files above -->\n'
+    texte +='      <!-- The order of variables is the order of the arguments of the function -->\n\n'
+    texte += '      <variable-list>'
+
+    numvar = 0
+    for DictVariable in self.ListeVariables :
+      texte += "\n        <!-- The definition of variable # "+  str(numvar) + " -->\n"
+      for MC in OrdreVariable :
+        if DictVariable.has_key(MC) :
+          texte += dictMCXML[MC][0] + DictVariable[MC] + dictMCXML[MC][1]
+        else :
+          if dictMCXML[MC][2] :
+            print "**************************************************"
+            print "*            ERREUR GENERATION XML               *"
+            print "*  champ obligatoire non rempli pour variable    *"
+            print "**************************************************"
+      texte += '        </variable>\n'
+      numvar += 1
+    texte += '\n      </variable-list>\n'
+    texte += '      <!-- End of variable description -->\n'
+    return texte
+
+  def CreeLibrary (self) :
+  #----------------------#
+    '''
+    Librairies
+    '''
+    texte = ""
+    for MC in OrdreLibrary :
+      texte += dictLibXML[MC][0]
+      if self.DictMCVal.has_key(MC) :
+        texte += dictLibXML[MC][1] + self.DictMCVal[MC] + dictLibXML[MC][3]
+      else :
+        texte += dictLibXML[MC][2] + dictLibXML[MC][3]
+        if dictLibXML[MC][4] :
+          print "**************************************************"
+          print "*            ERREUR GENERATION XML               *"
+          print "*  champ obligatoire non rempli pour wrapper     *"
+          print "**************************************************"
+    texte += '    </description>\n\n'
+    texte += '  </library>\n'
+    return texte
+
+  def CreeFile (self) :
+  #-------------------#
+    '''
+    Fichiers
+    '''
+    texte  = '\n  <external-code>\n'
+    texte += '\n    <!-- Those data are external to the platform (input files, etc.)-->\n'
+    texte += '    <data>\n'
+
+    if self.DictMCVal.has_key("exchange_file") :
+       for dico in self.DictMCVal["exchange_file"] :
+          texte += "\n      <!-- The definition of file  -->"
+          for MC in OrdreExchangeFile :
+              if dico.has_key(MC) :
+                 texte += dictFilXML[MC][0] + dico[MC] + dictFilXML[MC][1]
+          texte += "\n      </file>\n"
+    texte += '\n    </data>\n'
+    return texte
+
+  def CreeWrapMode (self) :
+  #-----------------------#
+    '''
+    WrapMode
+    '''
+    texte = '\n    <!-- Transfert data mode through Wrapper -->'
+
+    for MC in OrdreWrapMode :
+      if self.DictMCVal.has_key(MC) :
+        texte += dictWrMXML[MC][0] + self.DictMCVal[MC] + dictWrMXML[MC][1]
+      else :
+        if dictWrMXML[MC][2] == 2 :
+          texte += dictWrMXML[MC][0] + dictWrMXML[MC][3]
+        elif dictWrMXML[MC][2] == 1 :
+          print "**************************************************"
+          print "*            ERREUR GENERATION XML               *"
+          print "*  champ obligatoire non rempli pour external    *"
+          print "**************************************************"
+    texte += '    </wrap-mode>\n\n'
+    return texte
+
+  def CreeCommande (self) :
+  #-----------------------#
+    '''
+    La commande
+    On lui passera en argument les options supplementaires eventuelles
+    '''
+    texte  = '    <!-- Command -->\n'
+    texte += '    <command>'
+    if self.DictMCVal.has_key("Command") :
+      texte += self.DictMCVal["Command"]
+      if self.DictMCVal.has_key("ArguCommande") :
+         for argument in self.DictMCVal[ArguCommande] :
+             texte += " " + argument
+        texte += "\n"
+    else :
+      texte += '# no command'
+    texte +='</command>\n'
+    texte +='\n  </external-code>\n'
+    texte +='\n</wrapper>\n'
+    return texte
+
diff --git a/generator/generator_openturns.py b/generator/generator_openturns.py
new file mode 100644 (file)
index 0000000..b3118c6
--- /dev/null
@@ -0,0 +1,139 @@
+# -*- 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.
+#
+#
+# ======================================================================
+"""
+    Ce module contient le plugin generateur de fichier au format 
+    openturns pour EFICAS.
+
+"""
+import traceback
+import types,string,re
+
+from generator_python import PythonGenerator
+from OpenturnsBase import Generateur 
+#from OpenturnsXML import XMLGenerateur 
+#from OpenturnsSTD import STDGenerateur 
+
+def entryPoint():
+   """
+       Retourne les informations necessaires pour le chargeur de plugins
+
+       Ces informations sont retournees dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 'openturns',
+        # La factory pour creer une instance du plugin
+          'factory' : OpenturnsGenerator,
+          }
+
+
+class OpenturnsGenerator(PythonGenerator):
+   """
+       Ce generateur parcourt un objet de type JDC et produit
+       un texte au format eficas et 
+       un texte au format xml 
+
+   """
+   # Les extensions de fichier permis?
+   extensions=('.comm',)
+
+   def initDico(self):
+       self.dictMCVal={}
+       self.listeVariables=[]
+       self.listeFichiers=[]
+       self.dictMCLois={}
+       self.dictTempo={}
+       self.TraiteMCSIMP=1
+
+   def gener(self,obj,format='brut'):
+       #print "IDM: gener dans generator_openturns.py"
+       self.initDico()
+       self.text=PythonGenerator.gener(self,obj,format)
+       self.genereXML()
+       self.genereSTD()
+       return self.text
+
+   def generMCSIMP(self,obj) :
+       """
+       Convertit un objet MCSIMP en texte python
+       Remplit le dictionnaire des MCSIMP si nous ne sommes pas ni dans une loi, ni dans une variable
+       """
+       s=PythonGenerator.generMCSIMP(self,obj)
+       if self.TraiteMCSIMP == 1 : 
+          self.dictMCVal[obj.nom]=obj.val
+       else :
+          self.dictTempo[obj.nom]=obj.valeur
+       return s
+
+   def generMCFACT(self,obj):
+       # Il n est pas possible d utiliser obj.valeur qui n est pas 
+       # a jour pour les nouvelles variables ou les modifications 
+       if obj.nom == "Variables" or "Files":
+          self.TraiteMCSIMP=0
+         self.dictTempo={}
+       s=PythonGenerator.generMCFACT(self,obj)
+       if obj.nom == "Variables" :
+         self.listeVariables.append(self.dictTempo)
+         self.dictTempo={}
+       else :
+          self.listeFichiers.append(self.dictTempo)
+       self.TraiteMCSIMP=1
+       return s
+
+   def generETAPE(self,obj):
+       if obj.nom == "DISTRIBUTION" :
+          self.TraiteMCSIMP=0
+         self.dictTempo={}
+       s=PythonGenerator.generETAPE(self,obj)
+       if obj.nom == "DISTRIBUTION" :
+          self.dictMCLois[obj.sd]=self.dictTempo
+         self.dictTempo={}
+       self.TraiteMCSIMP=1
+       return s
+
+   def genereXML(self):
+       #print "IDM: genereXML dans generator_openturns.py"
+       if self.listeFichiers != [] :
+          self.dictMCVal["exchange_file"]=self.listeFichiers
+       MonBaseGenerateur=Generateur(self.dictMCVal, self.listeVariables, self.dictMCLois)
+       MonGenerateur=MonBaseGenerateur.getXMLGenerateur()
+       #try :
+       if 1== 1 :
+          self.texteXML=MonGenerateur.CreeXML()
+       #except :
+       else :
+         self.texteXML="Il y a un pb a la Creation du XML"
+
+   def genereSTD(self):
+       MonBaseGenerateur=Generateur(self.dictMCVal, self.listeVariables, self.dictMCLois)
+       MonGenerateur=MonBaseGenerateur.getSTDGenerateur()
+       #try :
+       if 1== 1 :
+          self.texteSTD=MonGenerateur.CreeSTD()
+       #except :
+       else :
+                 self.texteSTD="Il y a un pb a la Creation du STD"
+
+   def getOpenturnsXML(self):
+       return self.texteXML
+
+   def getOpenturnsSTD(self):
+       return self.texteSTD
index e16722afdf2e7a493c95697024ae2c6cdde14cfd..5fdc6af6a88607a2d41d0d081dedcc2c2e7c5348 100644 (file)
@@ -35,7 +35,7 @@ import Extensions
 from Extensions.parametre import ITEM_PARAMETRE
 from Formatage import Formatage
 from generator_python import PythonGenerator
-from Editeur.widgets import showerror
+#from Editeur.widgets import showerror
 
 def entryPoint():
    """
@@ -119,7 +119,7 @@ class vers3DSalomeGenerator(PythonGenerator):
       """
       """
       if obj.isvalid() == 0 :
-         showerror("Element non valide","Salome ne sait pas traiter les élements non valides")
+         #showerror("Element non valide","Salome ne sait pas traiter les élements non valides")
          return
       for v in obj.mc_liste:
          liste=self.generator(v)
@@ -150,7 +150,8 @@ class vers3DSalomeGenerator(PythonGenerator):
       if self.boolGpMa == 1:
          self.list_commandes.append((self.commande,self.dict_attributs)) 
       else :
-         showerror("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element")
+         #showerror("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element")
+         pass
 
    def generMCList(self,obj):
       """
diff --git a/insercopyright.py b/insercopyright.py
deleted file mode 100644 (file)
index 49a3094..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-import glob,os
-
-copyright="""#            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.
-#
-#
-# ======================================================================
-"""
-
-listfich=glob.glob('*')
-for fich in listfich:
-   if not os.path.isfile(fich):continue
-   print "Lecture ",fich
-   f=open(fich,'r')
-   text=f.read()
-   f.close()
-   os.rename(fich,fich+'.bak')
-
-   text=copyright + text
-
-   f2=open(fich,'w')
-   f2.write(text)
-   f2.close()
-