[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r5826 - in grc/branches/jblum_work: notes src src/Elem
From: |
jblum |
Subject: |
[Commit-gnuradio] r5826 - in grc/branches/jblum_work: notes src src/Elements src/Graphics |
Date: |
Sun, 24 Jun 2007 01:11:44 -0600 (MDT) |
Author: jblum
Date: 2007-06-24 01:11:44 -0600 (Sun, 24 Jun 2007)
New Revision: 5826
Modified:
grc/branches/jblum_work/notes/notes.txt
grc/branches/jblum_work/src/ActionHandler.py
grc/branches/jblum_work/src/Elements/GraphicalParam.py
grc/branches/jblum_work/src/Graphics/SignalBlockSelectionWindow.py
grc/branches/jblum_work/src/Graphics/VariableModificationWindow.py
Log:
fixed gtk bug: stop editing in variable cells works
Modified: grc/branches/jblum_work/notes/notes.txt
===================================================================
--- grc/branches/jblum_work/notes/notes.txt 2007-06-24 03:22:02 UTC (rev
5825)
+++ grc/branches/jblum_work/notes/notes.txt 2007-06-24 07:11:44 UTC (rev
5826)
@@ -7,7 +7,6 @@
-tun/tap block (with input and output)
############ Known Problems: ####################
--in vars window, stop_editing doesnt work
-fg.stop() doesnt kill running threads
-abort core dump with throw std exception
-file save, ask for overwrite even when appending file extension
Modified: grc/branches/jblum_work/src/ActionHandler.py
===================================================================
--- grc/branches/jblum_work/src/ActionHandler.py 2007-06-24 03:22:02 UTC
(rev 5825)
+++ grc/branches/jblum_work/src/ActionHandler.py 2007-06-24 07:11:44 UTC
(rev 5826)
@@ -135,8 +135,7 @@
The action signals derive from clicking on a toolbar or menu
bar button.
Forward the action to the state handler.
"""
- name = event.get_name()
- self.handle_states(name)
+ self.handle_states(event.get_name())
def handle_states(self, state):
"""!
Modified: grc/branches/jblum_work/src/Elements/GraphicalParam.py
===================================================================
--- grc/branches/jblum_work/src/Elements/GraphicalParam.py 2007-06-24
03:22:02 UTC (rev 5825)
+++ grc/branches/jblum_work/src/Elements/GraphicalParam.py 2007-06-24
07:11:44 UTC (rev 5826)
@@ -51,10 +51,9 @@
def __init__(self, *args):
InputParam.__init__(self, *args)
self.entry = input = gtk.Entry()
- input.set_size_request(250,-1)
input.set_text(self.data_type.get_data())
input.connect("changed", self._handle_changed)
- self.pack_start(input, False)
+ self.pack_start(input, True)
self.get_text = input.get_text
# tool tip fun #
self.tp = gtk.Tooltips()
@@ -64,7 +63,7 @@
class FileParam(EntryParam):
""" Provide an entry box for filename and a button to browse for a
file. """
def __init__(self, *args):
- EntryParam.__init__(self, *args)
+ EntryParam.__init__(self, *args)
input = gtk.Button('...')
input.connect('clicked', self.handle_clicked)
self.pack_start(input, False)
@@ -140,14 +139,14 @@
new_data = self.input.get_text()
old_data = data_type.get_data()
if old_data != new_data: data_type.set_data(new_data)
- # Set the markup on the label, red for errors in
corresponding data type. #
+ #set the markup on the label, red for errors in corresponding
data type.
cname = self.get_cname()
if self.variable: cname = '<span
underline="low">%s</span>'%cname #alter format if the param is variable
if not data_type.is_valid(): self.input.set_markup('<span
foreground="red"><b>%s</b></span>'%cname)
else: self.input.set_markup(cname)
- # set the tooltip #
+ #set the tooltip
if self.input.tp: self.input.tp.set_tip(self.input.entry,
str(data_type))
- # execute the external callback #
+ #execute the external callback
if self.callback: self.callback(self)
def get_markup(self):
Modified: grc/branches/jblum_work/src/Graphics/SignalBlockSelectionWindow.py
===================================================================
--- grc/branches/jblum_work/src/Graphics/SignalBlockSelectionWindow.py
2007-06-24 03:22:02 UTC (rev 5825)
+++ grc/branches/jblum_work/src/Graphics/SignalBlockSelectionWindow.py
2007-06-24 07:11:44 UTC (rev 5826)
@@ -43,19 +43,19 @@
label = gtk.Label()
label.set_markup('<b>Signal Blocks</b>')
self.pack_start(label, False)
- # make the tree model for holding blocks #
+ #make the tree model for holding blocks
self.model = gtk.TreeStore(gobject.TYPE_STRING)
self.treeview = gtk.TreeView(self.model)
self.treeview.set_enable_search(False) #disable pop up search
box
self.treeview.add_events(gtk.gdk.BUTTON_PRESS_MASK)
- self.treeview.connect('button_press_event',
self._handle_button_press)
+ self.treeview.connect('button_press_event',
self._handle_mouse_button_press)
selection = self.treeview.get_selection()
selection.set_mode('single')
selection.connect('changed', self._handle_selection_change)
renderer = gtk.CellRendererText()
column = gtk.TreeViewColumn("Category", renderer, text=0)
self.treeview.append_column(column)
- # make the scrolled window to hold the tree view #
+ #make the scrolled window to hold the tree view
scrolled_window = gtk.ScrolledWindow()
scrolled_window.set_policy(gtk.POLICY_AUTOMATIC,
gtk.POLICY_AUTOMATIC)
scrolled_window.add_with_viewport(self.treeview)
@@ -64,34 +64,37 @@
SIGNAL_BLOCK_SELECTION_WINDOW_HEIGHT,
)
self.pack_start(scrolled_window)
- # add button #
+ #add button
self.add_button = gtk.Button(None, 'gtk-add')
self.add_button.connect('clicked', self._handle_add_button)
self.pack_start(self.add_button, False)
- # add blocks and categories #
+ #add blocks and categories
for category, tags in SB_TREE:
iter = self.model.insert_before(None, None)
self.model.set_value(iter, 0, category)
for tag in tags:
new_iter = self.model.insert_before(iter, None)
self.model.set_value(new_iter, 0, tag[0])
- self._handle_selection_change(None)
- self.show_all()
+ #initialize
+ self._handle_selection_change()
- def _handle_button_press(self, widget, event):
- """If a left double click is detected, let the handler for the
add button decide to add a block."""
- if event.button == 1 and event.type == gtk.gdk._2BUTTON_PRESS:
- self._handle_add_button(widget)
+ 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 event.button == 1 and event.type == gtk.gdk._2BUTTON_PRESS:
self._handle_add_button(widget)
- def _handle_selection_change(self, event):
- """If a selection changes, set the add button sensitive."""
+ def _handle_selection_change(self, selection=None):
+ """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()
if iter != None and not model.iter_has_child(iter):
self.add_button.set_sensitive(True)
else: self.add_button.set_sensitive(False)
def _handle_add_button(self, widget):
- """Add the signal block to the flow graph."""
+ """Handle the add button clicked signal.
+ Add the signal block to the flow graph."""
selection = self.treeview.get_selection()
model, iter = selection.get_selected()
if iter != None and not model.iter_has_child(iter):
self.flow_graph.add_signal_block(model.get_value(iter, 0))
Modified: grc/branches/jblum_work/src/Graphics/VariableModificationWindow.py
===================================================================
--- grc/branches/jblum_work/src/Graphics/VariableModificationWindow.py
2007-06-24 03:22:02 UTC (rev 5825)
+++ grc/branches/jblum_work/src/Graphics/VariableModificationWindow.py
2007-06-24 07:11:44 UTC (rev 5826)
@@ -32,7 +32,7 @@
"""A scrollable window to add/remove variables in the variable
registry."""
def __init__(self, handle_states):
"""!
- VariableModificationWindow constrcutor.Create a scrolled
window, and add buttons and lists.
+ VariableModificationWindow constructor.Create a scrolled
window, and add buttons and lists.
@param handle_states callback function to handle the variable
changes
"""
gtk.VBox.__init__(self)
@@ -41,7 +41,7 @@
label = gtk.Label()
label.set_markup('<b>Variables</b>')
self.pack_start(label, False)
- # create a srolled window to hold the vars #
+ #create a srolled window to hold the tree view
scrolled_window = gtk.ScrolledWindow()
scrolled_window.set_policy(gtk.POLICY_AUTOMATIC,
gtk.POLICY_AUTOMATIC)
scrolled_window.set_size_request(
@@ -49,7 +49,7 @@
VARIABLE_MODIFICATION_WINDOW_HEIGHT
)
self.pack_start(scrolled_window)
- # liststore hold the graphical list #
+ #liststore holds the graphical list
self.liststore = gtk.ListStore(
gobject.TYPE_STRING, #key
gobject.TYPE_STRING, #value
@@ -61,10 +61,15 @@
self.treeview.set_enable_search(False) #disable pop up search
box
self.renderers = list()
for i,title in enumerate(['Variable', 'Default', 'Min', 'Max',
'Step']): #create each data column
+ #renderer for column i
renderer = gtk.CellRendererText()
renderer.set_property('editable', True)
+ self.renderers.append(renderer)
+ #connect signal handlers
renderer.connect('edited', self._handle_renderer_edited)
- self.renderers.append(renderer)
+ renderer.connect('editing-started',
self._handle_start_editing)
+ renderer.connect('editing-canceled',
self._handle_cancel_editing)
+ #tree view for column i
tree_view_column = gtk.TreeViewColumn(title, renderer,
text=i)
tree_view_column.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) #allow the column to
shrink
self.treeview.append_column(tree_view_column)
@@ -73,22 +78,53 @@
selection.set_mode('single')
selection.connect('changed', self._handle_selection_change)
scrolled_window.add_with_viewport(self.treeview)
- # buttons #
+ #buttons add and remove
buttons_hbox = gtk.HBox()
- self.pack_start(buttons_hbox, False)
- # add, edit, and remove buttons #
+ self.pack_start(buttons_hbox, False)
add_button = gtk.Button(None, 'gtk-add')
add_button.connect('clicked', self._handle_add_button)
buttons_hbox.pack_start(add_button, False)
self.remove_button = gtk.Button(None, 'gtk-remove')
self.remove_button.connect('clicked',
self._handle_remove_button)
buttons_hbox.pack_start(self.remove_button, False)
+ #connect signal handlers
self.treeview.connect("cursor-changed",
self._handle_cursor_changed)
self.treeview.connect("drag_begin", self._handle_drag_begin)
self.treeview.connect("drag_end", self._handle_drag_end)
+ #initialize
+ self._handle_cancel_editing()
self._handle_selection_change()
- self.show_all()
+
#############################################################################################
+ # Access Methods
+
#############################################################################################
+
+ def to_key_list(self):
+ """!
+ Get a list of the keys in the current order.
+ @return a list of ordered variable keys
+ """
+ key_list = list()
+ for row in self.liststore: key_list.append(row[0])
+ return key_list
+
+ def from_key_list(self, key_list):
+ """!
+ Clear the rows and refill the list with keys from the key list.
+ @param key_list a list of ordered keys
+ """
+ self.liststore.clear()
+ for key in key_list:
self.liststore.append((key,)+Variables.get_values(key))
+
+ def unselect_all(self):
+ """Stop any editing and unselect every row in the tree view."""
+ if self.editable: self.editable.remove_widget()
+ self.treeview.get_selection().unselect_all()
+
+
#############################################################################################
+ # Row Manipulation Handlers
+
#############################################################################################
+
def _handle_drag_begin(self, drag_context, data):
"""A drag event has begun, make a backup of the key list."""
self.backup_key_list = self.to_key_list()
@@ -99,24 +135,30 @@
handle the variable state change."""
if self.backup_key_list != self.to_key_list():
self.handle_states(VARIABLE_REORDER)
- def unselect_all(self):
- """Stop editing in each renderer and unselect every row in the
tree view."""
- ##TODO: stop editing doesnt work
- for renderer in self.renderers: renderer.stop_editing(True)
- self.treeview.get_selection().unselect_all()
-
- def _handle_cursor_changed(self, event=None):
+ def _handle_cursor_changed(self, treeview):
"""Called when the cursor is placed on a row or in a cell.
Unselect any selected element in the flow graph."""
self.handle_states(NOTHING_SELECT)
- def _handle_selection_change(self, event=None):
+ def _handle_selection_change(self, selection=None):
"""If a selection changes, set the edit and remove buttons
sensitive."""
selection = self.treeview.get_selection()
model, iter = selection.get_selected()
if iter != None: self.remove_button.set_sensitive(True)
else: self.remove_button.set_sensitive(False)
+
#############################################################################################
+ # Cell Editing Handlers
+
#############################################################################################
+
+ def _handle_start_editing(self, cellrenderer, editable, path):
+ """Editing of a cell has begun, record the editable object."""
+ self.editable = editable
+
+ def _handle_cancel_editing(self, cellrenderer=None):
+ """Editing of a cell has been canceled."""
+ self.editable = None
+
def _handle_renderer_edited(self, renderer, row_index, new_text):
"""!
A cell was edited, determine what was edited and how to handle
it.
@@ -124,6 +166,7 @@
@param row_index the index of the row that changes
@param new_text the new text in the cell
"""
+ self._handle_cancel_editing()
column_index = self.renderers.index(renderer)
if new_text == self.liststore[row_index][column_index]: return
#no change
old_list = self.liststore[row_index]
@@ -145,8 +188,12 @@
self.liststore[row_index][i] = value
self.handle_states(VARIABLE_MODIFY)
- def _handle_remove_button(self, widget, data=None):
- """Remove the selected element from the list and from the
variables registry."""
+
#############################################################################################
+ # Button Handlers
+
#############################################################################################
+
+ def _handle_remove_button(self, widget):
+ """Handle the remove button by removing the selected element
from the list and from the variables registry."""
selection = self.treeview.get_selection()
model, iter = selection.get_selected()
if iter != None:
@@ -154,7 +201,7 @@
model.remove(iter)
self.handle_states(VARIABLE_MODIFY)
- def _handle_add_button(self, widget, data=None):
+ def _handle_add_button(self, widget):
"""Handle the add button by adding a variable with key and
value.
The key will be unique in the form 'new_var' + index."""
new_key_index = 0
@@ -168,22 +215,6 @@
self.liststore.append((new_key_name,)+Variables.get_values(new_key_name))
self.handle_states(VARIABLE_MODIFY)
return #leave the while loop
-
- def to_key_list(self):
- """!
- Get a list of the keys in the current order.
- @return a list of ordered variable keys
- """
- key_list = list()
- for row in self.liststore: key_list.append(row[0])
- return key_list
-
- def from_key_list(self, key_list):
- """!
- Clear the rows and refill the list with keys from the key list.
- @param key_list a list of ordered keys
- """
- self.liststore.clear()
- for key in key_list:
self.liststore.append((key,)+Variables.get_values(key))
+
\ No newline at end of file
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r5826 - in grc/branches/jblum_work: notes src src/Elements src/Graphics,
jblum <=