commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r7713 - in grc/branches/grc_reloaded/src/grc: . elemen


From: jblum
Subject: [Commit-gnuradio] r7713 - in grc/branches/grc_reloaded/src/grc: . elements gui gui/elements platforms/gnuradio_python
Date: Fri, 15 Feb 2008 17:44:22 -0700 (MST)

Author: jblum
Date: 2008-02-15 17:44:22 -0700 (Fri, 15 Feb 2008)
New Revision: 7713

Modified:
   grc/branches/grc_reloaded/src/grc/ActionHandler.py
   grc/branches/grc_reloaded/src/grc/elements/FlowGraph.py
   grc/branches/grc_reloaded/src/grc/elements/Param.py
   grc/branches/grc_reloaded/src/grc/gui/Dialogs.py
   grc/branches/grc_reloaded/src/grc/gui/SignalBlockParamsDialog.py
   grc/branches/grc_reloaded/src/grc/gui/elements/FlowGraph.py
   grc/branches/grc_reloaded/src/grc/platforms/gnuradio_python/Block.py
   grc/branches/grc_reloaded/src/grc/platforms/gnuradio_python/Port.py
Log:
fixed controllers, added enter hotkey, params dialog handler, nports working

Modified: grc/branches/grc_reloaded/src/grc/ActionHandler.py
===================================================================
--- grc/branches/grc_reloaded/src/grc/ActionHandler.py  2008-02-16 00:16:52 UTC 
(rev 7712)
+++ grc/branches/grc_reloaded/src/grc/ActionHandler.py  2008-02-16 00:44:22 UTC 
(rev 7713)
@@ -96,6 +96,9 @@
                ####################    Delete  ###############################
                elif self.get_focus_flag() and keyname == 'Delete':     #mouse 
focus
                        self.handle_states(ELEMENT_REMOVE)
+               ####################    Params  ###############################
+               elif self.get_focus_flag() and keyname == 'Return':     #mouse 
focus
+                       self.handle_states(BLOCK_PARAM_MODIFY)
                ####################    Rotate  ###############################
                elif self.get_focus_flag() and keyname == 'Right': #mouse focus
                        self.handle_states(BLOCK_ROTATE_RIGHT)

Modified: grc/branches/grc_reloaded/src/grc/elements/FlowGraph.py
===================================================================
--- grc/branches/grc_reloaded/src/grc/elements/FlowGraph.py     2008-02-16 
00:16:52 UTC (rev 7712)
+++ grc/branches/grc_reloaded/src/grc/elements/FlowGraph.py     2008-02-16 
00:44:22 UTC (rev 7713)
@@ -67,8 +67,14 @@
                @return the element list
                """ 
                if self._options_block not in self._elements: 
self._elements.append(self._options_block)
-               #TODO stupidity
-               self._elements = list(set(self._elements))
+               #ensure uniqueness of the elements list
+               element_set = set()
+               element_list = list()
+               for element in self._elements:
+                       if element not in element_set: 
element_list.append(element)
+                       element_set.add(element)
+               #store cleaned up list
+               self._elements = element_list
                return self._elements
        
        def get_new_block(self, key):

Modified: grc/branches/grc_reloaded/src/grc/elements/Param.py
===================================================================
--- grc/branches/grc_reloaded/src/grc/elements/Param.py 2008-02-16 00:16:52 UTC 
(rev 7712)
+++ grc/branches/grc_reloaded/src/grc/elements/Param.py 2008-02-16 00:44:22 UTC 
(rev 7713)
@@ -176,7 +176,7 @@
 
        def get_value(self): return self._value
        
-       def set_value(self, value): self._value = value
+       def set_value(self, value): self._value = str(value) #must be a string
        
        def get_type(self): return 
self.get_parent().resolve_dependencies(self._type)
        

Modified: grc/branches/grc_reloaded/src/grc/gui/Dialogs.py
===================================================================
--- grc/branches/grc_reloaded/src/grc/gui/Dialogs.py    2008-02-16 00:16:52 UTC 
(rev 7712)
+++ grc/branches/grc_reloaded/src/grc/gui/Dialogs.py    2008-02-16 00:44:22 UTC 
(rev 7713)
@@ -200,17 +200,18 @@
                        ('Redo Change', 'Ctrl + y'),
                        ('Redo Change', 'Ctrl + Z'),
                        ('Delete Block', 'Delete'),
+                       ('Modify Parameters', 'Enter'),
                        ('Rotate Block', 'Right'),
                        ('Rotate Block', 'Left'),
                        ('Modify Data Type', 'Up'),
                        ('Modify Data Type', 'Down'),
-                       ('Add a Socket', '+'),
-                       ('Remove a Socket', '-'),
+                       ('Add a Port', '+'),
+                       ('Remove a Port', '-'),
                        ('Close Dialog', 'Esc'),
                        ('Flow Graph Run', 'F5'),
                        ('Flow Graph Stop', 'F7'),
                        ('Screen Shot', 'PrintScreen'),
-               ): markup = '%s\n<b>%s:</b>%s'%(markup, action, 
hotkey.rjust(25-len(action),' '))
+               ): markup = '%s\n<b>%s:</b>%s'%(markup, action, 
hotkey.rjust(25-len(action), ' '))
                label = gtk.Label()
                label.set_markup('<tt>%s</tt>\n'%markup)        #append newline
                self.vbox.pack_start(label, False)

Modified: grc/branches/grc_reloaded/src/grc/gui/SignalBlockParamsDialog.py
===================================================================
--- grc/branches/grc_reloaded/src/grc/gui/SignalBlockParamsDialog.py    
2008-02-16 00:16:52 UTC (rev 7712)
+++ grc/branches/grc_reloaded/src/grc/gui/SignalBlockParamsDialog.py    
2008-02-16 00:44:22 UTC (rev 7713)
@@ -82,8 +82,10 @@
                the variable param will need an external update.
                @param param the graphical parameter that initiated the 
callback                
                """
-               #TODO
-               #map(lambda p: p.update(), filter(lambda p: 
p.is_type_dependent(), self.block.get_params()))
+               if param.is_enum():
+                       for other_param in param.get_parent().get_params():
+                               if param.get_key() in other_param._type: 
other_param.update()
+               return True
                
        def run(self):
                """!

Modified: grc/branches/grc_reloaded/src/grc/gui/elements/FlowGraph.py
===================================================================
--- grc/branches/grc_reloaded/src/grc/gui/elements/FlowGraph.py 2008-02-16 
00:16:52 UTC (rev 7712)
+++ grc/branches/grc_reloaded/src/grc/gui/elements/FlowGraph.py 2008-02-16 
00:44:22 UTC (rev 7713)
@@ -81,12 +81,14 @@
                        if not filter(lambda e: e.is_block() and e.get_id() == 
id, self.get_elements()):        
                                vAdj = 
self.get_scroll_pane().get_vadjustment().get_value()
                                hAdj = 
self.get_scroll_pane().get_hadjustment().get_value()
-                               x = random.randint(100,400)+int(hAdj)   
-                               y = random.randint(100,400)+int(vAdj)   
+                               x = random.randint(100,200)+int(hAdj)   
+                               y = random.randint(100,200)+int(vAdj)   
+                               #get the new block
                                block = self.get_new_block(key)
                                block.set_coordinate((x, y))
                                block.set_rotation(0)           
-                               block.get_param('id').set_value(id)             
+                               block.get_param('id').set_value(id)     
+                               #handle new state       
                                self.handle_states(BLOCK_CREATE)        
                                self.update()
                                return          
@@ -97,18 +99,51 @@
                @param direction +1 or -1
                @return true for success
                """
-               if Element.is_port(self.selected_element): 
self.selected_element = self.selected_element.get_parent()
-               if Element.is_signal_block(self.selected_element): return 
self.selected_element.modify_type_controller(direction)
+               if self.selected_element.is_source() or 
self.selected_element.is_sink():
+                       self.selected_element = 
self.selected_element.get_parent()
+               if self.selected_element.is_block():
+                       for child in self.selected_element.get_params() + \
+                               self.selected_element.get_sources() + \
+                               self.selected_element.get_sinks():
+                               #find a param that controls a type
+                               for param in self.selected_element.get_params():
+                                       if param.is_enum() and param.get_key() 
in child._type:
+                                               #try to increment the enum by 
direction
+                                               try: 
+                                                       keys = 
param.get_option_keys()
+                                                       old_index = 
keys.index(param.get_value())                                                   
    
+                                                       new_index = (old_index 
+ direction + len(keys))%len(keys)
+                                                       
param.set_value(keys[new_index])
+                                                       self.update()           
                                        
+                                                       return True
+                                               except: return False
                return False
                
+               
        def port_controller_modify_selected(self, direction):
                """!
                Change port controller for the selected signal block.
                @param direction +1 or -1
                @return true for success
-               """
-               if Element.is_port(self.selected_element): 
self.selected_element = self.selected_element.get_parent()
-               if Element.is_signal_block(self.selected_element): return 
self.selected_element.modify_port_controller(direction)
+               """             
+               if self.selected_element.is_source() or 
self.selected_element.is_sink():
+                       self.selected_element = 
self.selected_element.get_parent()
+               if self.selected_element.is_block():
+                       for get_ports_attr in ('get_sources', 'get_sinks'):
+                               ports = getattr(self.selected_element, 
get_ports_attr)()
+                               if ports and hasattr(ports[0], 'get_nports') 
and ports[0].get_nports():
+                                       #find the param that controls port0
+                                       for param in 
self.selected_element.get_params():
+                                               if param.get_key() in 
ports[0]._nports:
+                                                       #try to increment the 
port controller by direction
+                                                       try: 
+                                                               value = 
param.evaluate()
+                                                               value = value + 
direction
+                                                               assert(0 < 
value < 11)
+                                                               
param.set_value(value)  
+                                                               self.update()   
                                                
+                                                               return True
+                                                       except: return False
                return False
 
        def param_modify_selected(self):
@@ -181,7 +216,6 @@
                #check the elements     
                for element in reversed(self.get_elements()):
                        if element.what_is_selected(coor):
-                               #TODO remove broken with option block?
                                self.get_elements().remove(element)
                                self.get_elements().append(element)
                                return element.what_is_selected(coor)           

Modified: grc/branches/grc_reloaded/src/grc/platforms/gnuradio_python/Block.py
===================================================================
--- grc/branches/grc_reloaded/src/grc/platforms/gnuradio_python/Block.py        
2008-02-16 00:16:52 UTC (rev 7712)
+++ grc/branches/grc_reloaded/src/grc/platforms/gnuradio_python/Block.py        
2008-02-16 00:44:22 UTC (rev 7713)
@@ -51,8 +51,44 @@
                self._doc = doc
                self._deps = deps
                self._fcn = fcn
-               self._callbacks = callbacks
+               self._callbacks = callbacks     
                
+       def validate(self):
+               _Block.validate(self)
+               for ports, Port in (
+                       (self._sources, self.get_parent().get_parent().Source), 
+                       (self._sinks, self.get_parent().get_parent().Sink),
+               ):
+                       #how many ports?
+                       num_ports = len(ports)
+                       #do nothing for 0 ports
+                       if not num_ports: continue
+                       #get the nports setting
+                       port0 = ports[str(0)]
+                       nports = port0.get_nports()
+                       #do nothing for no nports
+                       if not nports: continue
+                       #do nothing if nports is already num ports
+                       if nports == num_ports: continue
+                       #remove excess ports and connections
+                       if nports < num_ports:
+                               #remove the connections
+                               for key in map(str, range(nports, num_ports)):
+                                       port = ports[key]
+                                       for connection in 
port.get_connections():
+                                               self.remove_element(connection)
+                               #remove the ports
+                               for key in map(str, range(nports, num_ports)): 
ports.pop(key)
+                               continue
+                       #add more ports
+                       if nports > num_ports:
+                               for key in map(str, range(num_ports, nports)):
+                                       n = port0._n
+                                       n['key'] = key
+                                       port = Port(self, n)
+                                       ports[key] = port
+                               continue
+               
        def get_doc(self): return self._doc
        
        def get_deps(self): return self._deps

Modified: grc/branches/grc_reloaded/src/grc/platforms/gnuradio_python/Port.py
===================================================================
--- grc/branches/grc_reloaded/src/grc/platforms/gnuradio_python/Port.py 
2008-02-16 00:16:52 UTC (rev 7712)
+++ grc/branches/grc_reloaded/src/grc/platforms/gnuradio_python/Port.py 
2008-02-16 00:44:22 UTC (rev 7713)
@@ -52,11 +52,11 @@
                _Port.test(self)
                if self.get_nports():
                        try: assert(int(self.get_key()) == 0)
-                       except (AssertionError,ValueError): 
self._exit_with_error('Port key must be "0" when num ports is specified.')
+                       except (AssertionError,ValueError): 
self._exit_with_error('Port key must be "0" when nports is specified.')
                        try:
                                if self.is_sink(): 
assert(len(self.get_parent().get_sinks()) == 1)
                                elif self.is_source(): 
assert(len(self.get_parent().get_sources()) == 1)
-                       except AssertionError: self._exit_with_error('Other 
ports not allowed when num ports is specified.')
+                       except AssertionError: self._exit_with_error('Other 
ports not allowed when nports is specified.')
        
        def get_vlen(self): 
                """
@@ -78,7 +78,10 @@
                nports = self.get_parent().resolve_dependencies(self._nports)
                #return blank if nports is blank
                if not nports: return ''
-               try: return int(self.get_parent().get_parent().evaluate(nports))
+               try: 
+                       nports = 
int(self.get_parent().get_parent().evaluate(nports))
+                       assert(nports > 0)
+                       return nports
                except: return 1        
        
        def get_optional(self): return bool(self._optional)
@@ -117,6 +120,7 @@
 class Source(Port):
        
        def __init__(self, block, n):
+               self._n = n #save n
                #key is port index
                n['key'] = str(block._source_count)
                block._source_count = block._source_count + 1
@@ -125,6 +129,7 @@
 class Sink(Port):
        
        def __init__(self, block, n):
+               self._n = n #save n
                #key is port index
                n['key'] = str(block._sink_count)
                block._sink_count = block._sink_count + 1





reply via email to

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