Changeset 8983

Show
Ignore:
Timestamp:
07/22/08 19:27:48
Author:
jblum
Message:

gui enhancements

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • grc/trunk/notes/todo.txt

    r8960 r8983  
    33-optparse block 
    44-ofdm wrappers 
     5-gr_costas callbacks 
     6-gr_moving_average_XX 
    57 
    68############ Features to Add: #################### 
     
    1416-log slider gui control 
    1517-variable resolution graph structure 
     18-recursive/nested categories 
    1619 
    1720############ Problems: #################### 
    1821-catch error on open non-existant files 
    1922-variables dependent on variables that change 
     23-flow graph, update autoscroll with emit('changed') 
     24-flow graph, try mouse DRAG_MOTION? 
    2025 
    2126############ Suggestions: #################### 
  • grc/trunk/src/grc/ActionHandler.py

    r8810 r8983  
    200200                elif state == NOTHING_SELECT: 
    201201                        self.get_flow_graph().unselect() 
     202                        self.get_flow_graph().update() 
    202203                ############################################################################################## 
    203204                #       Enable/Disable 
     
    277278                elif state == BLOCK_PARAM_MODIFY: 
    278279                        if self.get_flow_graph().param_modify_selected(): 
     280                                self.get_flow_graph().update() 
    279281                                self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data()) 
    280282                                self.get_page().set_saved(False) 
     
    285287                        n = self.get_page().get_state_cache().get_prev_state() 
    286288                        if n: 
    287                                 self.handle_states(NOTHING_SELECT
     289                                self.get_flow_graph().unselect(
    288290                                self.get_flow_graph().import_data(n) 
    289291                                self.get_flow_graph().update() 
     
    292294                        n = self.get_page().get_state_cache().get_next_state() 
    293295                        if n: 
    294                                 self.handle_states(NOTHING_SELECT
     296                                self.get_flow_graph().unselect(
    295297                                self.get_flow_graph().import_data(n) 
    296298                                self.get_flow_graph().update() 
     
    380382                get_action_from_name(FLOW_GRAPH_SAVE).set_sensitive(not self.get_page().get_saved()) 
    381383                self.main_window.update() 
     384                #draw the flow graph 
     385                self.get_flow_graph().draw() 
    382386 
    383387        def update_exec_stop(self): 
  • grc/trunk/src/grc/gui/BlockTreeWindow.py

    r8960 r8983  
    2828import gobject 
    2929 
     30NAME_INDEX = 0 
     31KEY_INDEX = 1 
     32 
    3033class BlockTreeWindow(gtk.VBox, _BlockTree): 
    3134        """The block selection panel.""" 
     
    5457                selection.connect('changed', self._handle_selection_change) 
    5558                renderer = gtk.CellRendererText() 
    56                 column = gtk.TreeViewColumn('Blocks', renderer, text=0
     59                column = gtk.TreeViewColumn('Blocks', renderer, text=NAME_INDEX
    5760                self.treeview.append_column(column) 
    5861                #make the scrolled window to hold the tree view 
     
    7174                self.platform.load_block_tree(self) 
    7275                #initialize 
    73                 self._handle_selection_change() 
     76                self._update_add_button() 
    7477 
     78        ############################################################ 
     79        ## Block Tree Methods 
     80        ############################################################ 
    7581        def add_block(self, block, category): 
    7682                """! 
     
    8288                _BlockTree.add_block(self, block, category) 
    8389                new_iter = self.treestore.insert_before(self.categories[category], None) 
    84                 self.treestore.set_value(new_iter, 0, block.get_name()) 
    85                 self.treestore.set_value(new_iter, 1, block.get_key()) 
     90                self.treestore.set_value(new_iter, NAME_INDEX, block.get_name()) 
     91                self.treestore.set_value(new_iter, KEY_INDEX, block.get_key()) 
    8692 
    8793        def add_category(self, category): 
     
    9399                _BlockTree.add_category(self, category) 
    94100                iter = self.treestore.insert_before(None, None) 
    95                 self.treestore.set_value(iter, 0, category) 
     101                self.treestore.set_value(iter, NAME_INDEX, category) 
     102                self.treestore.set_value(iter, KEY_INDEX, '') 
    96103                self.categories[category] = iter 
    97104 
     105        ############################################################ 
     106        ## Helper Methods 
     107        ############################################################ 
     108        def _get_selected_block_key(self): 
     109                """! 
     110                Get the currently selected block key. 
     111                @return the key of the selected block or a empty string 
     112                """ 
     113                selection = self.treeview.get_selection() 
     114                treestore, iter = selection.get_selected() 
     115                return iter and treestore.get_value(iter, KEY_INDEX) or '' 
     116 
     117        def _update_add_button(self): 
     118                """! 
     119                Update the add button's sensitivity. 
     120                The button should be active only if a block is selected. 
     121                """ 
     122                key = self._get_selected_block_key() 
     123                self.add_button.set_sensitive(bool(key)) 
     124 
     125        def _add_selected_block(self): 
     126                """! 
     127                Add the selected block with the given key to the flow graph. 
     128                """ 
     129                key = self._get_selected_block_key() 
     130                if key: self.get_flow_graph().add_new_block(key) 
     131 
     132        ############################################################ 
     133        ## Event Handlers 
     134        ############################################################ 
    98135        def _handle_mouse_button_press(self, widget, event): 
    99136                """! 
    100137                Handle the mouse button press. 
    101                 If a left double click is detected, 
    102                 let the handler for the add button decide to add a block. 
     138                If a left double click is detected, call add selected block. 
    103139                """ 
    104                 if event.button == 1 and event.type == gtk.gdk._2BUTTON_PRESS: self._handle_add_button(widget) 
     140                if event.button == 1 and event.type == gtk.gdk._2BUTTON_PRESS: 
     141                        self._add_selected_block() 
    105142 
    106         def _handle_selection_change(self, selection=None): 
     143        def _handle_selection_change(self, selection): 
    107144                """! 
    108145                Handle a selection change in the tree view. 
    109146                If a selection changes, set the add button sensitive. 
    110147                """ 
    111                 selection = self.treeview.get_selection() 
    112                 model, iter = selection.get_selected() 
    113                 sensitive = bool(iter and not model.iter_has_child(iter)) 
    114                 self.add_button.set_sensitive(sensitive) 
     148                self._update_add_button() 
    115149 
    116150        def _handle_add_button(self, widget): 
    117151                """! 
    118152                Handle the add button clicked signal. 
    119                 Add the signal block to the flow graph
     153                Call add selected block
    120154                """ 
    121                 selection = self.treeview.get_selection() 
    122                 treestore, iter = selection.get_selected() 
    123                 if iter and not treestore.iter_has_child(iter): 
    124                         key = treestore.get_value(iter, 1) 
    125                         self.get_flow_graph().add_new_block(key) 
     155                self._add_selected_block() 
    126156 
  • grc/trunk/src/grc/gui/MainWindow.py

    r8956 r8983  
    3636 
    3737############################################################ 
    38 ##     Main window 
     38# Main window 
    3939############################################################ 
    4040 
     
    6868                self.current_page = None 
    6969                self.notebook.set_show_border(False) 
    70                 self.notebook.set_scrollable(True)     #scroll arrows for page tabs 
    71                 self.notebook.connect("switch-page", self._handle_page_change) 
     70                self.notebook.set_scrollable(True) #scroll arrows for page tabs 
     71                self.notebook.connect('switch-page', self._handle_page_change) 
    7272                fg_and_report_box = gtk.VBox(False, 0) 
    7373                fg_and_report_box.pack_start(self.notebook, False, False, 0) 
     
    9797 
    9898        ############################################################ 
    99         ##     Event Handlers 
     99        # Event Handlers 
    100100        ############################################################ 
    101101 
     
    121121                self.current_page = self.notebook.get_nth_page(page_num) 
    122122                Messages.send_page_switch(self.current_page.get_file_path()) 
    123                 state = self.get_page().get_state_cache().get_current_state() 
    124                 self.get_flow_graph().import_data(state) 
    125                 self.get_flow_graph().update() 
    126                 self.handle_states(NOTHING_SELECT) 
    127  
    128         ############################################################ 
    129         ##      Report Window 
     123                self.handle_states() 
     124 
     125        ############################################################ 
     126        # Report Window 
    130127        ############################################################ 
    131128 
     
    138135                vadj = self.reports_scrolled_window.get_vadjustment() 
    139136                vadj.set_value(vadj.upper) 
     137                vadj.emit('changed') 
    140138 
    141139        def _show_reports_window(self, show): 
     
    149147 
    150148        ############################################################ 
    151         ##     Pages: create and close 
     149        # Pages: create and close 
    152150        ############################################################ 
    153151 
     
    194192                open_files = filter(lambda file: file, self._get_files()) #filter blank files 
    195193                open_file = self.get_page().get_file_path() 
     194                #close each page 
    196195                for page in self._get_pages(): 
    197                         self._set_page(self.notebook.get_nth_page(self.notebook.get_n_pages()-1)) #show last page 
    198196                        self.page_to_be_closed = page 
    199197                        self.close_page(False) 
    200198                if self.notebook.get_n_pages(): return False 
     199                #save state before closing 
    201200                Preferences.files_open(open_files) 
    202201                Preferences.file_open(open_file) 
     
    220219                        self.handle_states(FLOW_GRAPH_SAVE) #try to save 
    221220                        if not self.page_to_be_closed.get_saved(): #still unsaved? 
    222                                 self.page_to_be_closed = None  #set the page to be closed back to None 
     221                                self.page_to_be_closed = None #set the page to be closed back to None 
    223222                                return 
    224223                #stop the flow graph if executing 
     
    230229 
    231230        ############################################################ 
    232         ##     Misc 
     231        # Misc 
    233232        ############################################################ 
    234233 
     
    280279 
    281280        ############################################################ 
    282         ##     Helpers 
     281        # Helpers 
    283282        ############################################################ 
    284283 
  • grc/trunk/src/grc/gui/NotebookPage.py

    r8869 r8983  
    5757                self.state_cache = StateCache(initial_state) 
    5858                self.set_saved(True) 
    59                 #parse xml success, initialize page 
     59                #import the data to the flow graph 
     60                self.get_flow_graph().import_data(initial_state) 
     61                self.get_flow_graph().update() 
     62                #initialize page gui 
    6063                gtk.HBox.__init__(self, False, 0) 
    6164                self.show() 
  • grc/trunk/src/grc/gui/elements/FlowGraph.py

    r8956 r8983  
    168168                        signal_block_params_dialog = ParamsDialog(self.get_selected_block()) 
    169169                        changed = signal_block_params_dialog.run() 
    170                         self.update() 
    171170                        return changed #changes were made? 
    172171                return False 
     
    216215 
    217216        def unselect(self): 
    218                 """Set selected element to None and update.""" 
     217                """Set selected element to None.""" 
    219218                self._selected_element = None 
    220                 self.update() 
    221219 
    222220        def what_is_selected(self, coor): 
     
    300298                except: new_x, new_y = old_x, old_y 
    301299                if new_x != old_x or new_y != old_y: self.set_size(new_x, new_y) 
    302                 #draw the flow graph 
    303                 self.draw() 
    304300 
    305301        ########################################################################## 
     
    334330                                self.handle_states(BLOCK_PARAM_MODIFY) 
    335331                        #handle the state change with the new selection 
    336                         if self.get_selected_element(): self.handle_states(ELEMENT_SELECT) 
    337                         else: self.handle_states(NOTHING_SELECT) 
     332                        self.handle_states(ELEMENT_SELECT) 
    338333 
    339334        def handle_mouse_button_release(self, left_click, coordinate): 
     
    368363                #to perform a movement, the mouse must be pressed, an element selected, timediff large enough. 
    369364                if time.time() - self.time >= MOTION_DETECT_REDRAWING_SENSITIVITY and \ 
    370                         self.mouse_pressed and\ 
    371                         self.get_selected_element(): 
     365                        self.mouse_pressed and self.get_selected_element(): 
    372366                        #The event coordinates must be within BPS pixels away from the bounds of the flow graph. 
    373367                        fgW,fgH = self.get_size()