McStasParametersWidget.py 3.35 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#MDANSE : Molecular Dynamics Analysis for Neutron Scattering Experiments
#------------------------------------------------------------------------------------------
#Copyright (C)
#2015- Eric C. Pellegrini Institut Laue-Langevin
#BP 156
#6, rue Jules Horowitz
#38042 Grenoble Cedex 9
#France
#pellegrini[at]ill.fr
#goret[at]ill.fr
#aoun[at]ill.fr
#
#This library is free software; you can redistribute it and/or
#modify it under the terms of the GNU Lesser General Public
#License as published by the Free Software Foundation; either
#version 2.1 of the License, or (at your option) any later version.
#
#This library is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#Lesser General Public License for more details.
#
#You should have received a copy of the GNU Lesser General Public
#License along with this library; if not, write to the Free Software
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
''' 
Created on Mar 30, 2015
 
30
:author: Eric C. Pellegrini
31
32
33
34
35
'''
 
import wx
 
from MDANSE.Externals.pubsub import pub
36
from MDANSE.Framework.Configurable import ConfigurationError
37
38
from MDANSE.Framework.Jobs.McStasVirtualInstrument import McStasParameters

39
from MDANSE.App.GUI.ComboWidgets.ConfigurationPanel import ConfigurationPanel
40
from MDANSE.App.GUI.Framework.Widgets.IWidget import IWidget
41

42
class McStasParametersWidget(IWidget):
43
44
45
46
47
48
49
 
    type = "mcstas_parameters"
     
    _mcStasTypes = {'double' : 'float', 'int' : 'integer', 'string' : 'input_file'}
 
    def initialize(self):
        self._configurationPanel = None
eric pellegrini's avatar
eric pellegrini committed
50
  
51
52
53
54
    def add_widgets(self):
         
        self._sizer = wx.BoxSizer(wx.VERTICAL)
 
55
        pub.subscribe(self.set_layout, ("msg_set_instrument"))
56
57
58
59
60
61
62
63
64
65
         
        return self._sizer
  
    def set_layout(self, message):
 
        window, parameters = message
                             
        if not window in self.Parent.widgets.values():
            return
 
66
        for k in self._configurator.exclude:
67
68
69
70
71
72
            parameters.pop(k)
        
        self._mcstasParameters = McStasParameters()
         
        for name, value in parameters.items():
            typ, default = value
73
            self._mcstasParameters.settings[name] = (self._mcStasTypes[typ], {"default":default})
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 
        self._sizer.Clear(deleteWindows=True)
 
        self._widgetPanel.Freeze()
        self._configurationPanel = ConfigurationPanel(self._widgetPanel, self._mcstasParameters)
         
        for name, value in parameters.items():
            typ, default = value
            if typ == 'string':
                self._configurationPanel.widgets[name]._browser.SetLabel('Text/File Entry')
                 
        self._sizer.Add(self._configurationPanel, 1, wx.ALL|wx.EXPAND, 5)
 
        self._widgetPanel.Thaw()
         
        self.Parent.Layout()
         
eric pellegrini's avatar
eric pellegrini committed
91
        # Trick to show the scrollbar after updating the configuration panel.
92
        self.Parent.Parent.SendSizeEvent()
93
          
94
95
    def get_widget_value(self):
        if self._configurationPanel is None:
96
            raise ConfigurationError('McStas instrument is not yet defined')
97
98
99
         
        val = self._configurationPanel.get_value()
         
eric pellegrini's avatar
eric pellegrini committed
100
        return val