00001 """
00002 Copyright 2008 Free Software Foundation, Inc.
00003 This file is part of GNU Radio
00004
00005 GNU Radio Companion is free software; you can redistribute it and/or
00006 modify it under the terms of the GNU General Public License
00007 as published by the Free Software Foundation; either version 2
00008 of the License, or (at your option) any later version.
00009
00010 GNU Radio Companion is distributed in the hope that it will be useful,
00011 but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00013 GNU General Public License for more details.
00014
00015 You should have received a copy of the GNU General Public License
00016 along with this program; if not, write to the Free Software
00017 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
00018 """
00019
00020
00021
00022
00023 from Constants import HOME_DIR, FLOW_GRAPH_DTD
00024 import ParseXML
00025 import Messages
00026 import os
00027
00028
00029 _prefs = list()
00030 def _set_prefs(prefs): _prefs.append(prefs)
00031 def _get_prefs(): return _prefs[0]
00032 def load(platform): _Preferences(platform)
00033 def save(): _get_prefs().save()
00034 def get_preferences(): return _get_prefs().get_preferences()
00035
00036 class _Preferences(object):
00037
00038 def __init__(self, platform):
00039
00040 _set_prefs(self)
00041
00042 self._prefs_block = platform.get_prefs_block()
00043
00044 self._prefs_file_path = os.path.join(HOME_DIR, self._prefs_block.get_param('prefs_file').get_value())
00045
00046 try:
00047 ParseXML.validate_dtd(self._prefs_file_path, FLOW_GRAPH_DTD)
00048 n = ParseXML.from_file(self._prefs_file_path)
00049 self._prefs_block.import_data(n['block'])
00050 except: Messages.send_fail_load_preferences(self._prefs_file_path)
00051
00052 self.snap_to_grid_param = self._prefs_block.get_param('snap_to_grid')
00053 self.grid_size_param = self._prefs_block.get_param('grid_size')
00054 self.show_grid_param = self._prefs_block.get_param('show_grid')
00055 self.show_reports_param = self._prefs_block.get_param('show_reports')
00056 self.restore_files_param = self._prefs_block.get_param('restore_files')
00057 self.window_size_param = self._prefs_block.get_param('window_size')
00058 self.file_open_param = self._prefs_block.get_param('file_open')
00059 self.files_open_param = self._prefs_block.get_param('files_open')
00060 self.show_params_param = self._prefs_block.get_param('show_params')
00061 self.show_id_param = self._prefs_block.get_param('show_id')
00062
00063 def save(self):
00064 try: ParseXML.to_file({'block': self._prefs_block.export_data()}, self._prefs_file_path)
00065 except IOError: Messages.send_fail_save_preferences(self._prefs_file_path)
00066
00067 def get_preferences(self):
00068
00069 return [
00070 (
00071 'Grid',
00072 '''
00073 Show grid will draw a square grid onto the flow graph with grid points separated by grid size pixels. \
00074 Snap to Grid forces the upper right corner of the signal block to align with a grid point.
00075 ''',
00076 [self.snap_to_grid_param, self.grid_size_param, self.show_grid_param],
00077 ),
00078 (
00079 'Appearance',
00080 '''
00081 Show or hide the reports window at the bottom of the main window.
00082 Show or hide all paramater labels in the signal blocks.
00083 Show or hide the ID label in the signal blocks.
00084 ''',
00085 [self.show_reports_param, self.show_params_param, self.show_id_param],
00086 ),
00087 (
00088 'Misc',
00089 '''
00090 Restore previously opened files on start-up.
00091 ''',
00092 [self.restore_files_param],
00093 ),
00094 ]
00095
00096
00097
00098
00099
00100 def window_size(size=None):
00101 if size: _get_prefs().window_size_param.set_value(size)
00102 else:
00103 try: return eval(_get_prefs().window_size_param.get_value())
00104 except: return (-1, -1)
00105
00106 def restore_files():
00107 return _get_prefs().restore_files_param.get_value() == 'yes'
00108
00109 def file_open(file=None):
00110 if file is not None: _get_prefs().file_open_param.set_value(file)
00111 else: return _get_prefs().file_open_param.get_value()
00112
00113 def files_open(files=None):
00114 if files is not None: _get_prefs().files_open_param.set_value('\n'.join(files))
00115 else: return _get_prefs().files_open_param.get_value().split('\n')
00116
00117 def show_reports_window():
00118 return _get_prefs().show_reports_param.get_value() == 'show'
00119
00120 def get_grid_size():
00121 return int(_get_prefs().grid_size_param.get_value())
00122
00123 def snap_to_grid():
00124 return _get_prefs().snap_to_grid_param.get_value() == 'on'
00125
00126 def show_grid():
00127 return _get_prefs().show_grid_param.get_value() == 'show'
00128
00129 def show_params():
00130 return _get_prefs().show_params_param.get_value() == 'show'
00131
00132 def show_id():
00133 return _get_prefs().show_id_param.get_value() == 'show'
00134