7bfea966047371470109d9c79f6c9a7471403ad8
[debian/gnuradio] / grc / src / grc / Preferences.py
1 """
2 Copyright 2008 Free Software Foundation, Inc.
3 This file is part of GNU Radio
4
5 GNU Radio Companion is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public License
7 as published by the Free Software Foundation; either version 2
8 of the License, or (at your option) any later version.
9
10 GNU Radio Companion is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
18 """
19 ##@package grc.Preferences
20 #Holds global paramerences
21 #@author Josh Blum
22
23 from Constants import HOME_DIR, FLOW_GRAPH_DTD
24 import ParseXML
25 import Messages
26 import os
27
28 ##Access the loaded preferences in this module
29 _prefs = list()
30 def _set_prefs(prefs): _prefs.append(prefs)
31 def _get_prefs(): return _prefs[0]
32 def load(platform): _Preferences(platform)
33 def save(): _get_prefs().save()
34 def get_preferences(): return _get_prefs().get_preferences()
35
36 class _Preferences(object):
37
38         def __init__(self, platform):
39                 #make self available to module
40                 _set_prefs(self)
41                 #get prefs block
42                 self._prefs_block = platform.get_prefs_block()
43                 #prefs file path
44                 self._prefs_file_path = os.path.join(HOME_DIR, self._prefs_block.get_param('prefs_file').get_value())
45                 #load
46                 try:
47                         ParseXML.validate_dtd(self._prefs_file_path, FLOW_GRAPH_DTD)
48                         n = ParseXML.from_file(self._prefs_file_path)
49                         self._prefs_block.import_data(n['block'])
50                 except: Messages.send_fail_load_preferences(self._prefs_file_path)
51                 ##all params
52                 self.snap_to_grid_param = self._prefs_block.get_param('snap_to_grid')
53                 self.grid_size_param = self._prefs_block.get_param('grid_size')
54                 self.show_grid_param = self._prefs_block.get_param('show_grid')
55                 self.show_reports_param = self._prefs_block.get_param('show_reports')
56                 self.restore_files_param = self._prefs_block.get_param('restore_files')
57                 self.window_size_param = self._prefs_block.get_param('window_size')
58                 self.file_open_param = self._prefs_block.get_param('file_open')
59                 self.files_open_param = self._prefs_block.get_param('files_open')
60                 self.show_params_param = self._prefs_block.get_param('show_params')
61                 self.show_id_param = self._prefs_block.get_param('show_id')
62
63         def save(self):
64                 try: ParseXML.to_file({'block': self._prefs_block.export_data()}, self._prefs_file_path)
65                 except IOError: Messages.send_fail_save_preferences(self._prefs_file_path)
66
67         def get_preferences(self):
68                 ##Preferences: title, notes, params
69                 return [
70                         (
71                                 'Grid',
72                                 '''
73 Show grid will draw a square grid onto the flow graph with grid points separated by grid size pixels. \
74 Snap to Grid forces the upper right corner of the signal block to align with a grid point.
75 ''',
76                                 [self.snap_to_grid_param, self.grid_size_param, self.show_grid_param],
77                         ),
78                         (
79                                 'Appearance',
80                                 '''
81 Show or hide the reports window at the bottom of the main window.
82 Show or hide all paramater labels in the signal blocks.
83 Show or hide the ID label in the signal blocks.
84 ''',
85                                 [self.show_reports_param, self.show_params_param, self.show_id_param],
86                         ),
87                         (
88                                 'Misc',
89                                 '''
90 Restore previously opened files on start-up.
91 ''',
92                                 [self.restore_files_param],
93                         ),
94                 ]
95
96 ###########################################################################
97 #       Special methods for specific program functionalities
98 ###########################################################################
99
100 def window_size(size=None):
101         if size: _get_prefs().window_size_param.set_value(size)
102         else:
103                 try: return eval(_get_prefs().window_size_param.get_value())
104                 except: return (-1, -1)
105
106 def restore_files():
107         return _get_prefs().restore_files_param.get_value() == 'yes'
108
109 def file_open(file=None):
110         if file is not None: _get_prefs().file_open_param.set_value(file)
111         else: return _get_prefs().file_open_param.get_value()
112
113 def files_open(files=None):
114         if files is not None: _get_prefs().files_open_param.set_value('\n'.join(files))
115         else: return _get_prefs().files_open_param.get_value().split('\n')
116
117 def show_reports_window():
118         return _get_prefs().show_reports_param.get_value() == 'show'
119
120 def get_grid_size():
121         return int(_get_prefs().grid_size_param.get_value())
122
123 def snap_to_grid():
124         return _get_prefs().snap_to_grid_param.get_value() == 'on'
125
126 def show_grid():
127         return _get_prefs().show_grid_param.get_value() == 'show'
128
129 def show_params():
130         return _get_prefs().show_params_param.get_value() == 'show'
131
132 def show_id():
133         return _get_prefs().show_id_param.get_value() == 'show'
134