source: sasview/sansview/perspectives/fitting/fitpanel.py @ 1b07935d

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 1b07935d was 1b07935d, checked in by Gervaise Alina <gervyh@…>, 17 years ago

creating a panel for model display

  • Property mode set to 100644
File size: 5.7 KB
Line 
1import wx
2import wx.lib
3import numpy
4import string ,re
5#import models
6_BOX_WIDTH = 80
7
8
9   
10class FitPanel(wx.Panel):
11    """
12        FitPanel class contains fields allowing to fit  models and  data
13        @note: For Fit to be performed the user should check at least one parameter
14        on fit Panel window.
15       
16    """
17    ## Internal name for the AUI manager
18    window_name = "Fit panel"
19    ## Title to appear on top of the window
20    window_caption = "Fit Panel "
21   
22   
23    def __init__(self, parent, *args, **kwargs):
24        wx.Panel.__init__(self, parent, *args, **kwargs)
25        self.manager=None
26        self.parent=parent
27        self.event_owner=None
28        #self.menu_mng = models.ModelManager()
29        self.nb = wx.Notebook(self)
30        self.sizer = wx.BoxSizer(wx.VERTICAL)
31        self.sizer.Add(self.nb, 0, wx.EXPAND)
32        #Creating an initial page for simultaneous fitting
33        from simfitpage import SimultaneousFitPage
34        self.sim_page = SimultaneousFitPage(self.nb, -1)
35       
36        #self.fit_panel.add_page(self.sim_page,"Simultaneous Fit")
37        self.nb.AddPage(self.sim_page,"Simultaneous Fit")
38       
39        id = wx.NewId()
40        self.btClose =wx.Button(self,id,'Close')
41        self.btClose.Bind(wx.EVT_BUTTON, self.onClose,id=id)
42        self.btClose.SetToolTipString("Close page.")
43   
44        sizer_button = wx.BoxSizer(wx.HORIZONTAL)
45        sizer_button.Add((20, 20), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
46        sizer_button.Add(self.btClose, 0, wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 10)
47        self.sizer.Add(sizer_button,1, wx.EXPAND)
48        #dictionary of miodel {model class name, model class}
49        self.model_list_box={}
50        # save the title of the last page tab added
51        self.fit_page_name=None
52        self.draw_model_name=[]
53        self.nb.Update()
54        self.SetSizer(self.sizer)
55        self.sizer.Fit(self)
56        self.Center()
57       
58       
59    def set_manager(self, manager):
60        """
61             set panel manager
62             @param manager: instance of plugin fitting
63        """
64        self.manager = manager
65        self.sim_page.set_manager(manager)
66       
67    def set_owner(self,owner):
68        """
69            set and owner for fitpanel
70            @param owner: the class responsible of plotting
71        """
72        self.event_owner=owner
73     
74       
75    def add_fit_page( self,page_title ):
76        """
77            Add a fitting page on the notebook contained by fitpanel
78            @param panel: contains in the page to add
79            @param name: title of the page tab
80            @return panel : page just added for futher used. is used by fitting module
81        """     
82        if self.fit_page_name != page_title:
83            from fitpage import FitPage
84            panel = FitPage(self.nb, -1)
85            panel.set_manager(self.manager)
86            panel.set_owner(self.event_owner)
87            self.nb.AddPage(page=panel,text=page_title,select=True)
88            panel.populate_box( self.model_list_box)
89            self.fit_page_name = page_title
90            return panel
91    def add_model_page(self,model,page_title):
92        if not  page_title in self.draw_model_name: 
93            from modelpage import ModelPage
94            panel = ModelPage(self.nb,model, -1)
95            panel.set_manager(self.manager)
96            panel.set_owner(self.event_owner)
97            self.nb.AddPage(page=panel,text=page_title,select=True)
98            panel.populate_box( self.model_list_box)
99            self.draw_model_name.append(page_title)
100           
101 
102    def get_notebook(self):
103        """
104            @return self.nb: return its own notebook mostly used by fitting module
105        """
106        return self.nb
107   
108    def get_page(self, n):
109        """
110            @return page at position n
111            @param n: page number
112        """
113        return self.nb.GetPage(n)
114   
115   
116    def get_page_count(self):
117        """ @return  number total of pages contained in notebook"""
118        return self.nb.GetPageCount()
119       
120       
121    def get_current_page(self):
122        """
123            @return the current page selected
124        """
125        return self.nb.GetCurrentPage()
126   
127   
128    def get_selected_page(self):
129        """ @return the page just selected by the user """
130        return self.nb.GetPage(self.nb.GetSelection())
131   
132    def onClose(self,event):
133        """
134             close the current page except the simpage. remove each check box link to the model
135             selected on that page. remove its reference into page_finder (fitting module)
136        """
137        sim_page = self.nb.GetPage(0)
138        selected_page = self.nb.GetPage(self.nb.GetSelection())
139       
140        if sim_page != selected_page:
141            # remove the check box link to the model name of this page (selected_page)
142            sim_page.remove_model(selected_page)
143            #remove that page from page_finder of fitting module
144            page_finder=self.manager.get_page_finder() 
145            for page, value in page_finder.iteritems():
146                if page==selected_page:
147                    del page_finder[page]
148                    break
149            #delete the page from notebook
150            selected_page.Destroy()
151            self.nb.RemovePage(self.nb.GetSelection())
152            self.name=None
153           
154           
155    def set_model_list(self,dict):
156         """
157             copy a dictionary of model into its own dictionary
158             @param dict: dictionnary made of model name as key and model class
159             as value
160         """
161         self.model_list_box = dict
162 
Note: See TracBrowser for help on using the repository browser.