source: sasview/sansview/perspectives/fitting/models.py @ 060b857

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalccostrafo411magnetic_scattrelease-4.1.1release-4.1.2release-4.2.2release_4.0.1ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since 060b857 was 060b857, checked in by Gervaise Alina <gervyh@…>, 16 years ago

model view added

  • Property mode set to 100644
File size: 2.8 KB
Line 
1import wx
2import os
3import os.path
4
5(ModelEvent, EVT_MODEL) = wx.lib.newevent.NewEvent()
6
7
8
9class ModelManager:
10   
11    ## Dictionary of models
12    model_list = {}
13    model_list_box = {}
14    ## Event owner
15    event_owner = None
16   
17    def _getModelList(self):
18        """
19            List of models we want to make available by default
20            for this application
21           
22            @param id: first event ID to register the menu events with
23            @return: the next free event ID following the new menu events
24        """
25        self.model_list = {}
26        self.model_list_box = {}
27        from sans.models.CylinderModel import CylinderModel
28        self.model_list[str(wx.NewId())] = CylinderModel
29     
30        from sans.models.SphereModel import SphereModel
31        self.model_list[str(wx.NewId())] = SphereModel
32   
33        from sans.guitools.LineModel import LineModel
34        self.model_list[str(wx.NewId())]  = LineModel
35     
36        return 0
37
38   
39    def populate_menu(self, modelmenu, event_owner):
40        """
41            Populate a menu with our models
42           
43            @param id: first menu event ID to use when binding the menu events
44            @param modelmenu: wx.Menu object to populate
45            @param event_owner: wx object to bind the menu events to
46            @return: the next free event ID following the new menu events
47        """
48       
49        self._getModelList()
50        self.event_owner = event_owner
51
52        for id_str,value in self.model_list.iteritems():
53            item = self.model_list[id_str]
54           
55            name = item.__name__
56            if hasattr(item, "name"):
57                name = item.name
58               
59            self.model_list_box[name] =value
60           
61            modelmenu.Append(int(id_str), name, name)
62            wx.EVT_MENU(event_owner, int(id_str), self._on_model)       
63   
64        return 0
65   
66    def _on_model(self, evt):
67        """
68            React to a model menu event
69            @param event: wx menu event
70        """
71        if str(evt.GetId()) in self.model_list.keys():
72            # Notify the application manager that a new model has been set
73            #self.app_manager.set_model(self.model_list[str(evt.GetId())]())
74           
75            #TODO: post a model event to update all panels that need
76            #evt = ModelEvent(model=self.model_list[str(evt.GetId())]())
77           
78            model = self.model_list[str(evt.GetId())]()
79            evt = ModelEvent(model=model)
80            wx.PostEvent(self.event_owner, evt)
81       
82    def get_model_list(self):   
83        """ @ return dictionary of models for fitpanel use """
84        return self.model_list_box
85   
86   
87   
88 
Note: See TracBrowser for help on using the repository browser.