commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r9948 - in gnuradio/trunk/grc: . src/platforms/base sr


From: jblum
Subject: [Commit-gnuradio] r9948 - in gnuradio/trunk/grc: . src/platforms/base src/platforms/gui src/platforms/python
Date: Thu, 6 Nov 2008 19:10:17 -0700 (MST)

Author: jblum
Date: 2008-11-06 19:10:17 -0700 (Thu, 06 Nov 2008)
New Revision: 9948

Modified:
   gnuradio/trunk/grc/src/platforms/base/Param.py
   gnuradio/trunk/grc/src/platforms/gui/Param.py
   gnuradio/trunk/grc/src/platforms/python/Param.py
   gnuradio/trunk/grc/todo.txt
Log:
moved param input

Modified: gnuradio/trunk/grc/src/platforms/base/Param.py
===================================================================
--- gnuradio/trunk/grc/src/platforms/base/Param.py      2008-11-07 00:33:50 UTC 
(rev 9947)
+++ gnuradio/trunk/grc/src/platforms/base/Param.py      2008-11-07 02:10:17 UTC 
(rev 9948)
@@ -20,7 +20,56 @@
 from ... import utils
 from ... utils import odict
 from Element import Element
+import pygtk
+pygtk.require('2.0')
+import gtk
+import gobject
 
+class InputParam(gtk.HBox):
+       """The base class for an input parameter inside the input parameters 
dialog."""
+
+       def __init__(self, param, _handle_changed):
+               gtk.HBox.__init__(self)
+               self.param = param
+               self._handle_changed = _handle_changed
+               self.label = gtk.Label('') #no label, markup is added by 
set_markup
+               self.label.set_size_request(150, -1)
+               self.pack_start(self.label, False)
+               self.set_markup = lambda m: self.label.set_markup(m)
+               self.tp = None
+       def set_color(self, color): pass
+
+class EntryParam(InputParam):
+       """Provide an entry box for strings and numbers."""
+
+       def __init__(self, *args, **kwargs):
+               InputParam.__init__(self, *args, **kwargs)
+               self.entry = input = gtk.Entry()
+               input.set_text(self.param.get_value())
+               input.connect('changed', self._handle_changed)
+               self.pack_start(input, True)
+               self.get_text = input.get_text
+               #tool tip
+               self.tp = gtk.Tooltips()
+               self.tp.set_tip(self.entry, '')
+               self.tp.enable()
+       def set_color(self, color): self.entry.modify_base(gtk.STATE_NORMAL, 
gtk.gdk.color_parse(color))
+
+class EnumParam(InputParam):
+       """Provide an entry box for Enum types with a drop down menu."""
+
+       def __init__(self, *args, **kwargs):
+               InputParam.__init__(self, *args, **kwargs)
+               input = gtk.ComboBox(gtk.ListStore(gobject.TYPE_STRING))
+               cell = gtk.CellRendererText()
+               input.pack_start(cell, True)
+               input.add_attribute(cell, 'text', 0)
+               for option in self.param.get_options(): 
input.append_text(option.get_name())
+               
input.set_active(int(self.param.get_option_keys().index(self.param.get_value())))
+               input.connect("changed", self._handle_changed)
+               self.pack_start(input, False)
+               self.get_text = lambda: str(input.get_active()) #the get text 
parses the selected index to a string
+
 class Option(Element):
 
        def __init__(self, param, name, key, opts):
@@ -164,15 +213,10 @@
                raise NotImplementedError
 
        def get_color(self): return '#FFFFFF'
-
        def __str__(self): return 'Param - %s(%s)'%(self.get_name(), 
self.get_key())
-
        def is_param(self): return True
-
        def get_name(self): return self._name
-
        def get_key(self): return self._key
-
        def get_hide(self): return 
self.get_parent().resolve_dependencies(self._hide)
 
        def get_value(self):
@@ -187,9 +231,16 @@
                self._value = str(value) #must be a string
 
        def get_type(self): return 
self.get_parent().resolve_dependencies(self._type)
-
        def is_enum(self): return self._type == 'enum'
 
+       def get_input_class(self):
+               """
+               Get the graphical gtk class to represent this parameter.
+               @return gtk input class
+               """
+               if self.is_enum(): return EnumParam
+               return EntryParam
+
        ##############################################
        # Access Options
        ##############################################

Modified: gnuradio/trunk/grc/src/platforms/gui/Param.py
===================================================================
--- gnuradio/trunk/grc/src/platforms/gui/Param.py       2008-11-07 00:33:50 UTC 
(rev 9947)
+++ gnuradio/trunk/grc/src/platforms/gui/Param.py       2008-11-07 02:10:17 UTC 
(rev 9948)
@@ -23,98 +23,8 @@
 pygtk.require('2.0')
 import gtk
 import pango
-import gobject
 from Constants import PARAM_LABEL_FONT, PARAM_FONT
-from ... gui.Constants import DEFAULT_FILE_PATH
-from os import path
 
-######################################################################################################
-# gtk objects for handling input
-######################################################################################################
-
-class InputParam(gtk.HBox):
-       """The base class for an input parameter inside the input parameters 
dialog."""
-
-       def __init__(self, param, _handle_changed):
-               gtk.HBox.__init__(self)
-               self.param = param
-               self._handle_changed = _handle_changed
-               self.label = gtk.Label('') #no label, markup is added by 
set_markup
-               self.label.set_size_request(150, -1)
-               self.pack_start(self.label, False)
-               self.set_markup = lambda m: self.label.set_markup(m)
-               self.tp = None
-       def set_color(self, color): pass
-
-class EntryParam(InputParam):
-       """Provide an entry box for strings and numbers."""
-
-       def __init__(self, *args, **kwargs):
-               InputParam.__init__(self, *args, **kwargs)
-               self.entry = input = gtk.Entry()
-               input.set_text(self.param.get_value())
-               input.connect('changed', self._handle_changed)
-               self.pack_start(input, True)
-               self.get_text = input.get_text
-               #tool tip
-               self.tp = gtk.Tooltips()
-               self.tp.set_tip(self.entry, '')
-               self.tp.enable()
-       def set_color(self, color): self.entry.modify_base(gtk.STATE_NORMAL, 
gtk.gdk.color_parse(color))
-
-class FileParam(EntryParam):
-       """Provide an entry box for filename and a button to browse for a 
file."""
-
-       def __init__(self, *args, **kwargs):
-               EntryParam.__init__(self, *args, **kwargs)
-               input = gtk.Button('...')
-               input.connect('clicked', self._handle_clicked)
-               self.pack_start(input, False)
-
-       def _handle_clicked(self, widget=None):
-               """
-               If the button was clicked, open a file dialog in open/save 
format.
-               Replace the text in the entry with the new filename from the 
file dialog.
-               """
-               file_path = self.param.is_valid() and self.param.evaluate() or 
''
-               #bad file paths will be redirected to default
-               if not path.exists(path.dirname(file_path)): file_path = 
DEFAULT_FILE_PATH
-               if self.param.get_type() == 'file_open':
-                       file_dialog = gtk.FileChooserDialog('Open a Data 
File...', None,
-                               gtk.FILE_CHOOSER_ACTION_OPEN, 
('gtk-cancel',gtk.RESPONSE_CANCEL,'gtk-open',gtk.RESPONSE_OK))
-               elif self.param.get_type() == 'file_save':
-                       file_dialog = gtk.FileChooserDialog('Save a Data 
File...', None,
-                               gtk.FILE_CHOOSER_ACTION_SAVE, 
('gtk-cancel',gtk.RESPONSE_CANCEL, 'gtk-save',gtk.RESPONSE_OK))
-                       file_dialog.set_do_overwrite_confirmation(True)
-                       file_dialog.set_current_name(path.basename(file_path)) 
#show the current filename
-               file_dialog.set_current_folder(path.dirname(file_path)) 
#current directory
-               file_dialog.set_select_multiple(False)
-               file_dialog.set_local_only(True)
-               if gtk.RESPONSE_OK == file_dialog.run(): #run the dialog
-                       file_path = file_dialog.get_filename() #get the file 
path
-                       self.entry.set_text(file_path)
-                       self._handle_changed()
-               file_dialog.destroy() #destroy the dialog
-
-class EnumParam(InputParam):
-       """Provide an entry box for Enum types with a drop down menu."""
-
-       def __init__(self, *args, **kwargs):
-               InputParam.__init__(self, *args, **kwargs)
-               input = gtk.ComboBox(gtk.ListStore(gobject.TYPE_STRING))
-               cell = gtk.CellRendererText()
-               input.pack_start(cell, True)
-               input.add_attribute(cell, 'text', 0)
-               for option in self.param.get_options(): 
input.append_text(option.get_name())
-               
input.set_active(int(self.param.get_option_keys().index(self.param.get_value())))
-               input.connect("changed", self._handle_changed)
-               self.pack_start(input, False)
-               self.get_text = lambda: str(input.get_active()) #the get text 
parses the selected index to a string
-
-######################################################################################################
-# A Flow Graph Parameter
-######################################################################################################
-
 class Param(Element):
        """The graphical parameter."""
 
@@ -123,29 +33,26 @@
                Called when an external change occurs.
                Update the graphical input by calling the change handler.
                """
-               if hasattr(self, 'input'): self._handle_changed()
+               if hasattr(self, '_input'): self._handle_changed()
 
        def get_input_object(self, callback=None):
                """
-               Get the graphical gtk class to represent this parameter.
+               Get the graphical gtk object to represent this parameter.
                Create the input object with this data type and the handle 
changed method.
                @param callback a function of one argument(this param) to be 
called from the change handler
                @return gtk input object
                """
-               self.callback = callback
-               if self.is_enum(): input = EnumParam
-               elif self.get_type() in ('file_open', 'file_save'): input = 
FileParam
-               else: input = EntryParam
-               self.input = input(self, self._handle_changed)
-               if not callback: self.update()
-               return self.input
+               self._callback = callback
+               self._input = self.get_input_class()(self, self._handle_changed)
+               if not self._callback: self.update()
+               return self._input
 
        def _handle_changed(self, widget=None):
                """
                When the input changes, write the inputs to the data type.
                Finish by calling the exteral callback.
                """
-               value = self.input.get_text()
+               value = self._input.get_text()
                if self.is_enum(): value = self.get_option_keys()[int(value)]
                self.set_value(value)
                #set the markup on the label, red for errors in corresponding 
data type.
@@ -158,23 +65,23 @@
                        filter(lambda c: self.get_key() in c, 
self.get_parent()._callbacks):
                        name = '<span underline="low">%s</span>'%name
                if not self.is_valid():
-                       self.input.set_markup('<span 
foreground="red">%s</span>'%name)
+                       self._input.set_markup('<span 
foreground="red">%s</span>'%name)
                        tip = 'Error: ' + ' '.join(self.get_error_messages())
                else:
-                       self.input.set_markup(name)
+                       self._input.set_markup(name)
                        tip = 'Value: %s'%str(self.evaluate())
                #hide/show
-               if self.get_hide() == 'all': self.input.hide_all()
-               else: self.input.show_all()
+               if self.get_hide() == 'all': self._input.hide_all()
+               else: self._input.show_all()
                #set the color
-               self.input.set_color(self.get_color())
+               self._input.set_color(self.get_color())
                #set the tooltip
-               if self.input.tp: self.input.tp.set_tip(
-                       self.input.entry,
+               if self._input.tp: self._input.tp.set_tip(
+                       self._input.entry,
                        'Key: %s\nType: %s\n%s'%(self.get_key(), 
self.get_type(), tip),
                )
                #execute the external callback
-               if self.callback: self.callback(self)
+               if self._callback: self._callback(self)
 
        def get_markup(self):
                """
@@ -214,7 +121,7 @@
                                dt_str = ', '.join(map(to_str, data))
                        else: dt_str = to_str(data)     #other types
                        #truncate
-                       max_len = max(42 - len(self.get_name()), 3)
+                       max_len = max(27 - len(self.get_name()), 3)
                        if len(dt_str) > max_len:
                                dt_str = dt_str[:max_len-3] + '...'
                        return '<b>%s:</b> 
%s'%(Utils.xml_encode(self.get_name()), Utils.xml_encode(dt_str))

Modified: gnuradio/trunk/grc/src/platforms/python/Param.py
===================================================================
--- gnuradio/trunk/grc/src/platforms/python/Param.py    2008-11-07 00:33:50 UTC 
(rev 9947)
+++ gnuradio/trunk/grc/src/platforms/python/Param.py    2008-11-07 02:10:17 UTC 
(rev 9948)
@@ -18,11 +18,50 @@
 """
 
 from utils import expr_utils
-from .. base.Param import Param as _Param
+from .. base.Param import Param as _Param, EntryParam
 import Constants
 import numpy
 import os
+import pygtk
+pygtk.require('2.0')
+import gtk
 
+class FileParam(EntryParam):
+       """Provide an entry box for filename and a button to browse for a 
file."""
+
+       def __init__(self, *args, **kwargs):
+               EntryParam.__init__(self, *args, **kwargs)
+               input = gtk.Button('...')
+               input.connect('clicked', self._handle_clicked)
+               self.pack_start(input, False)
+
+       def _handle_clicked(self, widget=None):
+               """
+               If the button was clicked, open a file dialog in open/save 
format.
+               Replace the text in the entry with the new filename from the 
file dialog.
+               """
+               #get the paths
+               file_path = self.param.is_valid() and self.param.evaluate() or 
''
+               (dirname, basename) = os.path.isfile(file_path) and 
os.path.split(file_path) or (file_path, '')
+               if not os.path.exists(dirname): dirname = os.getcwd() #fix bad 
paths
+               #build the dialog
+               if self.param.get_type() == 'file_open':
+                       file_dialog = gtk.FileChooserDialog('Open a Data 
File...', None,
+                               gtk.FILE_CHOOSER_ACTION_OPEN, 
('gtk-cancel',gtk.RESPONSE_CANCEL,'gtk-open',gtk.RESPONSE_OK))
+               elif self.param.get_type() == 'file_save':
+                       file_dialog = gtk.FileChooserDialog('Save a Data 
File...', None,
+                               gtk.FILE_CHOOSER_ACTION_SAVE, 
('gtk-cancel',gtk.RESPONSE_CANCEL, 'gtk-save',gtk.RESPONSE_OK))
+                       file_dialog.set_do_overwrite_confirmation(True)
+                       file_dialog.set_current_name(basename) #show the 
current filename
+               file_dialog.set_current_folder(dirname) #current directory
+               file_dialog.set_select_multiple(False)
+               file_dialog.set_local_only(True)
+               if gtk.RESPONSE_OK == file_dialog.run(): #run the dialog
+                       file_path = file_dialog.get_filename() #get the file 
path
+                       self.entry.set_text(file_path)
+                       self._handle_changed()
+               file_dialog.destroy() #destroy the dialog
+
 #define types, native python + numpy
 VECTOR_TYPES = (tuple, list, set, numpy.ndarray)
 COMPLEX_TYPES = [complex, numpy.complex, numpy.complex64, numpy.complex128]
@@ -49,6 +88,10 @@
                'grid_pos', 'import',
        ]
 
+       def get_input_class(self):
+               if self.get_type() in ('file_open', 'file_save'): return 
FileParam
+               return _Param.get_input_class(self)
+
        def get_color(self):
                """
                Get the color that represents this param's type.

Modified: gnuradio/trunk/grc/todo.txt
===================================================================
--- gnuradio/trunk/grc/todo.txt 2008-11-07 00:33:50 UTC (rev 9947)
+++ gnuradio/trunk/grc/todo.txt 2008-11-07 02:10:17 UTC (rev 9948)
@@ -20,7 +20,7 @@
 -search for blocks
 -click and drag on whitespace to scroll
 -expand preferences, allow for custom prefs, prefs dialog should infer 
structure
--drag connection to delete it
+-gui grid editor for configuring grid params/placing wxgui plots and controls
 
 ##################################################
 # Problems
@@ -32,7 +32,8 @@
 -dont generate py files in .grc file dir
 -save/restore cwd
 -special connection validation rules for disabled blocks
--threads dont die on exit in probe and queue module
+-threads dont die on exit in probe and variable sink
+-overloaded gui classes for each platform, move param input objects into 
overloaded
 
 ##################################################
 # External





reply via email to

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