Changeset 8983
- Timestamp:
- 07/22/08 19:27:48
- Files:
-
- grc/trunk/notes/todo.txt (modified) (2 diffs)
- grc/trunk/src/grc/ActionHandler.py (modified) (5 diffs)
- grc/trunk/src/grc/gui/BlockTreeWindow.py (modified) (5 diffs)
- grc/trunk/src/grc/gui/MainWindow.py (modified) (10 diffs)
- grc/trunk/src/grc/gui/NotebookPage.py (modified) (1 diff)
- grc/trunk/src/grc/gui/elements/FlowGraph.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
grc/trunk/notes/todo.txt
r8960 r8983 3 3 -optparse block 4 4 -ofdm wrappers 5 -gr_costas callbacks 6 -gr_moving_average_XX 5 7 6 8 ############ Features to Add: #################### … … 14 16 -log slider gui control 15 17 -variable resolution graph structure 18 -recursive/nested categories 16 19 17 20 ############ Problems: #################### 18 21 -catch error on open non-existant files 19 22 -variables dependent on variables that change 23 -flow graph, update autoscroll with emit('changed') 24 -flow graph, try mouse DRAG_MOTION? 20 25 21 26 ############ Suggestions: #################### grc/trunk/src/grc/ActionHandler.py
r8810 r8983 200 200 elif state == NOTHING_SELECT: 201 201 self.get_flow_graph().unselect() 202 self.get_flow_graph().update() 202 203 ############################################################################################## 203 204 # Enable/Disable … … 277 278 elif state == BLOCK_PARAM_MODIFY: 278 279 if self.get_flow_graph().param_modify_selected(): 280 self.get_flow_graph().update() 279 281 self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data()) 280 282 self.get_page().set_saved(False) … … 285 287 n = self.get_page().get_state_cache().get_prev_state() 286 288 if n: 287 self. handle_states(NOTHING_SELECT)289 self.get_flow_graph().unselect() 288 290 self.get_flow_graph().import_data(n) 289 291 self.get_flow_graph().update() … … 292 294 n = self.get_page().get_state_cache().get_next_state() 293 295 if n: 294 self. handle_states(NOTHING_SELECT)296 self.get_flow_graph().unselect() 295 297 self.get_flow_graph().import_data(n) 296 298 self.get_flow_graph().update() … … 380 382 get_action_from_name(FLOW_GRAPH_SAVE).set_sensitive(not self.get_page().get_saved()) 381 383 self.main_window.update() 384 #draw the flow graph 385 self.get_flow_graph().draw() 382 386 383 387 def update_exec_stop(self): grc/trunk/src/grc/gui/BlockTreeWindow.py
r8960 r8983 28 28 import gobject 29 29 30 NAME_INDEX = 0 31 KEY_INDEX = 1 32 30 33 class BlockTreeWindow(gtk.VBox, _BlockTree): 31 34 """The block selection panel.""" … … 54 57 selection.connect('changed', self._handle_selection_change) 55 58 renderer = gtk.CellRendererText() 56 column = gtk.TreeViewColumn('Blocks', renderer, text= 0)59 column = gtk.TreeViewColumn('Blocks', renderer, text=NAME_INDEX) 57 60 self.treeview.append_column(column) 58 61 #make the scrolled window to hold the tree view … … 71 74 self.platform.load_block_tree(self) 72 75 #initialize 73 self._ handle_selection_change()76 self._update_add_button() 74 77 78 ############################################################ 79 ## Block Tree Methods 80 ############################################################ 75 81 def add_block(self, block, category): 76 82 """! … … 82 88 _BlockTree.add_block(self, block, category) 83 89 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()) 86 92 87 93 def add_category(self, category): … … 93 99 _BlockTree.add_category(self, category) 94 100 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, '') 96 103 self.categories[category] = iter 97 104 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 ############################################################ 98 135 def _handle_mouse_button_press(self, widget, event): 99 136 """! 100 137 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. 103 139 """ 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() 105 142 106 def _handle_selection_change(self, selection =None):143 def _handle_selection_change(self, selection): 107 144 """! 108 145 Handle a selection change in the tree view. 109 146 If a selection changes, set the add button sensitive. 110 147 """ 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() 115 149 116 150 def _handle_add_button(self, widget): 117 151 """! 118 152 Handle the add button clicked signal. 119 Add the signal block to the flow graph.153 Call add selected block. 120 154 """ 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() 126 156 grc/trunk/src/grc/gui/MainWindow.py
r8956 r8983 36 36 37 37 ############################################################ 38 # #Main window38 # Main window 39 39 ############################################################ 40 40 … … 68 68 self.current_page = None 69 69 self.notebook.set_show_border(False) 70 self.notebook.set_scrollable(True) #scroll arrows for page tabs71 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) 72 72 fg_and_report_box = gtk.VBox(False, 0) 73 73 fg_and_report_box.pack_start(self.notebook, False, False, 0) … … 97 97 98 98 ############################################################ 99 # #Event Handlers99 # Event Handlers 100 100 ############################################################ 101 101 … … 121 121 self.current_page = self.notebook.get_nth_page(page_num) 122 122 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 130 127 ############################################################ 131 128 … … 138 135 vadj = self.reports_scrolled_window.get_vadjustment() 139 136 vadj.set_value(vadj.upper) 137 vadj.emit('changed') 140 138 141 139 def _show_reports_window(self, show): … … 149 147 150 148 ############################################################ 151 # #Pages: create and close149 # Pages: create and close 152 150 ############################################################ 153 151 … … 194 192 open_files = filter(lambda file: file, self._get_files()) #filter blank files 195 193 open_file = self.get_page().get_file_path() 194 #close each page 196 195 for page in self._get_pages(): 197 self._set_page(self.notebook.get_nth_page(self.notebook.get_n_pages()-1)) #show last page198 196 self.page_to_be_closed = page 199 197 self.close_page(False) 200 198 if self.notebook.get_n_pages(): return False 199 #save state before closing 201 200 Preferences.files_open(open_files) 202 201 Preferences.file_open(open_file) … … 220 219 self.handle_states(FLOW_GRAPH_SAVE) #try to save 221 220 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 None221 self.page_to_be_closed = None #set the page to be closed back to None 223 222 return 224 223 #stop the flow graph if executing … … 230 229 231 230 ############################################################ 232 # #Misc231 # Misc 233 232 ############################################################ 234 233 … … 280 279 281 280 ############################################################ 282 # #Helpers281 # Helpers 283 282 ############################################################ 284 283 grc/trunk/src/grc/gui/NotebookPage.py
r8869 r8983 57 57 self.state_cache = StateCache(initial_state) 58 58 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 60 63 gtk.HBox.__init__(self, False, 0) 61 64 self.show() grc/trunk/src/grc/gui/elements/FlowGraph.py
r8956 r8983 168 168 signal_block_params_dialog = ParamsDialog(self.get_selected_block()) 169 169 changed = signal_block_params_dialog.run() 170 self.update()171 170 return changed #changes were made? 172 171 return False … … 216 215 217 216 def unselect(self): 218 """Set selected element to None and update."""217 """Set selected element to None.""" 219 218 self._selected_element = None 220 self.update()221 219 222 220 def what_is_selected(self, coor): … … 300 298 except: new_x, new_y = old_x, old_y 301 299 if new_x != old_x or new_y != old_y: self.set_size(new_x, new_y) 302 #draw the flow graph303 self.draw()304 300 305 301 ########################################################################## … … 334 330 self.handle_states(BLOCK_PARAM_MODIFY) 335 331 #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) 338 333 339 334 def handle_mouse_button_release(self, left_click, coordinate): … … 368 363 #to perform a movement, the mouse must be pressed, an element selected, timediff large enough. 369 364 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(): 372 366 #The event coordinates must be within BPS pixels away from the bounds of the flow graph. 373 367 fgW,fgH = self.get_size()
