Salome HOME
Lot 6: implementation of GUI
[modules/hydrosolver.git] / src / salome_hydro / interpolz_gui.py
1
2 import sys, os
3 sys.path.append(os.path.join(os.environ['MEDFILE_ROOT_DIR'], 'lib/python2.7/site-packages/med'))
4
5 import salome
6 salome.salome_init()
7
8 import MEDLoader
9 import HYDROPy
10
11 from PyQt4 import QtCore, QtGui, uic
12
13 import SalomePyQt
14 import libSALOME_Swig
15 salome_gui = libSALOME_Swig.SALOMEGUI_Swig()
16
17 def get_med_groups( file_path ):
18     #print "get_med_groups", file_path
19     try:
20         meshes = MEDLoader.MEDLoader_GetMeshNames(file_path)
21     except:
22         return []
23     if len(meshes)==0:
24         return []
25     mesh1 = meshes[0]
26     try:
27         groups = list(MEDLoader.MEDLoader_GetMeshGroupsNames(file_path, mesh1))
28     except:
29         return []
30     return groups
31
32 def get_hydro_regions( calc_case_name ):
33     aStudyId = salome.myStudyId
34     doc = HYDROPy.HYDROData_Document.Document( aStudyId )
35     case = doc.FindObjectByName( calc_case_name )
36     if isinstance(case, HYDROPy.HYDROData_CalculationCase):
37       regions = case.GetRegions()
38       regions_names = []
39       for r in regions:
40         rname = r.GetName()
41         regions_names.append( str(rname) )
42       return regions_names
43     else:
44       return []
45
46 def get_selected_calc_case():
47     ind = SalomePyQt.SalomePyQt.getObjectBrowser().selectionModel().selectedIndexes()
48     aStudyId = salome.myStudyId
49     doc = HYDROPy.HYDROData_Document.Document( aStudyId )
50     for i in ind:
51         if i.column()==0:
52             name = i.data().toString()
53             case = doc.FindObjectByName( name )
54             if isinstance(case, HYDROPy.HYDROData_CalculationCase):
55                 return name
56     return None
57     
58 class InterpolzDlg( QtGui.QDialog ):
59     def __init__(self, parent = None):
60         QtGui.QDialog.__init__( self, parent )
61         p = os.path.join(os.environ['HYDROSOLVER_ROOT_DIR'], 'lib', 'python2.7', 'site-packages', 'salome', 'salome', 'hydro')
62         uic.loadUi( p+'/interpolz.ui', self )
63         self.setWindowTitle( 'Generate interpolz script' )
64         self.connect( SalomePyQt.SalomePyQt.getObjectBrowser(), QtCore.SIGNAL("selectionChanged()"), self.onSelectionChanged )
65         self.connect( self.btnOutputPath, QtCore.SIGNAL( "clicked()" ), self.onOutputFile )
66         self.connect( self.btnMEDFile, QtCore.SIGNAL( "clicked()" ), self.onMEDFile )
67         self.connect( self.CalcCase, QtCore.SIGNAL( "textChanged( const QString& )" ), self.onCalcCaseChanged )
68         self.connect( self.MEDFile, QtCore.SIGNAL( "textChanged( const QString& )" ), self.onMEDChanged )
69          
70     def onSelectionChanged( self ):
71         calc_case_name = get_selected_calc_case()
72         if calc_case_name is not None:
73           self.CalcCase.setText( calc_case_name )
74           
75     def onOutputFile( self ):
76       caption = "Python file"
77       mask = "*.py"
78       f = QtGui.QFileDialog.getSaveFileName( self, caption, ".", mask )
79       if f!=None and f!="":
80         self.OutputPath.setText( f )
81       
82     def onMEDFile( self ):
83       caption = "MED file"
84       mask = "*.med"
85       f = QtGui.QFileDialog.getOpenFileName( self, caption, ".", mask )
86       if f!=None and f!="":
87         self.MEDFile.setText( f )
88         
89     def onCalcCaseChanged( self ):
90       self.regions = get_hydro_regions( str(self.CalcCase.text()) )
91       print self.regions
92         
93     def onMEDChanged( self ):
94       self.med_groups = get_med_groups( str(self.MEDFile.text()) )
95       print self.med_groups
96
97
98 dlg = InterpolzDlg()
99 dlg.show()
100 dlg.CalcCase.setText( 'Case_1' )
101 dlg.OutputPath.setText( '/dn26/HYDRO/interp1.py' )
102 dlg.MEDFile.setText( '/dn26/HYDRO/channel.med' )
103
104 #print get_med_groups( "/dn26/HYDRO/channel.med" )
105 #print get_hydro_regions( "Case_1" )