diff options
Diffstat (limited to 'grc/src/gui/Preferences.py')
-rw-r--r-- | grc/src/gui/Preferences.py | 142 |
1 files changed, 45 insertions, 97 deletions
diff --git a/grc/src/gui/Preferences.py b/grc/src/gui/Preferences.py index d6533586f..1d89920dd 100644 --- a/grc/src/gui/Preferences.py +++ b/grc/src/gui/Preferences.py @@ -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' |