[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r8983 - in grc/trunk: notes src/grc src/grc/gui src/gr
From: |
jblum |
Subject: |
[Commit-gnuradio] r8983 - in grc/trunk: notes src/grc src/grc/gui src/grc/gui/elements |
Date: |
Tue, 22 Jul 2008 19:27:49 -0600 (MDT) |
Author: jblum
Date: 2008-07-22 19:27:48 -0600 (Tue, 22 Jul 2008)
New Revision: 8983
Modified:
grc/trunk/notes/todo.txt
grc/trunk/src/grc/ActionHandler.py
grc/trunk/src/grc/gui/BlockTreeWindow.py
grc/trunk/src/grc/gui/MainWindow.py
grc/trunk/src/grc/gui/NotebookPage.py
grc/trunk/src/grc/gui/elements/FlowGraph.py
Log:
gui enhancements
Modified: grc/trunk/notes/todo.txt
===================================================================
--- grc/trunk/notes/todo.txt 2008-07-23 01:10:47 UTC (rev 8982)
+++ grc/trunk/notes/todo.txt 2008-07-23 01:27:48 UTC (rev 8983)
@@ -2,6 +2,8 @@
-hier block
-optparse block
-ofdm wrappers
+-gr_costas callbacks
+-gr_moving_average_XX
############ Features to Add: ####################
-save working directory after close
@@ -13,10 +15,13 @@
-hotkeys in action descriptions
-log slider gui control
-variable resolution graph structure
+-recursive/nested categories
############ Problems: ####################
-catch error on open non-existant files
-variables dependent on variables that change
+-flow graph, update autoscroll with emit('changed')
+-flow graph, try mouse DRAG_MOTION?
############ Suggestions: ####################
-simple usrp
Modified: grc/trunk/src/grc/ActionHandler.py
===================================================================
--- grc/trunk/src/grc/ActionHandler.py 2008-07-23 01:10:47 UTC (rev 8982)
+++ grc/trunk/src/grc/ActionHandler.py 2008-07-23 01:27:48 UTC (rev 8983)
@@ -199,6 +199,7 @@
self.get_flow_graph().update()
elif state == NOTHING_SELECT:
self.get_flow_graph().unselect()
+ self.get_flow_graph().update()
##############################################################################################
# Enable/Disable
##############################################################################################
@@ -276,6 +277,7 @@
##############################################################################################
elif state == BLOCK_PARAM_MODIFY:
if self.get_flow_graph().param_modify_selected():
+ self.get_flow_graph().update()
self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data())
self.get_page().set_saved(False)
##############################################################################################
@@ -284,14 +286,14 @@
elif state == FLOW_GRAPH_UNDO:
n = self.get_page().get_state_cache().get_prev_state()
if n:
- self.handle_states(NOTHING_SELECT)
+ self.get_flow_graph().unselect()
self.get_flow_graph().import_data(n)
self.get_flow_graph().update()
self.get_page().set_saved(False)
elif state == FLOW_GRAPH_REDO:
n = self.get_page().get_state_cache().get_next_state()
if n:
- self.handle_states(NOTHING_SELECT)
+ self.get_flow_graph().unselect()
self.get_flow_graph().import_data(n)
self.get_flow_graph().update()
self.get_page().set_saved(False)
@@ -379,6 +381,8 @@
#saved status
get_action_from_name(FLOW_GRAPH_SAVE).set_sensitive(not
self.get_page().get_saved())
self.main_window.update()
+ #draw the flow graph
+ self.get_flow_graph().draw()
def update_exec_stop(self):
"""
Modified: grc/trunk/src/grc/gui/BlockTreeWindow.py
===================================================================
--- grc/trunk/src/grc/gui/BlockTreeWindow.py 2008-07-23 01:10:47 UTC (rev
8982)
+++ grc/trunk/src/grc/gui/BlockTreeWindow.py 2008-07-23 01:27:48 UTC (rev
8983)
@@ -27,6 +27,9 @@
import gtk
import gobject
+NAME_INDEX = 0
+KEY_INDEX = 1
+
class BlockTreeWindow(gtk.VBox, _BlockTree):
"""The block selection panel."""
@@ -53,7 +56,7 @@
selection.set_mode('single')
selection.connect('changed', self._handle_selection_change)
renderer = gtk.CellRendererText()
- column = gtk.TreeViewColumn('Blocks', renderer, text=0)
+ column = gtk.TreeViewColumn('Blocks', renderer, text=NAME_INDEX)
self.treeview.append_column(column)
#make the scrolled window to hold the tree view
scrolled_window = gtk.ScrolledWindow()
@@ -70,8 +73,11 @@
#add blocks and categories
self.platform.load_block_tree(self)
#initialize
- self._handle_selection_change()
+ self._update_add_button()
+ ############################################################
+ ## Block Tree Methods
+ ############################################################
def add_block(self, block, category):
"""!
Add a block with category to this selection window.
@@ -81,8 +87,8 @@
"""
_BlockTree.add_block(self, block, category)
new_iter =
self.treestore.insert_before(self.categories[category], None)
- self.treestore.set_value(new_iter, 0, block.get_name())
- self.treestore.set_value(new_iter, 1, block.get_key())
+ self.treestore.set_value(new_iter, NAME_INDEX, block.get_name())
+ self.treestore.set_value(new_iter, KEY_INDEX, block.get_key())
def add_category(self, category):
"""!
@@ -92,35 +98,59 @@
"""
_BlockTree.add_category(self, category)
iter = self.treestore.insert_before(None, None)
- self.treestore.set_value(iter, 0, category)
+ self.treestore.set_value(iter, NAME_INDEX, category)
+ self.treestore.set_value(iter, KEY_INDEX, '')
self.categories[category] = iter
+ ############################################################
+ ## Helper Methods
+ ############################################################
+ def _get_selected_block_key(self):
+ """!
+ Get the currently selected block key.
+ @return the key of the selected block or a empty string
+ """
+ selection = self.treeview.get_selection()
+ treestore, iter = selection.get_selected()
+ return iter and treestore.get_value(iter, KEY_INDEX) or ''
+
+ def _update_add_button(self):
+ """!
+ Update the add button's sensitivity.
+ The button should be active only if a block is selected.
+ """
+ key = self._get_selected_block_key()
+ self.add_button.set_sensitive(bool(key))
+
+ def _add_selected_block(self):
+ """!
+ Add the selected block with the given key to the flow graph.
+ """
+ key = self._get_selected_block_key()
+ if key: self.get_flow_graph().add_new_block(key)
+
+ ############################################################
+ ## Event Handlers
+ ############################################################
def _handle_mouse_button_press(self, widget, event):
"""!
Handle the mouse button press.
- If a left double click is detected,
- let the handler for the add button decide to add a block.
+ If a left double click is detected, call add selected block.
"""
- if event.button == 1 and event.type == gtk.gdk._2BUTTON_PRESS:
self._handle_add_button(widget)
+ if event.button == 1 and event.type == gtk.gdk._2BUTTON_PRESS:
+ self._add_selected_block()
- def _handle_selection_change(self, selection=None):
+ def _handle_selection_change(self, selection):
"""!
Handle a selection change in the tree view.
If a selection changes, set the add button sensitive.
"""
- selection = self.treeview.get_selection()
- model, iter = selection.get_selected()
- sensitive = bool(iter and not model.iter_has_child(iter))
- self.add_button.set_sensitive(sensitive)
+ self._update_add_button()
def _handle_add_button(self, widget):
"""!
Handle the add button clicked signal.
- Add the signal block to the flow graph.
+ Call add selected block.
"""
- selection = self.treeview.get_selection()
- treestore, iter = selection.get_selected()
- if iter and not treestore.iter_has_child(iter):
- key = treestore.get_value(iter, 1)
- self.get_flow_graph().add_new_block(key)
+ self._add_selected_block()
Modified: grc/trunk/src/grc/gui/MainWindow.py
===================================================================
--- grc/trunk/src/grc/gui/MainWindow.py 2008-07-23 01:10:47 UTC (rev 8982)
+++ grc/trunk/src/grc/gui/MainWindow.py 2008-07-23 01:27:48 UTC (rev 8983)
@@ -35,7 +35,7 @@
import os
############################################################
-## Main window
+# Main window
############################################################
class MainWindow(gtk.Window):
@@ -67,8 +67,8 @@
self.page_to_be_closed = None
self.current_page = None
self.notebook.set_show_border(False)
- self.notebook.set_scrollable(True) #scroll arrows for page
tabs
- self.notebook.connect("switch-page", self._handle_page_change)
+ self.notebook.set_scrollable(True) #scroll arrows for page tabs
+ self.notebook.connect('switch-page', self._handle_page_change)
fg_and_report_box = gtk.VBox(False, 0)
fg_and_report_box.pack_start(self.notebook, False, False, 0)
fg_and_report_box.pack_start(self.scrolled_window)
@@ -96,7 +96,7 @@
self.show()#show after resize in preferences
############################################################
- ## Event Handlers
+ # Event Handlers
############################################################
def _quit(self, window, event):
@@ -120,13 +120,10 @@
"""
self.current_page = self.notebook.get_nth_page(page_num)
Messages.send_page_switch(self.current_page.get_file_path())
- state = self.get_page().get_state_cache().get_current_state()
- self.get_flow_graph().import_data(state)
- self.get_flow_graph().update()
- self.handle_states(NOTHING_SELECT)
+ self.handle_states()
############################################################
- ## Report Window
+ # Report Window
############################################################
def add_report_line(self, line):
@@ -137,6 +134,7 @@
self.text_display.insert(line)
vadj = self.reports_scrolled_window.get_vadjustment()
vadj.set_value(vadj.upper)
+ vadj.emit('changed')
def _show_reports_window(self, show):
"""!
@@ -148,7 +146,7 @@
else: self.reports_scrolled_window.hide()
############################################################
- ## Pages: create and close
+ # Pages: create and close
############################################################
def new_page(self, file_path='', show=False):
@@ -193,11 +191,12 @@
"""
open_files = filter(lambda file: file, self._get_files())
#filter blank files
open_file = self.get_page().get_file_path()
+ #close each page
for page in self._get_pages():
-
self._set_page(self.notebook.get_nth_page(self.notebook.get_n_pages()-1)) #show
last page
self.page_to_be_closed = page
self.close_page(False)
if self.notebook.get_n_pages(): return False
+ #save state before closing
Preferences.files_open(open_files)
Preferences.file_open(open_file)
Preferences.window_size(self.get_size())
@@ -219,7 +218,7 @@
if not self.page_to_be_closed.get_saved() and
self._save_changes():
self.handle_states(FLOW_GRAPH_SAVE) #try to save
if not self.page_to_be_closed.get_saved(): #still
unsaved?
- self.page_to_be_closed = None #set the page
to be closed back to None
+ self.page_to_be_closed = None #set the page to
be closed back to None
return
#stop the flow graph if executing
if self.page_to_be_closed.get_pid():
self.handle_states(FLOW_GRAPH_KILL)
@@ -229,7 +228,7 @@
self.page_to_be_closed = None #set the page to be closed back
to None
############################################################
- ## Misc
+ # Misc
############################################################
def update(self):
@@ -279,7 +278,7 @@
return self.get_page().get_flow_graph()
############################################################
- ## Helpers
+ # Helpers
############################################################
def _set_page(self, page):
Modified: grc/trunk/src/grc/gui/NotebookPage.py
===================================================================
--- grc/trunk/src/grc/gui/NotebookPage.py 2008-07-23 01:10:47 UTC (rev
8982)
+++ grc/trunk/src/grc/gui/NotebookPage.py 2008-07-23 01:27:48 UTC (rev
8983)
@@ -56,7 +56,10 @@
initial_state = ParseXML.from_file(file_path)
self.state_cache = StateCache(initial_state)
self.set_saved(True)
- #parse xml success, initialize page
+ #import the data to the flow graph
+ self.get_flow_graph().import_data(initial_state)
+ self.get_flow_graph().update()
+ #initialize page gui
gtk.HBox.__init__(self, False, 0)
self.show()
#tab box to hold label and close button
Modified: grc/trunk/src/grc/gui/elements/FlowGraph.py
===================================================================
--- grc/trunk/src/grc/gui/elements/FlowGraph.py 2008-07-23 01:10:47 UTC (rev
8982)
+++ grc/trunk/src/grc/gui/elements/FlowGraph.py 2008-07-23 01:27:48 UTC (rev
8983)
@@ -167,7 +167,6 @@
if self.get_selected_block():
signal_block_params_dialog =
ParamsDialog(self.get_selected_block())
changed = signal_block_params_dialog.run()
- self.update()
return changed #changes were made?
return False
@@ -215,9 +214,8 @@
return False
def unselect(self):
- """Set selected element to None and update."""
+ """Set selected element to None."""
self._selected_element = None
- self.update()
def what_is_selected(self, coor):
"""!
@@ -299,8 +297,6 @@
try: new_x, new_y = self.get_option('window_size')
except: new_x, new_y = old_x, old_y
if new_x != old_x or new_y != old_y: self.set_size(new_x, new_y)
- #draw the flow graph
- self.draw()
##########################################################################
## Handlers
@@ -333,8 +329,7 @@
self.mouse_pressed = False
self.handle_states(BLOCK_PARAM_MODIFY)
#handle the state change with the new selection
- if self.get_selected_element():
self.handle_states(ELEMENT_SELECT)
- else: self.handle_states(NOTHING_SELECT)
+ self.handle_states(ELEMENT_SELECT)
def handle_mouse_button_release(self, left_click, coordinate):
"""!
@@ -367,8 +362,7 @@
"""
#to perform a movement, the mouse must be pressed, an element
selected, timediff large enough.
if time.time() - self.time >=
MOTION_DETECT_REDRAWING_SENSITIVITY and \
- self.mouse_pressed and\
- self.get_selected_element():
+ self.mouse_pressed and self.get_selected_element():
#The event coordinates must be within BPS pixels away
from the bounds of the flow graph.
fgW,fgH = self.get_size()
x,y = coordinate
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r8983 - in grc/trunk: notes src/grc src/grc/gui src/grc/gui/elements,
jblum <=