commit-gnuradio
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]