4 @brief Default GUI settings
11 from core.settings import UserSettings
14 (C) 2007-2011 by the GRASS Development Team
15 This program is free software under the GNU General Public License
16 (>=v2). Read the file COPYING that comes with GRASS for details.
18 @author Martin Landa <landa.martin gmail.com>
19 @author Luca Delucchi <lucadeluge gmail.com> (language choice)
28 from core
import globalvar
30 from core.utils import GetSettingsPath, PathJoin
33 """!Generic class where to store settings"""
49 print >> sys.stderr, e.value
54 def _generateLocale(self):
60 self.
locs = os.listdir(os.path.join(os.environ[
'GISBASE'],
'locale'))
61 self.locs.append(
'en')
64 self.locs.insert(0,
'system')
67 self.
locs = [
'system']
71 def _defaultSettings(self):
72 """!Define default settings
75 projFile =
PathJoin(os.environ[
"GRASS_PROJSHARE"],
'epsg')
87 'dim' :
'0,0,%d,%d,%d,0,%d,%d' % \
88 (globalvar.GM_WINDOW_SIZE[0],
89 globalvar.GM_WINDOW_SIZE[1],
90 globalvar.GM_WINDOW_SIZE[0],
91 globalvar.MAP_WINDOW_SIZE[0],
92 globalvar.MAP_WINDOW_SIZE[1])
106 'changeOpacityLevel' : {
110 'askOnRemoveLayer' : {
122 'copySelectedTextToClipboard' : {
131 'type' :
'Courier New',
135 'elementListExpand' : {
141 'gSelectPopupHeight' : {
162 'encoding':
'ISO-8859-1',
183 'color' : (255, 255, 255, 255),
188 'scrollDirection' : {
191 'nvizDepthBuffer' : {
202 'projFile' : projFile,
214 'color' : (255, 255, 0, 255),
241 'selection' :
'grassenv'
247 'rasterColorTable' : {
249 'selection' :
'rainbow',
275 'interactiveInput' : {
287 'color' : (255, 0, 0, 255)
291 'color' : (0, 86, 45, 255)
295 'color' : (255, 255, 0, 255)
299 'color' : (255, 72, 0, 255)
303 'color' : (0, 0, 0, 255)
307 'color' : (0, 0, 0, 255)
311 'color' : (126, 126, 126, 255)
315 'color' : (0, 255, 0, 255)
319 'color' : (255, 135, 0, 255)
323 'color' : (0, 0, 255, 255)
327 'color' : (165, 42, 42, 255)
331 'color' : (156, 62, 206, 255)
335 'color' : (255, 0, 0, 255)
339 'color' : (0, 86, 45, 255)
343 'color' : (255, 20, 147, 255)
347 'color' : (217, 255, 217, 255)
351 'color' : (255, 0, 0, 255)
357 'units' :
'screen pixels'
362 'units' :
'screen pixels'
390 'than-selection' : 0,
394 'than-selection' : 0,
414 'units' :
'screen pixels'
433 'pcolor' : (0, 0, 255, 255),
443 'color' : (0, 0, 0, 255),
444 'fill' :
'transparent',
447 'legend' : _(
'Segment break'),
450 'color' : (200, 200, 200, 255),
471 'highestonly' :
True,
475 'color' : (0, 0, 255, 255),
476 'hcolor' : (255, 0, 0, 255),
477 'scolor' : (0, 255, 0, 255),
478 'ucolor' : (255, 165, 0, 255),
503 'color' : (255, 255, 255, 255),
514 'prefix' : _(
"animation")
523 'value' : (100, 100, 100, 255),
526 'wire-color' : (136, 136, 136, 255),
540 'color' : (100, 100, 100, 255),
549 'color' : (0, 0, 255, 255),
558 'color' : (0, 0, 255, 255),
565 'value' : (100, 100, 100, 255),
617 'color' : (255, 255, 255, 255),
622 'color' : (128, 128, 128, 255),
633 'color': (211, 211, 211, 255),
637 'valid' : (180, 234, 154, 255),
638 'invalid' : (255, 255, 255, 255),
639 'running' : (255, 0, 0, 255),
652 'raster' : (215, 215, 248, 255),
653 'raster3d' : (215, 248, 215, 255),
654 'vector' : (248, 215, 215, 255),
663 'valid' : (234, 226, 154, 255),
681 if sys.platform ==
'darwin':
684 def _internalSettings(self):
685 """!Define internal settings (based on user settings)
688 for group
in self.userSettings.keys():
695 (_(
"Collapse all except PERMANENT and current"),
696 _(
"Collapse all except PERMANENT"),
697 _(
"Collapse all except current"),
702 self.
internalSettings[
'atm'][
'leftDbClick'][
'choices'] = (_(
'Edit selected record'),
703 _(
'Display selected'))
713 (_(
"Classic (labels only)"),
714 _(
"Combined (labels and module names)"),
715 _(
"Professional (module names only)"))
722 self.
internalSettings[
'display'][
'mouseWheelZoom'][
'choices'] = (_(
'Zoom and recenter'),
723 _(
'Zoom to mouse cursor'),
725 self.
internalSettings[
'display'][
'scrollDirection'][
'choices'] = (_(
'Scroll forward to zoom in'),
726 _(
'Scroll back to zoom in'))
750 for decor
in (
'arrow',
'scalebar'):
770 """!Reads settings file (mapset, location, gisdbase)"""
777 font = self.
Get(group =
'display', key =
'font', subkey =
'type')
778 enc = self.
Get(group =
'display', key =
'font', subkey =
'encoding')
780 os.environ[
"GRASS_FONT"] = font
782 os.environ[
"GRASS_ENCODING"] = enc
784 def _readFile(self, filename, settings = None):
785 """!Read settings from file to dict
787 @param filename settings file path
788 @param settings dict where to store settings (None for self.userSettings)
793 if not os.path.exists(filename):
795 filename = os.path.join(os.path.expanduser(
"~"),
'.grasswx6')
796 if not os.path.exists(filename):
800 fd = open(filename,
"r")
802 sys.stderr.write(_(
"Unable to read settings file <%s>\n") % filename)
807 for line
in fd.readlines():
808 line = line.rstrip(
'%s' % os.linesep)
809 group, key = line.split(self.
sep)[0:2]
810 kv = line.split(self.
sep)[2:]
818 subkey = [subkeyMaster, kv[idx]]
823 self.
Append(settings, group, key, subkey, value)
825 except ValueError, e:
826 print >> sys.stderr, _(
"Error: Reading settings from file <%(file)s> failed.\n"
827 "\t\tDetails: %(detail)s\n"
828 "\t\tLine: '%(line)s'\n") % {
'file' : filename,
836 """!Save settings to the file"""
841 if not os.path.exists(dirPath):
845 GError(_(
'Unable to create settings directory'))
850 for group
in settings.keys():
851 for key
in settings[group].keys():
852 subkeys = settings[group][key].keys()
853 file.write(
'%s%s%s%s' % (group, self.
sep, key, self.
sep))
854 for idx
in range(len(subkeys)):
855 value = settings[group][key][subkeys[idx]]
856 if type(value) == types.DictType:
858 file.write(
'%s%s%s%s%s' % (os.linesep, group, self.
sep, key, self.
sep))
859 file.write(
'%s%s' % (subkeys[idx], self.
sep))
860 kvalues = settings[group][key][subkeys[idx]].keys()
861 srange =
range(len(kvalues))
863 svalue = self.
_parseValue(settings[group][key][subkeys[idx]][kvalues[sidx]])
864 file.write(
'%s%s%s' % (kvalues[sidx], self.
sep,
866 if sidx < len(kvalues) - 1:
867 file.write(
'%s' % self.
sep)
870 type(settings[group][key][subkeys[idx - 1]]) == types.DictType:
871 file.write(
'%s%s%s%s%s' % (os.linesep, group, self.
sep, key, self.
sep))
872 value = self.
_parseValue(settings[group][key][subkeys[idx]])
873 file.write(
'%s%s%s' % (subkeys[idx], self.
sep, value))
874 if idx < len(subkeys) - 1
and \
875 type(settings[group][key][subkeys[idx + 1]]) != types.DictType:
876 file.write(
'%s' % self.
sep)
877 file.write(os.linesep)
880 except StandardError, e:
881 raise GException(_(
'Writing settings to file <%(file)s> failed.'
882 '\n\nDetails: %(detail)s') % {
'file' : self.
filePath,
887 def _parseValue(self, value, read = False):
888 """!Parse value to be store in settings file"""
892 elif value ==
'False':
894 elif value ==
'None':
898 value = tuple(map(int, value.split(
':')))
911 value = str(value[0]) +
':' +\
912 str(value[1]) +
':' + \
917 def Get(self, group, key = None, subkey = None, internal = False):
918 """!Get value by key/subkey
920 Raise KeyError if key is not found
922 @param group settings group
923 @param key (value, None)
924 @param subkey (value, list or None)
925 @param internal use internal settings instead
937 return settings[group]
939 return settings[group][key]
941 if type(subkey) ==
type(tuple())
or \
943 return settings[group][key][subkey[0]][subkey[1]]
945 return settings[group][key][subkey]
948 print >> sys.stderr,
"Settings: unable to get value '%s:%s:%s'\n" % \
951 def Set(self, group, value, key = None, subkey = None, internal = False):
952 """!Set value of key/subkey
954 Raise KeyError if group/key is not found
956 @param group settings group
957 @param key key (value, None)
958 @param subkey subkey (value, list or None)
960 @param internal use internal settings instead
970 settings[group] = value
972 settings[group][key] = value
974 if type(subkey) ==
type(tuple())
or \
976 settings[group][key][subkey[0]][subkey[1]] = value
978 settings[group][key][subkey] = value
980 raise GException(
"%s '%s:%s:%s'" % (_(
"Unable to set "), group, key, subkey))
982 def Append(self, dict, group, key, subkey, value):
983 """!Set value of key/subkey
985 Create group/key/subkey if not exists
987 @param dict settings dictionary to use
988 @param group settings group
990 @param subkey subkey (value or list)
993 if group
not in dict:
996 if key
not in dict[group]:
997 dict[group][key] = {}
999 if type(subkey) == types.ListType:
1001 if subkey[0]
not in dict[group][key]:
1002 dict[group][key][subkey[0]] = {}
1004 dict[group][key][subkey[0]][subkey[1]] = value
1006 print >> sys.stderr, _(
"Unable to parse settings '%s'") % value + \
1007 ' (' + group +
':' + key +
':' + subkey[0] +
':' + subkey[1] +
')'
1010 dict[group][key][subkey] = value
1012 print >> sys.stderr, _(
"Unable to parse settings '%s'") % value + \
1013 ' (' + group +
':' + key +
':' + subkey +
')'
1016 """!Get default user settings"""
1020 """!Reset to default settings
1022 @key key in settings dict (None for all keys)
def Set
Set value of key/subkey.
def ReadSettingsFile
Reads settings file (mapset, location, gisdbase)
def Get
Get value by key/subkey.
def GetSettingsPath
Get full path to the settings directory.
def Append
Set value of key/subkey.
def _parseValue
Parse value to be store in settings file.
def Reset
Reset to default settings.
def _internalSettings
Define internal settings (based on user settings)
def _readFile
Read settings from file to dict.
Generic class where to store settings.
Misc utilities for wxGUI.
def GetDefaultSettings
Get default user settings.
def PathJoin
Check path created by os.path.join.
def _defaultSettings
Define default settings.
def SaveToFile
Save settings to the file.
def _generateLocale
Generate locales.