Changeset 71fa9028 in sasview for sansguiframe/src/sans/guiframe


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

add menu item to data grid

Location:
sansguiframe/src/sans/guiframe
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • sansguiframe/src/sans/guiframe/data_processor.py

    rf4b37d1 r71fa9028  
    8585        self.data_outputs = {} 
    8686        self.data = None 
     87        self.details = "" 
     88        self.file_name = None 
    8789        self._cols = 50 
    8890        self._rows = 51 
     
    172174        slicerpop.AppendSubMenu(col_label_menu ,  
    173175                                 '&Insert Column', 'Insert Column') 
    174         hint = 'Insert empty column before the selected column' 
    175         id = wx.NewId() 
    176         col_label_menu.Append(id, '&Empty', hint) 
    177         wx.EVT_MENU(self, id, self.on_insert_column) 
    178         col_name = [self.GetCellValue(0, col)  
    179                         for col in range(self.GetNumberCols())] 
    180         for label in self.data.keys(): 
    181             if label not in col_name: 
    182                 id = wx.NewId() 
    183                 hint = 'Insert %s column before the selected column' % str(label) 
    184                 col_label_menu.Append(id, '&%s' % str(label), hint) 
    185                 wx.EVT_MENU(self, id, self.on_insert_column) 
     176        col_name = [self.GetCellValue(0, c)  
     177                        for c in range(self.GetNumberCols())] 
     178        row = 0 
     179        label = self.GetCellValue(row, col) 
     180        self.insert_col_menu(col_label_menu, label, self) 
    186181        id = wx.NewId()     
    187182        hint = 'Remove selected column %s' 
    188         slicerpop.Append(id,  
    189                                  '&Remove Column', hint) 
     183        slicerpop.Append(id, '&Remove Column', hint) 
    190184        wx.EVT_MENU(self, id, self.on_remove_column) 
    191185         
     
    194188        self.PopupMenu(slicerpop, pos) 
    195189         
    196     def on_remove_column(self, event): 
     190    def insert_col_menu(self, menu, label, window): 
     191        """ 
     192        """ 
     193        id = wx.NewId() 
     194        title = "Empty" 
     195        hint = 'Insert empty column before %s' % str(label) 
     196        menu.Append(id, title, hint) 
     197        wx.EVT_MENU(window, id, self.on_insert_column) 
     198        col_name = [self.GetCellValue(0, col)  
     199                        for col in range(self.GetNumberCols())] 
     200        for c_name in self.data.keys(): 
     201            if c_name not in col_name: 
     202                id = wx.NewId() 
     203                hint = "Insert %s column before the " % str(c_name) 
     204                hint += " %s column" % str(label) 
     205                menu.Append(id, '&%s' % str(c_name), hint) 
     206                wx.EVT_MENU(window, id, self.on_insert_column) 
     207             
     208                 
     209    def on_remove_column(self, event=None): 
    197210        """ 
    198211        """ 
    199212        if self.selected_cols is not None or len(self.selected_cols) > 0: 
    200213            col = self.selected_cols[0] 
    201             # add data to the grid     
    202             row = 0 
    203             id = event.GetId() 
    204             col_name = self.GetCellValue(row, col) 
    205             self.data[col_name] = [] 
    206             for row in range(1, self.GetNumberRows() + 1): 
    207                 if row < self.max_row_touse: 
    208                     value = self.GetCellValue(row, col) 
    209                     self.data[col_name].append(value) 
    210                     for k , value_list in self.data.iteritems(): 
    211                         if k != col_name: 
    212                             length = len(value_list) 
    213                             if length < self.max_row_touse: 
    214                                 diff = self.max_row_touse - length 
    215                                 for i in range(diff): 
    216                                     self.data[k].append("") 
    217             self.DeleteCols(pos=col, numCols=1, updateLabels=True) 
    218             self.AutoSize() 
     214            self.remove_column(col=col, numCols=1) 
     215             
     216    def remove_column(self, col, numCols=1): 
     217        """ 
     218        Remove column to the current grid 
     219        """ 
     220        # add data to the grid     
     221        row = 0 
     222        col_name = self.GetCellValue(row, col) 
     223        self.data[col_name] = [] 
     224        for row in range(1, self.GetNumberRows() + 1): 
     225            if row < self.max_row_touse: 
     226                value = self.GetCellValue(row, col) 
     227                self.data[col_name].append(value) 
     228                for k , value_list in self.data.iteritems(): 
     229                    if k != col_name: 
     230                        length = len(value_list) 
     231                        if length < self.max_row_touse: 
     232                            diff = self.max_row_touse - length 
     233                            for i in range(diff): 
     234                                self.data[k].append("") 
     235        self.DeleteCols(pos=col, numCols=numCols, updateLabels=True) 
    219236             
    220237    def on_insert_column(self, event): 
     
    227244            id = event.GetId() 
    228245            col_name = event.GetEventObject().GetLabelText(id) 
    229             self.InsertCols(pos=col, numCols=1, updateLabels=True) 
    230             if col_name.strip() != "Empty": 
    231                 self.SetCellValue(row, col, str(col_name.strip())) 
    232             if col_name in self.data.keys(): 
    233                 value_list = self.data[col_name] 
    234                 cell_row =  1 
    235                 for value in value_list: 
    236                     self.SetCellValue(cell_row, col, str(value)) 
    237                     cell_row += 1 
    238             self.AutoSize() 
    239                  
     246            self.insert_column(col=col, col_name=col_name) 
     247            if  not issubclass(event.GetEventObject().__class__ , wx.Menu): 
     248                col += 1 
     249                self.selected_cols[0] += 1 
     250            
     251    def insert_column(self, col, col_name): 
     252        """ 
     253        """  
     254          
     255        row = 0 
     256        self.InsertCols(pos=col, numCols=1, updateLabels=True) 
     257        if col_name.strip() != "Empty": 
     258            self.SetCellValue(row, col, str(col_name.strip())) 
     259        if col_name in self.data.keys(): 
     260            value_list = self.data[col_name] 
     261            cell_row =  1 
     262            for value in value_list: 
     263                self.SetCellValue(cell_row, col, str(value)) 
     264                cell_row += 1 
     265        
    240266         
    241267    def on_set_x_axis(self, event): 
     
    249275        self.panel.set_yaxis(y=self.axis_value, label=self.axis_label)      
    250276             
    251     def set_data(self, data_inputs, data_outputs): 
     277    def set_data(self, data_inputs, data_outputs, details, file_name): 
    252278        """ 
    253279        Add data to the grid 
     
    255281        :param data_ouputs: default columns deplayed 
    256282        """ 
     283        self.file_name = file_name 
     284        self.details = details 
     285         
    257286        if data_outputs is None: 
    258287            data_outputs = {} 
    259288        self.data_outputs = data_outputs 
    260         if self.data_inputs is None: 
     289        if data_inputs is None: 
    261290            data_inputs = {} 
    262291        self.data_inputs = data_inputs 
     
    296325                if cell_row > self.max_row_touse: 
    297326                    self.max_row_touse = cell_row 
    298         
    299  
     327                     
     328    def get_grid_view(self): 
     329        """ 
     330        Return value contained in the grid 
     331        """ 
     332        grid_view = {} 
     333        for col in xrange(self.GetNumberCols()): 
     334            label = self.GetCellValue(row=0, col=col)  
     335            label = label.strip() 
     336            if label != "": 
     337                grid_view[label] = [] 
     338                for row in range(1, self.max_row_touse+1): 
     339                    value = self.GetCellValue(row=row, col=col) 
     340                    if value != "": 
     341                        grid_view[label].append(value)   
     342                    else: 
     343                        grid_view[label].append(None)  
     344        return grid_view 
     345     
    300346class Notebook(nb, PanelBase): 
    301347    """ 
     
    454500        self.enable_close_button() 
    455501         
    456     def set_data(self, data_inputs, data_outputs): 
     502    def set_data(self, data_inputs, data_outputs, details="", file_name=None): 
    457503        if data_outputs is None or data_outputs == {}: 
    458504            return 
     
    462508            if grid.data is None: 
    463509                #Found empty page 
    464                 grid.set_data(data_inputs, data_outputs)  
     510                grid.set_data(data_inputs=data_inputs,  
     511                              data_outputs=data_outputs, 
     512                              details=details, 
     513                              file_name=file_name)  
    465514                self.SetSelection(pos)  
    466515                return 
     
    477526        grid.AppendCols(1, True) 
    478527         
    479     def on_remove_column(self): 
    480         """ 
    481         Remove column to the current grid 
    482         """ 
    483         pos = self.GetSelection() 
    484         grid = self.GetPage(pos) 
    485         cols_pos = grid.GetSelectedCols()  
    486         for cpos in cols_pos: 
    487             grid.DeleteCols(cpos) 
     528    
    488529 
    489530 
     
    517558        self.layout_plotting_area() 
    518559        self.SetSizer(self.vbox) 
    519          
    520     def set_data(self, data_inputs, data_outputs): 
    521         """ 
    522         """ 
    523         if self.notebook is not None: 
    524             self.notebook.set_data(data_inputs, data_outputs) 
    525          
     560   
    526561    def set_xaxis(self, label="", x=None): 
    527562        """ 
     
    738773        menubar = wx.MenuBar() 
    739774        self.SetMenuBar(menubar) 
    740         """ 
    741         edit = wx.Menu() 
    742         menubar.Append(edit, "&File") 
    743         save_menu = edit.Append(wx.NewId(), 'Save As', 'Save into File') 
    744         wx.EVT_MENU(self, save_menu.GetId(), self.on_save_column) 
    745         """ 
     775         
     776        self.curr_col = None 
     777        self.curr_grid = None 
     778        self.curr_col_name = "" 
     779        file = wx.Menu() 
     780        menubar.Append(file, "&File") 
     781         
     782        hint = "Open file containing batch results" 
     783        open_menu = file.Append(wx.NewId(), 'Open ', hint) 
     784        wx.EVT_MENU(self, open_menu.GetId(), self.on_open) 
     785         
     786        hint = "Open the the current grid into excel" 
     787        open_excel_menu = file.Append(wx.NewId(), 'Open with Excel', hint) 
     788        wx.EVT_MENU(self, open_excel_menu.GetId(), self.open_with_excel) 
     789        file.AppendSeparator() 
     790        save_menu = file.Append(wx.NewId(), 'Save As', 'Save into File') 
     791        wx.EVT_MENU(self, save_menu.GetId(), self.on_save_page) 
     792         
     793        self.edit = wx.Menu() 
     794        hint = "Insert column before the selected column" 
     795        self.insert_before_menu = wx.Menu() 
     796        self.insert_sub_menu = self.edit.AppendSubMenu(self.insert_before_menu,  
     797                                                      'Insert Before', hint) 
     798  
     799        hint = "Remove the selected column" 
     800        self.remove_menu = self.edit.Append(-1, 'Remove Column', hint) 
     801        wx.EVT_MENU(self, self.remove_menu.GetId(), self.on_remove_column) 
     802         
     803        self.Bind(wx.EVT_MENU_OPEN, self.on_menu_open) 
     804        menubar.Append(self.edit, "&Edit") 
    746805        self.Bind(wx.EVT_CLOSE, self.on_close) 
    747806         
    748     def on_save_column(self, event): 
    749         """ 
    750         """ 
    751         self.panel.on_save_column(self.parent) 
    752  
     807    def GetLabelText(self, id): 
     808        """ 
     809        """ 
     810        for item in self.insert_before_menu.GetMenuItems(): 
     811            m_id = item.GetId()  
     812            if m_id == id: 
     813                return item.GetLabel()  
     814     
     815    def on_remove_column(self, event): 
     816        """ 
     817        """ 
     818        pos = self.panel.notebook.GetSelection() 
     819        grid = self.panel.notebook.GetPage(pos) 
     820        grid.on_remove_column(event=None) 
     821         
     822    def on_menu_open(self, event): 
     823        """ 
     824         
     825        """ 
     826        if self.edit == event.GetMenu(): 
     827            #get the selected column 
     828            pos = self.panel.notebook.GetSelection() 
     829            grid = self.panel.notebook.GetPage(pos) 
     830            col_list = grid.GetSelectedCols() 
     831            if len(col_list) > 0: 
     832                self.remove_menu.Enable(True) 
     833            else: 
     834                self.remove_menu.Enable(False) 
     835            if len(col_list)== 0 or len(col_list) > 1: 
     836                self.insert_sub_menu.Enable(False) 
     837                 
     838                label = "Insert Column Before" 
     839                self.insert_sub_menu.SetText(label) 
     840            else: 
     841                self.insert_sub_menu.Enable(True) 
     842                 
     843                col = col_list[0] 
     844                #GetColLabelValue(self, col) 
     845                col_name = grid.GetCellValue(row=0, col=col) 
     846                label = "Insert Column Before " + str(col_name) 
     847                self.insert_sub_menu.SetText(label) 
     848                for item in self.insert_before_menu.GetMenuItems(): 
     849                    self.insert_before_menu.DeleteItem(item) 
     850                grid.insert_col_menu(menu=self.insert_before_menu,  
     851                                     label=col_name, window=self) 
     852        event.Skip() 
     853         
     854   
     855         
     856    def on_save_page(self, event): 
     857        """ 
     858        """ 
     859        if self.parent is not None: 
     860            pos = self.panel.notebook.GetSelection() 
     861            grid = self.panel.notebook.GetPage(pos) 
     862            reader, ext = os.path.splitext(grid.file_name) 
     863            path = None 
     864            if self.parent is not None:  
     865                location = os.path.dirname(grid.file_name) 
     866                dlg = wx.FileDialog(self, "Save Project file", 
     867                            location, grid.file_name, ext, wx.SAVE) 
     868                path = None 
     869                if dlg.ShowModal() == wx.ID_OK: 
     870                    path = dlg.GetPath() 
     871                dlg.Destroy() 
     872                if path != None: 
     873                    if self.parent is not None: 
     874                        data = grid.get_grid_view() 
     875                        self.parent.write_batch_tofile(data=data,  
     876                                               file_name=path, 
     877                                               details=grid.details) 
     878     
     879    def on_open(self, event): 
     880        """ 
     881        Open file containg batch result 
     882        """ 
     883        if self.parent is not None: 
     884            self.parent.on_read_batch_tofile(event) 
     885             
     886    def open_with_excel(self, event): 
     887        """ 
     888        open excel and display batch result in Excel 
     889        """ 
     890        if self.parent is not None: 
     891            pos = self.panel.notebook.GetSelection() 
     892            grid = self.panel.notebook.GetPage(pos) 
     893            data = grid.get_grid_view() 
     894            self.parent.open_with_externalapp(data=data, 
     895                                               file_name=grid.file_name,  
     896                                               details=grid.details) 
     897             
    753898    def on_close(self, event): 
    754899        """ 
     
    756901        self.Hide() 
    757902         
    758     def on_remove_column(self, event): 
    759         """ 
    760         Remove the selected column to the grid 
    761         """ 
    762         self.panel.on_remove_column() 
    763          
    764     def on_insert_column(self, event): 
    765         """ 
    766         Insert a new column to the grid 
    767         """ 
    768         self.panel.insert_column() 
    769          
     903    
    770904    def on_append_column(self, event): 
    771905        """ 
     
    774908        self.panel.add_column() 
    775909         
    776     def set_data(self, data_inputs, data_outputs): 
    777         """ 
    778         """ 
    779         self.panel.set_data(data_inputs, data_outputs) 
     910    def set_data(self, data_inputs, data_outputs, details="", file_name=None): 
     911        """ 
     912        """ 
     913        pos = self.panel.notebook.GetSelection() 
     914        grid = self.panel.notebook.GetPage(pos) 
     915        grid.set_data(data_inputs=data_inputs,  
     916                            file_name=file_name, 
     917                            details=details, 
     918                            data_outputs=data_outputs) 
    780919       
    781920       
  • sansguiframe/src/sans/guiframe/gui_manager.py

    r4c2c93f r71fa9028  
    306306        file_name = "Batch_" + str(plugin_name)+ "_" + time_str + ext 
    307307        file_name = self._default_save_location + str(file_name) 
    308         #Need to save configuration for later  
    309         """ 
    310         frame = BatchOutputFrame(parent=self, data_outputs=data_outputs,  
    311                                  data_inputs=data_inputs, 
    312                                 file_name=file_name, 
    313                                 details=details) 
    314         """ 
    315         self.open_with_localapp(data_inputs=data_inputs, 
     308         
     309        self.open_with_localapp(file_name=file_name, 
     310                                details=details, 
     311                                data_inputs=data_inputs, 
    316312                                    data_outputs=data_outputs) 
    317         #frame.Show(True) 
    318      
    319     def open_with_localapp(self, data_inputs=None, data_outputs=None): 
     313      
     314     
     315    def open_with_localapp(self, data_inputs=None, details="", file_name=None, 
     316                           data_outputs=None): 
    320317        """ 
    321318        Display value of data into the application grid 
    322319        :param data: dictionary of string and list of items 
    323320        """ 
    324         self.batch_frame.set_data(data_inputs, data_outputs) 
     321        self.batch_frame.set_data(data_inputs=data_inputs,  
     322                                  data_outputs=data_outputs, 
     323                                  details=details, 
     324                                  file_name=file_name) 
    325325        self.batch_frame.Show(True) 
    326326         
     
    343343                self._default_save_location = os.path.dirname(path) 
    344344        dlg.Destroy() 
    345          
    346345        self.read_batch_tofile(file_name=path) 
    347346         
     
    363362        column_names_line  = "" 
    364363        index = None 
     364        details = "" 
    365365        for index in range(len(lines)): 
    366366            line = lines[index] 
     367            count = 0 
    367368            if line.find(separator) != -1: 
    368                 #found the first line containing the label 
     369                if line.count(separator) >= 2: 
     370                    #found the first line containing the label 
     371                    col_name_toks = line.split(separator) 
     372                    for item in col_name_toks: 
     373                        if item.strip() != "": 
     374                            count += 1 
     375            else: 
     376                details += line 
     377            if count >= 2: 
    369378                column_names_line = line 
    370379                first_data_index = index 
    371380                break  
     381            
    372382        if column_names_line.strip() == "" or index is None: 
    373383            return  
     
    380390                                for row in range(index + 1, len(lines)-1)] 
    381391                c_index += 1 
    382         self.open_with_localapp(data_outputs=data) 
     392                 
     393       
     394        self.open_with_localapp(data_outputs=data, data_inputs=None, 
     395                                file_name=file_name, details=details) 
    383396         
    384397    def write_batch_tofile(self, data, file_name, details=""): 
Note: See TracChangeset for help on using the changeset viewer.