new preferences
[debian/gnuradio] / grc / src / gui / Preferences.py
index d6533586f191e02b48d69865d36a291107f397e6..1d89920dd59ccd838b586795624494ffd023ab10 100644 (file)
@@ -17,122 +17,70 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
 """
 
-from .. platforms.base.Constants import FLOW_GRAPH_DTD
-from .. utils import ParseXML
-import Messages
+import ConfigParser
 import os
 
-##Access the loaded preferences in this module
-_prefs = list()
-def _set_prefs(prefs): _prefs.append(prefs)
-def _get_prefs(): return _prefs[0]
-def load(platform): _Preferences(platform)
-def save(): _get_prefs().save()
-def get_preferences(): return _get_prefs().get_preferences()
+_platform = None
+_config_parser = ConfigParser.ConfigParser()
 
-class _Preferences(object):
+def file_extension(): return '.'+_platform.get_key()
+def _prefs_file(): return os.path.join(os.path.expanduser('~'), file_extension())
 
-       def __init__(self, platform):
-               #make self available to module
-               _set_prefs(self)
-               #get prefs block
-               self._prefs_block = platform.get_prefs_block()
-               #prefs file path
-               self._prefs_file_path = os.path.join(os.path.expanduser('~'), self._prefs_block.get_param('prefs_file').get_value())
-               #load
-               try:
-                       ParseXML.validate_dtd(self._prefs_file_path, FLOW_GRAPH_DTD)
-                       n = ParseXML.from_file(self._prefs_file_path)
-                       self._prefs_block.import_data(n['block'])
-               except: Messages.send_fail_load_preferences(self._prefs_file_path)
-               ##all params
-               self.window_prefix_param = self._prefs_block.get_param('window_prefix')
-               self.snap_to_grid_param = self._prefs_block.get_param('snap_to_grid')
-               self.grid_size_param = self._prefs_block.get_param('grid_size')
-               self.show_grid_param = self._prefs_block.get_param('show_grid')
-               self.reports_window_position_param = self._prefs_block.get_param('reports_window_position')
-               self.blocks_window_position_param = self._prefs_block.get_param('blocks_window_position')
-               self.restore_files_param = self._prefs_block.get_param('restore_files')
-               self.window_size_param = self._prefs_block.get_param('window_size')
-               self.file_open_param = self._prefs_block.get_param('file_open')
-               self.files_open_param = self._prefs_block.get_param('files_open')
-               self.show_params_param = self._prefs_block.get_param('show_params')
-
-       def save(self):
-               try: ParseXML.to_file({'block': self._prefs_block.export_data()}, self._prefs_file_path)
-               except IOError: Messages.send_fail_save_preferences(self._prefs_file_path)
-
-       def get_preferences(self):
-               ##Preferences: title, notes, params
-               return [
-                       (
-                               'Grid',
-                               '''
-Show grid will draw a square grid onto the flow graph with grid points separated by grid size pixels. \
-Snap to Grid forces the upper right corner of the signal block to align with a grid point.
-''',
-                               [self.snap_to_grid_param, self.grid_size_param, self.show_grid_param],
-                       ),
-                       (
-                               'Appearance',
-                               '''
-Show or hide all paramater labels in the signal blocks.
-''',
-                               [self.show_params_param],
-                       ),
-                       (
-                               'Misc',
-                               '''
-Restore previously opened files on start-up.
-''',
-                               [self.restore_files_param],
-                       ),
-               ]
+def load(platform):
+       global _platform
+       _platform = platform
+       #create sections
+       _config_parser.add_section('main')
+       _config_parser.add_section('files_open')
+       try: _config_parser.read(_prefs_file())
+       except: pass
+def save():
+       try: _config_parser.write(open(_prefs_file(), 'w'))
+       except: pass
 
 ###########################################################################
 # Special methods for specific program functionalities
 ###########################################################################
 
-def window_prefix():
-       return _get_prefs().window_prefix_param.get_value()
-
-def window_size(size=None):
-       if size: _get_prefs().window_size_param.set_value(size)
+def main_window_size(size=None):
+       if size is not None:
+               _config_parser.set('main', 'main_window_width', size[0])
+               _config_parser.set('main', 'main_window_height', size[1])
        else:
-               try: return eval(_get_prefs().window_size_param.get_value())
-               except: return (-1, -1)
-
-def restore_files():
-       return _get_prefs().restore_files_param.get_value() == 'yes'
+               try: return (
+                       _config_parser.getint('main', 'main_window_width'),
+                       _config_parser.getint('main', 'main_window_height'),
+               )
+               except: return (1, 1)
 
 def file_open(file=None):
-       if file is not None: _get_prefs().file_open_param.set_value(file)
-       else: return _get_prefs().file_open_param.get_value()
+       if file is not None: _config_parser.set('main', 'file_open', file)
+       else:
+               try: return _config_parser.get('main', 'file_open')
+               except: return ''
 
 def files_open(files=None):
-       if files is not None: _get_prefs().files_open_param.set_value('\n'.join(files))
-       else: return _get_prefs().files_open_param.get_value().split('\n')
+       if files is not None:
+               _config_parser.remove_section('files_open') #clear section
+               _config_parser.add_section('files_open')
+               for i, file in enumerate(files):
+                       _config_parser.set('files_open', 'file_open_%d'%i, file)
+       else:
+               files = list()
+               i = 0
+               while True:
+                       try: files.append(_config_parser.get('files_open', 'file_open_%d'%i))
+                       except: return files
+                       i = i + 1
 
 def reports_window_position(pos=None):
-       if pos is not None: _get_prefs().reports_window_position_param.set_value('%d'%pos)
+       if pos is not None: _config_parser.set('main', 'reports_window_position', pos)
        else:
-               try: return int(_get_prefs().reports_window_position_param.get_value()) or 1 #greater than 0
+               try: return _config_parser.getint('main', 'reports_window_position') or 1 #greater than 0
                except: return -1
 
 def blocks_window_position(pos=None):
-       if pos is not None: _get_prefs().blocks_window_position_param.set_value('%d'%pos)
+       if pos is not None: _config_parser.set('main', 'blocks_window_position', pos)
        else:
-               try: return int(_get_prefs().blocks_window_position_param.get_value()) or 1 #greater than 0
+               try: return _config_parser.getint('main', 'blocks_window_position') or 1 #greater than 0
                except: return -1
-
-def get_grid_size():
-       return int(_get_prefs().grid_size_param.get_value())
-
-def snap_to_grid():
-       return _get_prefs().snap_to_grid_param.get_value() == 'on'
-
-def show_grid():
-       return _get_prefs().show_grid_param.get_value() == 'show'
-
-def show_params():
-       return _get_prefs().show_params_param.get_value() == 'show'