Ignore:
Timestamp:
Feb 28, 2011 4:04:10 PM (13 years ago)
Author:
Gervaise Alina <gervyh@…>
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
a07e72f
Parents:
1584fff
Message:

remove other type of data

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sansview/perspectives/fitting/fitpanel.py

    r90a7bbd r6bbeacd4  
    33import string  
    44import wx 
    5 import wx.aui 
     5import wx.lib.flatnotebook as fnb 
    66 
    77from sans.guiframe.panel_base import PanelBase 
    88from sans.guiframe.events import PanelOnFocusEvent 
     9from sans.guiframe.events import StatusEvent 
    910import basepage 
    10  
     11import models 
    1112_BOX_WIDTH = 80 
    1213 
    1314 
    14 class PageInfo(object): 
    15     """ 
    16     this class contains the minimum numbers of data members 
    17     a fitpage or model page need to be initialized. 
    18     """ 
    19     data = None 
    20     model =  None 
    21     manager = None 
    22     event_owner= None 
    23     model_list_box = None 
    24     name = None 
    25     ## Internal name for the AUI manager 
    26     window_name = "Page" 
    27     ## Title to appear on top of the window 
    28     window_caption = "Page" 
    29     #type of page can be real data , theory 1D or therory2D 
    30     type = "Data" 
    31     def __init__(self, model=None, data=None, manager=None, 
    32                   event_owner=None, model_list_box=None, name=None): 
    33         """ 
    34         Initialize data members 
    35         """ 
    36         self.data = data 
    37         self.model= model 
    38         self._manager= manager 
    39         self.event_owner= event_owner 
    40         self.model_list_box = model_list_box 
    41         self.name=None 
    42         self.window_name = "Page" 
    43         self.window_caption = "Page" 
    44         self.type = "Data" 
    45          
    46 class FitPanel(wx.aui.AuiNotebook, PanelBase):     
     15class FitPanel(fnb.FlatNotebook, PanelBase):     
    4716 
    4817    """ 
     
    5928    CENTER_PANE = True 
    6029     
    61     def __init__(self, parent, *args, **kwargs): 
    62         """ 
    63         """ 
    64         wx.aui.AuiNotebook.__init__(self, parent, -1, 
     30    def __init__(self, parent, manager=None, *args, **kwargs): 
     31        """ 
     32        """ 
     33        fnb.FlatNotebook.__init__(self, parent, -1, 
    6534                    style= wx.aui.AUI_NB_WINDOWLIST_BUTTON| 
    6635                    wx.aui.AUI_NB_DEFAULT_STYLE| 
    6736                    wx.CLIP_CHILDREN) 
    6837        PanelBase.__init__(self, parent) 
    69      
    70         self._manager = None 
     38        self.SetWindowStyleFlag(style=fnb.FNB_FANCY_TABS) 
     39        self._manager = manager 
    7140        self.parent = parent 
    7241        self.event_owner = None 
    73          
    74         pageClosedEvent = wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE 
    75         self.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.on_close_page) 
    76         
    7742        #dictionary of miodel {model class name, model class} 
    78         self.model_list_box = {} 
    79         ## save the title of the last page tab added 
     43        self.menu_mng = models.ModelManager() 
     44        self.model_list_box = self.menu_mng.get_model_list().get_list() 
     45        #pageClosedEvent = fnb.EVT_FLATNOTEBOOK_PAGE_CLOSING  
     46        self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CLOSING , self.on_close_page) 
     47         ## save the title of the last page tab added 
    8048        self.fit_page_name = {} 
    8149        ## list of existing fit page 
     
    9159        #add default pages 
    9260        self.add_default_pages() 
    93       
    94         # increment number for model name 
    95         self.count = 0 
    96         #updating the panel 
    97         self.Update() 
    98         self.Center() 
     61     
     62    def get_page_by_id(self, id):   
     63        """ 
     64        """ 
     65        if id not in self.opened_pages: 
     66            msg = "Fitpanel cannot find ID: %s in self.opened_pages" % str(id) 
     67            raise ValueError, msg 
     68        else: 
     69            return self.opened_pages[id] 
    9970         
    10071    def on_page_changing(self, event): 
     72        """ 
     73        """ 
    10174        pos = self.GetSelection() 
    10275        if pos != -1: 
    10376            selected_page = self.GetPage(pos) 
    10477            wx.PostEvent(self.parent, PanelOnFocusEvent(panel=selected_page)) 
     78             
    10579    def on_set_focus(self, event): 
    10680        """ 
     
    136110        from hint_fitpage import HintFitPage 
    137111        self.hint_page = HintFitPage(self)  
    138         self.AddPage(page=self.hint_page, caption="Hint") 
     112        self.AddPage(self.hint_page,"Hint") 
    139113        self.hint_page.set_manager(self._manager) 
    140         #Add the first fit page 
    141         self.add_empty_page() 
    142  
    143      
     114   
    144115    def close_all(self): 
    145116        """ 
     
    170141        page_is_opened = False 
    171142        if state is not None: 
    172             page_info = self.get_page_info(data=state.data) 
    173             for name, panel in self.opened_pages.values(): 
     143            for id, panel in self.opened_pages.values(): 
    174144                #Don't return any panel is the exact same page is created 
    175                 if name == page_info.window_name: 
     145                if id == panel.id: 
    176146                    # the page is still opened 
    177147                    panel.reset_page(state=state) 
     
    182152                # add data associated to the page created 
    183153                if panel is not None:   
    184                     self._manager.store_page(page=panel, data=state.data) 
     154                    self._manager.store_page(page=panel.id, data=state.data) 
    185155                    panel.reset_page(state=state) 
    186156                    panel.save_current_state() 
     
    241211                page.set_manager(self._manager) 
    242212 
    243          
    244     def set_owner(self,owner): 
    245         """  
    246         set and owner for fitpanel 
    247          
    248         :param owner: the class responsible of plotting 
    249          
    250         """ 
    251         self.event_owner = owner 
    252      
    253213    def set_model_list(self, dict): 
    254214         """  
     
    265225         
    266226        """ 
    267         return self.GetPage(self.GetSelection() ) 
     227        return self.GetPage(self.GetSelection()) 
    268228     
    269229    def add_sim_page(self): 
     
    274234        page_finder= self._manager.get_page_finder() 
    275235        self.sim_page = SimultaneousFitPage(self,page_finder=page_finder, id=-1) 
    276          
    277         self.AddPage(self.sim_page,caption="Simultaneous Fit",select=True) 
     236        self.sim_page.id = wx.NewId() 
     237        self.AddPage(self.sim_page,"Simultaneous Fit", True) 
    278238        self.sim_page.set_manager(self._manager) 
    279239        return self.sim_page 
    280240         
    281     def get_page_info(self, data=None): 
    282         """ 
    283         fill information required to add a page in the fit panel 
    284         """ 
    285         name = "Fit Page" 
    286         type = 'empty' 
    287         if data is not None: 
    288             if data.is_data: 
    289                 name = data.name  
    290                 type = 'Data' 
    291             else: 
    292                 if data.__class__.__name__ == "Data2D": 
    293                     name = 'Model 2D Fit' 
    294                     type = 'Theory2D' 
    295                 else: 
    296                     name = 'Model 1D Fit' 
    297                     type = 'Theory1D' 
    298         page_info = PageInfo(data=data, name=name) 
    299         page_info.event_owner = self.event_owner  
    300         page_info.manager = self._manager 
    301         page_info.window_name = name 
    302         page_info.window_caption = name 
    303         page_info.type = type 
    304         return page_info 
     241  
     242    def add_empty_page(self): 
     243        """ 
     244        add an empty page 
     245        """ 
     246        from fitpage import FitPage 
     247        panel = FitPage(parent=self) 
     248        panel.id = wx.NewId() 
     249        panel.populate_box(dict=self.model_list_box) 
     250        panel.set_manager(self._manager) 
     251        self.AddPage(panel, panel.window_name, select=True) 
     252        self.opened_pages[panel.id] = panel 
     253        return panel  
    305254    
    306     def add_empty_page(self): 
    307         """ 
    308         add an empty page 
    309         """ 
    310         page_info = self.get_page_info() 
    311         from fitpage import FitPage 
    312         panel = FitPage(parent=self, page_info=page_info) 
    313         panel.set_manager(self._manager) 
    314         self.AddPage(page=panel, caption=page_info.window_name, select=True) 
    315         self.opened_pages[page_info.type] = [page_info.window_name, panel] 
    316         return panel  
    317      
    318     def add_page(self, page_info): 
    319         """ 
    320         add a new page 
    321         """ 
    322         from fitpage import FitPage 
    323         panel = FitPage(parent=self, page_info=page_info) 
    324         panel.set_manager(self._manager) 
    325         self.AddPage(page=panel, caption=page_info.window_name, select=True) 
    326         index = self.GetPageIndex(panel) 
    327         self.change_page_content(data=page_info.data, index=index) 
    328         return panel 
    329      
    330     def change_page_content(self, data, index): 
    331         """ 
    332         replace the contains of an existing page 
    333         """ 
    334         page_info = self.get_page_info(data=data) 
    335         self.SetPageText(index, page_info.window_name) 
    336         panel = self.GetPage(index) 
    337         panel.set_data(data) 
    338         if panel.model_list_box is None or len(panel.model_list_box) == 0:  
    339             page_info.model_list_box = self.model_list_box.get_list() 
    340             panel.populate_box(dict=page_info.model_list_box) 
    341             panel.initialize_combox() 
    342         panel.set_page_info(page_info=page_info) 
    343         self.opened_pages[page_info.type] = [page_info.window_name, panel] 
    344         return panel 
    345      
    346     def replace_page(self, index, page_info, type): 
    347         """ 
    348         replace an existing page 
    349         """ 
    350         self.DeletePage(index) 
    351         del self.opened_pages[type] 
    352         return self.add_page(page_info=page_info) 
    353          
    354     def add_fit_page(self, data, reset=False): 
     255     
     256    def set_data(self, data): 
    355257        """  
    356258        Add a fitting page on the notebook contained by fitpanel 
     
    363265        if data is None: 
    364266            return None 
    365         page_info = self.get_page_info(data=data) 
    366         type = page_info.type 
    367         npages = len(self.opened_pages.keys()) 
    368         #check if only and empty page is opened 
    369         if len(self.opened_pages.keys()) > 0: 
    370             first_page_type = self.opened_pages.keys()[0] 
    371             if npages == 1 and first_page_type in ['empty']: 
    372                 #replace the first empty page 
    373                 name, panel = self.opened_pages[first_page_type] 
    374                 index = self.GetPageIndex(panel) 
    375                 panel = self.change_page_content(data=data, index=index) 
    376                 del self.opened_pages[first_page_type] 
    377                 return panel 
    378         if type in self.opened_pages.keys(): 
    379             #this type of page is already created but it is a theory 
    380             # meaning the same page is just to fit different data 
    381             if not type.lower() in ['data']: 
    382                 #delete the previous theory page and add a new one 
    383                 name, panel = self.opened_pages[type] 
    384                 #self._manager.reset_plot_panel(panel.get_data()) 
    385                 #delete the existing page and replace it 
    386                 index = self.GetPageIndex(panel) 
    387                 panel = self.replace_page(index=index, page_info=page_info, type=type) 
    388                 return panel  
    389             else: 
    390                 for name, panel in self.opened_pages.values(): 
    391                     #Don't return any panel is the exact same page is created 
    392                     if name == page_info.window_name: 
    393                         return None 
    394                     else: 
    395                         panel = self.add_page(page_info=page_info) 
    396                         return panel         
    397         else: 
    398             #a new type of page is created 
    399             panel = self.add_page(page_info=page_info) 
    400             return panel 
    401          
    402     def  _onGetstate(self, event): 
     267        for page in self.opened_pages.values(): 
     268            #check if the selected data existing in the fitpanel 
     269            pos = self.GetPageIndex(page) 
     270            if page.get_data() is None: 
     271                page.set_data(data) 
     272                self.SetPageText(pos, str(data.name)) 
     273                self.SetSelection(pos) 
     274                return page 
     275            elif page.get_data().id == data.id: 
     276                msg = "Data already existing in the fitting panel" 
     277                wx.PostEvent(self._manager.parent,  
     278                             StatusEvent(status=msg, info='warning'))   
     279                self.SetSelection(pos) 
     280                return page 
     281         
     282        page = self.add_empty_page() 
     283        page.id = wx.NewId() 
     284        page.set_data(data) 
     285        self.SetPageText(pos, str(data.name)) 
     286        self.opened_pages[page.id] = page 
     287        return page 
     288        
     289    def _onGetstate(self, event): 
    403290        """ 
    404291        copy the state of a page 
    405292        """ 
    406         page= event.page 
    407         if page.window_name in self.fit_page_name: 
    408             self.fit_page_name[page.window_name].appendItem(page.createMemento())  
     293        page = event.page 
     294        if page.id in self.fit_page_name: 
     295           self.fit_page_name[page.id].appendItem(page.createMemento())  
    409296             
    410297    def _onUndo(self, event ): 
     
    413300        """ 
    414301        page = event.page  
    415         if page.window_name in self.fit_page_name: 
    416             if self.fit_page_name[page.window_name].getCurrentPosition()==0: 
     302        if page.id in self.fit_page_name: 
     303            if self.fit_page_name[page.id].getCurrentPosition()==0: 
    417304                state = None 
    418305            else: 
    419                 state = self.fit_page_name[page.window_name].getPreviousItem() 
     306                state = self.fit_page_name[page.id].getPreviousItem() 
    420307                page._redo.Enable(True) 
    421308            page.reset_page(state) 
     
    426313        """        
    427314        page = event.page  
    428         if page.window_name in self.fit_page_name: 
    429             length= len(self.fit_page_name[page.window_name]) 
    430             if self.fit_page_name[page.window_name].getCurrentPosition()== length -1: 
     315        if page.id in self.fit_page_name: 
     316            length= len(self.fit_page_name[page.id]) 
     317            if self.fit_page_name[page.id].getCurrentPosition()== length -1: 
    431318                state = None 
    432319                page._redo.Enable(False) 
    433320                page._redo.Enable(True) 
    434321            else: 
    435                 state = self.fit_page_name[page.window_name].getNextItem() 
     322                state =self.fit_page_name[page.id].getNextItem() 
    436323            page.reset_page(state)   
    437324                  
     
    441328        """ 
    442329        #remove hint page 
    443         if selected_page == self.hint_page: 
     330        if selected_page.id == self.hint_page.id: 
    444331            return 
    445332        ## removing sim_page 
     
    461348        if selected_page in page_finder: 
    462349            #Delete the name of the page into the list of open page 
    463             for type, list in self.opened_pages.iteritems(): 
     350            for id, list in self.opened_pages.iteritems(): 
    464351                #Don't return any panel is the exact same page is created 
    465                 name = str(list[0]) 
    466                 if flag and selected_page.window_name == name: 
    467                     if type.lower() in ['theory1d', 'theory2d']: 
    468                         self._manager.remove_plot(selected_page, theory=True) 
    469                     else: 
    470                         self._manager.remove_plot(selected_page, theory=False) 
     352                 
     353                if flag and selected_page.id == id: 
     354                    self._manager.remove_plot(id, theory=False) 
    471355                    break  
    472356            del page_finder[selected_page] 
     
    480364                 
    481365        #Delete the name of the page into the list of open page 
    482         for type, list in self.opened_pages.iteritems(): 
     366        for id, list in self.opened_pages.iteritems(): 
    483367            #Don't return any panel is the exact same page is created 
    484             name = str(list[0]) 
    485             if selected_page.window_name == name: 
     368             
     369            if selected_page.id == id: 
    486370                del self.opened_pages[type] 
    487371                break  
Note: See TracChangeset for help on using the changeset viewer.