Changeset 418e59f in sasview for src/sas/guiframe


Ignore:
Timestamp:
Mar 4, 2015 2:51:37 PM (10 years ago)
Author:
krzywon
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:
6b0fc72
Parents:
4bf54044 (diff), 76aed53 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge remote-tracking branch 'origin/master'

Location:
src/sas/guiframe
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/sas/guiframe/data_processor.py

    r79492222 r76aed53  
    1010import copy 
    1111from wx.lib.scrolledpanel import ScrolledPanel 
    12 import  wx.grid as  Grid 
    1312import wx.aui 
    1413from wx.aui import AuiNotebook as nb 
    1514import wx.lib.sheet as sheet 
    1615from sas.guiframe.panel_base import PanelBase 
    17 from sas.guiframe.events import NewPlotEvent  
    18 from sas.guiframe.events import StatusEvent   
     16from sas.guiframe.events import NewPlotEvent 
     17from sas.guiframe.events import StatusEvent 
    1918from sas.plottools import plottables 
    2019from sas.guiframe.dataFitting import Data1D 
     
    2322             "pow": "math.sqrt"} 
    2423 
    25 class BatchCell: 
     24class BatchCell(object): 
    2625    """ 
    2726    Object describing a cell in  the grid. 
    28      
     27 
    2928    """ 
    3029    def __init__(self): 
     
    3433        self.row = -1 
    3534        self.object = [] 
    36          
     35 
    3736 
    3837def parse_string(sentence, list): 
     
    4241    :param list: list of columns label 
    4342    """ 
    44     toks = [] 
    4543    p2 = re.compile(r'\d+') 
    4644    p = re.compile(r'[\+\-\*\%\/]') 
     
    5149        temp_arr = [] 
    5250        for label in  list: 
    53             label_pos =  elt.find(label) 
    54             separator_pos  = label_pos + len(label) 
     51            label_pos = elt.find(label) 
     52            separator_pos = label_pos + len(label) 
    5553            if label_pos != -1 and len(elt) >= separator_pos  and\ 
    56                 elt[separator_pos]== "[": 
     54                elt[separator_pos] == "[": 
    5755                # the label contain , meaning the range selected is not  
    5856                # continuous 
     
    6462                        if range_pos != -1: 
    6563                            rang = p2.findall(item) 
    66                             for i in xrange(int(rang[0]), int(rang[1])+1 ): 
     64                            for i in xrange(int(rang[0]), int(rang[1]) + 1): 
    6765                                new_temp.append(i) 
    6866                    temp_arr += new_temp 
     
    7573                            if range_pos != -1: 
    7674                                rang = p2.findall(item) 
    77                                 for i in xrange(int(rang[0]), int(rang[1])+1 ): 
     75                                for i in xrange(int(rang[0]), int(rang[1]) + 1): 
    7876                                    temp_arr.append(i) 
    7977                col_dict[elt] = (label, temp_arr) 
    8078    return col_dict 
    8179 
    82            
    83            
     80 
    8481class SPanel(ScrolledPanel): 
    8582    def __init__(self, parent, *args, **kwds): 
    86         ScrolledPanel.__init__(self, parent , *args, **kwds) 
    87         self.SetupScrolling()   
    88          
     83        ScrolledPanel.__init__(self, parent, *args, **kwds) 
     84        self.SetupScrolling() 
     85 
    8986class GridPage(sheet.CSheet): 
    9087    """ 
     
    9491        """ 
    9592        sheet.CSheet.__init__(self, parent) 
    96          
     93 
    9794        self.AdjustScrollbars() 
    9895        #self.SetLabelBackgroundColour('#DBD4D4') 
     
    132129        self.EnableEditing(True) 
    133130        if self.GetNumberCols() > 0: 
    134             self.default_col_width =  self.GetColSize(0) 
     131            self.default_col_width = self.GetColSize(0) 
    135132        self.Bind(wx.grid.EVT_GRID_LABEL_LEFT_CLICK, self.on_left_click) 
    136133        self.Bind(wx.grid.EVT_GRID_LABEL_RIGHT_CLICK, self.on_right_click) 
     
    138135        self.Bind(wx.grid.EVT_GRID_CMD_CELL_CHANGE, self.on_edit_cell) 
    139136        self.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, self.onContextMenu) 
    140          
     137 
    141138    def on_edit_cell(self, event): 
    142139        """ 
    143140        """ 
    144         row, col = event.GetRow(), event.GetCol() 
     141        row, _ = event.GetRow(), event.GetCol() 
    145142        if row > self.max_row_touse: 
    146143            self.max_row_touse = row 
     
    148145            self.data = {} 
    149146        event.Skip() 
    150          
     147 
    151148    def on_selected_cell(self, event): 
    152149        """ 
     
    154151        """ 
    155152        flag = event.CmdDown() or event.ControlDown() 
    156         flag_shift =  event.ShiftDown() 
     153        flag_shift = event.ShiftDown() 
    157154        row, col = event.GetRow(), event.GetCol() 
    158155        cell = (row, col) 
     
    181178            else: 
    182179                min_r = min(self.selected_rows) 
    183             for row_s in range(min_r, row+1): 
     180            for row_s in range(min_r, row + 1): 
    184181                cel = (row_s, col) 
    185182                if cel not in self.selected_cells: 
    186183                    if row > 0: 
    187184                        self.selected_cells.append(cel) 
    188                         self.selected_rows.append(row)  
    189             for row_s in self.selected_rows:  
     185                        self.selected_rows.append(row) 
     186            for row_s in self.selected_rows: 
    190187                cel = (row_s, col) 
    191188                if row_s > row: 
     
    200197        elif flag: 
    201198            if cell not in self.selected_cells: 
    202                 if row > 0 : 
     199                if row > 0: 
    203200                    self.selected_cells.append(cell) 
    204201                    self.selected_rows.append(row) 
     
    226223        event.Skip() 
    227224        flag = event.CmdDown() or event.ControlDown() 
    228          
     225 
    229226        col = event.GetCol() 
    230227        row = event.GetRow() 
    231228 
    232         if not (flag): 
     229        if not flag: 
    233230            self.selected_cols = [] 
    234231            self.selected_rows = [] 
     
    239236            self.plottable_cells = [] 
    240237            self.plottable_flag = False 
    241         
     238 
    242239        self.last_selected_col = col 
    243240        self.last_selected_row = row 
    244241        if row != -1 and row not in self.selected_rows: 
    245              self.selected_rows.append(row) 
    246               
     242            self.selected_rows.append(row) 
     243 
    247244        if col != -1: 
    248             for row in range(1, self.GetNumberRows()+ 1): 
     245            for row in range(1, self.GetNumberRows() + 1): 
    249246                cell = (row, col) 
    250247                if row > 0 and row < self.max_row_touse: 
     
    253250                    else: 
    254251                        if flag: 
    255                              self.selected_cells.remove(cell) 
     252                            self.selected_cells.remove(cell) 
    256253            self.selected_cols.append(col) 
    257254            self.axis_value = [] 
     
    263260            if not self.axis_label: 
    264261                self.axis_label = " " 
    265          
     262 
    266263    def on_right_click(self, event): 
    267264        """ 
    268265        Catch the right click mouse 
    269266        """ 
    270          
    271267        col = event.GetCol() 
    272268        row = event.GetRow() 
     
    278274        # Slicer plot popup menu 
    279275        slicerpop = wx.Menu() 
    280         col_label_menu  = wx.Menu() 
    281         c_name = self.GetCellValue(0, col)  
     276        col_label_menu = wx.Menu() 
     277        c_name = self.GetCellValue(0, col) 
    282278        label = "Insert column before %s " % str(c_name) 
    283         slicerpop.AppendSubMenu(col_label_menu ,  
    284                                  '&%s' % str(label), str(label)) 
    285         col_name = [self.GetCellValue(0, c)  
    286                         for c in range(self.GetNumberCols())] 
     279        slicerpop.AppendSubMenu(col_label_menu, '&%s' % str(label), str(label)) 
    287280        row = 0 
    288281        label = self.GetCellValue(row, col) 
    289282        self.insert_col_menu(col_label_menu, label, self) 
    290          
    291          
    292         col_after_menu  = wx.Menu() 
     283 
     284        col_after_menu = wx.Menu() 
    293285        label = "Insert column after %s " % str(c_name) 
    294         slicerpop.AppendSubMenu(col_after_menu ,  
    295                                  '&%s' % str(label), str(label)) 
    296         col_name = [self.GetCellValue(0, c)  
    297                         for c in range(self.GetNumberCols())] 
     286        slicerpop.AppendSubMenu(col_after_menu, '&%s' % str(label), str(label)) 
    298287        self.insert_after_col_menu(col_after_menu, label, self) 
    299          
    300          
    301         id = wx.NewId()     
     288 
     289        wx_id = wx.NewId() 
    302290        hint = 'Remove selected column %s' 
    303         slicerpop.Append(id, '&Remove Column', hint) 
    304         wx.EVT_MENU(self, id, self.on_remove_column) 
    305          
     291        slicerpop.Append(wx_id, '&Remove Column', hint) 
     292        wx.EVT_MENU(self, wx_id, self.on_remove_column) 
     293 
    306294        pos = wx.GetMousePosition() 
    307295        pos = self.ScreenToClient(pos) 
    308296        self.PopupMenu(slicerpop, pos) 
    309297        event.Skip() 
    310          
     298 
    311299    def insert_col_menu(self, menu, label, window): 
    312300        """ 
     
    320308        wx.EVT_MENU(window, id, self.on_insert_column) 
    321309        row = 0 
    322         col_name = [self.GetCellValue(row, col)  
     310        col_name = [self.GetCellValue(row, col) for col in range(self.GetNumberCols())] 
     311        for c_name in self.data.keys(): 
     312            if c_name not in col_name and self.data[c_name]: 
     313                wx_id = wx.NewId() 
     314                hint = "Insert %s column before the " % str(c_name) 
     315                hint += " %s column" % str(label) 
     316                menu.Append(wx_id, '&%s' % str(c_name), hint) 
     317                wx.EVT_MENU(window, wx_id, self.on_insert_column) 
     318 
     319    def insert_after_col_menu(self, menu, label, window): 
     320        """ 
     321        """ 
     322        if self.data is None: 
     323            return 
     324        wx_id = wx.NewId() 
     325        title = "Empty" 
     326        hint = 'Insert empty column after %s' % str(label) 
     327        menu.Append(wx_id, title, hint) 
     328        wx.EVT_MENU(window, wx_id, self.on_insert_after_column) 
     329        row = 0 
     330        col_name = [self.GetCellValue(row, col) 
    323331                        for col in range(self.GetNumberCols())] 
    324332        for c_name in self.data.keys(): 
    325333            if c_name not in col_name and self.data[c_name]: 
    326                 id = wx.NewId() 
    327                 hint = "Insert %s column before the " % str(c_name) 
    328                 hint += " %s column" % str(label) 
    329                 menu.Append(id, '&%s' % str(c_name), hint) 
    330                 wx.EVT_MENU(window, id, self.on_insert_column) 
    331              
    332     def insert_after_col_menu(self, menu, label, window): 
    333         """ 
    334         """ 
    335         if self.data is None: 
    336             return 
    337         id = wx.NewId() 
    338         title = "Empty" 
    339         hint = 'Insert empty column after %s' % str(label) 
    340         menu.Append(id, title, hint) 
    341         wx.EVT_MENU(window, id, self.on_insert_after_column) 
    342         row = 0 
    343         col_name = [self.GetCellValue(row, col)  
    344                         for col in range(self.GetNumberCols())] 
    345         for c_name in self.data.keys(): 
    346             if c_name not in col_name and self.data[c_name]: 
    347                 id = wx.NewId() 
     334                wx_id = wx.NewId() 
    348335                hint = "Insert %s column after the " % str(c_name) 
    349336                hint += " %s column" % str(label) 
    350                 menu.Append(id, '&%s' % str(c_name), hint) 
    351                 wx.EVT_MENU(window, id, self.on_insert_after_column) 
    352                                 
     337                menu.Append(wx_id, '&%s' % str(c_name), hint) 
     338                wx.EVT_MENU(window, wx_id, self.on_insert_after_column) 
     339 
    353340    def on_remove_column(self, event=None): 
    354341        """ 
     
    357344            col = self.selected_cols[0] 
    358345            self.remove_column(col=col, numCols=1) 
    359              
     346 
    360347    def remove_column(self, col, numCols=1): 
    361348        """ 
     
    370357                value = self.GetCellValue(row, col) 
    371358                self.data[col_name].append(value) 
    372                 for k , value_list in self.data.iteritems(): 
     359                for k, value_list in self.data.iteritems(): 
    373360                    if k != col_name: 
    374361                        length = len(value_list) 
     
    378365                                self.data[k].append("") 
    379366        self.DeleteCols(pos=col, numCols=numCols, updateLabels=True) 
    380              
     367 
    381368    def on_insert_column(self, event): 
    382369        """ 
     
    384371        if self.selected_cols is not None or len(self.selected_cols) > 0: 
    385372            col = self.selected_cols[0] 
    386             # add data to the grid     
    387             row = 0 
    388             id = event.GetId() 
    389             col_name = event.GetEventObject().GetLabelText(id) 
     373            # add data to the grid 
     374            wx_id = event.GetId() 
     375            col_name = event.GetEventObject().GetLabelText(wx_id) 
    390376            self.insert_column(col=col, col_name=col_name) 
    391             if  not issubclass(event.GetEventObject().__class__ , wx.Menu): 
     377            if  not issubclass(event.GetEventObject().__class__, wx.Menu): 
    392378                col += 1 
    393379                self.selected_cols[0] += 1 
    394                  
     380 
    395381    def on_insert_after_column(self, event): 
    396382        """ 
     
    399385        if self.selected_cols is not None or len(self.selected_cols) > 0: 
    400386            col = self.selected_cols[0] + 1 
    401             # add data to the grid     
    402             row = 0 
    403             id = event.GetId() 
    404             col_name = event.GetEventObject().GetLabelText(id) 
     387            # add data to the grid 
     388            wx_id = event.GetId() 
     389            col_name = event.GetEventObject().GetLabelText(wx_id) 
    405390            self.insert_column(col=col, col_name=col_name) 
    406             if  not issubclass(event.GetEventObject().__class__ , wx.Menu): 
     391            if  not issubclass(event.GetEventObject().__class__, wx.Menu): 
    407392                self.selected_cols[0] += 1 
    408             
     393 
    409394    def insert_column(self, col, col_name): 
    410395        """ 
    411         """  
    412           
     396        """ 
    413397        row = 0 
    414398        self.InsertCols(pos=col, numCols=1, updateLabels=True) 
     
    417401        if col_name in self.data.keys(): 
    418402            value_list = self.data[col_name] 
    419             cell_row =  1 
     403            cell_row = 1 
    420404            for value in value_list: 
    421405                label = value#format_number(value, high=True) 
     
    425409        width = self.GetColSize(col) 
    426410        if width < self.default_col_width: 
    427            self.SetColSize(col, self.default_col_width) 
     411            self.SetColSize(col, self.default_col_width) 
    428412        color = self.parent.GetBackgroundColour() 
    429413        self.SetCellBackgroundColour(0, col, color) 
    430414        self.ForceRefresh() 
    431          
     415 
    432416    def on_set_x_axis(self, event): 
    433417        """ 
    434418        """ 
    435419        self.panel.set_xaxis(x=self.axis_value, label=self.axis_label) 
    436     
     420 
    437421    def on_set_y_axis(self, event): 
    438422        """ 
    439423        """ 
    440         self.panel.set_yaxis(y=self.axis_value, label=self.axis_label)      
    441              
     424        self.panel.set_yaxis(y=self.axis_value, label=self.axis_label) 
     425 
    442426    def set_data(self, data_inputs, data_outputs, details, file_name): 
    443427        """ 
     
    448432        self.file_name = file_name 
    449433        self.details = details 
    450          
     434 
    451435        if data_outputs is None: 
    452436            data_outputs = {} 
     
    458442        for item in (self.data_outputs, self.data_inputs): 
    459443            self.data.update(item) 
    460              
    461         #if len(self.data) + len(self.data_inputs) +len(self.data_outputs) == 0: 
    462         #    self.EnableEditing(False) 
    463         #else: 
    464         #    self.EnableEditing(True) 
     444 
    465445        if  len(self.data_outputs) > 0: 
    466446            self._cols = self.GetNumberCols() 
    467447            self._rows = self.GetNumberRows() 
    468448            self.col_names = self.data_outputs.keys() 
    469             self.col_names.sort()  
     449            self.col_names.sort() 
    470450            nbr_user_cols = len(self.col_names) 
    471451            #Add more columns to the grid if necessary 
    472452            if nbr_user_cols > self._cols: 
    473                 new_col_nbr = nbr_user_cols -  self._cols + 1 
     453                new_col_nbr = nbr_user_cols - self._cols + 1 
    474454                self.AppendCols(new_col_nbr, True) 
    475             #Add more rows to the grid if necessary   
     455            #Add more rows to the grid if necessary 
    476456            nbr_user_row = len(self.data_outputs.values()[0]) 
    477457            if nbr_user_row > self._rows + 1: 
    478                 new_row_nbr =  nbr_user_row - self._rows + 1 
     458                new_row_nbr = nbr_user_row - self._rows + 1 
    479459                self.AppendRows(new_row_nbr, True) 
    480             # add data to the grid     
     460            # add data to the grid 
    481461            wx.CallAfter(self.set_grid_values) 
    482462        self.ForceRefresh() 
    483      
     463 
    484464    def set_grid_values(self): 
    485465        """ 
    486466        Set the values in grids 
    487467        """ 
    488         # add data to the grid     
     468        # add data to the grid 
    489469        row = 0 
    490470        col = 0 
     
    494474            self.SetCellValue(row, col, str(col_name)) 
    495475            col += 1 
    496             cell_row =  1 
     476            cell_row = 1 
    497477            value_list = self.data_outputs[col_name] 
    498              
     478 
    499479            for value in value_list: 
    500480                label = value 
     
    510490                width = self.GetColSize(cell_col) 
    511491                if width < self.default_col_width: 
    512                    self.SetColSize(cell_col, self.default_col_width) 
    513                  
     492                    self.SetColSize(cell_col, self.default_col_width) 
     493 
    514494                cell_row += 1 
    515495            cell_col += 1 
    516496            if cell_row > self.max_row_touse: 
    517497                self.max_row_touse = cell_row 
    518                           
     498 
    519499    def get_grid_view(self): 
    520500        """ 
     
    523503        grid_view = {} 
    524504        for col in xrange(self.GetNumberCols()): 
    525             label = self.GetCellValue(row=0, col=col)  
     505            label = self.GetCellValue(row=0, col=col) 
    526506            label = label.strip() 
    527507            if label != "": 
     
    530510                    value = self.GetCellValue(row=row, col=col) 
    531511                    if value != "": 
    532                         grid_view[label].append(value)   
     512                        grid_view[label].append(value) 
    533513                    else: 
    534                         grid_view[label].append(None)  
     514                        grid_view[label].append(None) 
    535515        return grid_view 
    536      
     516 
    537517    def get_nofrows(self): 
    538518        """ 
     
    540520        """ 
    541521        return self._rows 
    542      
     522 
    543523    def onContextMenu(self, event): 
    544524        """ 
    545         Default context menu  
    546         """ 
    547         id = wx.NewId() 
     525        Default context menu 
     526        """ 
     527        wx_id = wx.NewId() 
    548528        c_menu = wx.Menu() 
    549         copy_menu = c_menu.Append(id, '&Copy', 'Copy the selected cells') 
    550         wx.EVT_MENU(self, id, self.on_copy) 
    551          
    552         id = wx.NewId() 
    553         paste_menu = c_menu.Append(id, '&Paste', 'Paste the selected cells') 
    554         wx.EVT_MENU(self, id, self.on_paste) 
    555          
    556         id = wx.NewId() 
    557         clear_menu = c_menu.Append(id, '&Clear', 'Clear the selected cells') 
    558         wx.EVT_MENU(self, id, self.on_clear) 
    559          
     529        copy_menu = c_menu.Append(wx_id, '&Copy', 'Copy the selected cells') 
     530        wx.EVT_MENU(self, wx_id, self.on_copy) 
     531 
     532        wx_id = wx.NewId() 
     533        c_menu.Append(wx_id, '&Paste', 'Paste the selected cells') 
     534        wx.EVT_MENU(self, wx_id, self.on_paste) 
     535 
     536        wx_id = wx.NewId() 
     537        clear_menu = c_menu.Append(wx_id, '&Clear', 'Clear the selected cells') 
     538        wx.EVT_MENU(self, wx_id, self.on_clear) 
     539 
    560540        # enable from flag 
    561541        has_selection = False 
     
    576556        except: 
    577557            return 
    578      
     558 
    579559    def on_copy(self, event): 
    580560        """ 
     
    592572            self.file_name = 'copied_data' 
    593573        self.Paste() 
    594      
     574 
    595575    def on_clear(self, event): 
    596576        """ 
     
    598578        """ 
    599579        self.Clear() 
    600      
     580 
    601581class Notebook(nb, PanelBase): 
    602582    """ 
     
    606586    """ 
    607587    window_caption = "Notebook " 
    608      
     588 
    609589    def __init__(self, parent, manager=None, data=None, *args, **kwargs): 
    610590        """ 
    611591        """ 
    612592        nb.__init__(self, parent, -1, 
    613                     style=wx.aui.AUI_NB_WINDOWLIST_BUTTON|  
    614                     wx.aui.AUI_BUTTON_DOWN| 
    615                     wx.aui.AUI_NB_DEFAULT_STYLE| 
     593                    style=wx.aui.AUI_NB_WINDOWLIST_BUTTON | 
     594                    wx.aui.AUI_BUTTON_DOWN | 
     595                    wx.aui.AUI_NB_DEFAULT_STYLE | 
    616596                    wx.CLIP_CHILDREN) 
    617597        PanelBase.__init__(self, parent) 
     
    624604        self.add_empty_page() 
    625605        self.pageClosedEvent = wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE 
    626         self.Bind(self.pageClosedEvent, self.on_close_page)     
    627      
     606        self.Bind(self.pageClosedEvent, self.on_close_page) 
     607 
    628608    def add_empty_page(self): 
    629609        """ 
     
    637617        self.enable_close_button() 
    638618        self.gpage_num += 1 
    639         return grid , pos 
    640          
     619        return grid, pos 
     620 
    641621    def enable_close_button(self): 
    642622        """ 
    643         display the close button on tab for more than 1 tabs else remove the  
     623        display the close button on tab for more than 1 tabs else remove the 
    644624        close button 
    645625        """ 
    646626        if self.GetPageCount() <= 1: 
    647             style = self.GetWindowStyleFlag()  
     627            style = self.GetWindowStyleFlag() 
    648628            flag = wx.aui.AUI_NB_CLOSE_ON_ACTIVE_TAB 
    649629            if style & wx.aui.AUI_NB_CLOSE_ON_ACTIVE_TAB == flag: 
     
    656636                style |= wx.aui.AUI_NB_CLOSE_ON_ACTIVE_TAB 
    657637                self.SetWindowStyle(style) 
    658                
     638 
    659639    def on_edit_axis(self): 
    660640        """ 
     
    672652                    msg += "Please select only one column" 
    673653                    raise ValueError, msg 
    674             for (cell_row, cell_col) in grid.selected_cells: 
     654            for (_, cell_col) in grid.selected_cells: 
    675655                if cell_col != col: 
    676656                    msg = "Cannot use cells from different columns for " 
     
    678658                    msg += "Please select elements of the same col.\n" 
    679659                    raise ValueError, msg 
    680                  
     660 
    681661            # Finally check the highlighted cell if any cells missing 
    682662            self.get_highlighted_row(True) 
     
    686666            raise ValueError, msg 
    687667        return grid.selected_cells 
    688         
     668 
    689669    def get_highlighted_row(self, is_number=True): 
    690670        """ 
     
    706686                    continue 
    707687                if is_number: 
    708                     try:  
     688                    try: 
    709689                        float(grid.GetCellValue(row, col)) 
    710690                    except: 
     
    715695                if cel not in grid.selected_cells: 
    716696                    grid.selected_cells.append(cel) 
    717                          
     697 
    718698    def get_column_labels(self): 
    719699        """ 
     
    723703        grid = self.GetPage(pos) 
    724704        labels = {} 
    725         row = 0 
    726705        for col in range(grid.GetNumberCols()): 
    727706            label = grid.GetColLabelValue(int(col)) 
    728             #label = grid.GetCellValue(row, col) 
    729             if label.strip() != "" : 
     707            if label.strip() != "": 
    730708                labels[label.strip()] = col 
    731709        return labels 
    732          
     710 
    733711    def create_axis_label(self, cell_list): 
    734712        """ 
    735         Receive a list of cells and  create a string presenting the selected  
    736         cells.  
     713        Receive a list of cells and  create a string presenting the selected 
     714        cells. 
    737715        :param cell_list: list of tuple 
    738          
     716 
    739717        """ 
    740718        pos = self.GetSelection() 
     
    742720        label = "" 
    743721        col_name = "" 
    744         def create_label(col_name,  row_min=None, row_max=None): 
     722        def create_label(col_name, row_min=None, row_max=None): 
    745723            """ 
    746724            """ 
     
    750728                    result = str(row_max) + "]" 
    751729                elif row_max is None: 
    752                      result = str(col_name) + "[" + str(row_min) + ":" 
     730                    result = str(col_name) + "[" + str(row_min) + ":" 
    753731                else: 
    754                     result = str(col_name) +  "[" + str(row_min) + ":" 
     732                    result = str(col_name) + "[" + str(row_min) + ":" 
    755733                    result += str(row_max) + "]" 
    756734            return str(result) 
    757              
     735 
    758736        if len(cell_list) > 0: 
    759737            if len(cell_list) == 1: 
    760                 row_min, col  = cell_list[0]     
    761                 col_name =  grid.GetColLabelValue(int(col)) 
    762                   
     738                row_min, col = cell_list[0] 
     739                col_name = grid.GetColLabelValue(int(col)) 
     740 
    763741                col_title = grid.GetCellValue(0, col) 
    764                 label = create_label(col_name, row_min+1 , row_min+1) 
    765                 return  label,  col_title 
     742                label = create_label(col_name, row_min + 1, row_min + 1) 
     743                return  label, col_title 
    766744            else: 
    767745                temp_list = copy.deepcopy(cell_list) 
    768746                temp_list.sort() 
    769747                length = len(temp_list) 
    770                 row_min, col  = temp_list[0]     
    771                 row_max, _  = temp_list[length-1] 
     748                row_min, col = temp_list[0] 
     749                row_max, _ = temp_list[length - 1] 
    772750                col_name = grid.GetColLabelValue(int(col)) 
    773751                col_title = grid.GetCellValue(0, col) 
     
    779757                        if row != new_row: 
    780758                            temp_list.insert(index, (None, None)) 
    781                             if index -1 >= 0: 
    782                                 new_row, _ = temp_list[index-1] 
    783                                 if not new_row == None and new_row != ' ' : 
    784                                     label += create_label(col_name, None,  
    785                                                           int(new_row) +1) 
     759                            if index - 1 >= 0: 
     760                                new_row, _ = temp_list[index - 1] 
     761                                if not new_row == None and new_row != ' ': 
     762                                    label += create_label(col_name, None, 
     763                                                          int(new_row) + 1) 
    786764                                else: 
    787765                                    label += "]" 
     
    789767                            if index + 1 < len(temp_list): 
    790768                                new_row, _ = temp_list[index + 1] 
    791                                 if not new_row==None: 
    792                                     label += create_label(col_name,  
    793                                                           int(new_row)+1, None) 
     769                                if not new_row == None: 
     770                                    label += create_label(col_name, 
     771                                                          int(new_row) + 1, None) 
    794772                    if row_min != None and row_max != None: 
    795773                        if index == 0: 
    796                             label += create_label(col_name,   
    797                                                   int(row_min)+1, None) 
    798                         elif index == len(temp_list)-1: 
    799                             label += create_label(col_name, None,  
    800                                                   int(row_max)+1) 
     774                            label += create_label(col_name, 
     775                                                  int(row_min) + 1, None) 
     776                        elif index == len(temp_list) - 1: 
     777                            label += create_label(col_name, None, 
     778                                                  int(row_max) + 1) 
    801779                    index += 1 
    802780                # clean up the list 
     
    809787 
    810788                return label_out, col_title 
    811      
     789 
    812790    def on_close_page(self, event): 
    813791        """ 
     
    817795            event.Veto() 
    818796        wx.CallAfter(self.enable_close_button) 
    819          
     797 
    820798    def set_data(self, data_inputs, data_outputs, details="", file_name=None): 
    821799        if data_outputs is None or data_outputs == {}: 
     
    826804            if grid.data is None: 
    827805                #Found empty page 
    828                 grid.set_data(data_inputs=inputs,  
     806                grid.set_data(data_inputs=inputs, 
    829807                              data_outputs=outputs, 
    830808                              details=details, 
    831                               file_name=file_name)  
    832                 self.SetSelection(pos)  
     809                              file_name=file_name) 
     810                self.SetSelection(pos) 
    833811                return 
    834                  
     812 
    835813        grid, pos = self.add_empty_page() 
    836         grid.set_data(data_inputs=inputs,  
     814        grid.set_data(data_inputs=inputs, 
    837815                      data_outputs=outputs, 
    838816                      file_name=file_name, 
    839817                      details=details) 
    840          
     818 
    841819    def get_odered_results(self, inputs, outputs=None): 
    842820        """ 
     
    868846            else: 
    869847                inputs[key] = [] 
    870                 #print "Different length in %s: Removed from Listing."% key 
    871                  
     848 
    872849        return inputs, outputs 
    873      
     850 
    874851    def add_column(self): 
    875852        """ 
     
    879856        grid = self.GetPage(pos) 
    880857        grid.AppendCols(1, True) 
    881          
     858 
    882859    def on_remove_column(self): 
    883860        """ 
     
    887864        grid = self.GetPage(pos) 
    888865        grid.on_remove_column(event=None) 
    889          
     866 
    890867class GridPanel(SPanel): 
    891868    def __init__(self, parent, data_inputs=None, 
    892869                 data_outputs=None, *args, **kwds): 
    893         SPanel.__init__(self, parent , *args, **kwds) 
    894         
     870        SPanel.__init__(self, parent, *args, **kwds) 
     871 
    895872        self.vbox = wx.BoxSizer(wx.VERTICAL) 
    896          
     873 
    897874        self.plotting_sizer = wx.FlexGridSizer(3, 7, 10, 5) 
    898875        self.button_sizer = wx.BoxSizer(wx.HORIZONTAL) 
     
    906883        self._data_outputs = data_outputs 
    907884        self.x = [] 
    908         self.y  = [] 
    909         self.dy  = [] 
     885        self.y = [] 
     886        self.dy = [] 
    910887        self.x_axis_label = None 
    911888        self.y_axis_label = None 
     
    919896        self.notebook = None 
    920897        self.plot_num = 1 
    921         
     898 
    922899        self.layout_grid() 
    923900        self.layout_plotting_area() 
     
    932909        self.x_axis_label.SetValue("%s[:]" % str(label)) 
    933910        self.x_axis_title.SetValue(str(label)) 
    934          
     911 
    935912    def set_yaxis(self, label="", y=None): 
    936913        """ 
     
    941918        self.y_axis_label.SetValue("%s[:]" % str(label)) 
    942919        self.y_axis_title.SetValue(str(label)) 
    943          
     920 
    944921    def set_dyaxis(self, label="", dy=None): 
    945922        """ 
     
    949926        self.dy = dy 
    950927        self.dy_axis_label.SetValue("%s[:]" % str(label)) 
    951                  
     928 
    952929    def get_plot_axis(self, col, list): 
    953930        """ 
    954         
     931 
    955932        """ 
    956933        axis = [] 
     
    967944                        axis.append(float(value)) 
    968945                    except: 
    969                         msg = "Invalid data in row %s column %s" % (str(row), 
    970                                                                     str(col)) 
    971                         wx.PostEvent(self.parent.parent,  
    972                              StatusEvent(status=msg, info="error")) 
     946                        msg = "Invalid data in row %s column %s" % (str(row), str(col)) 
     947                        wx.PostEvent(self.parent.parent, 
     948                                     StatusEvent(status=msg, info="error")) 
    973949                        return None 
    974950            else: 
    975                 axis.append(None)  
     951                axis.append(None) 
    976952        return axis 
    977      
     953 
    978954    def on_view(self, event): 
    979955        """ 
     
    986962        if len(grid.selected_cells) == 0: 
    987963            msg = "Highlight a Data or Chi2 column first..." 
    988             wx.PostEvent(self.parent.parent,  
    989                              StatusEvent(status=msg, info="error"))  
     964            wx.PostEvent(self.parent.parent, StatusEvent(status=msg, info="error")) 
    990965            return 
    991966        elif len(grid.selected_cells) > 20: 
    992967            msg = "Too many data (> 20) to plot..." 
    993968            msg += "\n Please select no more than 20 data." 
    994             dial = wx.MessageDialog(self, msg, 'Plotting', wx.OK) 
    995             wx.PostEvent(self.parent.parent,  
    996                              StatusEvent(status=msg, info="error"))  
     969            wx.MessageDialog(self, msg, 'Plotting', wx.OK) 
     970            wx.PostEvent(self.parent.parent, StatusEvent(status=msg, info="error")) 
    997971            return 
    998972 
     
    1004978                values = grid.data[label] 
    1005979                if row > len(values) or row < 1: 
    1006                     msg = "Invalid cell was chosen."  
    1007                     wx.PostEvent(self.parent.parent, StatusEvent(status=msg,  
    1008                                                                 info="error")) 
     980                    msg = "Invalid cell was chosen." 
     981                    wx.PostEvent(self.parent.parent, StatusEvent(status=msg, info="error")) 
    1009982                    continue 
    1010983                else: 
    1011                      value = values[row -1] 
     984                    value = values[row - 1] 
    1012985                if issubclass(value.__class__, BatchCell): 
    1013986                    if value.object is None or len(value.object) == 0: 
     
    1015988                        msg += "Column %s is NOT " % str(label) 
    1016989                        msg += "the results of fits to view..." 
    1017                         #raise ValueError, msg 
    1018                         wx.PostEvent(self.parent.parent, StatusEvent(status=msg,  
    1019                                                                 info="error"))  
     990                        wx.PostEvent(self.parent.parent, StatusEvent(status=msg, info="error")) 
    1020991                        return 
    1021992                    for new_plot in value.object: 
    1022993                        if new_plot is None or \ 
    1023                          not issubclass(new_plot.__class__,  
     994                         not issubclass(new_plot.__class__, 
    1024995                                        plottables.Plottable): 
    1025996                            msg = "Row %s , " % str(row) 
    1026997                            msg += "Column %s is NOT " % str(label) 
    1027998                            msg += "the results of fits to view..." 
    1028                             #raise ValueError, msg 
    1029                             wx.PostEvent(self.parent.parent,  
    1030                                  StatusEvent(status=msg, info="error"))  
     999                            wx.PostEvent(self.parent.parent, 
     1000                                         StatusEvent(status=msg, info="error")) 
    10311001                            return 
    1032                             #continue 
    1033                         #new_plot.name =  title + ': ' + new_plot.title 
    10341002                        if issubclass(new_plot.__class__, Data1D): 
    10351003                            if label in grid.list_plot_panels.keys(): 
     
    10461014                                    msg = "2D View: Please select one data set" 
    10471015                                    msg += " at a time for View Fit Results." 
    1048                                     wx.PostEvent(self.parent.parent,  
    1049                                                  StatusEvent(status=msg, 
    1050                                                               info="error")) 
     1016                                    wx.PostEvent(self.parent.parent, 
     1017                                                 StatusEvent(status=msg, info="error")) 
    10511018                                    return 
    10521019 
    1053                         wx.PostEvent(self.parent.parent,  
    1054                                      NewPlotEvent(plot=new_plot,  
    1055                                                 group_id=str(new_plot.group_id), 
    1056                                                 title=title))   
     1020                        wx.PostEvent(self.parent.parent, 
     1021                                     NewPlotEvent(plot=new_plot, 
     1022                                                  group_id=str(new_plot.group_id), 
     1023                                                  title=title)) 
    10571024                        msg = "Plotting the View Fit Results  completed!" 
    1058                         wx.PostEvent( self.parent.parent,  
    1059                                       StatusEvent(status=msg))   
     1025                        wx.PostEvent(self.parent.parent, StatusEvent(status=msg)) 
    10601026                else: 
    1061                     
    10621027                    msg = "Row %s , " % str(row) 
    10631028                    msg += "Column %s is NOT " % str(label) 
    10641029                    msg += "the results of fits to view..." 
    1065                     wx.PostEvent(self.parent.parent,  
    1066                          StatusEvent(status=msg, info="error"))  
     1030                    wx.PostEvent(self.parent.parent, StatusEvent(status=msg, info="error")) 
    10671031                    return 
    1068      
     1032 
    10691033    def on_plot(self, event): 
    10701034        """ 
    10711035        Evaluate the contains of textcrtl and plot result 
    1072         """  
     1036        """ 
    10731037        pos = self.notebook.GetSelection() 
    10741038        grid = self.notebook.GetPage(pos) 
     
    10841048        except: 
    10851049            msg = "X axis value error." 
    1086             wx.PostEvent(self.parent.parent,  
    1087                             StatusEvent(status=msg, info="error"))  
     1050            wx.PostEvent(self.parent.parent, StatusEvent(status=msg, info="error")) 
    10881051            return 
    10891052        dict = parse_string(sentence, column_names.keys()) 
    1090          
     1053 
    10911054        try: 
    10921055            sentence = self.get_sentence(dict, sentence, column_names) 
     
    10941057        except: 
    10951058            msg = "Need a proper x-range." 
    1096             wx.PostEvent(self.parent.parent,  
    1097                              StatusEvent(status=msg, info="error"))  
     1059            wx.PostEvent(self.parent.parent, StatusEvent(status=msg, info="error")) 
    10981060            return 
    10991061        #evaluate y 
     
    11051067        except: 
    11061068            msg = "Y axis value error." 
    1107             wx.PostEvent(self.parent.parent,  
    1108                             StatusEvent(status=msg, info="error"))  
     1069            wx.PostEvent(self.parent.parent, StatusEvent(status=msg, info="error")) 
    11091070            return 
    11101071        dict = parse_string(sentence, column_names.keys()) 
     
    11141075        except: 
    11151076            msg = "Need a proper y-range." 
    1116             wx.PostEvent(self.parent.parent,  
    1117                              StatusEvent(status=msg, info="error"))  
     1077            wx.PostEvent(self.parent.parent, StatusEvent(status=msg, info="error")) 
    11181078            return 
    11191079        #evaluate y 
     
    11271087            except: 
    11281088                msg = "Need a proper dy-range." 
    1129                 wx.PostEvent(self.parent.parent,  
    1130                                  StatusEvent(status=msg, info="error"))  
     1089                wx.PostEvent(self.parent.parent, StatusEvent(status=msg, info="error")) 
    11311090                return 
    11321091        if len(x) != len(y) or (len(x) == 0 or len(y) == 0): 
    11331092            msg = "Need same length for X and Y axis and both greater than 0" 
    11341093            msg += " to plot.\n" 
    1135             msg += "Got X length = %s, Y length = %s" % (str(len(x)), 
    1136                                                           str(len(y))) 
    1137             wx.PostEvent(self.parent.parent,  
    1138                              StatusEvent(status=msg, info="error"))  
     1094            msg += "Got X length = %s, Y length = %s" % (str(len(x)), str(len(y))) 
     1095            wx.PostEvent(self.parent.parent, StatusEvent(status=msg, info="error")) 
    11391096            return 
    1140         if dy != None and (len(y) != len(dy)):   
     1097        if dy != None and (len(y) != len(dy)): 
    11411098            msg = "Need same length for Y and dY axis and both greater than 0" 
    11421099            msg += " to plot.\n" 
    1143             msg += "Got Y length = %s, dY length = %s" % (str(len(y)), 
    1144                                                           str(len(dy))) 
    1145             wx.PostEvent(self.parent.parent,  
    1146                              StatusEvent(status=msg, info="error"))  
     1100            msg += "Got Y length = %s, dY length = %s" % (str(len(y)), str(len(dy))) 
     1101            wx.PostEvent(self.parent.parent, StatusEvent(status=msg, info="error")) 
    11471102            return 
    11481103        if dy == None: 
     
    11501105        #plotting 
    11511106        new_plot = Data1D(x=x, y=y, dy=dy) 
    1152         new_plot.id =  wx.NewId() 
     1107        new_plot.id = wx.NewId() 
    11531108        new_plot.is_data = False 
    11541109        new_plot.group_id = wx.NewId() 
    11551110        y_title = self.y_axis_title.GetValue() 
    11561111        x_title = self.x_axis_title.GetValue() 
    1157         title = "%s_vs_%s" % (y_title,  
    1158                               x_title) 
    1159         new_plot.xaxis(x_title,  
    1160                        self.x_axis_unit.GetValue()) 
    1161         new_plot.yaxis(y_title,  
    1162                        self.y_axis_unit.GetValue()) 
     1112        title = "%s_vs_%s" % (y_title, x_title) 
     1113        new_plot.xaxis(x_title, self.x_axis_unit.GetValue()) 
     1114        new_plot.yaxis(y_title, self.y_axis_unit.GetValue()) 
    11631115        try: 
    11641116            title = y_title.strip() 
    1165              
    11661117            title += "_" + self.notebook.GetPageText(pos) 
    11671118            title += "_" + str(self.plot_num) 
     
    11691120            new_plot.name = title 
    11701121            new_plot.xtransform = "x" 
    1171             new_plot.ytransform  = "y"   
    1172             #new_plot.is_data = False 
    1173             wx.PostEvent(self.parent.parent,  
    1174                         NewPlotEvent(plot=new_plot,  
    1175                         group_id=str(new_plot.group_id), title =title))  
     1122            new_plot.ytransform = "y" 
     1123            wx.PostEvent(self.parent.parent, 
     1124                         NewPlotEvent(plot=new_plot, 
     1125                                      group_id=str(new_plot.group_id), title=title)) 
    11761126            msg = "Plotting completed!" 
    1177             wx.PostEvent( self.parent.parent,  
    1178                                       StatusEvent(status=msg))   
    1179             self.parent.parent.update_theory(data_id=new_plot.id,  
    1180                                               theory=new_plot)  
     1127            wx.PostEvent(self.parent.parent, StatusEvent(status=msg)) 
     1128            self.parent.parent.update_theory(data_id=new_plot.id, theory=new_plot) 
    11811129        except: 
    1182              wx.PostEvent(self.parent.parent,  
    1183                              StatusEvent(status=msg, info="error"))  
    1184      
     1130            wx.PostEvent(self.parent.parent, StatusEvent(status=msg, info="error")) 
     1131 
    11851132    def get_sentence(self, dict, sentence, column_names): 
    11861133        """ 
     
    11921139            if axis == None: 
    11931140                return None 
    1194             sentence = sentence.replace(tok,  
    1195                                         "numpy.array(%s)" % str(axis)) 
     1141            sentence = sentence.replace(tok, "numpy.array(%s)" % str(axis)) 
    11961142        for key, value in FUNC_DICT.iteritems(): 
    11971143            sentence = sentence.replace(key.lower(), value) 
    11981144        return sentence 
    1199              
     1145 
    12001146    def layout_grid(self): 
    12011147        """ 
     
    12051151        self.notebook.set_data(self._data_inputs, self._data_outputs) 
    12061152        self.grid_sizer.Add(self.notebook, 1, wx.EXPAND, 0) 
    1207         
     1153 
    12081154    def layout_plotting_area(self): 
    12091155        """ 
     
    12211167        self.dy_axis_label = wx.TextCtrl(self, -1, size=(200, -1)) 
    12221168        self.x_axis_add = wx.Button(self, -1, "Add") 
    1223         self.x_axis_add.Bind(event=wx.EVT_BUTTON, handler=self.on_edit_axis,  
    1224                             id=self.x_axis_add.GetId()) 
     1169        self.x_axis_add.Bind(event=wx.EVT_BUTTON, handler=self.on_edit_axis, 
     1170                             id=self.x_axis_add.GetId()) 
    12251171        self.y_axis_add = wx.Button(self, -1, "Add") 
    1226         self.y_axis_add.Bind(event=wx.EVT_BUTTON, handler=self.on_edit_axis,  
    1227                             id=self.y_axis_add.GetId()) 
     1172        self.y_axis_add.Bind(event=wx.EVT_BUTTON, handler=self.on_edit_axis, 
     1173                             id=self.y_axis_add.GetId()) 
    12281174        self.dy_axis_add = wx.Button(self, -1, "Add") 
    1229         self.dy_axis_add.Bind(event=wx.EVT_BUTTON, handler=self.on_edit_axis,  
    1230                             id=self.dy_axis_add.GetId()) 
     1175        self.dy_axis_add.Bind(event=wx.EVT_BUTTON, handler=self.on_edit_axis, 
     1176                              id=self.dy_axis_add.GetId()) 
    12311177        self.x_axis_unit = wx.TextCtrl(self, -1) 
    12321178        self.y_axis_unit = wx.TextCtrl(self, -1) 
     
    12381184        plot_tip = "Highlight a column for each axis and \n" 
    12391185        plot_tip += "click the Add buttons first." 
    1240          
     1186 
    12411187        self.plot_button.SetToolTipString(plot_tip) 
    12421188        boxsizer1.AddMany([(note_text, 0, wx.LEFT, 10), 
    1243                            (self.view_button, 0, wx.LEFT|wx.RIGHT, 10)]) 
    1244         self.button_sizer.AddMany([(boxsizer1, 0,  
    1245                                     wx.LEFT|wx.RIGHT|wx.BOTTOM, 10),  
    1246                                    (self.plot_button, 0,  
    1247                                     wx.LEFT|wx.TOP|wx.BOTTOM|wx.EXPAND, 12)]) 
    1248          
     1189                           (self.view_button, 0, wx.LEFT | wx.RIGHT, 10)]) 
     1190        self.button_sizer.AddMany([(boxsizer1, 0, 
     1191                                    wx.LEFT | wx.RIGHT | wx.BOTTOM, 10), 
     1192                                   (self.plot_button, 0, 
     1193                                    wx.LEFT | wx.TOP | wx.BOTTOM | wx.EXPAND, 12)]) 
     1194 
    12491195        wx.EVT_BUTTON(self, self.plot_button.GetId(), self.on_plot) 
    1250         self.plotting_sizer.AddMany([ 
    1251                     (wx.StaticText(self, -1,  
    1252                                    "X-axis Label\nSelection Range"), 1, 
    1253                       wx.TOP|wx.BOTTOM|wx.LEFT, 10), 
    1254                     (self.x_axis_label, 1, wx.TOP|wx.BOTTOM, 10), 
    1255                     (self.x_axis_add, 1, wx.TOP|wx.BOTTOM|wx.RIGHT, 10), 
    1256                     (wx.StaticText(self, -1, "X-axis Label"), 1,  
    1257                      wx.TOP|wx.BOTTOM|wx.LEFT, 10), 
    1258                     (self.x_axis_title, 1, wx.TOP|wx.BOTTOM, 10), 
    1259                     (wx.StaticText(self, -1 , "X-axis Unit"), 1,  
    1260                      wx.TOP|wx.BOTTOM, 10), 
    1261                     (self.x_axis_unit, 1, wx.TOP|wx.BOTTOM, 10), 
    1262                     (wx.StaticText(self, -1,  
    1263                                    "Y-axis Label\nSelection Range"), 1,  
    1264                      wx.BOTTOM|wx.LEFT, 10), 
     1196        self.plotting_sizer.AddMany(\ 
     1197                   [(wx.StaticText(self, -1, "X-axis Label\nSelection Range"), 1, 
     1198                     wx.TOP | wx.BOTTOM | wx.LEFT, 10), 
     1199                    (self.x_axis_label, 1, wx.TOP | wx.BOTTOM, 10), 
     1200                    (self.x_axis_add, 1, wx.TOP | wx.BOTTOM | wx.RIGHT, 10), 
     1201                    (wx.StaticText(self, -1, "X-axis Label"), 1, wx.TOP | wx.BOTTOM | wx.LEFT, 10), 
     1202                    (self.x_axis_title, 1, wx.TOP | wx.BOTTOM, 10), 
     1203                    (wx.StaticText(self, -1, "X-axis Unit"), 1, wx.TOP | wx.BOTTOM, 10), 
     1204                    (self.x_axis_unit, 1, wx.TOP | wx.BOTTOM, 10), 
     1205                    (wx.StaticText(self, -1, "Y-axis Label\nSelection Range"), 1, 
     1206                     wx.BOTTOM | wx.LEFT, 10), 
    12651207                    (self.y_axis_label, wx.BOTTOM, 10), 
    1266                     (self.y_axis_add, 1, wx.BOTTOM|wx.RIGHT, 10), 
    1267                     (wx.StaticText(self, -1, "Y-axis Label"), 1,  
    1268                      wx.BOTTOM|wx.LEFT, 10), 
    1269                     (self.y_axis_title,  wx.BOTTOM, 10), 
    1270                     (wx.StaticText(self, -1 , "Y-axis Unit"), 1, wx.BOTTOM, 10), 
     1208                    (self.y_axis_add, 1, wx.BOTTOM | wx.RIGHT, 10), 
     1209                    (wx.StaticText(self, -1, "Y-axis Label"), 1, 
     1210                     wx.BOTTOM | wx.LEFT, 10), 
     1211                    (self.y_axis_title, wx.BOTTOM, 10), 
     1212                    (wx.StaticText(self, -1, "Y-axis Unit"), 1, wx.BOTTOM, 10), 
    12711213                    (self.y_axis_unit, 1, wx.BOTTOM, 10), 
    1272                     (wx.StaticText(self, -1,  
    1273                                    "dY-Bar (Optional)\nSelection Range"),   
    1274                                    1, wx.BOTTOM|wx.LEFT, 10), 
     1214                    (wx.StaticText(self, -1, "dY-Bar (Optional)\nSelection Range"), 
     1215                     1, wx.BOTTOM | wx.LEFT, 10), 
    12751216                    (self.dy_axis_label, wx.BOTTOM, 10), 
    1276                     (self.dy_axis_add, 1, wx.BOTTOM|wx.RIGHT, 10), 
    1277                       (-1, -1), 
    1278                       (-1, -1), 
    1279                       (-1, -1), 
    1280                       #(-1, -1), 
    1281                       #(-1, -1), 
    1282                       #(-1, -1), 
    1283                       (-1, 1)]) 
    1284     
     1217                    (self.dy_axis_add, 1, wx.BOTTOM | wx.RIGHT, 10), 
     1218                    (-1, -1), 
     1219                    (-1, -1), 
     1220                    (-1, -1), 
     1221                    (-1, 1)]) 
     1222 
    12851223    def on_edit_axis(self, event): 
    12861224        """ 
     
    12921230        except: 
    12931231            msg = str(sys.exc_value) 
    1294             wx.PostEvent(self.parent.parent,  
    1295                              StatusEvent(status=msg, info="error"))  
    1296             return  
     1232            wx.PostEvent(self.parent.parent, StatusEvent(status=msg, info="error")) 
     1233            return 
    12971234        tcrtl = event.GetEventObject() 
    12981235        if tcrtl == self.x_axis_add: 
    1299             self.edit_axis_helper(self.x_axis_label, self.x_axis_title, 
    1300                                    label, title) 
     1236            self.edit_axis_helper(self.x_axis_label, self.x_axis_title, label, title) 
    13011237        elif tcrtl == self.y_axis_add: 
    1302             self.edit_axis_helper(self.y_axis_label, self.y_axis_title, 
    1303                                    label, title) 
     1238            self.edit_axis_helper(self.y_axis_label, self.y_axis_title, label, title) 
    13041239        elif tcrtl == self.dy_axis_add: 
    1305             self.edit_axis_helper(self.dy_axis_label, None, 
    1306                                    label, None) 
    1307              
     1240            self.edit_axis_helper(self.dy_axis_label, None, label, None) 
     1241 
    13081242    def create_axis_label(self, cell_list): 
    13091243        """ 
    1310         Receive a list of cells and  create a string presenting the selected  
    1311         cells.  
     1244        Receive a list of cells and  create a string presenting the selected 
     1245        cells. 
    13121246        :param cell_list: list of tuple 
    1313          
     1247 
    13141248        """ 
    13151249        if self.notebook is not None: 
    13161250            return self.notebook.create_axis_label(cell_list) 
    1317      
     1251 
    13181252    def edit_axis_helper(self, tcrtl_label, tcrtl_title, label, title): 
    13191253        """ 
     
    13241258        if title != None: 
    13251259            tcrtl_title.SetValue(str(title)) 
    1326          
     1260 
    13271261    def add_column(self): 
    13281262        """ 
     
    13301264        if self.notebook is not None: 
    13311265            self.notebook.add_column() 
    1332          
     1266 
    13331267    def on_remove_column(self): 
    13341268        """ 
     
    13361270        if self.notebook is not None: 
    13371271            self.notebook.on_remove_column() 
    1338          
    1339          
     1272 
     1273 
    13401274class GridFrame(wx.Frame): 
    1341     def __init__(self, parent=None, data_inputs=None, data_outputs=None, id=-1,  
     1275    def __init__(self, parent=None, data_inputs=None, data_outputs=None, id=-1, 
    13421276                 title="Grid Window", size=(800, 500)): 
    13431277        wx.Frame.__init__(self, parent=parent, id=id, title=title, size=size) 
     
    13461280        menubar = wx.MenuBar() 
    13471281        self.SetMenuBar(menubar) 
    1348          
     1282 
    13491283        self.curr_col = None 
    13501284        self.curr_grid = None 
     
    13521286        self.file = wx.Menu() 
    13531287        menubar.Append(self.file, "&File") 
    1354          
     1288 
    13551289        hint = "Open file containing batch results" 
    13561290        open_menu = self.file.Append(wx.NewId(), 'Open ', hint) 
    13571291        wx.EVT_MENU(self, open_menu.GetId(), self.on_open) 
    1358          
     1292 
    13591293        hint = "Open the the current grid into excel" 
    13601294        self.open_excel_menu = self.file.Append(wx.NewId(), 'Open with Excel', hint) 
     
    13631297        self.save_menu = self.file.Append(wx.NewId(), 'Save As', 'Save into File') 
    13641298        wx.EVT_MENU(self, self.save_menu.GetId(), self.on_save_page) 
    1365          
     1299 
    13661300        self.edit = wx.Menu() 
    1367          
    1368         add_table_menu = self.edit.Append(-1, 'New Table',  
     1301 
     1302        add_table_menu = self.edit.Append(-1, 'New Table', 
    13691303                                          'Add a New Table') 
    13701304        self.edit.AppendSeparator() 
    13711305        wx.EVT_MENU(self, add_table_menu.GetId(), self.add_table) 
    1372          
    1373         self.copy_menu = self.edit.Append(-1, 'Copy',  
     1306 
     1307        self.copy_menu = self.edit.Append(-1, 'Copy', 
    13741308                                          'Copy the selected cells') 
    13751309        wx.EVT_MENU(self, self.copy_menu.GetId(), self.on_copy) 
    1376         self.paste_menu = self.edit.Append(-1, 'Paste',  
     1310        self.paste_menu = self.edit.Append(-1, 'Paste', 
    13771311                                           'Paste the selected Cells') 
    13781312        wx.EVT_MENU(self, self.paste_menu.GetId(), self.on_paste) 
    1379         self.clear_menu = self.edit.Append(-1, 'Clear',  
     1313        self.clear_menu = self.edit.Append(-1, 'Clear', 
    13801314                                           'Clear the selected Cells') 
    13811315        wx.EVT_MENU(self, self.clear_menu.GetId(), self.on_clear) 
     
    13841318        hint = "Insert column before the selected column" 
    13851319        self.insert_before_menu = wx.Menu() 
    1386         self.insertb_sub_menu = self.edit.AppendSubMenu(self.insert_before_menu,  
    1387                                                       'Insert Before', hint) 
     1320        self.insertb_sub_menu = self.edit.AppendSubMenu(self.insert_before_menu, 
     1321                                                        'Insert Before', hint) 
    13881322        hint = "Insert column after the selected column" 
    13891323        self.insert_after_menu = wx.Menu() 
    1390         self.inserta_sub_menu = self.edit.AppendSubMenu(self.insert_after_menu,  
    1391                                                       'Insert After', hint) 
     1324        self.inserta_sub_menu = self.edit.AppendSubMenu(self.insert_after_menu, 
     1325                                                        'Insert After', hint) 
    13921326        hint = "Remove the selected column" 
    13931327        self.remove_menu = self.edit.Append(-1, 'Remove Column', hint) 
    13941328        wx.EVT_MENU(self, self.remove_menu.GetId(), self.on_remove_column) 
    1395          
     1329 
    13961330        self.Bind(wx.EVT_MENU_OPEN, self.on_menu_open) 
    13971331        menubar.Append(self.edit, "&Edit") 
    13981332        self.Bind(wx.EVT_CLOSE, self.on_close) 
    1399      
     1333 
    14001334    def on_copy(self, event): 
    14011335        """ 
     
    14071341        grid = self.panel.notebook.GetPage(pos) 
    14081342        grid.Copy() 
    1409          
     1343 
    14101344    def on_paste(self, event): 
    14111345        """ 
     
    14251359        grid = self.panel.notebook.GetPage(pos) 
    14261360        grid.Clear() 
    1427       
     1361 
    14281362    def GetLabelText(self, id): 
    14291363        """ 
     
    14311365        """ 
    14321366        for item in self.insert_before_menu.GetMenuItems(): 
    1433             m_id = item.GetId()  
     1367            m_id = item.GetId() 
    14341368            if m_id == id: 
    1435                 return item.GetLabel()  
    1436      
     1369                return item.GetLabel() 
     1370 
    14371371    def on_remove_column(self, event): 
    14381372        """ 
     
    14421376        grid = self.panel.notebook.GetPage(pos) 
    14431377        grid.on_remove_column(event=None) 
    1444          
     1378 
    14451379    def on_menu_open(self, event): 
    14461380        """ 
     
    14511385            grid = self.panel.notebook.GetPage(pos) 
    14521386            has_data = (grid.data != None and grid.data != {}) 
    1453             self.open_excel_menu.Enable(has_data)  
    1454             self.save_menu.Enable(has_data)  
    1455              
     1387            self.open_excel_menu.Enable(has_data) 
     1388            self.save_menu.Enable(has_data) 
     1389 
    14561390        if self.edit == event.GetMenu(): 
    14571391            #get the selected column 
     
    14701404            self.copy_menu.Enable(has_selection) 
    14711405            self.clear_menu.Enable(has_selection) 
    1472          
     1406 
    14731407            if len(col_list) > 0: 
    14741408                self.remove_menu.Enable(True) 
     
    14851419                self.insertb_sub_menu.Enable(True) 
    14861420                self.inserta_sub_menu.Enable(True) 
    1487                  
     1421 
    14881422                col = col_list[0] 
    14891423                col_name = grid.GetCellValue(row=0, col=col) 
     
    14921426                for item in self.insert_before_menu.GetMenuItems(): 
    14931427                    self.insert_before_menu.DeleteItem(item) 
    1494                 grid.insert_col_menu(menu=self.insert_before_menu,  
     1428                grid.insert_col_menu(menu=self.insert_before_menu, 
    14951429                                     label=col_name, window=self) 
    14961430                label = "Insert Column After " + str(col_name) 
     
    14981432                for item in self.insert_after_menu.GetMenuItems(): 
    14991433                    self.insert_after_menu.DeleteItem(item) 
    1500                 grid.insert_after_col_menu(menu=self.insert_after_menu,  
    1501                                      label=col_name, window=self) 
     1434                grid.insert_after_col_menu(menu=self.insert_after_menu, 
     1435                                           label=col_name, window=self) 
    15021436        event.Skip() 
    1503          
    1504    
    1505          
     1437 
     1438 
     1439 
    15061440    def on_save_page(self, event): 
    15071441        """ 
     
    15141448                name = self.panel.notebook.GetPageText(pos) 
    15151449                msg = " %s has not data to save" % str(name) 
    1516                 wx.PostEvent(self.parent,  
    1517                              StatusEvent(status=msg, info="error"))  
    1518             
     1450                wx.PostEvent(self.parent, 
     1451                             StatusEvent(status=msg, info="error")) 
     1452 
    15191453                return 
    15201454            reader, ext = os.path.splitext(grid.file_name) 
    15211455            path = None 
    1522             if self.parent is not None:  
     1456            if self.parent is not None: 
    15231457                location = os.path.dirname(grid.file_name) 
    15241458                dlg = wx.FileDialog(self, "Save Project file", 
    1525                             location, grid.file_name, ext, wx.SAVE) 
     1459                                    location, grid.file_name, ext, wx.SAVE) 
    15261460                path = None 
    15271461                if dlg.ShowModal() == wx.ID_OK: 
     
    15311465                    if self.parent is not None: 
    15321466                        data = grid.get_grid_view() 
    1533                         self.parent.write_batch_tofile(data=data,  
    1534                                                file_name=path, 
    1535                                                details=grid.details) 
    1536      
     1467                        self.parent.write_batch_tofile(data=data, 
     1468                                                       file_name=path, 
     1469                                                       details=grid.details) 
     1470 
    15371471    def on_open(self, event): 
    15381472        """ 
     
    15411475        if self.parent is not None: 
    15421476            self.parent.on_read_batch_tofile(self) 
    1543              
     1477 
    15441478    def open_with_excel(self, event): 
    15451479        """ 
     
    15541488                name = self.panel.notebook.GetPageText(pos) 
    15551489                msg = " %s has not data to open on excel" % str(name) 
    1556                 wx.PostEvent(self.parent,  
    1557                              StatusEvent(status=msg, info="error"))  
    1558             
     1490                wx.PostEvent(self.parent, 
     1491                             StatusEvent(status=msg, info="error")) 
     1492 
    15591493                return 
    15601494            self.parent.open_with_externalapp(data=data, 
    1561                                               file_name=grid.file_name,  
     1495                                              file_name=grid.file_name, 
    15621496                                              details=grid.details) 
    1563              
     1497 
    15641498    def on_close(self, event): 
    15651499        """ 
    15661500        """ 
    15671501        self.Hide() 
    1568          
     1502 
    15691503    def on_append_column(self, event): 
    15701504        """ 
     
    15721506        """ 
    15731507        self.panel.add_column() 
    1574          
     1508 
    15751509    def set_data(self, data_inputs, data_outputs, details="", file_name=None): 
    15761510        """ 
    15771511        Set data 
    15781512        """ 
    1579         self.panel.notebook.set_data(data_inputs=data_inputs,  
    1580                             file_name=file_name, 
    1581                             details=details, 
    1582                             data_outputs=data_outputs) 
     1513        self.panel.notebook.set_data(data_inputs=data_inputs, 
     1514                                     file_name=file_name, 
     1515                                     details=details, 
     1516                                     data_outputs=data_outputs) 
    15831517 
    15841518    def add_table(self, event): 
     
    15871521        """ 
    15881522        # DO not event.Skip(): it will make 2 pages 
    1589         self.panel.notebook.add_empty_page()       
    1590        
     1523        self.panel.notebook.add_empty_page() 
     1524 
    15911525class BatchOutputFrame(wx.Frame): 
    15921526    """ 
     
    15971531        """ 
    15981532        :param parent: Window instantiating this dialog 
    1599         :param result: result to display in a grid or export to an external  
     1533        :param result: result to display in a grid or export to an external 
    16001534                application. 
    16011535        """ 
    1602         #kwds['style'] = wx.CAPTION|wx.SYSTEM_MENU  
     1536        #kwds['style'] = wx.CAPTION|wx.SYSTEM_MENU 
    16031537        wx.Frame.__init__(self, parent, *args, **kwds) 
    16041538        self.parent = parent 
     
    16171551        self.save_to_file = None 
    16181552        self._do_layout() 
    1619      
     1553 
    16201554    def _do_layout(self): 
    16211555        """ 
     
    16271561        selection_sizer = wx.GridBagSizer(5, 5) 
    16281562        button_sizer = wx.BoxSizer(wx.HORIZONTAL) 
    1629         text = "Open with %s" % self.parent.application_name  
    1630         self.local_app_selected = wx.RadioButton(self.panel, -1, text, 
    1631                                                 style=wx.RB_GROUP) 
     1563        text = "Open with %s" % self.parent.application_name 
     1564        self.local_app_selected = wx.RadioButton(self.panel, -1, text, style=wx.RB_GROUP) 
    16321565        self.Bind(wx.EVT_RADIOBUTTON, self.onselect, 
    1633                     id=self.local_app_selected.GetId()) 
     1566                  id=self.local_app_selected.GetId()) 
    16341567        text = "Open with Excel" 
    1635         self.external_app_selected  = wx.RadioButton(self.panel, -1, text) 
    1636         self.Bind(wx.EVT_RADIOBUTTON, self.onselect, 
    1637                     id=self.external_app_selected.GetId()) 
     1568        self.external_app_selected = wx.RadioButton(self.panel, -1, text) 
     1569        self.Bind(wx.EVT_RADIOBUTTON, self.onselect, id=self.external_app_selected.GetId()) 
    16381570        text = "Save to File" 
    16391571        self.save_to_file = wx.CheckBox(self.panel, -1, text) 
    1640         self.Bind(wx.EVT_CHECKBOX, self.onselect, 
    1641                     id=self.save_to_file.GetId()) 
     1572        self.Bind(wx.EVT_CHECKBOX, self.onselect, id=self.save_to_file.GetId()) 
    16421573        self.local_app_selected.SetValue(True) 
    16431574        self.external_app_selected.SetValue(False) 
    16441575        self.save_to_file.SetValue(False) 
    16451576        button_close = wx.Button(self.panel, -1, "Close") 
    1646         button_close.Bind(wx.EVT_BUTTON, id=button_close.GetId(), 
    1647                            handler=self.on_close) 
     1577        button_close.Bind(wx.EVT_BUTTON, id=button_close.GetId(), handler=self.on_close) 
    16481578        button_apply = wx.Button(self.panel, -1, "Apply") 
    1649         button_apply.Bind(wx.EVT_BUTTON, id=button_apply.GetId(), 
    1650                         handler=self.on_apply) 
     1579        button_apply.Bind(wx.EVT_BUTTON, id=button_apply.GetId(), handler=self.on_apply) 
    16511580        button_apply.SetFocus() 
    16521581        hint = "" 
     
    16571586        iy = 0 
    16581587        selection_sizer.Add(self.local_app_selected, (iy, ix), 
    1659                            (1, 1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     1588                            (1, 1), wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15) 
    16601589        iy += 1 
    16611590        selection_sizer.Add(self.external_app_selected, (iy, ix), 
    1662                            (1, 1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     1591                            (1, 1), wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15) 
    16631592        iy += 1 
    16641593        selection_sizer.Add(self.save_to_file, (iy, ix), 
    1665                            (1, 1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     1594                            (1, 1), wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15) 
    16661595        #contruction the sizer contaning button 
    1667         button_sizer.Add((20, 20), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     1596        button_sizer.Add((20, 20), 1, wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    16681597 
    16691598        button_sizer.Add(button_close, 0, 
    1670                         wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     1599                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15) 
    16711600        button_sizer.Add(button_apply, 0, 
    1672                                 wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 10) 
    1673         vbox.Add(hint_sizer, 0, wx.EXPAND|wx.ALL, 10) 
    1674         vbox.Add(wx.StaticLine(self.panel, -1),  0, wx.EXPAND, 0) 
    1675         vbox.Add(button_sizer, 0, wx.TOP|wx.BOTTOM, 10) 
     1601                         wx.LEFT | wx.RIGHT | wx.ADJUST_MINSIZE, 10) 
     1602        vbox.Add(hint_sizer, 0, wx.EXPAND | wx.ALL, 10) 
     1603        vbox.Add(wx.StaticLine(self.panel, -1), 0, wx.EXPAND, 0) 
     1604        vbox.Add(button_sizer, 0, wx.TOP | wx.BOTTOM, 10) 
    16761605        self.SetSizer(vbox) 
    1677          
     1606 
    16781607    def on_apply(self, event): 
    16791608        """ 
     
    16841613                                           data_outputs=self.data_outputs) 
    16851614        elif self.flag == 2: 
    1686             self.parent.open_with_externalapp(data=self.data,  
     1615            self.parent.open_with_externalapp(data=self.data, 
    16871616                                              file_name=self.file_name, 
    16881617                                              details=self.details) 
     
    16921621        """ 
    16931622        self.Close() 
    1694          
     1623 
    16951624    def onselect(self, event=None): 
    16961625        """ 
    16971626        Receive event and display data into third party application 
    16981627        or save data to file. 
    1699          
     1628 
    17001629        """ 
    17011630        if self.save_to_file.GetValue(): 
    1702             reader, ext = os.path.splitext(self.file_name) 
     1631            _, ext = os.path.splitext(self.file_name) 
    17031632            path = None 
    17041633            location = os.getcwd() 
    1705             if self.parent is not None:  
     1634            if self.parent is not None: 
    17061635                location = os.path.dirname(self.file_name) 
    17071636                dlg = wx.FileDialog(self, "Save Project file", 
    1708                             location, self.file_name, ext, wx.SAVE) 
     1637                                    location, self.file_name, ext, wx.SAVE) 
    17091638                path = None 
    17101639                if dlg.ShowModal() == wx.ID_OK: 
     
    17131642                if path != None: 
    17141643                    if self.parent is not None and  self.data is not None: 
    1715                         self.parent.write_batch_tofile(data=self.data,  
     1644                        self.parent.write_batch_tofile(data=self.data, 
    17161645                                                       file_name=path, 
    17171646                                                       details=self.details) 
     
    17211650            self.flag = 2 
    17221651        return self.flag 
    1723      
    1724    
    1725          
     1652 
     1653 
     1654 
    17261655if __name__ == "__main__": 
    17271656    app = wx.App() 
    1728     
     1657 
    17291658    try: 
    17301659        data = {} 
     
    17321661        for i in range(4): 
    17331662            j += 1 
    1734             data["index"+str(i)] = [i/j, i*j, i, i+j] 
    1735          
    1736         data_input =  copy.deepcopy(data)    
     1663            data["index" + str(i)] = [i / j, i * j, i, i + j] 
     1664 
     1665        data_input = copy.deepcopy(data) 
    17371666        data_input["index5"] = [10, 20, 40, 50] 
    17381667        frame = GridFrame(data_outputs=data, data_inputs=data_input) 
     
    17401669    except: 
    17411670        print sys.exc_value 
    1742          
     1671 
    17431672    app.MainLoop() 
  • src/sas/guiframe/gui_manager.py

    r064723b r091e71a2  
    55#This software was developed by the University of Tennessee as part of the 
    66#Distributed Data Analysis of Neutron Scattering Experiments (DANSE) 
    7 #project funded by the US National Science Foundation.  
     7#project funded by the US National Science Foundation. 
    88# 
    99#See the license text in license.txtz 
     
    5858        logging.info("Using application path: %s", app_path) 
    5959        return app_path 
    60      
     60 
    6161    # Next, try the current working directory 
    6262    if os.path.isfile(os.path.join(os.getcwd(), "custom_config.py")): 
    6363        logging.info("Using application path: %s", os.getcwd()) 
    6464        return os.path.abspath(os.getcwd()) 
    65      
     65 
    6666    # Finally, try the directory of the sasview module 
    6767    #TODO: gui_manager will have to know about sasview until we 
     
    7979        Returns the user's home directory 
    8080    """ 
    81     userdir = os.path.join(os.path.expanduser("~"),".sasview") 
     81    userdir = os.path.join(os.path.expanduser("~"), ".sasview") 
    8282    if not os.path.isdir(userdir): 
    8383        os.makedirs(userdir) 
    8484    return userdir 
    85      
     85 
    8686def _find_local_config(file, path): 
    8787    """ 
    8888        Find configuration file for the current application 
    89     """     
     89    """ 
    9090    config_module = None 
    9191    fObj = None 
    9292    try: 
    9393        fObj, path_config, descr = imp.find_module(file, [path]) 
    94         config_module = imp.load_module(file, fObj, path_config, descr)  
     94        config_module = imp.load_module(file, fObj, path_config, descr) 
    9595    except: 
    9696        logging.error("Error loading %s/%s: %s" % (path, file, sys.exc_value)) 
     
    102102 
    103103# Get APP folder 
    104 PATH_APP = get_app_dir()  
     104PATH_APP = get_app_dir() 
    105105DATAPATH = PATH_APP 
    106106 
    107 # GUI always starts from the App folder  
     107# GUI always starts from the App folder 
    108108#os.chdir(PATH_APP) 
    109109# Read in the local config, which can either be with the main 
     
    113113    config = _find_local_config('local_config', os.getcwd()) 
    114114    if config is None: 
    115         # Didn't find local config, load the default  
     115        # Didn't find local config, load the default 
    116116        import sas.guiframe.config as config 
    117         logging.info("using default local_config")         
     117        logging.info("using default local_config") 
    118118    else: 
    119         logging.info("found local_config in %s" % os.getcwd())   
     119        logging.info("found local_config in %s" % os.getcwd()) 
    120120else: 
    121     logging.info("found local_config in %s" % PATH_APP)      
    122             
     121    logging.info("found local_config in %s" % PATH_APP) 
     122 
    123123from sas.guiframe.customdir  import SetupCustom 
    124124c_conf_dir = SetupCustom().setup_dir(PATH_APP) 
     
    154154    PLOPANEL_WIDTH = custom_config.PLOPANEL_WIDTH 
    155155    DATAPANEL_WIDTH = custom_config.DATAPANEL_WIDTH 
    156     GUIFRAME_WIDTH = custom_config.GUIFRAME_WIDTH  
     156    GUIFRAME_WIDTH = custom_config.GUIFRAME_WIDTH 
    157157    GUIFRAME_HEIGHT = custom_config.GUIFRAME_HEIGHT 
    158     CONTROL_WIDTH = custom_config.CONTROL_WIDTH  
     158    CONTROL_WIDTH = custom_config.CONTROL_WIDTH 
    159159    CONTROL_HEIGHT = custom_config.CONTROL_HEIGHT 
    160160    DEFAULT_PERSPECTIVE = custom_config.DEFAULT_PERSPECTIVE 
     
    173173    PLOPANEL_WIDTH = config.PLOPANEL_WIDTH 
    174174    DATAPANEL_WIDTH = config.DATAPANEL_WIDTH 
    175     GUIFRAME_WIDTH = config.GUIFRAME_WIDTH  
     175    GUIFRAME_WIDTH = config.GUIFRAME_WIDTH 
    176176    GUIFRAME_HEIGHT = config.GUIFRAME_HEIGHT 
    177     CONTROL_WIDTH = -1  
     177    CONTROL_WIDTH = -1 
    178178    CONTROL_HEIGHT = -1 
    179179    DEFAULT_PERSPECTIVE = None 
     
    183183DEFAULT_STYLE = config.DEFAULT_STYLE 
    184184 
    185 PLUGIN_STATE_EXTENSIONS =  config.PLUGIN_STATE_EXTENSIONS 
     185PLUGIN_STATE_EXTENSIONS = config.PLUGIN_STATE_EXTENSIONS 
    186186OPEN_SAVE_MENU = config.OPEN_SAVE_PROJECT_MENU 
    187187VIEW_MENU = config.VIEW_MENU 
     
    214214        PARENT_FRAME = wx.Frame 
    215215        CHILD_FRAME = wx.Frame 
    216      
     216 
    217217class ViewerFrame(PARENT_FRAME): 
    218218    """ 
    219219    Main application frame 
    220220    """ 
    221      
    222     def __init__(self, parent, title,  
     221 
     222    def __init__(self, parent, title, 
    223223                 size=(GUIFRAME_WIDTH, GUIFRAME_HEIGHT), 
    224                  gui_style=DEFAULT_STYLE,  
     224                 gui_style=DEFAULT_STYLE, 
    225225                 style=wx.DEFAULT_FRAME_STYLE, 
    226226                 pos=wx.DefaultPosition): 
     
    232232        # title 
    233233        self.title = title 
    234         self.__gui_style = gui_style        
     234        self.__gui_style = gui_style 
    235235        path = os.path.dirname(__file__) 
    236         temp_path = os.path.join(path,'images') 
    237         ico_file = os.path.join(temp_path,'ball.ico') 
     236        temp_path = os.path.join(path, 'images') 
     237        ico_file = os.path.join(temp_path, 'ball.ico') 
    238238        if os.path.isfile(ico_file): 
    239239            self.SetIcon(wx.Icon(ico_file, wx.BITMAP_TYPE_ICO)) 
    240240        else: 
    241             temp_path = os.path.join(os.getcwd(),'images') 
    242             ico_file = os.path.join(temp_path,'ball.ico') 
     241            temp_path = os.path.join(os.getcwd(), 'images') 
     242            ico_file = os.path.join(temp_path, 'ball.ico') 
    243243            if os.path.isfile(ico_file): 
    244244                self.SetIcon(wx.Icon(ico_file, wx.BITMAP_TYPE_ICO)) 
    245245            else: 
    246246                ico_file = os.path.join(os.path.dirname(os.path.sys.path[0]), 
    247                              'images', 'ball.ico') 
     247                                        'images', 'ball.ico') 
    248248                if os.path.isfile(ico_file): 
    249249                    self.SetIcon(wx.Icon(ico_file, wx.BITMAP_TYPE_ICO)) 
    250250        self.path = PATH_APP 
    251         self.application_name = APPLICATION_NAME  
     251        self.application_name = APPLICATION_NAME 
    252252        ## Application manager 
    253253        self._input_file = None 
     
    294294 
    295295        # Default locations 
    296         self._default_save_location = DEFAULT_OPEN_FOLDER        
     296        self._default_save_location = DEFAULT_OPEN_FOLDER 
    297297        # Welcome panel 
    298298        self.defaultPanel = None 
     
    303303        self.cpanel_on_focus = None 
    304304 
    305         self.loader = Loader()    
     305        self.loader = Loader() 
    306306        #data manager 
    307307        self.batch_on = False 
     
    310310        self._data_panel = None#DataPanel(parent=self) 
    311311        if self.panel_on_focus is not None: 
    312             self._data_panel.set_panel_on_focus( 
    313                                 self.panel_on_focus.window_caption) 
     312            self._data_panel.set_panel_on_focus(self.panel_on_focus.window_caption) 
    314313        # list of plot panels in schedule to full redraw 
    315314        self.schedule = False 
     
    318317        self.schedule_full_draw_list = [] 
    319318        self.idletimer = wx.CallLater(TIME_FACTOR, self._onDrawIdle) 
    320          
     319 
    321320        self.batch_frame = GridFrame(parent=self) 
    322321        self.batch_frame.Hide() 
    323322        self.on_batch_selection(event=None) 
    324323        self.add_icon() 
    325          
     324 
    326325        # Register the close event so it calls our own method 
    327326        wx.EVT_CLOSE(self, self.WindowClose) 
     
    338337        # Preferred window size 
    339338        self._window_width, self._window_height = size 
    340          
     339 
    341340    def add_icon(self): 
    342341        """ 
    343         get list of child and attempt to add the default icon  
    344         """ 
    345          
    346         list_children = self.GetChildren()  
     342        get list of child and attempt to add the default icon 
     343        """ 
     344 
     345        list_children = self.GetChildren() 
    347346        for frame in list_children: 
    348347            self.put_icon(frame) 
    349          
    350     def put_icon(self, frame):  
     348 
     349    def put_icon(self, frame): 
    351350        """ 
    352351        Put icon on the tap of a panel 
     
    358357                    frame.SetIcon(icon) 
    359358                except: 
    360                     pass   
    361                  
     359                    pass 
     360 
    362361    def get_client_size(self): 
    363362        """ 
     
    370369        if toolbar != None: 
    371370            _, tb_h = toolbar.GetSizeTuple() 
    372             height -= tb_h  
     371            height -= tb_h 
    373372        return width, height 
    374      
     373 
    375374    def on_change_categories(self, evt): 
    376375        # ILL 
     
    382381 
    383382        if fitpanel != None: 
    384             for i in range(0,fitpanel.GetPageCount()): 
     383            for i in range(0, fitpanel.GetPageCount()): 
    385384                fitpanel.GetPage(i)._populate_listbox() 
    386385 
    387  
    388  
    389386    def on_set_batch_result(self, data_outputs, data_inputs=None, 
    390                              plugin_name=""): 
     387                            plugin_name=""): 
    391388        """ 
    392389        Display data into a grid in batch mode and show the grid 
     
    395392        time_str = time.strftime("%b %d %H;%M of %Y", t) 
    396393        details = "File Generated by %s : %s" % (APPLICATION_NAME, 
    397                                                      str(plugin_name)) 
    398         details += "on %s.\n" % time_str  
     394                                                 str(plugin_name)) 
     395        details += "on %s.\n" % time_str 
    399396        ext = ".csv" 
    400         file_name = "Batch_" + str(plugin_name)+ "_" + time_str + ext 
     397        file_name = "Batch_" + str(plugin_name) + "_" + time_str + ext 
    401398        file_name = self._default_save_location + str(file_name) 
    402          
     399 
    403400        self.open_with_localapp(file_name=file_name, 
    404401                                details=details, 
    405402                                data_inputs=data_inputs, 
    406                                     data_outputs=data_outputs) 
    407       
    408      
     403                                data_outputs=data_outputs) 
     404 
    409405    def open_with_localapp(self, data_inputs=None, details="", file_name=None, 
    410406                           data_outputs=None): 
     
    413409        :param data: dictionary of string and list of items 
    414410        """ 
    415         self.batch_frame.set_data(data_inputs=data_inputs,  
     411        self.batch_frame.set_data(data_inputs=data_inputs, 
    416412                                  data_outputs=data_outputs, 
    417413                                  details=details, 
    418414                                  file_name=file_name) 
    419415        self.show_batch_frame(None) 
    420          
     416 
    421417    def on_read_batch_tofile(self, base): 
    422418        """ 
     
    428424            self._default_save_location = os.getcwd() 
    429425        wildcard = "(*.csv; *.txt)|*.csv; *.txt" 
    430         dlg = wx.FileDialog(base,  
    431                             "Choose a file",  
     426        dlg = wx.FileDialog(base, 
     427                            "Choose a file", 
    432428                            self._default_save_location, "", 
    433                              wildcard) 
     429                            wildcard) 
    434430        if dlg.ShowModal() == wx.ID_OK: 
    435431            path = dlg.GetPath() 
     
    440436            self.read_batch_tofile(file_name=path) 
    441437        except: 
    442             msg = "Error occurred when reading the file; %s\n"% path 
    443             msg += "%s\n"% sys.exc_value 
     438            msg = "Error occurred when reading the file; %s\n" % path 
     439            msg += "%s\n" % sys.exc_value 
    444440            wx.PostEvent(self, StatusEvent(status=msg, 
    445                                              info="error")) 
    446              
     441                                           info="error")) 
     442 
    447443    def read_batch_tofile(self, file_name): 
    448444        """ 
     
    457453        if ext.lower() == ".csv": 
    458454            separator = "," 
    459         buffer = fd.read() 
    460         lines = buffer.split('\n') 
     455        fd_buffer = fd.read() 
     456        lines = fd_buffer.split('\n') 
    461457        fd.close() 
    462         column_names_line  = "" 
     458        column_names_line = "" 
    463459        index = None 
    464460        details = "" 
     
    487483            if count >= 2: 
    488484                column_names_line = line 
    489                 break  
    490             
     485                break 
     486 
    491487        if column_names_line.strip() == "" or index is None: 
    492             return  
     488            return 
    493489 
    494490        col_name_toks = column_names_line.split(separator) 
     
    500496                try: 
    501497                    float(c_name) 
    502                     col_name = "Column %s"% str(col_index + 1) 
     498                    col_name = "Column %s" % str(col_index + 1) 
    503499                    index_min = index 
    504500                except: 
    505501                    col_name = c_name 
    506502                    index_min = index + 1 
    507                 data[col_name] = [ lines[row].split(separator)[c_index] 
    508                                 for row in range(index_min, len(lines)-1)] 
     503                data[col_name] = [lines[row].split(separator)[c_index] 
     504                                  for row in range(index_min, len(lines) - 1)] 
    509505                c_index += 1 
    510                  
     506 
    511507        self.open_with_localapp(data_outputs=data, data_inputs=None, 
    512508                                file_name=file_name, details=details) 
    513          
     509 
    514510    def write_batch_tofile(self, data, file_name, details=""): 
    515511        """ 
     
    541537        max_index = max(max_list) 
    542538        index = 0 
    543         while(index < max_index): 
     539        while index < max_index: 
    544540            for value_list in data.values(): 
    545541                if index < len(value_list): 
     
    552548            index += 1 
    553549        fd.close() 
    554              
     550 
    555551    def open_with_externalapp(self, data, file_name, details=""): 
    556552        """ 
     
    559555        if not os.path.exists(file_name): 
    560556            self.write_batch_tofile(data=data, file_name=file_name, 
    561                                                details=details) 
     557                                    details=details) 
    562558        try: 
    563559            from win32com.client import Dispatch 
    564             excel_app = Dispatch('Excel.Application')      
    565             wb = excel_app.Workbooks.Open(file_name)  
     560            excel_app = Dispatch('Excel.Application') 
     561            excel_app.Workbooks.Open(file_name) 
    566562            excel_app.Visible = 1 
    567563        except: 
     
    570566            msg += "check that %s really exists.\n" % str(file_name) 
    571567            wx.PostEvent(self, StatusEvent(status=msg, 
    572                                              info="error")) 
    573              
    574           
     568                                           info="error")) 
     569 
    575570    def on_batch_selection(self, event=None): 
    576571        """ 
     
    583578        for plug in self.plugins: 
    584579            plug.set_batch_selection(self.batch_on) 
    585              
     580 
    586581    def on_color_selection(self, event): 
    587582        """ 
    588583        :param event: contains parameters for id and color 
    589         """  
    590         color, id = event.color, event.id 
     584        """ 
     585        color, event_id = event.color, event.id 
    591586        for plug in self.plugins: 
    592             plug.add_color(color, id) 
    593          
    594          
     587            plug.add_color(color, event_id) 
     588 
    595589    def setup_custom_conf(self): 
    596590        """ 
     
    599593        if custom_config == None: 
    600594            return 
    601          
     595 
    602596        if not FIXED_PANEL: 
    603597            self.__gui_style &= (~GUIFRAME.FIXED_PANEL) 
     
    611605 
    612606        if WELCOME_PANEL_SHOW: 
    613             self.__gui_style |= GUIFRAME.WELCOME_PANEL_ON    
    614               
     607            self.__gui_style |= GUIFRAME.WELCOME_PANEL_ON 
     608 
    615609    def set_custom_default_perspective(self): 
    616610        """ 
     
    622616            try: 
    623617                if plugin.sub_menu == DEFAULT_PERSPECTIVE: 
    624                      
     618 
    625619                    plugin.on_perspective(event=None) 
    626620                    frame = plugin.get_frame() 
     
    629623                else: 
    630624                    frame = plugin.get_frame() 
    631                     frame.Show(False)  
     625                    frame.Show(False) 
    632626            except: 
    633                 pass   
    634         return           
    635                  
     627                pass 
     628        return 
     629 
    636630    def on_load_data(self, event): 
    637631        """ 
     
    640634        if self._data_plugin is not None: 
    641635            self._data_plugin.load_data(event) 
    642              
     636 
    643637    def get_current_perspective(self): 
    644638        """ 
     
    652646        """ 
    653647        return self._default_save_location 
    654      
     648 
    655649    def set_input_file(self, input_file): 
    656650        """ 
     
    658652        """ 
    659653        self._input_file = input_file 
    660          
     654 
    661655    def get_data_manager(self): 
    662656        """ 
     
    664658        """ 
    665659        return self._data_manager 
    666      
     660 
    667661    def get_toolbar(self): 
    668662        """ 
     
    670664        """ 
    671665        return self._toolbar 
    672      
     666 
    673667    def set_panel_on_focus(self, event): 
    674668        """ 
     
    698692                self.enable_edit_menu() 
    699693 
    700     def disable_app_menu(self, p_panel=None):   
     694    def disable_app_menu(self, p_panel=None): 
    701695        """ 
    702696        Disables all menus in the menubar 
    703697        """ 
    704698        return 
    705      
    706     def send_focus_to_datapanel(self, name):   
     699 
     700    def send_focus_to_datapanel(self, name): 
    707701        """ 
    708702        Send focusing on ID to data explorer 
     
    710704        if self._data_panel != None: 
    711705            self._data_panel.set_panel_on_focus(name) 
    712              
     706 
    713707    def set_panel_on_focus_helper(self): 
    714708        """ 
     
    722716            combo_title = str(self.panel_on_focus.window_caption) 
    723717            combo.SetStringSelection(combo_title) 
    724             combo.SetToolTip( wx.ToolTip(combo_title ))  
     718            combo.SetToolTip(wx.ToolTip(combo_title)) 
    725719        elif self.panel_on_focus != self._data_panel: 
    726720            cpanel = self.panel_on_focus 
     
    728722                cpanel.on_tap_focus() 
    729723                self.cpanel_on_focus = self.panel_on_focus 
    730        
     724 
    731725    def reset_bookmark_menu(self, panel): 
    732726        """ 
    733727        Reset Bookmark menu list 
    734          
     728 
    735729        : param panel: a control panel or tap where the bookmark is 
    736730        """ 
     
    745739                if pos < 3: 
    746740                    continue 
    747                 id =  bitem.GetId() 
     741                id = bitem.GetId() 
    748742                label = bitem.GetLabel() 
    749743                self._toolbar.append_bookmark_item(id, label) 
    750744                wx.EVT_MENU(self, id, cpanel._back_to_bookmark) 
    751745            self._toolbar.Realize() 
    752               
     746 
    753747 
    754748    def build_gui(self): 
     
    771765        self._setup_layout() 
    772766        self._add_menu_application() 
    773          
     767 
    774768        # Set up the menu 
    775769        self._add_current_plugin_menu() 
     
    781775        if not wx.VERSION_STRING >= '3.0.0.0': 
    782776            self.SetMenuBar(self._menubar) 
    783          
     777 
    784778        try: 
    785779            self.load_from_cmd(self._input_file) 
    786780        except: 
    787             msg = "%s Cannot load file %s\n" %(str(APPLICATION_NAME),  
    788                                              str(self._input_file)) 
     781            msg = "%s Cannot load file %s\n" % (str(APPLICATION_NAME), 
     782                                                str(self._input_file)) 
    789783            msg += str(sys.exc_value) + '\n' 
    790784            logging.error(msg) 
     
    798792        self._check_update(None) 
    799793 
    800     def _setup_extra_custom(self):   
     794    def _setup_extra_custom(self): 
    801795        """ 
    802796        Set up toolbar and welcome view if needed 
     
    804798        style = self.__gui_style & GUIFRAME.TOOLBAR_ON 
    805799        if (style == GUIFRAME.TOOLBAR_ON) & (not self._toolbar.IsShown()): 
    806             self._on_toggle_toolbar()  
    807          
     800            self._on_toggle_toolbar() 
     801 
    808802        # Set Custom deafult start page 
    809803        welcome_style = self.__gui_style & GUIFRAME.WELCOME_PANEL_ON 
    810804        if welcome_style == GUIFRAME.WELCOME_PANEL_ON: 
    811805            self.show_welcome_panel(None) 
    812        
     806 
    813807    def _setup_layout(self): 
    814808        """ 
     
    822816        self._load_panels() 
    823817        self.set_default_perspective() 
    824          
     818 
    825819    def SetStatusText(self, *args, **kwds): 
    826820        """ 
     
    828822        number = self.sb.get_msg_position() 
    829823        wx.Frame.SetStatusText(self, number=number, *args, **kwds) 
    830          
     824 
    831825    def PopStatusText(self, *args, **kwds): 
    832826        """ 
     
    834828        field = self.sb.get_msg_position() 
    835829        wx.Frame.PopStatusText(self, field=field) 
    836          
     830 
    837831    def PushStatusText(self, *args, **kwds): 
    838832        """ 
    839             FIXME: No message is passed. What is this supposed to do?  
     833            FIXME: No message is passed. What is this supposed to do? 
    840834        """ 
    841835        field = self.sb.get_msg_position() 
    842         wx.Frame.PushStatusText(self, field=field,  
    843                         string="FIXME: PushStatusText called without text") 
     836        wx.Frame.PushStatusText(self, field=field, 
     837                                string="FIXME: PushStatusText called without text") 
    844838 
    845839    def add_perspective(self, plugin): 
     
    855849                msg = "Plugin %s already loaded" % plugin.sub_menu 
    856850                logging.info(msg) 
    857                 is_loaded = True   
     851                is_loaded = True 
    858852        if not is_loaded: 
    859             self.plugins.append(plugin)   
     853            self.plugins.append(plugin) 
    860854            msg = "Plugin %s appended" % plugin.sub_menu 
    861855            logging.info(msg) 
    862        
     856 
    863857    def _get_local_plugins(self): 
    864858        """ 
    865         get plugins local to guiframe and others  
     859        get plugins local to guiframe and others 
    866860        """ 
    867861        plugins = [] 
     
    888882                msg += "cannot import plotting plugin.\n %s" % sys.exc_value 
    889883                logging.error(msg) 
    890       
     884 
    891885        return plugins 
    892      
     886 
    893887    def _find_plugins(self, dir="perspectives"): 
    894888        """ 
    895889        Find available perspective plug-ins 
    896          
     890 
    897891        :param dir: directory in which to look for plug-ins 
    898          
     892 
    899893        :return: list of plug-ins 
    900          
     894 
    901895        """ 
    902896        plugins = [] 
    903897        # Go through files in panels directory 
    904898        try: 
    905             list = os.listdir(dir) 
     899            file_list = os.listdir(dir) 
    906900            ## the default panel is the panel is the last plugin added 
    907             for item in list: 
     901            for item in file_list: 
    908902                toks = os.path.splitext(os.path.basename(item)) 
    909903                name = '' 
     
    924918                        else: 
    925919                            (file, path, info) = imp.find_module(name, path) 
    926                             module = imp.load_module( name, file, item, info) 
     920                            module = imp.load_module(name, file, item, info) 
    927921                        if hasattr(module, "PLUGIN_ID"): 
    928                             try:  
     922                            try: 
    929923                                plug = module.Plugin() 
    930924                                if plug.set_default_perspective(): 
    931925                                    self._current_perspective = plug 
    932926                                plugins.append(plug) 
    933                                  
     927 
    934928                                msg = "Found plug-in: %s" % module.PLUGIN_ID 
    935929                                logging.info(msg) 
     
    947941            # Should raise and catch at a higher level and  
    948942            # display error on status bar 
    949             pass   
     943            logging.error(sys.exc_value) 
    950944 
    951945        return plugins 
     
    963957            panel_width = DATAPANEL_WIDTH 
    964958        panel_height = int(self._window_height) 
    965         style = self.__gui_style & (GUIFRAME.MANAGER_ON) 
    966959        if self._data_panel is not None  and (p == self._data_panel): 
    967960            return panel_width, panel_height 
     
    976969            return self._window_width, panel_height 
    977970        return panel_width, panel_height 
    978      
     971 
    979972    def _load_panels(self): 
    980973        """ 
     
    991984                ps = item.get_panels(self) 
    992985                panels.extend(ps) 
    993          
     986 
    994987        # Set up welcome panel 
    995988        #TODO: this needs serious simplification 
     
    1000993            self.defaultPanel.set_frame(welcome_panel) 
    1001994            welcome_panel.Show(False) 
    1002          
     995 
    1003996        self.panels["default"] = self.defaultPanel 
    1004997        size_t_bar = 70 
     
    10121005                frame.SetPosition((0, mac_pos_y + size_t_bar)) 
    10131006            frame.Show(True) 
    1014         #add data panel  
     1007        #add data panel 
    10151008        win = MDIFrame(self, None, 'None', (100, 200)) 
    1016         data_panel = DataPanel(parent=win,  id=-1) 
     1009        data_panel = DataPanel(parent=win, id=-1) 
    10171010        win.set_panel(data_panel) 
    10181011        self.panels["data_panel"] = data_panel 
     
    10291022        for panel_class in panels: 
    10301023            frame = panel_class.get_frame() 
    1031             id = wx.NewId() 
     1024            wx_id = wx.NewId() 
    10321025            # Check whether we need to put this panel in the center pane 
    10331026            if hasattr(panel_class, "CENTER_PANE") and panel_class.CENTER_PANE: 
    10341027                w, h = self._get_panels_size(panel_class) 
    10351028                if panel_class.CENTER_PANE: 
    1036                     self.panels[str(id)] = panel_class 
     1029                    self.panels[str(wx_id)] = panel_class 
    10371030                    _, pos_y = frame.GetPositionTuple() 
    10381031                    frame.SetPosition((d_panel_width + 1, pos_y)) 
     
    10431036                continue 
    10441037            else: 
    1045                 self.panels[str(id)] = panel_class 
     1038                self.panels[str(wx_id)] = panel_class 
    10461039                frame.SetSize((w, h)) 
    10471040                frame.Show(False) 
     
    10611054            else: 
    10621055                self.SetSize((self._window_width, win_height)) 
    1063          
     1056 
    10641057    def update_data(self, prev_data, new_data): 
    10651058        """ 
    10661059        Update the data. 
    10671060        """ 
    1068         prev_id, data_state = self._data_manager.update_data( 
     1061        prev_id, data_state = self._data_manager.update_data( \ 
    10691062                              prev_data=prev_data, new_data=new_data) 
    1070          
     1063 
    10711064        self._data_panel.remove_by_id(prev_id) 
    10721065        self._data_panel.load_data_list(data_state) 
    1073          
     1066 
    10741067    def update_theory(self, data_id, theory, state=None): 
    10751068        """ 
    10761069        Update the theory 
    1077         """  
    1078         data_state = self._data_manager.update_theory(data_id=data_id,  
    1079                                          theory=theory, 
    1080                                          state=state)   
     1070        """ 
     1071        data_state = self._data_manager.update_theory(data_id=data_id, 
     1072                                                      theory=theory, 
     1073                                                      state=state) 
    10811074        wx.CallAfter(self._data_panel.load_data_list, data_state) 
    1082          
     1075 
    10831076    def onfreeze(self, theory_id): 
    10841077        """ 
     
    10881081        for data_state in data_state_list.values(): 
    10891082            new_plot = data_state.get_data() 
    1090              
     1083 
    10911084            wx.PostEvent(self, NewPlotEvent(plot=new_plot, 
    1092                                              title=new_plot.title)) 
    1093          
     1085                                            title=new_plot.title)) 
     1086 
    10941087    def freeze(self, data_id, theory_id): 
    10951088        """ 
    10961089        """ 
    1097         data_state_list = self._data_manager.freeze_theory(data_id=data_id,  
    1098                                                 theory_id=theory_id) 
     1090        data_state_list = self._data_manager.freeze_theory(data_id=data_id, 
     1091                                                           theory_id=theory_id) 
    10991092        self._data_panel.load_data_list(list=data_state_list) 
    11001093        for data_state in data_state_list.values(): 
    11011094            new_plot = data_state.get_data() 
    11021095            wx.PostEvent(self, NewPlotEvent(plot=new_plot, 
    1103                                              title=new_plot.title)) 
    1104          
     1096                                            title=new_plot.title)) 
     1097 
    11051098    def delete_data(self, data): 
    11061099        """ 
     
    11081101        """ 
    11091102        self._current_perspective.delete_data(data) 
    1110          
    1111      
     1103 
     1104 
    11121105    def get_context_menu(self, plotpanel=None): 
    11131106        """ 
    1114         Get the context menu items made available  
    1115         by the different plug-ins.  
     1107        Get the context menu items made available 
     1108        by the different plug-ins. 
    11161109        This function is used by the plotting module 
    11171110        """ 
     
    11221115            menu_list.extend(item.get_context_menu(plotpanel=plotpanel)) 
    11231116        return menu_list 
    1124          
     1117 
    11251118    def get_current_context_menu(self, plotpanel=None): 
    11261119        """ 
    1127         Get the context menu items made available  
    1128         by the current plug-in.  
     1120        Get the context menu items made available 
     1121        by the current plug-in. 
    11291122        This function is used by the plotting module 
    11301123        """ 
     
    11361129            menu_list.extend(item.get_context_menu(plotpanel=plotpanel)) 
    11371130        return menu_list 
    1138              
     1131 
    11391132    def on_panel_close(self, event): 
    11401133        """ 
     
    11501143                break 
    11511144        self.cpanel_on_focus.SetFocus() 
    1152      
    1153      
     1145 
     1146 
    11541147    def popup_panel(self, p): 
    11551148        """ 
    11561149        Add a panel object to the AUI manager 
    1157          
     1150 
    11581151        :param p: panel object to add to the AUI manager 
    1159          
     1152 
    11601153        :return: ID of the event associated with the new panel [int] 
    1161          
     1154 
    11621155        """ 
    11631156        ID = wx.NewId() 
     
    11791172        # Append nummber 
    11801173        captions = self._get_plotpanel_captions() 
     1174        #FIXME: Fix this aweful loop 
    11811175        while (1): 
    1182             caption = windowcaption + '%s'% str(self.graph_num) 
     1176            caption = windowcaption + '%s' % str(self.graph_num) 
    11831177            if caption not in captions: 
    11841178                break 
     
    11881182                break 
    11891183        if p.window_caption.split()[0] not in NOT_SO_GRAPH_LIST: 
    1190             p.window_caption = caption  
     1184            p.window_caption = caption 
    11911185        p.window_name = windowname + str(self.graph_num) 
    1192          
     1186 
    11931187        p.frame.SetTitle(p.window_caption) 
    11941188        p.frame.name = p.window_name 
     
    12141208                    self._data_panel.cb_plotpanel.Append(str(caption), p) 
    12151209        return ID 
    1216      
     1210 
    12171211    def _get_plotpanel_captions(self): 
    12181212        """ 
    12191213        Get all the plotpanel cations 
    1220          
     1214 
    12211215        : return: list of captions 
    12221216        """ 
     
    12241218        for Id in self.plot_panels.keys(): 
    12251219            captions.append(self.plot_panels[Id].window_caption) 
    1226          
     1220 
    12271221        return captions 
    1228          
     1222 
    12291223    def _setup_tool_bar(self): 
    12301224        """ 
     
    12421236        self._update_toolbar_helper() 
    12431237        self._on_toggle_toolbar(event=None) 
    1244      
     1238 
    12451239    def _update_toolbar_helper(self): 
    12461240        """ 
     
    12491243        application_name = 'No Selected Analysis' 
    12501244        panel_name = 'No Panel on Focus' 
    1251         c_panel = self.cpanel_on_focus         
     1245        c_panel = self.cpanel_on_focus 
    12521246        if self._toolbar is  None: 
    12531247            return 
     
    12621256                c_panel_state = None 
    12631257        self._toolbar.update_toolbar(c_panel_state) 
    1264         self._toolbar.update_button(application_name=application_name,  
    1265                                         panel_name=panel_name) 
     1258        self._toolbar.update_button(application_name=application_name, 
     1259                                    panel_name=panel_name) 
    12661260        self._toolbar.Realize() 
    1267          
     1261 
    12681262    def _add_menu_tool(self): 
    12691263        """ 
     
    12871281            if self._tool_menu is not None: 
    12881282                self._menubar.Append(self._tool_menu, '&Tool') 
    1289                  
     1283 
    12901284    def _add_current_plugin_menu(self): 
    12911285        """ 
    12921286        add current plugin menu 
    12931287        Look for plug-in menus 
    1294         Add available plug-in sub-menus.  
     1288        Add available plug-in sub-menus. 
    12951289        """ 
    12961290        if self._menubar is None or self._current_perspective is None \ 
    1297             or self._menubar.GetMenuCount()==0: 
     1291            or self._menubar.GetMenuCount() == 0: 
    12981292            return 
    12991293        #replace or add a new menu for the current plugin 
    1300         
     1294 
    13011295        pos = self._menubar.FindMenu(str(self._applications_menu_name)) 
    13021296        if pos != -1: 
     
    13041298            if menu_list: 
    13051299                for (menu, name) in menu_list: 
    1306                     hidden_menu = self._menubar.Replace(pos, menu, name)  
    1307                     self._applications_menu_name = name  
    1308                 #self._applications_menu_pos = pos 
     1300                    self._menubar.Replace(pos, menu, name) 
     1301                    self._applications_menu_name = name 
    13091302            else: 
    1310                 hidden_menu = self._menubar.Remove(pos) 
     1303                self._menubar.Remove(pos) 
    13111304                self._applications_menu_name = None 
    13121305            #get the position of the menu when it first added 
    1313             self._applications_menu_pos = pos  
    1314              
     1306            self._applications_menu_pos = pos 
     1307 
    13151308        else: 
    13161309            menu_list = self._current_perspective.populate_menu(self) 
     
    13201313                        self._menubar.Append(menu, name) 
    13211314                    else: 
    1322                         self._menubar.Insert(self._applications_menu_pos,  
     1315                        self._menubar.Insert(self._applications_menu_pos, 
    13231316                                             menu, name) 
    13241317                    self._applications_menu_name = name 
    1325                    
     1318 
    13261319    def _add_help_menu(self): 
    13271320        """ 
    13281321        add help menu to menu bar.  Includes welcome page, about page, 
    1329         tutorial PDF and documentation pages.  
     1322        tutorial PDF and documentation pages. 
    13301323        """ 
    13311324        # Help menu 
     
    13361329            # add the welcome panel menu item 
    13371330            if config.WELCOME_PANEL_ON and self.defaultPanel is not None: 
    1338                 id = wx.NewId() 
    1339                 self._help_menu.Append(id, '&Welcome', '') 
    1340                 wx.EVT_MENU(self, id, self.show_welcome_panel) 
     1331                wx_id = wx.NewId() 
     1332                self._help_menu.Append(wx_id, '&Welcome', '') 
     1333                wx.EVT_MENU(self, wx_id, self.show_welcome_panel) 
    13411334 
    13421335        self._help_menu.AppendSeparator() 
    1343         id = wx.NewId() 
    1344         self._help_menu.Append(id, '&Documentation', '') 
    1345         wx.EVT_MENU(self, id, self._onSphinxDocs) 
    1346  
    1347         if config._do_tutorial and (IS_WIN or sys.platform =='darwin'): 
     1336        wx_id = wx.NewId() 
     1337        self._help_menu.Append(wx_id, '&Documentation', '') 
     1338        wx.EVT_MENU(self, wx_id, self._onSphinxDocs) 
     1339 
     1340        if config._do_tutorial and (IS_WIN or sys.platform == 'darwin'): 
    13481341            self._help_menu.AppendSeparator() 
    1349             id = wx.NewId() 
    1350             self._help_menu.Append(id, '&Tutorial', 'Software tutorial') 
    1351             wx.EVT_MENU(self, id, self._onTutorial) 
    1352              
     1342            wx_id = wx.NewId() 
     1343            self._help_menu.Append(wx_id, '&Tutorial', 'Software tutorial') 
     1344            wx.EVT_MENU(self, wx_id, self._onTutorial) 
     1345 
    13531346        if config._do_acknowledge: 
    13541347            self._help_menu.AppendSeparator() 
    1355             id = wx.NewId() 
    1356             self._help_menu.Append(id, '&Acknowledge', 'Acknowledging SasView') 
    1357             wx.EVT_MENU(self, id, self._onAcknowledge) 
    1358          
     1348            wx_id = wx.NewId() 
     1349            self._help_menu.Append(wx_id, '&Acknowledge', 'Acknowledging SasView') 
     1350            wx.EVT_MENU(self, wx_id, self._onAcknowledge) 
     1351 
    13591352        if config._do_aboutbox: 
    13601353            self._help_menu.AppendSeparator() 
    13611354            self._help_menu.Append(wx.ID_ABOUT, '&About', 'Software information') 
    13621355            wx.EVT_MENU(self, wx.ID_ABOUT, self._onAbout) 
    1363          
     1356 
    13641357        # Checking for updates 
    1365         id = wx.NewId() 
    1366         self._help_menu.Append(id,'&Check for update',  
    1367          'Check for the latest version of %s' % config.__appname__) 
    1368         wx.EVT_MENU(self, id, self._check_update) 
     1358        wx_id = wx.NewId() 
     1359        self._help_menu.Append(wx_id, '&Check for update', 
     1360                               'Check for the latest version of %s' % config.__appname__) 
     1361        wx.EVT_MENU(self, wx_id, self._check_update) 
    13691362        self._menubar.Append(self._help_menu, '&Help') 
    1370              
     1363 
    13711364    def _add_menu_view(self): 
    13721365        """ 
     
    13761369            return 
    13771370        self._view_menu = wx.Menu() 
    1378          
    1379         id = wx.NewId() 
     1371 
     1372        wx_id = wx.NewId() 
    13801373        hint = "Display the Grid Window for batch results etc." 
    1381         self._view_menu.Append(id, '&Show Grid Window', hint)  
    1382         wx.EVT_MENU(self, id, self.show_batch_frame) 
    1383          
     1374        self._view_menu.Append(wx_id, '&Show Grid Window', hint) 
     1375        wx.EVT_MENU(self, wx_id, self.show_batch_frame) 
     1376 
    13841377        self._view_menu.AppendSeparator() 
    13851378        style = self.__gui_style & GUIFRAME.MANAGER_ON 
    1386         id = wx.NewId() 
    1387         self._data_panel_menu = self._view_menu.Append(id, 
    1388                                                 '&Show Data Explorer', '') 
    1389         wx.EVT_MENU(self, id, self.show_data_panel) 
     1379        wx_id = wx.NewId() 
     1380        self._data_panel_menu = self._view_menu.Append(wx_id, 
     1381                                                       '&Show Data Explorer', '') 
     1382        wx.EVT_MENU(self, wx_id, self.show_data_panel) 
    13901383        if style == GUIFRAME.MANAGER_ON: 
    13911384            self._data_panel_menu.SetText('Hide Data Explorer') 
    13921385        else: 
    13931386            self._data_panel_menu.SetText('Show Data Explorer') 
    1394    
     1387 
    13951388        self._view_menu.AppendSeparator() 
    1396         id = wx.NewId() 
     1389        wx_id = wx.NewId() 
    13971390        style1 = self.__gui_style & GUIFRAME.TOOLBAR_ON 
    13981391        if style1 == GUIFRAME.TOOLBAR_ON: 
    1399             self._toolbar_menu = self._view_menu.Append(id, '&Hide Toolbar', '') 
     1392            self._toolbar_menu = self._view_menu.Append(wx_id, '&Hide Toolbar', '') 
    14001393        else: 
    1401             self._toolbar_menu = self._view_menu.Append(id, '&Show Toolbar', '') 
    1402         wx.EVT_MENU(self, id, self._on_toggle_toolbar) 
     1394            self._toolbar_menu = self._view_menu.Append(wx_id, '&Show Toolbar', '') 
     1395        wx.EVT_MENU(self, wx_id, self._on_toggle_toolbar) 
    14031396 
    14041397        if custom_config != None: 
    14051398            self._view_menu.AppendSeparator() 
    1406             id = wx.NewId() 
     1399            wx_id = wx.NewId() 
    14071400            hint_ss = "Select the current/default configuration " 
    14081401            hint_ss += "as a startup setting" 
    1409             preference_menu = self._view_menu.Append(id, 'Startup Setting',  
     1402            preference_menu = self._view_menu.Append(wx_id, 'Startup Setting', 
    14101403                                                     hint_ss) 
    1411             wx.EVT_MENU(self, id, self._on_preference_menu) 
    1412              
    1413         id = wx.NewId() 
     1404            wx.EVT_MENU(self, wx_id, self._on_preference_menu) 
     1405 
     1406        wx_id = wx.NewId() 
    14141407        self._view_menu.AppendSeparator() 
    1415         self._view_menu.Append(id, 'Category Manager', 'Edit model categories') 
    1416         wx.EVT_MENU(self, id, self._on_category_manager) 
    1417  
    1418         self._menubar.Append(self._view_menu, '&View')    
    1419           
     1408        self._view_menu.Append(wx_id, 'Category Manager', 'Edit model categories') 
     1409        wx.EVT_MENU(self, wx_id, self._on_category_manager) 
     1410 
     1411        self._menubar.Append(self._view_menu, '&View') 
     1412 
    14201413    def show_batch_frame(self, event=None): 
    14211414        """ 
     
    14251418        self.batch_frame.Show(False) 
    14261419        self.batch_frame.Show(True) 
    1427      
    1428     def  on_category_panel(self, event):   
     1420 
     1421    def  on_category_panel(self, event): 
    14291422        """ 
    14301423        On cat panel 
    14311424        """ 
    14321425        self._on_category_manager(event) 
    1433            
     1426 
    14341427    def _on_category_manager(self, event): 
    14351428        """ 
     
    14401433        frame.SetIcon(icon) 
    14411434 
    1442     def _on_preference_menu(self, event):      
     1435    def _on_preference_menu(self, event): 
    14431436        """ 
    14441437        Build a panel to allow to edit Mask 
     
    14461439        from sas.guiframe.startup_configuration \ 
    14471440        import StartupConfiguration as ConfDialog 
    1448          
     1441 
    14491442        dialog = ConfDialog(parent=self, gui=self.__gui_style) 
    14501443        result = dialog.ShowModal() 
     
    14541447            wx.PostEvent(self, StatusEvent(status="Wrote custom configuration", info='info')) 
    14551448        dialog.Destroy() 
    1456          
     1449 
    14571450    def _add_menu_application(self): 
    14581451        """ 
     
    14611454        add menu application 
    14621455        """ 
    1463         if self._num_perspectives  > 1: 
     1456        if self._num_perspectives > 1: 
    14641457            plug_data_count = False 
    14651458            plug_no_data_count = False 
     
    14711464                    id = wx.NewId() 
    14721465                    if plug.use_data(): 
    1473                          
    1474                         self._applications_menu.InsertCheckItem(pos, id, plug.sub_menu, 
    1475                                       "Switch to analysis: %s" % plug.sub_menu) 
     1466                        self._applications_menu.InsertCheckItem(pos, id, plug.sub_menu, \ 
     1467                            "Switch to analysis: %s" % plug.sub_menu) 
    14761468                        plug_data_count = True 
    14771469                        pos += 1 
    14781470                    else: 
    14791471                        plug_no_data_count = True 
    1480                         self._applications_menu.AppendCheckItem(id, plug.sub_menu, 
    1481                                       "Switch to analysis: %s" % plug.sub_menu) 
     1472                        self._applications_menu.AppendCheckItem(id, plug.sub_menu, \ 
     1473                            "Switch to analysis: %s" % plug.sub_menu) 
    14821474                    wx.EVT_MENU(self, id, plug.on_perspective) 
    14831475 
    1484             if (not plug_data_count or not plug_no_data_count): 
     1476            if not plug_data_count or not plug_no_data_count: 
    14851477                self._applications_menu.RemoveItem(separator) 
    14861478            self._menubar.Append(self._applications_menu, '&Analysis') 
    14871479            self._check_applications_menu() 
    1488              
     1480 
    14891481    def _populate_file_menu(self): 
    14901482        """ 
     
    14991491                    wx.EVT_MENU(self, id, m_handler) 
    15001492                self._file_menu.AppendSeparator() 
    1501                  
     1493 
    15021494        style1 = self.__gui_style & GUIFRAME.MULTIPLE_APPLICATIONS 
    15031495        if OPEN_SAVE_MENU: 
    15041496            id = wx.NewId() 
    15051497            hint_load_file = "read all analysis states saved previously" 
    1506             self._save_appl_menu = self._file_menu.Append(id,  
    1507                                     '&Open Project', hint_load_file) 
     1498            self._save_appl_menu = self._file_menu.Append(id, '&Open Project', hint_load_file) 
    15081499            wx.EVT_MENU(self, id, self._on_open_state_project) 
    1509              
     1500 
    15101501        if style1 == GUIFRAME.MULTIPLE_APPLICATIONS: 
    15111502            # some menu of plugin to be seen under file menu 
     
    15131504            hint_load_file += " them into the analysis" 
    15141505            id = wx.NewId() 
    1515             self._save_appl_menu = self._file_menu.Append(id,  
    1516                                     '&Open Analysis', hint_load_file) 
     1506            self._save_appl_menu = self._file_menu.Append(id, 
     1507                                                          '&Open Analysis', hint_load_file) 
    15171508            wx.EVT_MENU(self, id, self._on_open_state_application) 
    1518         if OPEN_SAVE_MENU:         
     1509        if OPEN_SAVE_MENU: 
    15191510            self._file_menu.AppendSeparator() 
    15201511            id = wx.NewId() 
    15211512            self._file_menu.Append(id, '&Save Project', 
    1522                                  'Save the state of the whole analysis') 
     1513                                   'Save the state of the whole analysis') 
    15231514            wx.EVT_MENU(self, id, self._on_save_project) 
    15241515        if style1 == GUIFRAME.MULTIPLE_APPLICATIONS: 
    15251516            id = wx.NewId() 
    1526             self._save_appl_menu = self._file_menu.Append(id,  
    1527                                                       '&Save Analysis', 
    1528                         'Save state of the current active analysis panel') 
     1517            self._save_appl_menu = self._file_menu.Append(id, \ 
     1518                '&Save Analysis', 'Save state of the current active analysis panel') 
    15291519            wx.EVT_MENU(self, id, self._on_save_application) 
    1530         if not sys.platform =='darwin': 
     1520        if not sys.platform == 'darwin': 
    15311521            self._file_menu.AppendSeparator() 
    15321522            id = wx.NewId() 
    1533             self._file_menu.Append(id, '&Quit', 'Exit')  
     1523            self._file_menu.Append(id, '&Quit', 'Exit') 
    15341524            wx.EVT_MENU(self, id, self.Close) 
    1535          
     1525 
    15361526    def _add_menu_file(self): 
    15371527        """ 
     
    15421532        # Add sub menus 
    15431533        self._menubar.Append(self._file_menu, '&File') 
    1544          
     1534 
    15451535    def _add_menu_edit(self): 
    15461536        """ 
     
    15511541        # Edit Menu 
    15521542        self._edit_menu = wx.Menu() 
    1553         self._edit_menu.Append(GUIFRAME_ID.UNDO_ID, '&Undo',  
     1543        self._edit_menu.Append(GUIFRAME_ID.UNDO_ID, '&Undo', 
    15541544                               'Undo the previous action') 
    15551545        wx.EVT_MENU(self, GUIFRAME_ID.UNDO_ID, self.on_undo_panel) 
    1556         self._edit_menu.Append(GUIFRAME_ID.REDO_ID, '&Redo',  
     1546        self._edit_menu.Append(GUIFRAME_ID.REDO_ID, '&Redo', 
    15571547                               'Redo the previous action') 
    15581548        wx.EVT_MENU(self, GUIFRAME_ID.REDO_ID, self.on_redo_panel) 
    15591549        self._edit_menu.AppendSeparator() 
    1560         self._edit_menu.Append(GUIFRAME_ID.COPY_ID, '&Copy Params',  
     1550        self._edit_menu.Append(GUIFRAME_ID.COPY_ID, '&Copy Params', 
    15611551                               'Copy parameter values') 
    15621552        wx.EVT_MENU(self, GUIFRAME_ID.COPY_ID, self.on_copy_panel) 
    1563         self._edit_menu.Append(GUIFRAME_ID.PASTE_ID, '&Paste Params',  
     1553        self._edit_menu.Append(GUIFRAME_ID.PASTE_ID, '&Paste Params', 
    15641554                               'Paste parameter values') 
    15651555        wx.EVT_MENU(self, GUIFRAME_ID.PASTE_ID, self.on_paste_panel) 
     
    15701560        #Sub menu for Copy As... 
    15711561        self._edit_menu_copyas.Append(GUIFRAME_ID.COPYEX_ID, 'Copy current tab to Excel', 
    1572                                'Copy parameter values in tabular format') 
     1562                                      'Copy parameter values in tabular format') 
    15731563        wx.EVT_MENU(self, GUIFRAME_ID.COPYEX_ID, self.on_copy_panel) 
    15741564 
    15751565        self._edit_menu_copyas.Append(GUIFRAME_ID.COPYLAT_ID, 'Copy current tab to LaTeX', 
    1576                                'Copy parameter values in tabular format') 
     1566                                      'Copy parameter values in tabular format') 
    15771567        wx.EVT_MENU(self, GUIFRAME_ID.COPYLAT_ID, self.on_copy_panel) 
    15781568 
    15791569 
    1580         self._edit_menu.AppendMenu(GUIFRAME_ID.COPYAS_ID, 'Copy Params as...', self._edit_menu_copyas, 
    1581                                'Copy parameter values in various formats') 
    1582  
     1570        self._edit_menu.AppendMenu(GUIFRAME_ID.COPYAS_ID, 'Copy Params as...', 
     1571                                   self._edit_menu_copyas, 
     1572                                   'Copy parameter values in various formats') 
    15831573 
    15841574        self._edit_menu.AppendSeparator() 
    1585          
     1575 
    15861576        self._edit_menu.Append(GUIFRAME_ID.PREVIEW_ID, '&Report Results', 
    15871577                               'Preview current panel') 
    15881578        wx.EVT_MENU(self, GUIFRAME_ID.PREVIEW_ID, self.on_preview_panel) 
    15891579 
    1590         self._edit_menu.Append(GUIFRAME_ID.RESET_ID, '&Reset Page',  
     1580        self._edit_menu.Append(GUIFRAME_ID.RESET_ID, '&Reset Page', 
    15911581                               'Reset current panel') 
    15921582        wx.EVT_MENU(self, GUIFRAME_ID.RESET_ID, self.on_reset_panel) 
    1593      
    1594         self._menubar.Append(self._edit_menu,  '&Edit') 
     1583 
     1584        self._menubar.Append(self._edit_menu, '&Edit') 
    15951585        self.enable_edit_menu() 
    1596          
     1586 
    15971587    def get_style(self): 
    15981588        """ 
     
    16001590        """ 
    16011591        return  self.__gui_style 
    1602      
     1592 
    16031593    def _add_menu_data(self): 
    16041594        """ 
     
    16101600                for (menu, name) in menu_list: 
    16111601                    self._menubar.Append(menu, name) 
    1612          
    1613                          
     1602 
    16141603    def _on_toggle_toolbar(self, event=None): 
    16151604        """ 
     
    16271616            self._toolbar.Show() 
    16281617        self._toolbar.Realize() 
    1629          
     1618 
    16301619    def _on_status_event(self, evt): 
    16311620        """ 
     
    16341623        # This CallAfter fixes many crashes on MAC. 
    16351624        wx.CallAfter(self.sb.set_status, evt) 
    1636         
     1625 
    16371626    def on_view(self, evt): 
    16381627        """ 
    16391628        A panel was selected to be shown. If it's not already 
    16401629        shown, display it. 
    1641          
     1630 
    16421631        :param evt: menu event 
    1643          
     1632 
    16441633        """ 
    16451634        panel_id = str(evt.GetId()) 
    16461635        self.on_set_plot_focus(self.panels[panel_id]) 
    1647         wx.CallLater(5*TIME_FACTOR, self.set_schedule(True)) 
     1636        wx.CallLater(5 * TIME_FACTOR, self.set_schedule(True)) 
    16481637        self.set_plot_unfocus() 
    1649   
     1638 
    16501639    def show_welcome_panel(self, event): 
    1651         """     
     1640        """ 
    16521641        Display the welcome panel 
    16531642        """ 
    16541643        if self.defaultPanel is None: 
    1655             return  
     1644            return 
    16561645        frame = self.panels['default'].get_frame() 
    16571646        if frame == None: 
     
    16601649        if not frame.IsShown(): 
    16611650            frame.Show(True) 
    1662              
     1651 
    16631652    def on_close_welcome_panel(self): 
    16641653        """ 
     
    16661655        """ 
    16671656        if self.defaultPanel is None: 
    1668             return  
     1657            return 
    16691658        default_panel = self.panels["default"].frame 
    16701659        if default_panel.IsShown(): 
    1671             default_panel.Show(False)  
    1672                  
     1660            default_panel.Show(False) 
     1661 
    16731662    def delete_panel(self, uid): 
    16741663        """ 
     
    16771666        ID = str(uid) 
    16781667        config.printEVT("delete_panel: %s" % ID) 
    1679         try: 
    1680             caption = self.panels[ID].window_caption 
    1681         except: 
    1682             logging.error("delete_panel: No such plot id as %s" % ID) 
    1683             return 
    16841668        if ID in self.panels.keys(): 
    16851669            self.panel_on_focus = None 
     
    16911675 
    16921676            if panel in self.schedule_full_draw_list: 
    1693                 self.schedule_full_draw_list.remove(panel)  
    1694              
     1677                self.schedule_full_draw_list.remove(panel) 
     1678 
    16951679            #delete uid number not str(uid) 
    16961680            if ID in self.plot_panels.keys(): 
     
    16981682            if ID in self.panels.keys(): 
    16991683                del self.panels[ID] 
    1700             return  
    1701              
     1684        else: 
     1685            logging.error("delete_panel: No such plot id as %s" % ID) 
     1686 
    17021687    def create_gui_data(self, data, path=None): 
    17031688        """ 
    17041689        """ 
    17051690        return self._data_manager.create_gui_data(data, path) 
    1706      
     1691 
    17071692    def get_data(self, path): 
    17081693        """ 
     
    17121697        output = [] 
    17131698        error_message = "" 
    1714         basename  = os.path.basename(path) 
     1699        basename = os.path.basename(path) 
    17151700        root, extension = os.path.splitext(basename) 
    17161701        if extension.lower() not in EXTENSIONS: 
     
    17201705            logging.error(log_msg) 
    17211706            return 
    1722          
     1707 
    17231708        #reading a state file 
    17241709        for plug in self.plugins: 
     
    17341719                    except: 
    17351720                        msg = "DataLoader Error: Encounted Non-ASCII character" 
    1736                         msg += "\n(%s)"% sys.exc_value 
    1737                         wx.PostEvent(self, StatusEvent(status=msg,  
    1738                                                 info="error", type="stop")) 
     1721                        msg += "\n(%s)" % sys.exc_value 
     1722                        wx.PostEvent(self, StatusEvent(status=msg, 
     1723                                                       info="error", type="stop")) 
    17391724                        return 
    1740          
     1725 
    17411726        style = self.__gui_style & GUIFRAME.MANAGER_ON 
    17421727        if style == GUIFRAME.MANAGER_ON: 
    17431728            if self._data_panel is not None: 
    17441729                self._data_panel.frame.Show(True) 
    1745        
    1746     def load_from_cmd(self,  path):    
     1730 
     1731    def load_from_cmd(self, path): 
    17471732        """ 
    17481733        load data from cmd or application 
    1749         """  
     1734        """ 
    17501735        if path is None: 
    17511736            return 
     
    17541739            if not os.path.isfile(path) and not os.path.isdir(path): 
    17551740                return 
    1756              
     1741 
    17571742            if os.path.isdir(path): 
    17581743                self.load_folder(path) 
    17591744                return 
    17601745 
    1761         basename  = os.path.basename(path) 
    1762         root, extension = os.path.splitext(basename) 
     1746        basename = os.path.basename(path) 
     1747        _, extension = os.path.splitext(basename) 
    17631748        if extension.lower() not in EXTENSIONS: 
    17641749            self.load_data(path) 
     
    17671752 
    17681753        self._default_save_location = os.path.dirname(path) 
    1769          
    1770     def load_state(self, path, is_project=False):    
     1754 
     1755    def load_state(self, path, is_project=False): 
    17711756        """ 
    17721757        load data from command line or application 
    17731758        """ 
    17741759        if path and (path is not None) and os.path.isfile(path): 
    1775             basename  = os.path.basename(path) 
     1760            basename = os.path.basename(path) 
    17761761            if APPLICATION_STATE_EXTENSION is not None \ 
    17771762                and basename.endswith(APPLICATION_STATE_EXTENSION): 
     
    17841769        else: 
    17851770            wx.PostEvent(self, StatusEvent(status=" ")) 
    1786              
     1771 
    17871772    def load_data(self, path): 
    17881773        """ 
     
    17911776        if not os.path.isfile(path): 
    17921777            return 
    1793         basename  = os.path.basename(path) 
    1794         root, extension = os.path.splitext(basename) 
     1778        basename = os.path.basename(path) 
     1779        _, extension = os.path.splitext(basename) 
    17951780        if extension.lower() in EXTENSIONS: 
    17961781            log_msg = "Data Loader cannot " 
     
    18041789        try: 
    18051790            logging.info("Loading Data...:\n" + str(path) + "\n") 
    1806             temp =  self.loader.load(path) 
     1791            temp = self.loader.load(path) 
    18071792            if temp.__class__.__name__ == "list": 
    18081793                for item in temp: 
     
    18121797                data = self.create_gui_data(temp, path) 
    18131798                output[data.id] = data 
    1814              
     1799 
    18151800            self.add_data(data_list=output) 
    18161801        except: 
     
    18191804            error_message += str(sys.exc_value) + "\n" 
    18201805            logging.error(error_message) 
    1821   
     1806 
    18221807    def load_folder(self, path): 
    18231808        """ 
    18241809        Load entire folder 
    1825         """    
     1810        """ 
    18261811        if not os.path.isdir(path): 
    18271812            return 
     
    18341819                self._data_plugin.get_data(file_list) 
    18351820            else: 
    1836                 return  
     1821                return 
    18371822        except: 
    18381823            error_message = "Error while loading" 
     
    18401825            error_message += str(sys.exc_value) + "\n" 
    18411826            logging.error(error_message) 
    1842              
     1827 
    18431828    def _on_open_state_application(self, event): 
    18441829        """ 
     
    18491834        wx.PostEvent(self, StatusEvent(status="Loading Analysis file...")) 
    18501835        plug_wlist = self._on_open_state_app_helper() 
    1851         dlg = wx.FileDialog(self,  
    1852                             "Choose a file",  
     1836        dlg = wx.FileDialog(self, 
     1837                            "Choose a file", 
    18531838                            self._default_save_location, "", 
    18541839                            plug_wlist) 
     
    18581843                self._default_save_location = os.path.dirname(path) 
    18591844        dlg.Destroy() 
    1860         self.load_state(path=path)   
    1861      
     1845        self.load_state(path=path) 
     1846 
    18621847    def _on_open_state_app_helper(self): 
    18631848        """ 
    1864         Helps '_on_open_state_application()' to find the extension of  
     1849        Helps '_on_open_state_application()' to find the extension of 
    18651850        the current perspective/application 
    18661851        """ 
    18671852        # No current perspective or no extension attr 
    18681853        if self._current_perspective is None: 
    1869             return PLUGINS_WLIST  
     1854            return PLUGINS_WLIST 
    18701855        try: 
    1871             # Find the extension of the perspective  
     1856            # Find the extension of the perspective 
    18721857            # and get that as 1st item in list 
    18731858            ind = None 
     
    18881873 
    18891874        except: 
    1890             plug_wlist = PLUGINS_WLIST  
    1891              
     1875            plug_wlist = PLUGINS_WLIST 
     1876 
    18921877        return plug_wlist 
    1893              
     1878 
    18941879    def _on_open_state_project(self, event): 
    18951880        """ 
     
    18991884            self._default_save_location = os.getcwd() 
    19001885        wx.PostEvent(self, StatusEvent(status="Loading Project file...")) 
    1901         dlg = wx.FileDialog(self,  
    1902                             "Choose a file",  
     1886        dlg = wx.FileDialog(self, 
     1887                            "Choose a file", 
    19031888                            self._default_save_location, "", 
    1904                              APPLICATION_WLIST) 
     1889                            APPLICATION_WLIST) 
    19051890        if dlg.ShowModal() == wx.ID_OK: 
    19061891            path = dlg.GetPath() 
     
    19081893                self._default_save_location = os.path.dirname(path) 
    19091894        dlg.Destroy() 
    1910          
     1895 
    19111896        self.load_state(path=path, is_project=True) 
    1912          
     1897 
    19131898    def _on_save_application(self, event): 
    19141899        """ 
     
    19171902        if self.cpanel_on_focus is not None: 
    19181903            try: 
    1919                 wx.PostEvent(self,  
     1904                wx.PostEvent(self, 
    19201905                             StatusEvent(status="Saving Analysis file...")) 
    19211906                self.cpanel_on_focus.on_save(event) 
    1922                 wx.PostEvent(self,  
     1907                wx.PostEvent(self, 
    19231908                             StatusEvent(status="Completed saving.")) 
    19241909            except: 
    19251910                msg = "Error occurred while saving: " 
    19261911                msg += "To save, the application panel should have a data set.." 
    1927                 wx.PostEvent(self, StatusEvent(status=msg))   
    1928              
     1912                wx.PostEvent(self, StatusEvent(status=msg)) 
     1913 
    19291914    def _on_save_project(self, event): 
    19301915        """ 
     
    19341919            return 
    19351920        wx.PostEvent(self, StatusEvent(status="Saving Project file...")) 
    1936         reader, ext = self._current_perspective.get_extensions() 
    19371921        path = None 
    19381922        extension = '*' + APPLICATION_STATE_EXTENSION 
    19391923        dlg = wx.FileDialog(self, "Save Project file", 
    19401924                            self._default_save_location, "sasview_proj", 
    1941                              extension,  
    1942                              wx.SAVE) 
     1925                            extension, 
     1926                            wx.SAVE) 
    19431927        if dlg.ShowModal() == wx.ID_OK: 
    19441928            path = dlg.GetPath() 
     
    19561940                if temp is not None: 
    19571941                    doc = temp 
    1958              
     1942 
    19591943            # Write the XML document 
    19601944            extens = APPLICATION_STATE_EXTENSION 
     
    19721956                msg += "No project was saved to %s" % (str(path)) 
    19731957                logging.error(msg) 
    1974                 wx.PostEvent(self,StatusEvent(status=msg)) 
     1958                wx.PostEvent(self, StatusEvent(status=msg)) 
    19751959        except: 
    19761960            msg = "Error occurred while saving: " 
    19771961            msg += "To save, at least one application panel " 
    19781962            msg += "should have a data set.." 
    1979             wx.PostEvent(self, StatusEvent(status=msg))     
    1980                      
     1963            wx.PostEvent(self, StatusEvent(status=msg)) 
     1964 
    19811965    def on_save_helper(self, doc, reader, panel, path): 
    19821966        """ 
    19831967        Save state into a file 
    19841968        """ 
    1985         try: 
    1986             if reader is not None: 
    1987                 # case of a panel with multi-pages 
    1988                 if hasattr(panel, "opened_pages"): 
    1989                     for uid, page in panel.opened_pages.iteritems(): 
    1990                         data = page.get_data() 
    1991                         # state must be cloned 
    1992                         state = page.get_state().clone() 
    1993                         if data is not None: 
    1994                             new_doc = reader.write_toXML(data, state) 
    1995                             if doc != None and hasattr(doc, "firstChild"): 
    1996                                 child = new_doc.firstChild.firstChild 
    1997                                 doc.firstChild.appendChild(child)   
    1998                             else: 
    1999                                 doc = new_doc  
    2000                 # case of only a panel 
    2001                 else: 
    2002                     data = panel.get_data() 
    2003                     state = panel.get_state() 
     1969        if reader is not None: 
     1970            # case of a panel with multi-pages 
     1971            if hasattr(panel, "opened_pages"): 
     1972                for _, page in panel.opened_pages.iteritems(): 
     1973                    data = page.get_data() 
     1974                    # state must be cloned 
     1975                    state = page.get_state().clone() 
    20041976                    if data is not None: 
    20051977                        new_doc = reader.write_toXML(data, state) 
    20061978                        if doc != None and hasattr(doc, "firstChild"): 
    20071979                            child = new_doc.firstChild.firstChild 
    2008                             doc.firstChild.appendChild(child)   
     1980                            doc.firstChild.appendChild(child) 
    20091981                        else: 
    2010                             doc = new_doc  
    2011         except:  
    2012             raise 
    2013             #pass 
    2014  
     1982                            doc = new_doc 
     1983            # case of only a panel 
     1984            else: 
     1985                data = panel.get_data() 
     1986                state = panel.get_state() 
     1987                if data is not None: 
     1988                    new_doc = reader.write_toXML(data, state) 
     1989                    if doc != None and hasattr(doc, "firstChild"): 
     1990                        child = new_doc.firstChild.firstChild 
     1991                        doc.firstChild.appendChild(child) 
     1992                    else: 
     1993                        doc = new_doc 
    20151994        return doc 
    20161995 
     
    20212000        message = "\nDo you really want to exit this application?        \n\n" 
    20222001        dial = wx.MessageDialog(self, message, 'Confirm Exit', 
    2023                            wx.YES_NO|wx.YES_DEFAULT|wx.ICON_QUESTION) 
     2002                                wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION) 
    20242003        if dial.ShowModal() == wx.ID_YES: 
    20252004            return True 
    20262005        else: 
    2027             return False     
    2028          
     2006            return False 
     2007 
    20292008    def WindowClose(self, event=None): 
    20302009        """ 
     
    20352014            _pylab_helpers.Gcf.figs = {} 
    20362015            self.Close() 
    2037              
     2016 
    20382017    def Close(self, event=None): 
    20392018        """ 
     
    20422021        wx.Exit() 
    20432022        sys.exit() 
    2044              
    2045     def _check_update(self, event=None):  
     2023 
     2024    def _check_update(self, event=None): 
    20462025        """ 
    20472026        Check with the deployment server whether a new version 
     
    20512030        """ 
    20522031        try: 
    2053             conn = httplib.HTTPConnection(config.__update_URL__[0],  
    2054                               timeout=3.0) 
     2032            conn = httplib.HTTPConnection(config.__update_URL__[0], 
     2033                                          timeout=3.0) 
    20552034            conn.request("GET", config.__update_URL__[1]) 
    20562035            res = conn.getresponse() 
     
    20592038        except: 
    20602039            content = "0.0.0" 
    2061         
     2040 
    20622041        version = content.strip() 
    20632042        if len(re.findall('\d+\.\d+\.\d+$', version)) < 0: 
    20642043            content = "0.0.0" 
    2065         self._process_version(content, standalone=event==None) 
    2066      
     2044        self._process_version(content, standalone=event == None) 
     2045 
    20672046    def _process_version(self, version, standalone=True): 
    20682047        """ 
     
    20712050        version number has been obtained. If the check is being done in the 
    20722051        background, the user will not be notified unless there's an update. 
    2073          
     2052 
    20742053        :param version: version string 
    2075         :param standalone: True of the update is being checked in  
     2054        :param standalone: True of the update is being checked in 
    20762055           the background, False otherwise. 
    2077             
     2056 
    20782057        """ 
    20792058        try: 
     
    20882067                    webbrowser.open(config.__download_page__) 
    20892068                else: 
    2090                     msg +=  "See the help menu to download it."  
     2069                    msg += "See the help menu to download it." 
    20912070                self.SetStatusText(msg) 
    20922071            else: 
     
    21032082                msg += " Please try again later." 
    21042083                self.SetStatusText(msg) 
    2105                      
     2084 
    21062085    def _onAcknowledge(self, evt): 
    21072086        """ 
    21082087        Pop up the acknowledge dialog 
    2109          
     2088 
    21102089        :param evt: menu event 
    2111          
     2090 
    21122091        """ 
    21132092        if config._do_acknowledge: 
     
    21152094            dialog = AcknowledgeBox.DialogAcknowledge(None, -1, "") 
    21162095            dialog.ShowModal() 
    2117                       
     2096 
    21182097    def _onAbout(self, evt): 
    21192098        """ 
    21202099        Pop up the about dialog 
    2121          
     2100 
    21222101        :param evt: menu event 
    2123          
     2102 
    21242103        """ 
    21252104        if config._do_aboutbox: 
    21262105            import sas.guiframe.aboutbox as AboutBox 
    21272106            dialog = AboutBox.DialogAbout(None, -1, "") 
    2128             dialog.ShowModal()    
    2129                       
     2107            dialog.ShowModal() 
     2108 
    21302109    def _onTutorial(self, evt): 
    21312110        """ 
    21322111        Pop up the tutorial dialog 
    2133          
     2112 
    21342113        :param evt: menu event 
    2135          
    2136         """ 
    2137         if config._do_tutorial:    
     2114 
     2115        """ 
     2116        if config._do_tutorial: 
    21382117            path = config.TUTORIAL_PATH 
    21392118            if IS_WIN: 
     
    21422121                    dialog = PDFFrame(None, -1, "Tutorial", path) 
    21432122                    # put icon 
    2144                     self.put_icon(dialog)   
    2145                     dialog.Show(True)  
     2123                    self.put_icon(dialog) 
     2124                    dialog.Show(True) 
    21462125                except: 
    21472126                    logging.error("Error in _onTutorial: %s" % sys.exc_value) 
     
    21752154        'documentation' is clicked. Calls DocumentationWindow with the top 
    21762155        level path of "index.html" 
    2177          
     2156 
    21782157        :param evt: menu event 
    21792158        """ 
     
    21812160        # different place than they would otherwise. 
    21822161        from documentation_window import DocumentationWindow 
    2183          
    2184         sphinx_doc_viewer = DocumentationWindow(self, -1, "index.html", \ 
    2185                                                 "General Help") 
     2162        DocumentationWindow(self, -1, "index.html", "General Help") 
    21862163 
    21872164    def set_manager(self, manager): 
    21882165        """ 
    21892166        Sets the application manager for this frame 
    2190          
     2167 
    21912168        :param manager: frame manager 
    21922169        """ 
    21932170        self.app_manager = manager 
    2194          
     2171 
    21952172    def post_init(self): 
    21962173        """ 
    2197         This initialization method is called after the GUI  
     2174        This initialization method is called after the GUI 
    21982175        has been created and all plug-ins loaded. It calls 
    21992176        the post_init() method of each plug-in (if it exists) 
     
    22032180            if hasattr(item, "post_init"): 
    22042181                item.post_init() 
    2205          
     2182 
    22062183    def set_default_perspective(self): 
    22072184        """ 
    2208         Choose among the plugin the first plug-in that has  
     2185        Choose among the plugin the first plug-in that has 
    22092186        "set_default_perspective" method and its return value is True will be 
    22102187        as a default perspective when the welcome page is closed 
     
    22142191                if item.set_default_perspective(): 
    22152192                    item.on_perspective(event=None) 
    2216                     return  
    2217          
     2193                    return 
     2194 
    22182195    def set_perspective(self, panels): 
    22192196        """ 
     
    22212198        Opens all the panels in the list, and closes 
    22222199        all the others. 
    2223          
     2200 
    22242201        :param panels: list of panels 
    22252202        """ 
     
    22282205            if hasattr(self.panels[item], "ALWAYS_ON"): 
    22292206                if self.panels[item].ALWAYS_ON: 
    2230                     continue  
     2207                    continue 
    22312208            if self.panels[item] == None: 
    22322209                continue 
     
    22522229                    if frame.IsShown(): 
    22532230                        frame.Show(False) 
    2254          
     2231 
    22552232    def show_data_panel(self, event=None, action=True): 
    22562233        """ 
     
    22632240        frame = pane.get_frame() 
    22642241        if label == 'Show Data Explorer': 
    2265             if action:  
     2242            if action: 
    22662243                frame.Show(True) 
    22672244            self.__gui_style = self.__gui_style | GUIFRAME.MANAGER_ON 
     
    22782255        if self._data_manager is not None: 
    22792256            self._data_manager.add_data(data_list) 
    2280          
     2257 
    22812258    def add_data(self, data_list): 
    22822259        """ 
    22832260        receive a dictionary of data from loader 
    22842261        store them its data manager if possible 
    2285         send to data the current active perspective if the data panel  
    2286         is not active.  
     2262        send to data the current active perspective if the data panel 
     2263        is not active. 
    22872264        :param data_list: dictionary of data's ID and value Data 
    22882265        """ 
     
    22932270            data_state = self._data_manager.get_data_state(data_list.keys()) 
    22942271            self._data_panel.load_data_list(data_state) 
    2295         #if the data panel is shown wait for the user to press a button  
     2272        #if the data panel is shown wait for the user to press a button 
    22962273        #to send data to the current perspective. if the panel is not 
    22972274        #show  automatically send the data to the current perspective 
    22982275        style = self.__gui_style & GUIFRAME.MANAGER_ON 
    22992276        if style == GUIFRAME.MANAGER_ON: 
    2300             #wait for button press from the data panel to set_data  
     2277            #wait for button press from the data panel to set_data 
    23012278            if self._data_panel is not None: 
    23022279                self._data_panel.frame.Show(True) 
     
    23042281            #automatically send that to the current perspective 
    23052282            self.set_data(data_id=data_list.keys()) 
    2306         
    2307     def set_data(self, data_id, theory_id=None):  
     2283 
     2284    def set_data(self, data_id, theory_id=None): 
    23082285        """ 
    23092286        set data to current perspective 
     
    23162293            msg = "Guiframe does not have a current perspective" 
    23172294            logging.info(msg) 
    2318              
     2295 
    23192296    def set_theory(self, state_id, theory_id=None): 
    23202297        """ 
     
    23312308            msg = "Guiframe does not have a current perspective" 
    23322309            logging.info(msg) 
    2333              
    2334     def plot_data(self,  state_id, data_id=None, 
     2310 
     2311    def plot_data(self, state_id, data_id=None, 
    23352312                  theory_id=None, append=False): 
    23362313        """ 
    23372314        send a list of data to plot 
    23382315        """ 
    2339         total_plot_list = [] 
    23402316        data_list, _ = self._data_manager.get_by_id(data_id) 
    23412317        _, temp_list_theory = self._data_manager.get_by_id(theory_id) 
     
    23502326                    message = "cannot append plot. No plot panel on focus!" 
    23512327                    message += "please click on any available plot to set focus" 
    2352                     wx.PostEvent(self, StatusEvent(status=message,  
     2328                    wx.PostEvent(self, StatusEvent(status=message, 
    23532329                                                   info='warning')) 
    2354                     return  
     2330                    return 
    23552331                else: 
    23562332                    if self.enable_add_data(new_plot): 
     
    23592335                        message = "Only 1D Data can be append to" 
    23602336                        message += " plot panel containing 1D data.\n" 
    2361                         message += "%s not be appended.\n" %str(new_plot.name) 
     2337                        message += "%s not be appended.\n" % str(new_plot.name) 
    23622338                        message += "try new plot option.\n" 
    2363                         wx.PostEvent(self, StatusEvent(status=message,  
    2364                                                    info='warning')) 
     2339                        wx.PostEvent(self, StatusEvent(status=message, 
     2340                                                       info='warning')) 
    23652341            else: 
    23662342                #if not append then new plot 
     
    23742350            title = "PLOT " + str(new_plot.title) 
    23752351            wx.PostEvent(self, NewPlotEvent(plot=new_plot, 
    2376                                                   title=title, 
    2377                                                   group_id = new_plot.group_id)) 
    2378              
     2352                                            title=title, 
     2353                                            group_id=new_plot.group_id)) 
     2354 
    23792355    def remove_data(self, data_id, theory_id=None): 
    23802356        """ 
     
    23872363        for plug in self.plugins: 
    23882364            plug.delete_data(temp) 
    2389         total_plot_list = [] 
    23902365        data_list, _ = self._data_manager.get_by_id(data_id) 
    23912366        _, temp_list_theory = self._data_manager.get_by_id(theory_id) 
     
    23982373            for group_id in new_plot.list_group_id: 
    23992374                wx.PostEvent(self, NewPlotEvent(id=id, 
    2400                                                    group_id=group_id, 
    2401                                                    action='remove')) 
     2375                                                group_id=group_id, 
     2376                                                action='remove')) 
    24022377                #remove res plot: Todo: improve 
    24032378                wx.CallAfter(self._remove_res_plot, id) 
    2404         self._data_manager.delete_data(data_id=data_id,  
     2379        self._data_manager.delete_data(data_id=data_id, 
    24052380                                       theory_id=theory_id) 
    2406          
     2381 
    24072382    def _remove_res_plot(self, id): 
    24082383        """ 
    24092384        Try to remove corresponding res plot 
    2410          
     2385 
    24112386        : param id: id of the data 
    24122387        """ 
    24132388        try: 
    2414             wx.PostEvent(self, NewPlotEvent(id=("res"+str(id)), 
    2415                                            group_id=("res"+str(id)), 
    2416                                            action='remove')) 
     2389            wx.PostEvent(self, NewPlotEvent(id=("res" + str(id)), 
     2390                                            group_id=("res" + str(id)), 
     2391                                            action='remove')) 
    24172392        except: 
    2418             pass 
    2419      
     2393            logging.error(sys.exc_value) 
     2394 
    24202395    def save_data1d(self, data, fname): 
    24212396        """ 
     
    24242399        default_name = fname 
    24252400        wildcard = "Text files (*.txt)|*.txt|"\ 
    2426                     "CanSAS 1D files(*.xml)|*.xml"  
     2401                    "CanSAS 1D files(*.xml)|*.xml" 
    24272402        path = None 
    24282403        dlg = wx.FileDialog(self, "Choose a file", 
    24292404                            self._default_save_location, 
    2430                             default_name, wildcard , wx.SAVE) 
    2431         
     2405                            default_name, wildcard, wx.SAVE) 
     2406 
    24322407        if dlg.ShowModal() == wx.ID_OK: 
    24332408            path = dlg.GetPath() 
     
    24412416            path = os.path.splitext(path)[0] + format 
    24422417            mypath = os.path.basename(path) 
    2443              
    2444             #TODO: This is bad design. The DataLoader is designed  
    2445             #to recognize extensions. 
    2446             # It should be a simple matter of calling the . 
    2447             #save(file, data, '.xml') method 
    2448             # of the sas.dataloader.loader.Loader class. 
    2449             from sas.dataloader.loader import  Loader 
    2450             #Instantiate a loader  
    2451             loader = Loader()  
     2418 
     2419            #Instantiate a loader 
     2420            loader = Loader() 
    24522421            format = ".txt" 
    24532422            if os.path.splitext(mypath)[1].lower() == format: 
     
    24652434                self._default_save_location = os.path.dirname(path) 
    24662435            except: 
    2467                 pass     
     2436                pass 
    24682437        dlg.Destroy() 
    2469          
    2470          
     2438 
     2439 
    24712440    def _onsaveTXT(self, data, path): 
    24722441        """ 
    2473         Save file as txt   
     2442        Save file as txt 
    24742443        :TODO: Refactor and remove this method. See TODO in _onSave. 
    24752444        """ 
     
    24932462            else: 
    24942463                out.write("<X>   <Y>\n") 
    2495                  
     2464 
    24962465            for i in range(len(data.x)): 
    24972466                if has_errors: 
    24982467                    if data.dx != None and data.dx != []: 
    24992468                        if  data.dx[i] != None: 
    2500                             out.write("%g  %g  %g  %g\n" % (data.x[i],  
    2501                                                         data.y[i], 
    2502                                                         data.dy[i], 
    2503                                                         data.dx[i])) 
     2469                            out.write("%g  %g  %g  %g\n" % (data.x[i], 
     2470                                                            data.y[i], 
     2471                                                            data.dy[i], 
     2472                                                            data.dx[i])) 
    25042473                        else: 
    2505                             out.write("%g  %g  %g\n" % (data.x[i],  
     2474                            out.write("%g  %g  %g\n" % (data.x[i], 
    25062475                                                        data.y[i], 
    25072476                                                        data.dy[i])) 
    25082477                    else: 
    2509                         out.write("%g  %g  %g\n" % (data.x[i],  
     2478                        out.write("%g  %g  %g\n" % (data.x[i], 
    25102479                                                    data.y[i], 
    25112480                                                    data.dy[i])) 
    25122481                else: 
    2513                     out.write("%g  %g\n" % (data.x[i],  
     2482                    out.write("%g  %g\n" % (data.x[i], 
    25142483                                            data.y[i])) 
    2515             out.close()   
    2516                               
     2484            out.close() 
     2485 
    25172486    def show_data1d(self, data, name): 
    25182487        """ 
    25192488        Show data dialog 
    2520         """    
     2489        """ 
    25212490        try: 
    25222491            xmin = min(data.x) 
    25232492            ymin = min(data.y) 
    25242493        except: 
    2525             msg = "Unable to find min/max of \n data named %s"% \ 
    2526                         data.filename   
     2494            msg = "Unable to find min/max of \n data named %s" % \ 
     2495                        data.filename 
    25272496            wx.PostEvent(self, StatusEvent(status=msg, 
    2528                                        info="error")) 
     2497                                           info="error")) 
    25292498            raise ValueError, msg 
    25302499        ## text = str(data) 
    25312500        text = data.__str__() 
    25322501        text += 'Data Min Max:\n' 
    2533         text += 'X_min = %s:  X_max = %s\n'% (xmin, max(data.x)) 
    2534         text += 'Y_min = %s:  Y_max = %s\n'% (ymin, max(data.y)) 
     2502        text += 'X_min = %s:  X_max = %s\n' % (xmin, max(data.x)) 
     2503        text += 'Y_min = %s:  Y_max = %s\n' % (ymin, max(data.y)) 
    25352504        if data.dy != None: 
    2536             text += 'dY_min = %s:  dY_max = %s\n'% (min(data.dy), max(data.dy)) 
     2505            text += 'dY_min = %s:  dY_max = %s\n' % (min(data.dy), max(data.dy)) 
    25372506        text += '\nData Points:\n' 
    25382507        x_st = "X" 
     
    25472516                dx_val = 0.0 
    25482517            if data.dxl != None and len(data.dxl) > index: 
    2549                 if index == 0:  
     2518                if index == 0: 
    25502519                    x_st = "Xl" 
    25512520                dx_val = data.dxl[index] 
    25522521            elif data.dxw != None and len(data.dxw) > index: 
    2553                 if index == 0:  
     2522                if index == 0: 
    25542523                    x_st = "Xw" 
    25552524                dx_val = data.dxw[index] 
    2556              
     2525 
    25572526            if index == 0: 
    2558                 text += "<index> \t<X> \t<Y> \t<dY> \t<d%s>\n"% x_st 
     2527                text += "<index> \t<X> \t<Y> \t<dY> \t<d%s>\n" % x_st 
    25592528            text += "%s \t%s \t%s \t%s \t%s\n" % (index, 
    2560                                             data.x[index],  
    2561                                             data.y[index], 
    2562                                             dy_val, 
    2563                                             dx_val) 
     2529                                                  data.x[index], 
     2530                                                  data.y[index], 
     2531                                                  dy_val, 
     2532                                                  dx_val) 
    25642533        from pdfview import TextFrame 
    2565         frame = TextFrame(None, -1, "Data Info: %s"% data.name, text)  
     2534        frame = TextFrame(None, -1, "Data Info: %s" % data.name, text) 
    25662535        # put icon 
    2567         self.put_icon(frame)  
    2568         frame.Show(True)  
    2569              
    2570     def save_data2d(self, data, fname):     
     2536        self.put_icon(frame) 
     2537        frame.Show(True) 
     2538 
     2539    def save_data2d(self, data, fname): 
    25712540        """ 
    25722541        Save data2d dialog 
     
    25762545        dlg = wx.FileDialog(self, "Choose a file", 
    25772546                            self._default_save_location, 
    2578                             default_name, wildcard , wx.SAVE) 
    2579         
     2547                            default_name, wildcard, wx.SAVE) 
     2548 
    25802549        if dlg.ShowModal() == wx.ID_OK: 
    25812550            path = dlg.GetPath() 
     
    25892558            path = os.path.splitext(path)[0] + format 
    25902559            mypath = os.path.basename(path) 
    2591              
    2592             #TODO: This is bad design. The DataLoader is designed  
    2593             #to recognize extensions. 
    2594             # It should be a simple matter of calling the . 
    2595             #save(file, data, '.xml') method 
    2596             # of the DataLoader.loader.Loader class. 
    2597             from sas.dataloader.loader import  Loader 
    2598             #Instantiate a loader  
    2599             loader = Loader()  
     2560 
     2561            #Instantiate a loader 
     2562            loader = Loader() 
    26002563 
    26012564            format = ".dat" 
     
    26082571                self._default_save_location = os.path.dirname(path) 
    26092572            except: 
    2610                 pass     
    2611         dlg.Destroy()  
    2612                               
     2573                pass 
     2574        dlg.Destroy() 
     2575 
    26132576    def show_data2d(self, data, name): 
    26142577        """ 
    26152578        Show data dialog 
    2616         """    
    2617  
    2618         wx.PostEvent(self, StatusEvent(status = "Gathering Data2D Info.",  
    2619                                        type = 'start' )) 
    2620         text = data.__str__()  
     2579        """ 
     2580        wx.PostEvent(self, StatusEvent(status="Gathering Data2D Info.", 
     2581                                       type='start')) 
     2582        text = data.__str__() 
    26212583        text += 'Data Min Max:\n' 
    2622         text += 'I_min = %s\n'% min(data.data) 
    2623         text += 'I_max = %s\n\n'% max(data.data) 
     2584        text += 'I_min = %s\n' % min(data.data) 
     2585        text += 'I_max = %s\n\n' % max(data.data) 
    26242586        text += 'Data (First 2501) Points:\n' 
    26252587        text += 'Data columns include err(I).\n' 
     
    26292591        dx_val = 0.0 
    26302592        dy_val = 0.0 
    2631         #mask_val = True 
    26322593        len_data = len(data.qx_data) 
    26332594        for index in xrange(0, len_data): 
     
    26352596            y_val = data.qy_data[index] 
    26362597            i_val = data.data[index] 
    2637             if data.err_data != None:  
     2598            if data.err_data != None: 
    26382599                di_val = data.err_data[index] 
    2639             if data.dqx_data != None:  
     2600            if data.dqx_data != None: 
    26402601                dx_val = data.dqx_data[index] 
    2641             if data.dqy_data != None:  
     2602            if data.dqy_data != None: 
    26422603                dy_val = data.dqy_data[index] 
    2643    
     2604 
    26442605            text += "%s \t%s \t%s \t%s \t%s \t%s \t%s\n" % (index, 
    2645                                             x_val,  
    2646                                             y_val, 
    2647                                             i_val, 
    2648                                             di_val, 
    2649                                             dx_val, 
    2650                                             dy_val) 
     2606                                                            x_val, 
     2607                                                            y_val, 
     2608                                                            i_val, 
     2609                                                            di_val, 
     2610                                                            dx_val, 
     2611                                                            dy_val) 
    26512612            # Takes too long time for typical data2d: Break here 
    26522613            if index >= 2500: 
     
    26552616 
    26562617        from pdfview import TextFrame 
    2657         frame = TextFrame(None, -1, "Data Info: %s"% data.name, text)  
     2618        frame = TextFrame(None, -1, "Data Info: %s" % data.name, text) 
    26582619        # put icon 
    26592620        self.put_icon(frame) 
    2660         frame.Show(True)  
    2661         wx.PostEvent(self, StatusEvent(status = "Data2D Info Displayed",  
    2662                                        type = 'stop' )) 
    2663                                    
     2621        frame.Show(True) 
     2622        wx.PostEvent(self, StatusEvent(status="Data2D Info Displayed", 
     2623                                       type='stop')) 
     2624 
    26642625    def set_current_perspective(self, perspective): 
    26652626        """ 
    2666         set the current active perspective  
     2627        set the current active perspective 
    26672628        """ 
    26682629        self._current_perspective = perspective 
     
    26802641                            else: 
    26812642                                frame.Show(False) 
    2682                             #break                
    26832643            name = self._current_perspective.sub_menu 
    26842644            if self._data_panel is not None: 
     
    26872647            #Set the SasView title 
    26882648            self._set_title_name(name) 
    2689              
     2649 
    26902650    def _set_title_name(self, name): 
    26912651        """ 
    26922652        Set the SasView title w/ the current application name 
    2693          
     2653 
    26942654        : param name: application name [string] 
    26952655        """ 
     
    26972657        title = self.title + "  - " + name + " -" 
    26982658        self.SetTitle(title) 
    2699              
     2659 
    27002660    def _check_applications_menu(self): 
    27012661        """ 
     
    27102670                            menu.Check(True) 
    27112671                        else: 
    2712                             menu.Check(False)  
    2713              
     2672                            menu.Check(False) 
     2673 
    27142674    def enable_add_data(self, new_plot): 
    27152675        """ 
     
    27212681        is_theory = len(self.panel_on_focus.plots) <= 1 and \ 
    27222682            self.panel_on_focus.plots.values()[0].__class__.__name__ == "Theory1D" 
    2723              
     2683 
    27242684        is_data2d = hasattr(new_plot, 'data') 
    2725          
     2685 
    27262686        is_data1d = self.panel_on_focus.__class__.__name__ == "ModelPanel1D"\ 
    27272687            and self.panel_on_focus.group_id is not None 
    27282688        has_meta_data = hasattr(new_plot, 'meta_data') 
    2729          
     2689 
    27302690        #disable_add_data if the data is being recovered from  a saved state file. 
    27312691        is_state_data = False 
    27322692        if has_meta_data: 
    2733             if 'invstate' in new_plot.meta_data:  
     2693            if 'invstate' in new_plot.meta_data: 
    27342694                is_state_data = True 
    2735             if  'prstate' in new_plot.meta_data:  
     2695            if  'prstate' in new_plot.meta_data: 
    27362696                is_state_data = True 
    2737             if  'fitstate' in new_plot.meta_data:  
     2697            if  'fitstate' in new_plot.meta_data: 
    27382698                is_state_data = True 
    2739      
     2699 
    27402700        return is_data1d and not is_data2d and not is_theory and not is_state_data 
    2741      
     2701 
    27422702    def check_multimode(self, perspective=None): 
    27432703        """ 
     
    27562716        self._data_panel.rb_single_mode.Enable(flag) 
    27572717        self._data_panel.rb_batch_mode.Enable(flag) 
    2758                  
    2759  
    2760      
     2718 
    27612719    def enable_edit_menu(self): 
    27622720        """ 
     
    27752733            #Copy menu 
    27762734            flag = self.cpanel_on_focus.get_copy_flag() 
    2777             #self._edit_menu.ENABLE(GUIFRAME_ID.COPYAS_ID,flag) 
    27782735            self._edit_menu_copyas.Enable(GUIFRAME_ID.COPYEX_ID, flag) 
    27792736            self._edit_menu_copyas.Enable(GUIFRAME_ID.COPYLAT_ID, flag) 
     
    27892746            self._edit_menu.Enable(GUIFRAME_ID.COPY_ID, flag) 
    27902747            self._edit_menu.Enable(GUIFRAME_ID.PASTE_ID, flag) 
    2791             #self._edit_menu.Enable(GUIFRAME_ID.COPYEX_ID, flag) 
    2792             #self._edit_menu.Enable(GUIFRAME_ID.COPYLAT_ID, flag) 
    2793             #self._edit_menu.Enable(GUIFRAME_ID.COPYAS_ID, flag) 
    27942748            self._edit_menu.Enable(GUIFRAME_ID.PREVIEW_ID, flag) 
    27952749            self._edit_menu.Enable(GUIFRAME_ID.RESET_ID, flag) 
    2796              
     2750 
    27972751    def on_undo_panel(self, event=None): 
    27982752        """ 
     
    28012755        if self.cpanel_on_focus is not None: 
    28022756            self.cpanel_on_focus.on_undo(event) 
    2803              
     2757 
    28042758    def on_redo_panel(self, event=None): 
    28052759        """ 
     
    28082762        if self.cpanel_on_focus is not None: 
    28092763            self.cpanel_on_focus.on_redo(event) 
    2810              
     2764 
    28112765    def on_copy_panel(self, event=None): 
    28122766        """ 
     
    28152769        if self.cpanel_on_focus is not None: 
    28162770            self.cpanel_on_focus.on_copy(event) 
    2817              
     2771 
    28182772    def on_paste_panel(self, event=None): 
    28192773        """ 
     
    28222776        if self.cpanel_on_focus is not None: 
    28232777            self.cpanel_on_focus.on_paste(event) 
    2824                      
     2778 
    28252779    def on_bookmark_panel(self, event=None): 
    28262780        """ 
     
    28292783        if self.cpanel_on_focus is not None: 
    28302784            self.cpanel_on_focus.on_bookmark(event) 
    2831              
     2785 
    28322786    def append_bookmark(self, event=None): 
    28332787        """ 
     
    28352789        """ 
    28362790        self._toolbar.append_bookmark(event) 
    2837              
     2791 
    28382792    def on_save_panel(self, event=None): 
    28392793        """ 
     
    28422796        if self.cpanel_on_focus is not None: 
    28432797            self.cpanel_on_focus.on_save(event) 
    2844              
     2798 
    28452799    def on_preview_panel(self, event=None): 
    28462800        """ 
     
    28492803        if self.cpanel_on_focus is not None: 
    28502804            self.cpanel_on_focus.on_preview(event) 
    2851              
     2805 
    28522806    def on_print_panel(self, event=None): 
    28532807        """ 
     
    28562810        if self.cpanel_on_focus is not None: 
    28572811            self.cpanel_on_focus.on_print(event) 
    2858              
     2812 
    28592813    def on_zoom_panel(self, event=None): 
    28602814        """ 
     
    28632817        if self.cpanel_on_focus is not None: 
    28642818            self.cpanel_on_focus.on_zoom(event) 
    2865              
     2819 
    28662820    def on_zoom_in_panel(self, event=None): 
    28672821        """ 
     
    28702824        if self.cpanel_on_focus is not None: 
    28712825            self.cpanel_on_focus.on_zoom_in(event) 
    2872              
     2826 
    28732827    def on_zoom_out_panel(self, event=None): 
    28742828        """ 
     
    28772831        if self.cpanel_on_focus is not None: 
    28782832            self.cpanel_on_focus.on_zoom_out(event) 
    2879              
     2833 
    28802834    def on_drag_panel(self, event=None): 
    28812835        """ 
     
    28842838        if self.cpanel_on_focus is not None: 
    28852839            self.cpanel_on_focus.on_drag(event) 
    2886              
     2840 
    28872841    def on_reset_panel(self, event=None): 
    28882842        """ 
     
    28912845        if self.cpanel_on_focus is not None: 
    28922846            self.cpanel_on_focus.on_reset(event) 
    2893              
    2894     def on_change_caption(self, name, old_caption, new_caption):      
     2847 
     2848    def on_change_caption(self, name, old_caption, new_caption): 
    28952849        """ 
    28962850        Change the panel caption 
    2897          
     2851 
    28982852        :param name: window_name of the pane 
    28992853        :param old_caption: current caption [string] 
     
    29012855        """ 
    29022856        # wx.aui.AuiPaneInfo 
    2903         pane_info = self.get_paneinfo(old_caption)  
     2857        pane_info = self.get_paneinfo(old_caption) 
    29042858        # update the data_panel.cb_plotpanel 
    29052859        if 'data_panel' in self.panels.keys(): 
     
    29092863                # Check if any panel has the same caption 
    29102864                has_newstring = data_panel.cb_plotpanel.FindString\ 
    2911                                                             (str(new_caption))  
     2865                                                            (str(new_caption)) 
    29122866                caption = new_caption 
    29132867                if has_newstring != wx.NOT_FOUND: 
     
    29152869                    # Append nummber 
    29162870                    inc = 1 
     2871                    #FIXME: fix this terrible loop 
    29172872                    while (1): 
    2918                         caption = new_caption + '_%s'% str(inc) 
     2873                        caption = new_caption + '_%s' % str(inc) 
    29192874                        if caption not in captions: 
    29202875                            break 
    29212876                        inc += 1 
    29222877                    # notify to users 
    2923                     msg = "Found Same Title: Added '_%s'"% str(inc) 
     2878                    msg = "Found Same Title: Added '_%s'" % str(inc) 
    29242879                    wx.PostEvent(self, StatusEvent(status=msg)) 
    29252880                # update data_panel cb 
    2926                 pos = data_panel.cb_plotpanel.FindString(str(old_caption))  
     2881                pos = data_panel.cb_plotpanel.FindString(str(old_caption)) 
    29272882                if pos != wx.NOT_FOUND: 
    29282883                    data_panel.cb_plotpanel.SetString(pos, caption) 
     
    29312886        pane_info.SetTitle(caption) 
    29322887        return caption 
    2933          
     2888 
    29342889    def get_paneinfo(self, name): 
    29352890        """ 
    29362891        Get pane Caption from window_name 
    2937          
     2892 
    29382893        :param name: window_name in AuiPaneInfo 
    29392894        : return: AuiPaneInfo of the name 
     
    29432898                return panel.frame 
    29442899        return None 
    2945      
     2900 
    29462901    def enable_undo(self): 
    29472902        """ 
     
    29502905        if self.cpanel_on_focus is not None: 
    29512906            self._toolbar.enable_undo(self.cpanel_on_focus) 
    2952              
     2907 
    29532908    def enable_redo(self): 
    29542909        """ 
    2955         enable redo  
     2910        enable redo 
    29562911        """ 
    29572912        if self.cpanel_on_focus is not None: 
    29582913            self._toolbar.enable_redo(self.cpanel_on_focus) 
    2959              
     2914 
    29602915    def enable_copy(self): 
    29612916        """ 
     
    29642919        if self.cpanel_on_focus is not None: 
    29652920            self._toolbar.enable_copy(self.cpanel_on_focus) 
    2966              
     2921 
    29672922    def enable_paste(self): 
    29682923        """ 
    2969         enable paste  
     2924        enable paste 
    29702925        """ 
    29712926        if self.cpanel_on_focus is not None: 
    29722927            self._toolbar.enable_paste(self.cpanel_on_focus) 
    2973                         
     2928 
    29742929    def enable_bookmark(self): 
    29752930        """ 
    2976         Bookmark  
     2931        Bookmark 
    29772932        """ 
    29782933        if self.cpanel_on_focus is not None: 
    29792934            self._toolbar.enable_bookmark(self.cpanel_on_focus) 
    2980              
     2935 
    29812936    def enable_save(self): 
    29822937        """ 
    2983         save  
     2938        save 
    29842939        """ 
    29852940        if self.cpanel_on_focus is not None: 
    29862941            self._toolbar.enable_save(self.cpanel_on_focus) 
    2987              
     2942 
    29882943    def enable_preview(self): 
    29892944        """ 
    2990         preview  
     2945        preview 
    29912946        """ 
    29922947        if self.cpanel_on_focus is not None: 
    29932948            self._toolbar.enable_preview(self.cpanel_on_focus) 
    2994              
     2949 
    29952950    def enable_print(self): 
    29962951        """ 
    2997         print  
     2952        print 
    29982953        """ 
    29992954        if self.cpanel_on_focus is not None: 
    30002955            self._toolbar.enable_print(self.cpanel_on_focus) 
    3001              
     2956 
    30022957    def enable_zoom(self): 
    30032958        """ 
    3004         zoom  
     2959        zoom 
    30052960        """ 
    30062961        if self.cpanel_on_focus is not None: 
    30072962            self._toolbar.enable_zoom(self.panel_on_focus) 
    3008              
     2963 
    30092964    def enable_zoom_in(self): 
    30102965        """ 
    3011         zoom in  
     2966        zoom in 
    30122967        """ 
    30132968        if self.cpanel_on_focus is not None: 
    30142969            self._toolbar.enable_zoom_in(self.panel_on_focus) 
    3015              
     2970 
    30162971    def enable_zoom_out(self): 
    30172972        """ 
    3018         zoom out  
     2973        zoom out 
    30192974        """ 
    30202975        if self.cpanel_on_focus is not None: 
    30212976            self._toolbar.enable_zoom_out(self.panel_on_focus) 
    3022              
     2977 
    30232978    def enable_drag(self, event=None): 
    30242979        """ 
    3025         drag  
     2980        drag 
    30262981        """ 
    30272982        #Not implemeted 
    3028              
     2983 
    30292984    def enable_reset(self): 
    30302985        """ 
     
    30332988        if self.cpanel_on_focus is not None: 
    30342989            self._toolbar.enable_reset(self.panel_on_focus) 
    3035              
     2990 
    30362991    def get_toolbar_height(self): 
    30372992        """ 
     
    30422997                _, size_y = self.GetToolBar().GetSizeTuple() 
    30432998        return size_y 
    3044      
     2999 
    30453000    def set_schedule_full_draw(self, panel=None, func='del'): 
    30463001        """ 
    30473002        Add/subtract the schedule full draw list with the panel given 
    3048          
     3003 
    30493004        :param panel: plot panel 
    30503005        :param func: append or del [string] 
     
    30543009        if func == 'append': 
    30553010            if not panel in self.schedule_full_draw_list: 
    3056                 self.schedule_full_draw_list.append(panel)  
     3011                self.schedule_full_draw_list.append(panel) 
    30573012        # remove this panel from schedule list 
    30583013        elif func == 'del': 
     
    30653020            self.schedule = False 
    30663021        else: 
    3067             self.schedule = True     
    3068          
     3022            self.schedule = True 
     3023 
    30693024    def full_draw(self): 
    30703025        """ 
    30713026        Draw the panels with axes in the schedule to full dwar list 
    30723027        """ 
    3073          
     3028 
    30743029        count = len(self.schedule_full_draw_list) 
    30753030        #if not self.schedule: 
     
    30973052                # while any panel is capture. 
    30983053                frame = panel.frame 
    3099                  
     3054 
    31003055                if not frame.GetCapture(): 
    31013056                    # draw if possible 
     
    31053060                # Check if the panel is not shown 
    31063061                flag = frame.IsShown() 
    3107                 frame.Show(flag)   
     3062                frame.Show(flag) 
    31083063            except: 
    31093064                pass 
    3110       
     3065 
    31113066        # Draw all panels  
    31123067        if count == 1: 
    3113             f_draw(self.schedule_full_draw_list[0])   
     3068            f_draw(self.schedule_full_draw_list[0]) 
    31143069        else: 
    31153070            map(f_draw, self.schedule_full_draw_list) 
     
    31193074        else: 
    31203075            self.set_schedule(True) 
    3121          
    3122     def set_schedule(self, schedule=False):   
     3076 
     3077    def set_schedule(self, schedule=False): 
    31233078        """ 
    31243079        Set schedule 
    31253080        """ 
    31263081        self.schedule = schedule 
    3127                  
    3128     def get_schedule(self):   
     3082 
     3083    def get_schedule(self): 
    31293084        """ 
    31303085        Get schedule 
    31313086        """ 
    31323087        return self.schedule 
    3133      
     3088 
    31343089    def on_set_plot_focus(self, panel): 
    31353090        """ 
     
    31393094            return 
    31403095        #self.set_plot_unfocus() 
    3141         panel.on_set_focus(None)   
     3096        panel.on_set_focus(None) 
    31423097        # set focusing panel 
    3143         self.panel_on_focus = panel   
     3098        self.panel_on_focus = panel 
    31443099        self.set_panel_on_focus(None) 
    31453100 
    3146     def set_plot_unfocus(self):  
     3101    def set_plot_unfocus(self): 
    31473102        """ 
    31483103        Un focus all plot panels 
     
    31503105        for plot in self.plot_panels.values(): 
    31513106            plot.on_kill_focus(None) 
    3152      
     3107 
    31533108    def get_window_size(self): 
    31543109        """ 
    3155         Get window size  
    3156          
     3110        Get window size 
     3111 
    31573112        :return size: tuple 
    31583113        """ 
     
    31633118                height -= 45 
    31643119        return (width, height) 
    3165              
     3120 
    31663121    def _onDrawIdle(self, *args, **kwargs): 
    31673122        """ 
     
    31753130        except: 
    31763131            pass 
    3177              
     3132 
    31783133        # restart idle         
    31793134        self._redraw_idle(*args, **kwargs) 
    31803135 
    3181              
     3136 
    31823137    def _redraw_idle(self, *args, **kwargs): 
    31833138        """ 
     
    31853140        """ 
    31863141        # restart idle    
    3187         self.idletimer.Restart(100*TIME_FACTOR, *args, **kwargs) 
    3188  
    3189          
     3142        self.idletimer.Restart(100 * TIME_FACTOR, *args, **kwargs) 
     3143 
     3144 
    31903145class DefaultPanel(wx.Panel, PanelBase): 
    31913146    """ 
     
    32023157        wx.Panel.__init__(self, parent, *args, **kwds) 
    32033158        PanelBase.__init__(self, parent) 
    3204      
     3159 
    32053160 
    32063161 
     
    32133168        When initialised 
    32143169        """ 
    3215         pos, size, self.is_max = self.window_placement((GUIFRAME_WIDTH,  
    3216                                            GUIFRAME_HEIGHT))      
    3217         self.frame = ViewerFrame(parent=None,  
    3218                              title=APPLICATION_NAME,  
    3219                              pos=pos,  
    3220                              gui_style = DEFAULT_STYLE, 
    3221                              size=size) 
     3170        pos, size, self.is_max = self.window_placement((GUIFRAME_WIDTH, 
     3171                                                        GUIFRAME_HEIGHT)) 
     3172        self.frame = ViewerFrame(parent=None, 
     3173                                 title=APPLICATION_NAME, 
     3174                                 pos=pos, 
     3175                                 gui_style=DEFAULT_STYLE, 
     3176                                 size=size) 
    32223177        self.frame.Hide() 
    32233178        if not IS_WIN: 
     
    32343189        try: 
    32353190            if os.path.isfile(SPLASH_SCREEN_PATH): 
    3236                 self.s_screen = self.display_splash_screen(parent=self.frame,  
    3237                                         path=SPLASH_SCREEN_PATH) 
     3191                self.s_screen = self.display_splash_screen(parent=self.frame, 
     3192                                                           path=SPLASH_SCREEN_PATH) 
    32383193            else: 
    3239                 self.frame.Show()    
     3194                self.frame.Show() 
    32403195        except: 
    32413196            if self.s_screen is not None: 
    32423197                self.s_screen.Close() 
    32433198            msg = "Cannot display splash screen\n" 
    3244             msg += str (sys.exc_value) 
     3199            msg += str(sys.exc_value) 
    32453200            logging.error(msg) 
    32463201            self.frame.Show() 
    32473202 
    32483203        self.SetTopWindow(self.frame) 
    3249    
     3204 
    32503205        return True 
    3251      
     3206 
    32523207    def maximize_win(self): 
    32533208        """ 
     
    32663221        if len(sys.argv) >= 2: 
    32673222            cmd = sys.argv[0].lower() 
    3268             basename  = os.path.basename(cmd) 
     3223            basename = os.path.basename(cmd) 
    32693224            app_base = str(APPLICATION_NAME).lower() 
    32703225            if os.path.isfile(cmd) or basename.lower() == app_base: 
     
    32743229                if basename.lower() in [app_py, app_exe, app_app, app_base]: 
    32753230                    data_base = sys.argv[1] 
    3276                     input_file = os.path.normpath(os.path.join(DATAPATH,  
     3231                    input_file = os.path.normpath(os.path.join(DATAPATH, 
    32773232                                                               data_base)) 
    32783233        if input_file is None: 
     
    32803235        if self.frame is not None: 
    32813236            self.frame.set_input_file(input_file=input_file) 
    3282           
    3283     def clean_plugin_models(self, path):  
     3237 
     3238    def clean_plugin_models(self, path): 
    32843239        """ 
    32853240        Delete plugin models  in app folder 
    3286          
     3241 
    32873242        :param path: path of the plugin_models folder in app 
    32883243        """ 
    32893244        # do it only the first time app loaded 
    3290         # delete unused model folder     
     3245        # delete unused model folder 
    32913246        model_folder = os.path.join(PATH_APP, path) 
    32923247        if os.path.exists(model_folder) and os.path.isdir(model_folder): 
     
    33003255                    logging.error("gui_manager.clean_plugin_models:\n  %s" \ 
    33013256                                  % sys.exc_value) 
    3302                
     3257 
    33033258    def set_manager(self, manager): 
    33043259        """ 
    33053260        Sets a reference to the application manager 
    3306         of the GUI manager (Frame)  
     3261        of the GUI manager (Frame) 
    33073262        """ 
    33083263        self.frame.set_manager(manager) 
    3309          
     3264 
    33103265    def build_gui(self): 
    33113266        """ 
     
    33183273            raise 
    33193274        self.frame.build_gui() 
    3320          
     3275 
    33213276    def set_welcome_panel(self, panel_class): 
    33223277        """ 
    33233278        Set the welcome panel 
    3324          
     3279 
    33253280        :param panel_class: class of the welcome panel to be instantiated 
    3326          
     3281 
    33273282        """ 
    33283283        self.frame.welcome_panel_class = panel_class 
    3329          
     3284 
    33303285    def add_perspective(self, perspective): 
    33313286        """ 
     
    33333288        """ 
    33343289        self.frame.add_perspective(perspective) 
    3335      
     3290 
    33363291    def window_placement(self, size): 
    33373292        """ 
     
    33503305                displayRect = screen.GetClientArea() 
    33513306                break 
    3352          
    3353         posX, posY, displayWidth, displayHeight = displayRect         
     3307 
     3308        posX, posY, displayWidth, displayHeight = displayRect 
    33543309        customWidth, customHeight = size 
    3355          
     3310 
    33563311        # If the custom size is default, set 90% of the screen size 
    33573312        if customWidth <= 0 and customHeight <= 0: 
     
    33673322            if customHeight > displayHeight: 
    33683323                customHeight = displayHeight 
    3369              
     3324 
    33703325        # Note that when running Linux and using an Xming (X11) server on a PC 
    33713326        # with a dual  monitor configuration, the reported display size may be 
     
    33743329        # screen 'too big'.  If so, we assume a smaller width which means the 
    33753330        # application will be placed towards the left hand side of the screen. 
    3376          
     3331 
    33773332        # If dual screen registered as 1 screen. Make width half. 
    33783333        # MAC just follows the default behavior of pos 
    33793334        if IS_WIN: 
    3380             if displayWidth > (displayHeight*2): 
    3381                 if (customWidth == displayWidth): 
    3382                     customWidth = displayWidth/2 
     3335            if displayWidth > (displayHeight * 2): 
     3336                if customWidth == displayWidth: 
     3337                    customWidth = displayWidth / 2 
    33833338                # and set the position to be the corner of the screen. 
    33843339                posX = 0 
    33853340                posY = 0 
    3386                  
     3341 
    33873342            # Make the position the middle of the screen. (Not 0,0) 
    33883343            else: 
    3389                 posX = (displayWidth - customWidth)/2 
    3390                 posY = (displayHeight - customHeight)/2 
    3391         # Return the suggested position and size for the application frame.     
     3344                posX = (displayWidth - customWidth) / 2 
     3345                posY = (displayHeight - customHeight) / 2 
     3346        # Return the suggested position and size for the application frame. 
    33923347        return (posX, posY), (customWidth, customHeight), is_maximized 
    33933348 
    3394      
    3395     def display_splash_screen(self, parent,  
     3349 
     3350    def display_splash_screen(self, parent, 
    33963351                              path=SPLASH_SCREEN_PATH): 
    33973352        """Displays the splash screen.  It will exactly cover the main frame.""" 
    3398         
     3353 
    33993354        # Prepare the picture.  On a 2GHz intel cpu, this takes about a second. 
    34003355        image = wx.Image(path, wx.BITMAP_TYPE_PNG) 
    3401         image.Rescale(SPLASH_SCREEN_WIDTH,  
     3356        image.Rescale(SPLASH_SCREEN_WIDTH, 
    34023357                      SPLASH_SCREEN_HEIGHT, wx.IMAGE_QUALITY_HIGH) 
    34033358        bm = image.ConvertToBitmap() 
     
    34133368        # case the splash screen disappears upon entering the event loop. 
    34143369        s_screen = wx.SplashScreen(bitmap=bm, 
    3415                                    splashStyle=(wx.SPLASH_TIMEOUT| 
     3370                                   splashStyle=(wx.SPLASH_TIMEOUT | 
    34163371                                                wx.SPLASH_CENTRE_ON_SCREEN), 
    3417                                    style=(wx.SIMPLE_BORDER| 
    3418                                           wx.FRAME_NO_TASKBAR| 
     3372                                   style=(wx.SIMPLE_BORDER | 
     3373                                          wx.FRAME_NO_TASKBAR | 
    34193374                                          wx.FRAME_FLOAT_ON_PARENT), 
    34203375                                   milliseconds=SS_MAX_DISPLAY_TIME, 
     
    34273382        s_screen.Show() 
    34283383        return s_screen 
    3429          
    3430          
     3384 
     3385 
    34313386    def on_close_splash_screen(self, event): 
    34323387        """ 
     
    34423397    Frame for panels 
    34433398    """ 
    3444     def __init__(self, parent, panel, title="Untitled", size=(300,200)): 
     3399    def __init__(self, parent, panel, title="Untitled", size=(300, 200)): 
    34453400        """ 
    34463401        comment 
     
    34563411            self.set_panel(panel) 
    34573412        self.Show(False) 
    3458      
     3413 
    34593414    def show_data_panel(self, action): 
    34603415        """ 
    34613416        """ 
    34623417        self.parent.show_data_panel(action) 
    3463          
     3418 
    34643419    def set_panel(self, panel): 
    34653420        """ 
     
    34713426        width, height = self.parent._get_panels_size(panel) 
    34723427        if hasattr(panel, "CENTER_PANE") and panel.CENTER_PANE: 
    3473             width *= 0.6   
     3428            width *= 0.6 
    34743429        self.SetSize((width, height)) 
    34753430        self.parent.put_icon(self) 
     
    34773432        self.Bind(wx.EVT_CLOSE, self.OnClose) 
    34783433        self.Show(False) 
    3479      
     3434 
    34803435    def set_panel_focus(self, event): 
    34813436        """ 
     
    34843439            self.panel.SetFocus() 
    34853440            self.parent.panel_on_focus = self.panel 
    3486          
     3441 
    34873442    def OnClose(self, event): 
    34883443        """ 
     
    34903445        """ 
    34913446        self.panel.on_close(event) 
    3492          
    3493 if __name__ == "__main__":  
     3447 
     3448if __name__ == "__main__": 
    34943449    app = ViewApp(0) 
    34953450    app.MainLoop() 
  • src/sas/guiframe/config.py

    rf53cd30 r4bf54044  
    3131'''If you found this software useful to your work please remember to acknowledge  
    3232its use in your publications as suggested below and reference the SasView website:  
    33 http://www.sasview.org/index.html. Please also consider letting us know by sending us the  
     33http://www.sasview.org/. Please also consider letting us know by sending us the  
    3434reference to your work. This will help us to ensure the long term support and  
    3535development of the software. 
    3636''' 
    3737_acknowledgement_publications = \ 
    38 '''This work originally developed as part of the DANSE project funded by the NSF 
    39 under grant DMR-0520547, and currently maintained by NIST, UMD, ORNL, ISIS, ESS  
     38'''This work benefited from software developed by the DANSE project under NSF  
     39award DMR-0520547 and currently maintained by NIST, UMD, ORNL, ISIS, ESS  
    4040and ILL. 
    4141''' 
Note: See TracChangeset for help on using the changeset viewer.