[orca/new-settings] Implemented basic settings manager and classic and gconf backends.
- From: Alejandro Leiva <aleiva src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [orca/new-settings] Implemented basic settings manager and classic and gconf backends.
- Date: Wed, 7 Jul 2010 09:34:17 +0000 (UTC)
commit 9b6502c384ec8ce8bcc6ee59feee01ea2e06f530
Author: Javier Hernandez Antunez <jhernandez emergya es>
Date: Wed Jul 7 11:31:47 2010 +0200
Implemented basic settings manager and classic and gconf backends.
configure.in | 1 +
src/orca/Makefile.am | 5 +-
src/orca/acss.py | 30 +-
src/orca/backends/Makefile.am | 9 +
src/orca/backends/classic.py | 877 ++++++++++++++++++++++++++
src/orca/backends/gconf_backend.py | 1164 +++++++++++++++++++++++++++++++++++
src/orca/backends/gconf_defaults.py | 141 +++++
src/orca/default.py | 7 +-
src/orca/orca.py | 10 +-
src/orca/orca_gui_prefs.py | 15 +-
src/orca/settings.py | 4 +-
src/orca/settings_manager.py | 90 +++
12 files changed, 2331 insertions(+), 22 deletions(-)
---
diff --git a/configure.in b/configure.in
index 473c8de..a864220 100644
--- a/configure.in
+++ b/configure.in
@@ -114,6 +114,7 @@ src/orca/scripts/toolkits/Makefile
src/orca/scripts/toolkits/Gecko/Makefile
src/orca/scripts/toolkits/J2SE-access-bridge/Makefile
src/orca/scripts/toolkits/CALLY/Makefile
+src/orca/backends/Makefile
src/orca/orca
src/orca/orca_i18n.py
src/orca/platform.py
diff --git a/src/orca/Makefile.am b/src/orca/Makefile.am
index 697cd00..6d67d14 100644
--- a/src/orca/Makefile.am
+++ b/src/orca/Makefile.am
@@ -62,6 +62,7 @@ orca_python_PYTHON = \
script.py \
script_utilities.py \
settings.py \
+ settings_manager.py \
sound.py \
speech.py \
speechdispatcherfactory.py \
@@ -74,7 +75,9 @@ orca_python_PYTHON = \
orca_pythondir=$(pyexecdir)/orca
-SUBDIRS = scripts
+SUBDIRS = \
+ scripts \
+ backends
ui_DATA = \
orca-advanced-magnification.ui \
diff --git a/src/orca/acss.py b/src/orca/acss.py
index 7ce0254..7451cab 100644
--- a/src/orca/acss.py
+++ b/src/orca/acss.py
@@ -63,19 +63,23 @@ class ACSS(dict):
"""Create and initialize ACSS structure."""
dict.__init__(self)
props = props or {}
- for k in props:
- if k in ACSS.settings:
- # Do a 'deep copy' of the family. Otherwise,
- # the new ACSS shares the actual data with the
- # props passed in. This can cause unexpected
- # side effects.
- #
- if k == ACSS.FAMILY:
- self[k] = {}
- for j in props[k].keys():
- self[k][j] = props[k][j]
- else:
- self[k] = props[k]
+ if props:
+ for k in props:
+ if k in ACSS.settings:
+ # Do a 'deep copy' of the family. Otherwise,
+ # the new ACSS shares the actual data with the
+ # props passed in. This can cause unexpected
+ # side effects.
+ #
+ if k == ACSS.FAMILY:
+ self[k] = {}
+ for j in props[k].keys():
+ self[k][j] = props[k][j]
+ else:
+ self[k] = props[k]
+ else:
+ self['established'] = False
+
def __setitem__ (self, key, value):
"""Update name when we change values."""
diff --git a/src/orca/backends/Makefile.am b/src/orca/backends/Makefile.am
new file mode 100644
index 0000000..a137dd4
--- /dev/null
+++ b/src/orca/backends/Makefile.am
@@ -0,0 +1,9 @@
+orca_pathdir=$(pyexecdir)
+
+orca_python_PYTHON = \
+ __init__.py \
+ classic.py \
+ gconf_backend.py \
+ gconf_defaults.py
+
+orca_pythondir=$(pyexecdir)/orca/backends
diff --git a/src/orca/backends/classic.py b/src/orca/backends/classic.py
new file mode 100644
index 0000000..edf1a8b
--- /dev/null
+++ b/src/orca/backends/classic.py
@@ -0,0 +1,877 @@
+# Orca
+#
+# Copyright 2004-2008 Sun Microsystems Inc.
+# Author: Javier Hernandez Antunez <jhernandez emergya es>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., Franklin Street, Fifth Floor,
+# Boston MA 02110-1301 USA.
+
+"""Common utilities to manage the writing of the user preferences file."""
+
+__id__ = "$Id$"
+__version__ = "$Revision$"
+__date__ = "$Date$"
+__copyright__ = "Copyright (c) 2005-2008 Sun Microsystems Inc."
+__license__ = "LGPL"
+
+import os
+import pprint
+
+from orca import settings
+
+# The same fields than in orca_gui_prefs.py:
+#
+(HANDLER, DESCRIP, MOD_MASK1, MOD_USED1, KEY1, CLICK_COUNT1, OLDTEXT1, \
+ TEXT1, MOD_MASK2, MOD_USED2, KEY2, CLICK_COUNT2, OLDTEXT2, TEXT2, MODIF, \
+ EDITABLE) = range(16)
+
+(ACTUAL, REPLACEMENT) = range(2)
+
+class OrcaPrefs:
+
+ def __init__(self, prefsDict, keyBindingsTreeModel=None,
+ pronunciationTreeModel=None):
+ """Creates a new OrcaPrefs instance that will be used to write out
+ application specific preferences.
+
+ Arguments:
+ - prefsDict: a dictionary where the keys are orca preferences
+ names and the values are the values for the preferences.
+ - keyBindingsTreeModel - key bindings tree model, or None if we are
+ writing out console preferences.
+ - pronunciationTreeModel - pronunciation dictionary tree model, or
+ None if we are writing out console preferences.
+ """
+
+ self.prefsDict = prefsDict
+ self.keyBindingsTreeModel = keyBindingsTreeModel
+ self.pronunciationTreeModel = pronunciationTreeModel
+
+ def _createDir(self, dirname):
+ """Creates the given directory if it doesn't already exist.
+ """
+
+ try:
+ os.chdir(dirname)
+ except:
+ os.mkdir(dirname)
+
+ def _writePreferencesPreamble(self, prefs):
+ """Writes the preamble to the user-settings.py file."""
+
+ prefs.writelines("# -*- coding: utf-8 -*-\n")
+ prefs.writelines("# user-settings.py - custom Orca settings\n")
+ prefs.writelines("# Generated by orca. DO NOT EDIT THIS FILE!!!\n")
+ prefs.writelines( \
+ "# If you want permanent customizations that will not\n")
+ prefs.writelines("# be overwritten, edit orca-customizations.py.\n")
+ prefs.writelines("#\n")
+ prefs.writelines("import re\n")
+ prefs.writelines("import time\n")
+ prefs.writelines("\n")
+ prefs.writelines("import orca.debug\n")
+ prefs.writelines("import orca.settings\n")
+ prefs.writelines("import orca.acss\n")
+ prefs.writelines("\n")
+
+ prefs.writelines("#orca.debug.debugLevel = orca.debug.LEVEL_OFF\n")
+ prefs.writelines("orca.debug.debugLevel = orca.debug.LEVEL_SEVERE\n")
+ prefs.writelines("#orca.debug.debugLevel = orca.debug.LEVEL_WARNING\n")
+ prefs.writelines("#orca.debug.debugLevel = orca.debug.LEVEL_INFO\n")
+ prefs.writelines( \
+ "#orca.debug.debugLevel = orca.debug.LEVEL_CONFIGURATION\n")
+ prefs.writelines("#orca.debug.debugLevel = orca.debug.LEVEL_FINE\n")
+ prefs.writelines("#orca.debug.debugLevel = orca.debug.LEVEL_FINER\n")
+ prefs.writelines("#orca.debug.debugLevel = orca.debug.LEVEL_FINEST\n")
+ prefs.writelines("#orca.debug.debugLevel = orca.debug.LEVEL_ALL\n")
+ prefs.writelines("\n")
+ prefs.writelines("#orca.debug.eventDebugLevel = " \
+ "orca.debug.LEVEL_OFF\n")
+ prefs.writelines("#orca.debug.eventDebugFilter = None\n")
+ prefs.writelines("#orca.debug.eventDebugFilter = " \
+ "re.compile('[\S]*focus|[\S]*activ')\n")
+ prefs.writelines( \
+ "#orca.debug.eventDebugFilter = re.compile('nomatch')\n")
+ prefs.writelines("#orca.debug.eventDebugFilter = " \
+ "re.compile('[\S]*:accessible-name')\n")
+ prefs.writelines("#orca.debug.eventDebugFilter = " \
+ "re.compile('[\S]*:(?!bounds-changed)')\n")
+
+ prefs.writelines("\n")
+
+ prefs.writelines("#orca.debug.debugFile = " \
+ "open(time.strftime('debug-%Y-%m-%d-%H:%M:%S.out'), "\
+ "'w', 0)\n")
+ prefs.writelines("#orca.debug.debugFile = open('debug.out', 'w', 0)\n")
+ prefs.writelines("\n")
+
+ prefs.writelines("#orca.settings.useBonoboMain=False\n")
+ prefs.writelines("#orca.settings.debugEventQueue=True\n")
+ prefs.writelines("#orca.settings.gilSleepTime=0\n")
+ prefs.writelines("\n")
+
+ prefs.writelines("if False:\n")
+ prefs.writelines(" import sys\n")
+ prefs.writelines(" import orca.debug\n")
+ prefs.writelines(" sys.settrace(orca.debug.traceit)\n")
+ prefs.writelines(" orca.debug.debugLevel = orca.debug.LEVEL_ALL\n")
+ prefs.writelines("\n")
+
+ def _writePreferencesPostamble(self, prefs):
+ """Writes the postamble to the user-settings.py file."""
+
+ prefs.writelines("\nimport orca.orca_state\n")
+ prefs.writelines("\ntry:\n")
+ prefs.writelines(" reload(orca.orca_state.orcaCustomizations)\n")
+ prefs.writelines("except AttributeError:\n")
+ prefs.writelines(" try:\n")
+ prefs.writelines(" orca.orca_state.orcaCustomizations = "
+ "__import__(\"orca-customizations\")\n")
+ prefs.writelines(" except ImportError:\n")
+ prefs.writelines(" pass\n")
+
+ def _enableAccessibility(self):
+ """Enables the GNOME accessibility flag. Users need to log out and
+ then back in for this to take effect.
+
+ Returns True if an action was taken (i.e., accessibility was not
+ set prior to this call).
+ """
+
+ alreadyEnabled = settings.isAccessibilityEnabled()
+ if not alreadyEnabled:
+ settings.setAccessibilityEnabled(True)
+
+ return not alreadyEnabled
+
+ def _getDisplayString(self, display):
+ """Returns a string that represents the source or target
+ magnifier display.
+
+ Arguments:
+ - display: the magnifier source or taget display string.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if not display:
+ return "''"
+ else:
+ return "'%s'" % display
+
+ def _getSpeechServerFactoryString(self, factory):
+ """Returns a string that represents the speech server factory passed in.
+
+ Arguments:
+ - factory: the speech server factory
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if not factory:
+ return None
+ elif isinstance(factory, basestring):
+ return "'%s'" % factory
+ else:
+ return "'%s'" % factory.__name__
+
+ def _getSpeechServerString(self, server):
+ """Returns a string that represents the speech server passed in.
+
+ Arguments:
+ - server: a speech server
+
+ Returns a string suitable for the preferences file.
+ """
+ if not server:
+ return None
+ elif isinstance(server, [].__class__):
+ return repr(server)
+ else:
+ return repr(server.getInfo())
+
+ def _getVoicesString(self, voices):
+ """Returns a string that represents the list of voices passed in.
+
+ Arguments:
+ - voices: a list of ACSS instances.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ voicesStr = "{\n"
+ for voice in voices:
+ voicesStr += "'%s' : orca.acss.ACSS(" % voice
+ voicesStr += pprint.pformat(voices[voice]) + "),\n"
+ voicesStr += "}"
+
+ return voicesStr
+
+ def _getKeyboardLayoutString(self, keyboardLayout):
+ """Returns a string that represents the keyboard layout passed in."""
+
+ if keyboardLayout == settings.GENERAL_KEYBOARD_LAYOUT_DESKTOP:
+ return "orca.settings.GENERAL_KEYBOARD_LAYOUT_DESKTOP"
+ else:
+ return "orca.settings.GENERAL_KEYBOARD_LAYOUT_LAPTOP"
+
+ def _getOrcaModifierKeysString(self, orcaModifierKeys):
+ """Returns a string that represents the Orca modifier keys passed in."""
+
+ if orcaModifierKeys == settings.DESKTOP_MODIFIER_KEYS:
+ return "orca.settings.DESKTOP_MODIFIER_KEYS"
+ else:
+ return "orca.settings.LAPTOP_MODIFIER_KEYS"
+
+ def _getSpokenTextAttributesString(self, enabledSpokenTextAttributes):
+ """ Returns a string that represents the enabled spoken text attributes
+ passed in.
+ """
+
+ return "\"" + enabledSpokenTextAttributes + "\""
+
+ def _getBrailledTextAttributesString(self, enabledBrailledTextAttributes):
+ """ Returns a string that represents the enabled brailled text
+ attributes passed in.
+ """
+
+ return "\"" + enabledBrailledTextAttributes + "\""
+
+ def _getTextAttributesBrailleIndicatorString(self, brailleIndicator):
+ """Returns a string that represents the text attribute braille indicator
+ value passed in."""
+
+ if brailleIndicator == settings.TEXT_ATTR_BRAILLE_NONE:
+ return "orca.settings.TEXT_ATTR_BRAILLE_NONE"
+ elif brailleIndicator == settings.TEXT_ATTR_BRAILLE_7:
+ return "orca.settings.TEXT_ATTR_BRAILLE_7"
+ elif brailleIndicator == settings.TEXT_ATTR_BRAILLE_8:
+ return "orca.settings.TEXT_ATTR_BRAILLE_8"
+ elif brailleIndicator == settings.TEXT_ATTR_BRAILLE_BOTH:
+ return "orca.settings.TEXT_ATTR_BRAILLE_BOTH"
+ else:
+ return "orca.settings.TEXT_ATTR_BRAILLE_NONE"
+
+ def _getBrailleSelectionIndicatorString(self, selectionIndicator):
+ """Returns a string that represents the braille selection indicator
+ value passed in."""
+
+ if selectionIndicator == settings.BRAILLE_SEL_NONE:
+ return "orca.settings.BRAILLE_SEL_NONE"
+ elif selectionIndicator == settings.BRAILLE_SEL_7:
+ return "orca.settings.BRAILLE_SEL_7"
+ elif selectionIndicator == settings.BRAILLE_SEL_8:
+ return "orca.settings.BRAILLE_SEL_8"
+ elif selectionIndicator == settings.BRAILLE_SEL_BOTH:
+ return "orca.settings.BRAILLE_SEL_BOTH"
+ else:
+ return "orca.settings.BRAILLE_SEL_NONE"
+
+ def _getBrailleLinkIndicatorString(self, linkIndicator):
+ """Returns a string that represents the braille link indicator
+ value passed in."""
+
+ if linkIndicator == settings.BRAILLE_LINK_NONE:
+ return "orca.settings.BRAILLE_LINK_NONE"
+ elif linkIndicator == settings.BRAILLE_LINK_7:
+ return "orca.settings.BRAILLE_LINK_7"
+ elif linkIndicator == settings.BRAILLE_LINK_8:
+ return "orca.settings.BRAILLE_LINK_8"
+ elif linkIndicator == settings.BRAILLE_LINK_BOTH:
+ return "orca.settings.BRAILLE_LINK_BOTH"
+ else:
+ return "orca.settings.BRAILLE_LINK_NONE"
+
+ def _getVerbosityString(self, verbosityLevel):
+ """Returns a string that represents the verbosity level passed in."""
+
+ if verbosityLevel == settings.VERBOSITY_LEVEL_BRIEF:
+ return "orca.settings.VERBOSITY_LEVEL_BRIEF"
+ elif verbosityLevel == settings.VERBOSITY_LEVEL_VERBOSE:
+ return "orca.settings.VERBOSITY_LEVEL_VERBOSE"
+ else:
+ return "orca.settings.VERBOSITY_LEVEL_VERBOSE"
+
+ def _getBrailleRolenameStyleString(self, rolenameStyle):
+ """Returns a string that represents the rolename style passed in."""
+
+ if rolenameStyle == settings.BRAILLE_ROLENAME_STYLE_SHORT:
+ return "orca.settings.BRAILLE_ROLENAME_STYLE_SHORT"
+ elif rolenameStyle == settings.BRAILLE_ROLENAME_STYLE_LONG:
+ return "orca.settings.BRAILLE_ROLENAME_STYLE_LONG"
+ else:
+ return "orca.settings.BRAILLE_ROLENAME_STYLE_LONG"
+
+ def _getBrailleAlignmentStyleString(self, brailleAlignmentStyle):
+ """Returns a string that represents the brailleAlignmentStyle
+ passed in."""
+
+ if brailleAlignmentStyle == settings.ALIGN_BRAILLE_BY_WORD:
+ return "orca.settings.ALIGN_BRAILLE_BY_WORD"
+ if brailleAlignmentStyle == settings.ALIGN_BRAILLE_BY_MARGIN:
+ return "orca.settings.ALIGN_BRAILLE_BY_MARGIN"
+ else:
+ return "orca.settings.ALIGN_BRAILLE_BY_EDGE"
+
+ def _getVerbalizePunctuationStyleString(self, punctuationStyle):
+ """Returns a string that represents the punctuation style passed in."""
+
+ if punctuationStyle == settings.PUNCTUATION_STYLE_NONE:
+ return "orca.settings.PUNCTUATION_STYLE_NONE"
+ elif punctuationStyle == settings.PUNCTUATION_STYLE_SOME:
+ return "orca.settings.PUNCTUATION_STYLE_SOME"
+ elif punctuationStyle == settings.PUNCTUATION_STYLE_MOST:
+ return "orca.settings.PUNCTUATION_STYLE_MOST"
+ elif punctuationStyle == settings.PUNCTUATION_STYLE_ALL:
+ return "orca.settings.PUNCTUATION_STYLE_ALL"
+ else:
+ return "orca.settings.PUNCTUATION_STYLE_ALL"
+
+ def _getPresentTimeString(self, val):
+ if val == settings.TIME_FORMAT_24_HMS:
+ return "orca.settings.TIME_FORMAT_24_HMS"
+ elif val == settings.TIME_FORMAT_24_HMS_WITH_WORDS:
+ return "orca.settings.TIME_FORMAT_24_HMS_WITH_WORDS"
+ elif val == settings.TIME_FORMAT_24_HM:
+ return "orca.settings.TIME_FORMAT_24_HM"
+ elif val == settings.TIME_FORMAT_24_HM_WITH_WORDS:
+ return "orca.settings.TIME_FORMAT_24_HM_WITH_WORDS"
+ else:
+ return "orca.settings.TIME_FORMAT_LOCALE"
+
+ def _getPresentDateString(self, val):
+ if val == settings.DATE_FORMAT_WITH_LONG_NAMES:
+ return "orca.settings.DATE_FORMAT_WITH_LONG_NAMES"
+ elif val == settings.DATE_FORMAT_WITH_SHORT_NAMES:
+ return "orca.settings.DATE_FORMAT_WITH_SHORT_NAMES"
+ else:
+ return "orca.settings.DATE_FORMAT_LOCALE"
+
+
+ def _getSayAllStyleString(self, sayAllStyle):
+ """Returns a string that represents the say all style passed in."""
+
+ if sayAllStyle == settings.SAYALL_STYLE_LINE:
+ return "orca.settings.SAYALL_STYLE_LINE"
+ elif sayAllStyle == settings.SAYALL_STYLE_SENTENCE:
+ return "orca.settings.SAYALL_STYLE_SENTENCE"
+
+ def _getMagColorString(self, cursorColor):
+ """Returns a string that represents the magnification object's color
+ passed in.
+
+ Arguments:
+ - cursorColor: magnification object's color
+
+ Returns a string suitable for the preferences file.
+ """
+
+ cursorColorStr = "'%s'" % cursorColor
+
+ return cursorColorStr
+
+ def _getMagSmoothingModeString(self, smoothingMode):
+ """Returns a string that represents the magnification smoothing mode
+ passed in.
+
+ Arguments:
+ - smoothingMode: magnification smoothing mode.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if smoothingMode == settings.MAG_SMOOTHING_MODE_BILINEAR:
+ return "orca.settings.MAG_SMOOTHING_MODE_BILINEAR"
+ elif smoothingMode == settings.MAG_SMOOTHING_MODE_NONE:
+ return "orca.settings.MAG_SMOOTHING_MODE_NONE"
+ else:
+ return "orca.settings.MAG_SMOOTHING_MODE_BILINEAR"
+
+ def _getMagMouseTrackingModeString(self, mouseTrackingMode):
+ """Returns a string that represents the magnification mouse tracking
+ mode passed in.
+
+ Arguments:
+ - mouseTrackingMode: magnification mouse tracking mode.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if mouseTrackingMode == settings.MAG_TRACKING_MODE_CENTERED:
+ return "orca.settings.MAG_TRACKING_MODE_CENTERED"
+ elif mouseTrackingMode == settings.MAG_TRACKING_MODE_NONE:
+ return "orca.settings.MAG_TRACKING_MODE_NONE"
+ elif mouseTrackingMode == settings.MAG_TRACKING_MODE_PROPORTIONAL:
+ return "orca.settings.MAG_TRACKING_MODE_PROPORTIONAL"
+ elif mouseTrackingMode == settings.MAG_TRACKING_MODE_PUSH:
+ return "orca.settings.MAG_TRACKING_MODE_PUSH"
+ else:
+ return "orca.settings.MAG_TRACKING_MODE_CENTERED"
+
+ def _getMagControlTrackingModeString(self, controlTrackingMode):
+ """Returns a string that represents the magnification control
+ and menu item tracking mode passed in.
+
+ Arguments:
+ - controlTrackingMode: magnification control and menu item tracking
+ mode.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if controlTrackingMode == settings.MAG_TRACKING_MODE_CENTERED:
+ return "orca.settings.MAG_TRACKING_MODE_CENTERED"
+ elif controlTrackingMode == settings.MAG_TRACKING_MODE_NONE:
+ return "orca.settings.MAG_TRACKING_MODE_NONE"
+ elif controlTrackingMode == settings.MAG_TRACKING_MODE_PUSH:
+ return "orca.settings.MAG_TRACKING_MODE_PUSH"
+ else:
+ return "orca.settings.MAG_TRACKING_MODE_PUSH"
+
+ def _getMagTextTrackingModeString(self, textTrackingMode):
+ """Returns a string that represents the magnification text cursor
+ tracking mode passed in.
+
+ Arguments:
+ - textTrackingMode: magnification text cursor tracking mode.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if textTrackingMode == settings.MAG_TRACKING_MODE_CENTERED:
+ return "orca.settings.MAG_TRACKING_MODE_CENTERED"
+ elif textTrackingMode == settings.MAG_TRACKING_MODE_NONE:
+ return "orca.settings.MAG_TRACKING_MODE_NONE"
+ elif textTrackingMode == settings.MAG_TRACKING_MODE_PUSH:
+ return "orca.settings.MAG_TRACKING_MODE_PUSH"
+ else:
+ return "orca.settings.MAG_TRACKING_MODE_PUSH"
+
+ def _getMagColorFilteringModeString(self, mode):
+ """Returns a string that represents the magnification color filtering
+ mode passed in.
+
+ Arguments:
+ - mode: magnification color filtering mode.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if mode == settings.MAG_COLOR_FILTERING_MODE_NONE:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_NONE"
+ elif mode == settings.MAG_COLOR_FILTERING_MODE_SATURATE_RED:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_SATURATE_RED"
+ elif mode == settings.MAG_COLOR_FILTERING_MODE_SATURATE_GREEN:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_SATURATE_GREEN"
+ elif mode == settings.MAG_COLOR_FILTERING_MODE_SATURATE_BLUE:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_SATURATE_BLUE"
+ elif mode == settings.MAG_COLOR_FILTERING_MODE_DESATURATE_RED:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_DESATURATE_RED"
+ elif mode == settings.MAG_COLOR_FILTERING_MODE_DESATURATE_GREEN:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_DESATURATE_GREEN"
+ elif mode == settings.MAG_COLOR_FILTERING_MODE_DESATURATE_BLUE:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_DESATURATE_BLUE"
+ elif mode == settings.MAG_COLOR_FILTERING_MODE_POSITIVE_HUE_SHIFT:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_POSITIVE_HUE_SHIFT"
+ elif mode == settings.MAG_COLOR_FILTERING_MODE_NEGATIVE_HUE_SHIFT:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_NEGATIVE_HUE_SHIFT"
+ else:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_NONE"
+
+ def _getMagZoomerTypeString(self, magZoomerType):
+ """Returns a string that represents the magnification zoomer position
+ type passed in.
+
+ Arguments:
+ - magZoomerType: magnification zoomer position type.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if magZoomerType == settings.MAG_ZOOMER_TYPE_FULL_SCREEN:
+ return "orca.settings.MAG_ZOOMER_TYPE_FULL_SCREEN"
+ elif magZoomerType == settings.MAG_ZOOMER_TYPE_TOP_HALF:
+ return "orca.settings.MAG_ZOOMER_TYPE_TOP_HALF"
+ elif magZoomerType == settings.MAG_ZOOMER_TYPE_BOTTOM_HALF:
+ return "orca.settings.MAG_ZOOMER_TYPE_BOTTOM_HALF"
+ elif magZoomerType == settings.MAG_ZOOMER_TYPE_LEFT_HALF:
+ return "orca.settings.MAG_ZOOMER_TYPE_LEFT_HALF"
+ elif magZoomerType == settings.MAG_ZOOMER_TYPE_RIGHT_HALF:
+ return "orca.settings.MAG_ZOOMER_TYPE_RIGHT_HALF"
+ elif magZoomerType == settings.MAG_ZOOMER_TYPE_CUSTOM:
+ return "orca.settings.MAG_ZOOMER_TYPE_CUSTOM"
+ else:
+ return "orca.settings.MAG_ZOOMER_TYPE_FULL_SCREEN"
+
+ def _getProgressBarVerbosityString(self, verbosityLevel):
+ """Returns a string that represents the progress bar verbosity level
+ passed in.
+
+ Arguments:
+ - verbosityLevel: verbosity level for progress bars.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if verbosityLevel == settings.PROGRESS_BAR_ALL:
+ return "orca.settings.PROGRESS_BAR_ALL"
+ elif verbosityLevel == settings.PROGRESS_BAR_WINDOW:
+ return "orca.settings.PROGRESS_BAR_WINDOW"
+ else:
+ return "orca.settings.PROGRESS_BAR_APPLICATION"
+
+ def _writeKeyBindingsPreamble(self, prefs):
+ """Writes the preamble to the user-settings.py keyBindings section."""
+
+ prefs.writelines("\n")
+ prefs.writelines("# Set up a user key-bindings profile\n")
+ prefs.writelines("#\n")
+ prefs.writelines('def overrideKeyBindings(script, keyB):\n')
+
+ def _writeKeyBinding(self, prefs, tupl):
+ """Writes a single keyBinding to the user-settings.py
+ keyBindings section.
+
+ Arguments:
+ - prefs: text string - file to write the key binding to.
+ - tupl: tuple - a tuple with the values of the
+ keybinding (gtk.TreeStore model columns)
+ """
+
+
+ prefs.writelines(" keyB.removeByHandler(script.inputEventHandlers['" \
+ + str(tupl[HANDLER])+"'])\n")
+ if not (tupl[TEXT1] or tupl[TEXT2]):
+ prefs.writelines(" keyB.add(orca.keybindings.KeyBinding(\n")
+ prefs.writelines(" '',\n")
+ prefs.writelines(" %d,\n" % settings.defaultModifierMask)
+ prefs.writelines(" 0,\n")
+ prefs.writelines(' script.inputEventHandlers["' + \
+ str(tupl[HANDLER]) +'"]))\n\n')
+
+ if (tupl[TEXT1]):
+ prefs.writelines(" keyB.add(orca.keybindings.KeyBinding(\n")
+ prefs.writelines(" '" + str(tupl[KEY1]) + "',\n")
+ if tupl[MOD_MASK1] or tupl[MOD_USED1]:
+ prefs.writelines(" " + str(tupl[MOD_MASK1]) + ",\n")
+ prefs.writelines(" " + str(tupl[MOD_USED1]) + ",\n")
+ else:
+ prefs.writelines(" 0,\n")
+ prefs.writelines(" 0,\n")
+ if (tupl[CLICK_COUNT1] == "1"):
+ prefs.writelines(' script.inputEventHandlers["' + \
+ str(tupl[HANDLER]) +'"]))\n\n')
+ else:
+ prefs.writelines(' script.inputEventHandlers["' + \
+ str(tupl[HANDLER]) +'"],\n')
+ prefs.writelines(" " + str(tupl[CLICK_COUNT1]) + \
+ "))\n\n")
+
+ if (tupl[TEXT2]):
+ prefs.writelines(" keyB.add(orca.keybindings.KeyBinding(\n")
+ prefs.writelines(" '" + str(tupl[KEY2]) + "',\n")
+ if tupl[MOD_MASK2] or tupl[MOD_USED2]:
+ prefs.writelines(" " + str(tupl[MOD_MASK2]) + ",\n")
+ prefs.writelines(" " + str(tupl[MOD_USED2]) + ",\n")
+ else:
+ prefs.writelines(" %d,\n" % settings.defaultModifierMask)
+ prefs.writelines(" 0,\n")
+ if (tupl[CLICK_COUNT2] == "1"):
+ prefs.writelines(' script.inputEventHandlers["' + \
+ str(tupl[HANDLER]) +'"]))\n\n')
+ else:
+ prefs.writelines(' script.inputEventHandlers["' + \
+ str(tupl[HANDLER]) +'"],\n')
+ prefs.writelines(" " + str(tupl[CLICK_COUNT2]) + \
+ "))\n\n")
+
+ def _writeKeyBindingsPostamble(self, prefs):
+ """Writes the postamble to the user-settings.py keyBindings section."""
+
+ prefs.writelines(' return keyB')
+ prefs.writelines("\n\n")
+ prefs.writelines( \
+ 'orca.settings.overrideKeyBindings = overrideKeyBindings')
+ prefs.writelines("\n")
+
+ def _iterateKeyBindings(self, prefs, treeModel):
+ """Iterate over all the key bindings in the tree model and write
+ out all that the user has modified.
+ """
+
+ thisIter = treeModel.get_iter_first()
+ while thisIter != None:
+ iterChild = treeModel.iter_children(thisIter)
+ while iterChild != None:
+ values = treeModel.get(iterChild,
+ 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
+ if values[MODIF]:
+ self._writeKeyBinding(prefs, values)
+ iterChild = treeModel.iter_next(iterChild)
+ thisIter = treeModel.iter_next(thisIter)
+
+ def _writeKeyBindingsMap(self, prefs, treeModel):
+ """Write to configuration file 'prefs' the key bindings passed in the
+ model treeModel.
+ """
+
+ self._writeKeyBindingsPreamble(prefs)
+ self._iterateKeyBindings(prefs, treeModel)
+ self._writeKeyBindingsPostamble(prefs)
+
+ def _writePronunciationsPreamble(self, prefs):
+ """Writes the preamble to the ~/.orca/user-settings.py
+ pronunciations section."""
+
+ prefs.writelines("\n")
+ prefs.writelines( \
+ "# User customized pronunciation dictionary settings\n")
+ prefs.writelines("#\n")
+ prefs.writelines("import orca.pronunciation_dict\n\n")
+ prefs.writelines("orca.pronunciation_dict.pronunciation_dict={}\n")
+
+ def _writePronunciation(self, prefs, word, value):
+ """Write out a single pronunciation entry to the
+ ~/.orca/user-setting.py settings file.
+
+ Arguments:
+ - prefs: file handle for user preferences.
+ - word: the actual word to be pronunced.
+ - value: the replacement string to use.
+ """
+
+ prefs.writelines("orca.pronunciation_dict.setPronunciation(" + \
+ repr(word) + ", " + repr(value) + ")\n")
+
+ def _iteratePronunciations(self, prefs, treeModel):
+ """Iterate over each of the entries in the tree model and write out
+ a pronunciation diction entry for them. If any strings with an
+ actual string of "" are found, they are ignored.
+ """
+
+ thisIter = treeModel.get_iter_first()
+ while thisIter != None:
+ values = treeModel.get(thisIter, ACTUAL, REPLACEMENT)
+ word = values[ACTUAL]
+ value = values[REPLACEMENT]
+
+ if word != "":
+ self._writePronunciation(prefs, word, value)
+
+ thisIter = treeModel.iter_next(thisIter)
+
+ def _writePronunciationMap(self, prefs, treeModel):
+ """Write to configuration file 'prefs' the new pronunciation dictionary
+ entries passed in the model treeModel.
+
+ Arguments:
+ - prefs: file handle for application preferences.
+ - treeModel: pronunciation dictionary tree model.
+ """
+
+ self._writePronunciationsPreamble(prefs)
+ self._iteratePronunciations(prefs, treeModel)
+
+ def _setupPreferencesDirs(self):
+ """Creates the directories and standard files to hold user
+ preferences."""
+
+ # Set up the user's preferences directory (~/.orca by default).
+ #
+ orcaDir = settings.userPrefsDir
+ self._createDir(orcaDir)
+
+ # Set up ~/.orca/orca-scripts as a Python package
+ #
+ orcaScriptDir = os.path.join(orcaDir, "orca-scripts")
+ self._createDir(orcaScriptDir)
+ initFile = os.path.join(orcaScriptDir, "__init__.py")
+ if not os.path.exists(initFile):
+ os.close(os.open(initFile, os.O_CREAT, 0700))
+
+ # Set up ~/.orca/app-settings as a Python package.
+ #
+ orcaSettingsDir = os.path.join(orcaDir, "app-settings")
+ self._createDir(orcaSettingsDir)
+ initFile = os.path.join(orcaSettingsDir, "__init__.py")
+ if not os.path.exists(initFile):
+ os.close(os.open(initFile, os.O_CREAT, 0700))
+
+ def _getValueForKey(self, prefsDict, key):
+ """Return the value associated with this preferences dictionary key
+
+ Arguments:
+ - prefsDict: a dictionary where the keys are orca preferences
+ names and the values are the values for the preferences.
+ - key: the preferences dictionary key.
+
+ Return the value of the given preferences dictionary key.
+ """
+
+ value = None
+ if key in prefsDict:
+ if key == "voices":
+ value = self._getVoicesString(prefsDict[key])
+ elif key == "speechServerInfo":
+ value = self._getSpeechServerString(prefsDict[key])
+ elif key == "speechServerFactory":
+ value = self._getSpeechServerFactoryString(prefsDict[key])
+ elif key.endswith("VerbosityLevel"):
+ value = self._getVerbosityString(prefsDict[key])
+ elif key == "brailleRolenameStyle":
+ value = self._getBrailleRolenameStyleString(prefsDict[key])
+ elif key == "brailleSelectorIndicator":
+ value = self._getBrailleSelectionIndicatorString(prefsDict[key])
+ elif key == "brailleLinkIndicator":
+ value = self._getBrailleLinkIndicatorString(prefsDict[key])
+ elif key == "brailleAlignmentStyle":
+ value = self._getBrailleAlignmentStyleString(prefsDict[key])
+ elif key == "verbalizePunctuationStyle":
+ value = self._getVerbalizePunctuationStyleString(prefsDict[key])
+ elif key == "presentDateFormat":
+ value = self._getPresentDateString(prefsDict[key])
+ elif key == "presentTimeFormat":
+ value = self._getPresentTimeString(prefsDict[key])
+ elif key == "sayAllStyle":
+ value = self._getSayAllStyleString(prefsDict[key])
+ elif key in ["magCursorColor",
+ "magCrossHairColor",
+ "magZoomerBorderColor"]:
+ value = self._getMagColorString(prefsDict[key])
+ elif key == "magSmoothingMode":
+ value = self._getMagSmoothingModeString(prefsDict[key])
+ elif key == "magMouseTrackingMode":
+ value = self._getMagMouseTrackingModeString(prefsDict[key])
+ elif key == "magControlTrackingMode":
+ value = self._getMagControlTrackingModeString(prefsDict[key])
+ elif key == "magTextTrackingMode":
+ value = self._getMagTextTrackingModeString(prefsDict[key])
+ elif key == "magZoomerType":
+ value = self._getMagZoomerTypeString(prefsDict[key])
+ elif key == "magColorFilteringMode":
+ value = self._getMagColorFilteringModeString(prefsDict[key])
+ elif key == "magSourceDisplay" or key == "magTargetDisplay":
+ value = self._getDisplayString(prefsDict[key])
+ elif key == "keyboardLayout":
+ value = self._getKeyboardLayoutString(prefsDict[key])
+ elif key == "orcaModifierKeys":
+ value = self._getOrcaModifierKeysString(prefsDict[key])
+ elif key == "enabledSpokenTextAttributes":
+ value = self._getSpokenTextAttributesString(prefsDict[key])
+ elif key == "enabledBrailledTextAttributes":
+ value = self._getBrailledTextAttributesString(prefsDict[key])
+ elif key == "textAttributesBrailleIndicator":
+ value = self._getTextAttributesBrailleIndicatorString( \
+ prefsDict[key])
+ elif key == "progressBarVerbosity":
+ value = self._getProgressBarVerbosityString(prefsDict[key])
+ elif key == "brailleContractionTable":
+ value = "'%s'" % prefsDict[key]
+ elif key == "brailleEOLIndicator":
+ value = "'%s'" % prefsDict[key]
+ elif key == "brailleRequiredStateString":
+ value = "'%s'" % prefsDict[key]
+ elif key == "speechRequiredStateString":
+ value = "'%s'" % prefsDict[key]
+ else:
+ value = prefsDict[key]
+
+ return value
+
+ def writePreferences(self):
+ """Creates the directory and files to hold user preferences. Note
+ that callers of this method may want to consider using an ordered
+ dictionary so that the keys are output in a deterministic order.
+
+ Returns True if accessibility was enabled as a result of this
+ call.
+ """
+
+ self._setupPreferencesDirs()
+
+ # Write ~/.orca/user-settings.py
+ #
+ orcaDir = settings.userPrefsDir
+ prefs = open(os.path.join(orcaDir, "user-settings.py"), "w")
+ self._writePreferencesPreamble(prefs)
+
+ for key in settings.userCustomizableSettings:
+ value = self._getValueForKey(self.prefsDict, key)
+ if value != None:
+ prefs.writelines("orca.settings.%s = %s\n" % (key, value))
+
+ if self.keyBindingsTreeModel:
+ self._writeKeyBindingsMap(prefs, self.keyBindingsTreeModel)
+
+ if self.pronunciationTreeModel:
+ self._writePronunciationMap(prefs, self.pronunciationTreeModel)
+
+ self._writePreferencesPostamble(prefs)
+ prefs.close()
+
+ # Return True if this caused accessibility to be enabled
+ # as a result of this call.
+ #
+ return self._enableAccessibility()
+
+ def loadSettings(self):
+ """Load settings"""
+
+ UserSettings = __import__("user-settings")
+ return UserSettings
+
+def readPreferences():
+ """Returns a dictionary containing the names and values of the
+ customizable features of Orca."""
+
+ prefsDict = {}
+ for key in settings.userCustomizableSettings:
+ try:
+ prefsDict[key] = getattr(settings, key)
+ except:
+ pass
+
+ return prefsDict
+
+def writePreferences(prefsDict, keyBindingsTreeModel=None,
+ pronunciationTreeModel=None):
+ """Creates the directory and files to hold application specific
+ user preferences. Write out any preferences that are different
+ from the generic Orca preferences for this user. Note that callers
+ of this method may want to consider using an ordered dictionary so
+ that the keys are output in a deterministic order.
+
+ Arguments:
+ - prefsDict: a dictionary where the keys are orca preferences
+ names and the values are the values for the preferences.
+ - keyBindingsTreeModel - key bindings tree model, or None if we are
+ writing out console preferences.
+ - pronunciationTreeModel - pronunciation dictionary tree model, or
+ None if we are writing out console preferences.
+
+ Returns True if the user needs to log out for accessibility settings
+ to take effect.
+ """
+
+ orcaPrefs = OrcaPrefs(prefsDict,
+ keyBindingsTreeModel,
+ pronunciationTreeModel)
+ return orcaPrefs.writePreferences()
+
+def loadSettings():
+ """Load settings"""
+
+ UserSettings = __import__("user-settings")
+ return UserSettings
diff --git a/src/orca/backends/gconf_backend.py b/src/orca/backends/gconf_backend.py
new file mode 100644
index 0000000..1155e67
--- /dev/null
+++ b/src/orca/backends/gconf_backend.py
@@ -0,0 +1,1164 @@
+# Orca
+#
+# Copyright 2004-2008 Sun Microsystems Inc.
+# Author: Javier Hernandez Antunez <jhernandez emergya es>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., Franklin Street, Fifth Floor,
+# Boston MA 02110-1301 USA.
+
+"""Common utilities to manage the store user preferences over gconf."""
+
+__id__ = "$Id$"
+__version__ = "$Revision$"
+__date__ = "$Date$"
+__copyright__ = "Copyright (c) 2005-2008 Sun Microsystems Inc."
+__license__ = "LGPL"
+
+import os
+import pprint
+
+import orca
+from orca import settings
+import orca.acss
+import gconf
+import types
+
+# The same fields than in orca_gui_prefs.py:
+(HANDLER, DESCRIP, MOD_MASK1, MOD_USED1, KEY1, CLICK_COUNT1, OLDTEXT1, \
+ TEXT1, MOD_MASK2, MOD_USED2, KEY2, CLICK_COUNT2, OLDTEXT2, TEXT2, MODIF, \
+ EDITABLE) = range(16)
+
+(ACTUAL, REPLACEMENT) = range(2)
+
+class GConfKeysDict(dict):
+ VALID_KEY_TYPES = (bool, str, int, float, list, tuple)
+
+ def __init__(self, *args, **kwargs):
+ super(dict, self).__init__(*args, **kwargs)
+
+ def __setitem__(self, key, val):
+ if not type(val) in self.VALID_KEY_TYPES:
+ raise 'Invalid %s for gconf key' % type(val)
+ else:
+ dict.__setitem__(self, key, val)
+
+
+class OrcaPrefs():
+ # set gconf configuration properties
+ GCONF_DIR = '/apps/gnome-orca'
+ VALID_KEY_TYPES = (bool, str, int, list, tuple)
+ import gconf_defaults
+
+ DEFAULTS = gconf_defaults.defaults
+
+ need2repr = ['brailleEOLIndicator', 'brailleContractionTable', 'brailleRequiredStateString',
+ 'enabledBrailledTextAttributes', 'enabledSpokenTextAttributes', 'magZoomerBorderColor',
+ 'magCursorColor', 'magCrossHairColor', 'magTargetDisplay', 'magSourceDisplay',
+ 'speechRequiredStateString', 'speechServerFactory', 'presentDateFormat', 'presentTimeFormat']
+
+# need2repr = ['speechServerFactory', 'brailleEOLIndicator', 'magCursorColor', 'magCrossHairColor',
+# 'magZoomerBorderColor', 'magTargetDisplay', 'magSourceDisplay', 'enabledSpokenTextAttributes',
+# 'enabledBrailledTextAttributes', 'brailleContractionTable']
+
+# DEFAULTS = {
+# 'speakCellHeaders': True,
+# 'magEdgeMargin': 0,
+# 'brailleContractionTable': '',
+# 'magPointerFollowsFocus': False,
+# 'magTextTrackingMode': 2
+# }
+
+# DEFAULTS = {'key-1' : 1,
+# 'key-2' : 'dos',
+# 'key-3' : ['uno', 2],
+# 'key-4' : {'key-4.1': 1, 'clave-4.2' : 'key 4.2 string value',
+# 'key-4.3' : {'key-4.3.1' : 'key 4.3.1 string value'},
+# 'key-4.4': ['4.4 List #1', '4.4 List #2', 4.403]
+# },
+# 'key-5' : 'key 5 string value',
+# 'key-6' : {'key-6.1' : 'key 6.1 string value'},
+# 'key-7' : 7
+# }
+
+
+ def __init__(self, prefsDict=None, keyBindingsTreeModel=None,
+ pronunciationTreeModel=None):
+ """Creates a new OrcaPrefs instance that will be used to load/store
+ application specific preferences.
+
+ Arguments:
+ - prefsDict: a dictionary where the keys are orca preferences
+ names and the values are the values for the preferences, or none if
+ we are loading user settings.
+ - keyBindingsTreeModel - key bindings tree model, or None if we are
+ writing out console preferences.
+ - pronunciationTreeModel - pronunciation dictionary tree model, or
+ None if we are writing out console preferences.
+ """
+
+ # init gconf
+ self.__app_key = self.GCONF_DIR
+ self._client = gconf.client_get_default()
+ self._client.add_dir(self.GCONF_DIR[:-1], gconf.CLIENT_PRELOAD_RECURSIVE)
+ self._notifications = []
+
+ self.options = GConfKeysDict()
+ self.options.update(self.DEFAULTS)
+
+ # store dicts if needed
+ self.prefsDict = prefsDict
+ self.keyBindingsTreeModel = keyBindingsTreeModel
+ self.pronunciationTreeModel = pronunciationTreeModel
+
+ if prefsDict:
+ self.options = self.prefsDict
+
+
+ def gconf_load(self, dir = None):
+ casts = {gconf.VALUE_BOOL: gconf.Value.get_bool,
+ gconf.VALUE_INT: gconf.Value.get_int,
+ gconf.VALUE_FLOAT: gconf.Value.get_float,
+ gconf.VALUE_STRING: gconf.Value.get_string,
+ gconf.VALUE_LIST: gconf.Value.get_list}
+
+ new_settings = False
+
+ if dir:
+ self.__app_key = dir
+
+ for entry in self._client.all_entries(self.__app_key):
+#PORQUE? self.options[entry.key.split(self.__app_key + '/')[1]] = self._client.get(entry.key).to_string()
+ gval = self._client.get(entry.key)
+ if gval == None: continue
+
+ if gval.type == gconf.VALUE_LIST:
+ string_list = [item.get_string() for item in gval.get_list()]
+ if dir:
+ dictString = ''
+ dictString = self.__format_gconf_dir(dir, entry)
+ dictString += ' = %s ' % string_list
+ exec(dictString)
+ else:
+ self.options[entry.key.split('/')[-1]] = string_list
+ else:
+ if dir:
+ dictString = ''
+ dictString = self.__format_gconf_dir(dir, entry)
+ dictString += ' = %s ' % repr(casts[gval.type](gval))
+ exec(dictString)
+ else:
+ self.options[entry.key.split('/')[-1]] = casts[gval.type](gval)
+
+ for dir in self._client.all_dirs(self.__app_key):
+ self.gconf_load(dir)
+ self.__app_key = \
+ self.__app_key.split(reversed(self.__app_key.split('/')).next())[0][:-1]
+
+ if not new_settings:
+ return True
+
+ def __format_gconf_dir(self, dir, entry):
+ formatDir = dir.split('/')
+
+ for item in range(3):
+ formatDir.pop(0)
+ dictString = 'self.options'
+
+ for item in formatDir:
+ dictString += repr([item])
+ dictString += repr([entry.key.split('/')[-1]])
+
+ return dictString
+
+
+ def gconf_save(self, key = None, keyDictionary = None):
+ casts = {types.BooleanType: gconf.Client.set_bool,
+ types.IntType: gconf.Client.set_int,
+ types.FloatType: gconf.Client.set_float,
+ types.StringType: gconf.Client.set_string,
+ types.ListType: gconf.Client.set_list,
+ types.TupleType: gconf.Client.set_list}
+
+ if key and keyDictionary:
+ self.__app_key += '/%s' % key
+ keyDict = keyDictionary
+ else:
+ if not self.prefsDict:
+ keyDict = self.options = self.DEFAULTS
+ else:
+ keyDict = self.options = self.prefsDict
+
+
+ for name, value in keyDict.items():
+ print '### Guardando %s = %s' % (name, value)
+ if isinstance(value, dict) and len(value) != 0:
+ self.gconf_save(name, value)
+ self.__app_key = \
+ self.__app_key[:len(self.__app_key) - (len(name) + 1)]
+ continue
+
+ if type(value) in (list, tuple) and value != 0:
+ string_value = [str(item) for item in value]
+ casts[type(value)](self._client, self.__app_key + '/' + name,
+ gconf.VALUE_STRING, string_value)
+ else:
+ if name == 'sayAllStyle':
+ print 'que pasa con sayAllStyle = %s' % value
+ if name in self.need2repr and value != None:
+ value = self._fix_quotes(value)
+ if value != None and not isinstance(value, dict):
+ casts[type(value)](self._client, self.__app_key + '/' + name,
+ value)
+ else:
+ print 'se obvia %s por ser None' % name
+
+
+ def _writePreferencesPreamble(self, prefs):
+ """Writes the preamble to the user-settings.py file."""
+
+ prefs.writelines("#orca.debug.debugLevel = orca.debug.LEVEL_OFF\n")
+ prefs.writelines("orca.debug.debugLevel = orca.debug.LEVEL_SEVERE\n")
+ prefs.writelines("#orca.debug.debugLevel = orca.debug.LEVEL_WARNING\n")
+ prefs.writelines("#orca.debug.debugLevel = orca.debug.LEVEL_INFO\n")
+ prefs.writelines( \
+ "#orca.debug.debugLevel = orca.debug.LEVEL_CONFIGURATION\n")
+ prefs.writelines("#orca.debug.debugLevel = orca.debug.LEVEL_FINE\n")
+ prefs.writelines("#orca.debug.debugLevel = orca.debug.LEVEL_FINER\n")
+ prefs.writelines("#orca.debug.debugLevel = orca.debug.LEVEL_FINEST\n")
+ prefs.writelines("#orca.debug.debugLevel = orca.debug.LEVEL_ALL\n")
+ prefs.writelines("\n")
+ prefs.writelines("#orca.debug.eventDebugLevel = " \
+ "orca.debug.LEVEL_OFF\n")
+ prefs.writelines("#orca.debug.eventDebugFilter = None\n")
+ prefs.writelines("#orca.debug.eventDebugFilter = " \
+ "re.compile('[\S]*focus|[\S]*activ')\n")
+ prefs.writelines( \
+ "#orca.debug.eventDebugFilter = re.compile('nomatch')\n")
+ prefs.writelines("#orca.debug.eventDebugFilter = " \
+ "re.compile('[\S]*:accessible-name')\n")
+ prefs.writelines("#orca.debug.eventDebugFilter = " \
+ "re.compile('[\S]*:(?!bounds-changed)')\n")
+
+ prefs.writelines("\n")
+
+ prefs.writelines("#orca.debug.debugFile = " \
+ "open(time.strftime('debug-%Y-%m-%d-%H:%M:%S.out'), "\
+ "'w', 0)\n")
+ prefs.writelines("#orca.debug.debugFile = open('debug.out', 'w', 0)\n")
+ prefs.writelines("\n")
+
+ prefs.writelines("#orca.settings.useBonoboMain=False\n")
+ prefs.writelines("#orca.settings.debugEventQueue=True\n")
+ prefs.writelines("#orca.settings.gilSleepTime=0\n")
+ prefs.writelines("\n")
+
+ prefs.writelines("if False:\n")
+ prefs.writelines(" import sys\n")
+ prefs.writelines(" import orca.debug\n")
+ prefs.writelines(" sys.settrace(orca.debug.traceit)\n")
+ prefs.writelines(" orca.debug.debugLevel = orca.debug.LEVEL_ALL\n")
+ prefs.writelines("\n")
+
+ def _writePreferencesPostamble(self, prefs):
+ """Writes the postamble to the user-settings.py file."""
+
+ prefs.writelines("\nimport orca.orca_state\n")
+ prefs.writelines("\ntry:\n")
+ prefs.writelines(" reload(orca.orca_state.orcaCustomizations)\n")
+ prefs.writelines("except AttributeError:\n")
+ prefs.writelines(" try:\n")
+ prefs.writelines(" orca.orca_state.orcaCustomizations = "
+ "__import__(\"orca-customizations\")\n")
+ prefs.writelines(" except ImportError:\n")
+ prefs.writelines(" pass\n")
+
+ def _enableAccessibility(self):
+ """Enables the GNOME accessibility flag. Users need to log out and
+ then back in for this to take effect.
+
+ Returns True if an action was taken (i.e., accessibility was not
+ set prior to this call).
+ """
+
+ alreadyEnabled = settings.isAccessibilityEnabled()
+ if not alreadyEnabled:
+ settings.setAccessibilityEnabled(True)
+
+ return not alreadyEnabled
+
+ def _getDisplayString(self, display):
+ """Returns a string that represents the source or target
+ magnifier display.
+
+ Arguments:
+ - display: the magnifier source or taget display string.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if not display:
+ return "''"
+ else:
+ return "'%s'" % display
+
+ def _getSpeechServerFactoryString(self, factory):
+ """Returns a string that represents the speech server factory passed in.
+
+ Arguments:
+ - factory: the speech server factory
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if not factory:
+ return None
+ elif isinstance(factory, basestring):
+ return "'%s'" % factory
+ else:
+ return "'%s'" % factory.__name__
+
+ def _getSpeechServerString(self, server):
+ """Returns a string that represents the speech server passed in.
+
+ Arguments:
+ - server: a speech server
+
+ Returns a string suitable for the preferences file.
+ """
+ if not server:
+ return None
+ elif isinstance(server, [].__class__):
+ return repr(server)
+ else:
+ return repr(server.getInfo())
+
+ def _getVoicesString(self, voices):
+ """Returns a string that represents the list of voices passed in.
+
+ Arguments:
+ - voices: a list of ACSS instances.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ voicesStr = "{\n"
+ for voice in voices:
+ voicesStr += "'%s' : orca.acss.ACSS(" % voice
+ voicesStr += pprint.pformat(voices[voice]) + "),\n"
+ voicesStr += "}"
+
+ return voicesStr
+
+ def _getKeyboardLayoutString(self, keyboardLayout):
+ """Returns a string that represents the keyboard layout passed in."""
+
+ if keyboardLayout == settings.GENERAL_KEYBOARD_LAYOUT_DESKTOP:
+ return "orca.settings.GENERAL_KEYBOARD_LAYOUT_DESKTOP"
+ else:
+ return "orca.settings.GENERAL_KEYBOARD_LAYOUT_LAPTOP"
+
+ def _getOrcaModifierKeysString(self, orcaModifierKeys):
+ """Returns a string that represents the Orca modifier keys passed in."""
+
+ if orcaModifierKeys == settings.DESKTOP_MODIFIER_KEYS:
+ return "orca.settings.DESKTOP_MODIFIER_KEYS"
+ else:
+ return "orca.settings.LAPTOP_MODIFIER_KEYS"
+
+ def _getSpokenTextAttributesString(self, enabledSpokenTextAttributes):
+ """ Returns a string that represents the enabled spoken text attributes
+ passed in.
+ """
+
+ return "\"" + enabledSpokenTextAttributes + "\""
+
+ def _getBrailledTextAttributesString(self, enabledBrailledTextAttributes):
+ """ Returns a string that represents the enabled brailled text
+ attributes passed in.
+ """
+
+ return "\"" + enabledBrailledTextAttributes + "\""
+
+ def _getTextAttributesBrailleIndicatorString(self, brailleIndicator):
+ """Returns a string that represents the text attribute braille indicator
+ value passed in."""
+
+ if brailleIndicator == settings.TEXT_ATTR_BRAILLE_NONE:
+ return "orca.settings.TEXT_ATTR_BRAILLE_NONE"
+ elif brailleIndicator == settings.TEXT_ATTR_BRAILLE_7:
+ return "orca.settings.TEXT_ATTR_BRAILLE_7"
+ elif brailleIndicator == settings.TEXT_ATTR_BRAILLE_8:
+ return "orca.settings.TEXT_ATTR_BRAILLE_8"
+ elif brailleIndicator == settings.TEXT_ATTR_BRAILLE_BOTH:
+ return "orca.settings.TEXT_ATTR_BRAILLE_BOTH"
+ else:
+ return "orca.settings.TEXT_ATTR_BRAILLE_NONE"
+
+ def _getBrailleSelectionIndicatorString(self, selectionIndicator):
+ """Returns a string that represents the braille selection indicator
+ value passed in."""
+
+ if selectionIndicator == settings.BRAILLE_SEL_NONE:
+ return "orca.settings.BRAILLE_SEL_NONE"
+ elif selectionIndicator == settings.BRAILLE_SEL_7:
+ return "orca.settings.BRAILLE_SEL_7"
+ elif selectionIndicator == settings.BRAILLE_SEL_8:
+ return "orca.settings.BRAILLE_SEL_8"
+ elif selectionIndicator == settings.BRAILLE_SEL_BOTH:
+ return "orca.settings.BRAILLE_SEL_BOTH"
+ else:
+ return "orca.settings.BRAILLE_SEL_NONE"
+
+ def _getBrailleLinkIndicatorString(self, linkIndicator):
+ """Returns a string that represents the braille link indicator
+ value passed in."""
+
+ if linkIndicator == settings.BRAILLE_LINK_NONE:
+ return "orca.settings.BRAILLE_LINK_NONE"
+ elif linkIndicator == settings.BRAILLE_LINK_7:
+ return "orca.settings.BRAILLE_LINK_7"
+ elif linkIndicator == settings.BRAILLE_LINK_8:
+ return "orca.settings.BRAILLE_LINK_8"
+ elif linkIndicator == settings.BRAILLE_LINK_BOTH:
+ return "orca.settings.BRAILLE_LINK_BOTH"
+ else:
+ return "orca.settings.BRAILLE_LINK_NONE"
+
+ def _getVerbosityString(self, verbosityLevel):
+ """Returns a string that represents the verbosity level passed in."""
+
+ if verbosityLevel == settings.VERBOSITY_LEVEL_BRIEF:
+ return "orca.settings.VERBOSITY_LEVEL_BRIEF"
+ elif verbosityLevel == settings.VERBOSITY_LEVEL_VERBOSE:
+ return "orca.settings.VERBOSITY_LEVEL_VERBOSE"
+ else:
+ return "orca.settings.VERBOSITY_LEVEL_VERBOSE"
+
+ def _getBrailleRolenameStyleString(self, rolenameStyle):
+ """Returns a string that represents the rolename style passed in."""
+
+ if rolenameStyle == settings.BRAILLE_ROLENAME_STYLE_SHORT:
+ return "orca.settings.BRAILLE_ROLENAME_STYLE_SHORT"
+ elif rolenameStyle == settings.BRAILLE_ROLENAME_STYLE_LONG:
+ return "orca.settings.BRAILLE_ROLENAME_STYLE_LONG"
+ else:
+ return "orca.settings.BRAILLE_ROLENAME_STYLE_LONG"
+
+ def _getBrailleAlignmentStyleString(self, brailleAlignmentStyle):
+ """Returns a string that represents the brailleAlignmentStyle
+ passed in."""
+
+ if brailleAlignmentStyle == settings.ALIGN_BRAILLE_BY_WORD:
+ return "orca.settings.ALIGN_BRAILLE_BY_WORD"
+ if brailleAlignmentStyle == settings.ALIGN_BRAILLE_BY_MARGIN:
+ return "orca.settings.ALIGN_BRAILLE_BY_MARGIN"
+ else:
+ return "orca.settings.ALIGN_BRAILLE_BY_EDGE"
+
+ def _getVerbalizePunctuationStyleString(self, punctuationStyle):
+ """Returns a string that represents the punctuation style passed in."""
+
+ if punctuationStyle == settings.PUNCTUATION_STYLE_NONE:
+ return "orca.settings.PUNCTUATION_STYLE_NONE"
+ elif punctuationStyle == settings.PUNCTUATION_STYLE_SOME:
+ return "orca.settings.PUNCTUATION_STYLE_SOME"
+ elif punctuationStyle == settings.PUNCTUATION_STYLE_MOST:
+ return "orca.settings.PUNCTUATION_STYLE_MOST"
+ elif punctuationStyle == settings.PUNCTUATION_STYLE_ALL:
+ return "orca.settings.PUNCTUATION_STYLE_ALL"
+ else:
+ return "orca.settings.PUNCTUATION_STYLE_ALL"
+
+ def _getPresentTimeString(self, val):
+ if val == settings.TIME_FORMAT_24_HMS:
+ return "orca.settings.TIME_FORMAT_24_HMS"
+ elif val == settings.TIME_FORMAT_24_HMS_WITH_WORDS:
+ return "orca.settings.TIME_FORMAT_24_HMS_WITH_WORDS"
+ elif val == settings.TIME_FORMAT_24_HM:
+ return "orca.settings.TIME_FORMAT_24_HM"
+ elif val == settings.TIME_FORMAT_24_HM_WITH_WORDS:
+ return "orca.settings.TIME_FORMAT_24_HM_WITH_WORDS"
+ else:
+ return "orca.settings.TIME_FORMAT_LOCALE"
+
+ def _getPresentDateString(self, val):
+ if val == settings.DATE_FORMAT_WITH_LONG_NAMES:
+ return "orca.settings.DATE_FORMAT_WITH_LONG_NAMES"
+ elif val == settings.DATE_FORMAT_WITH_SHORT_NAMES:
+ return "orca.settings.DATE_FORMAT_WITH_SHORT_NAMES"
+ else:
+ return "orca.settings.DATE_FORMAT_LOCALE"
+
+ def _getSayAllStyleString(self, sayAllStyle):
+ """Returns a string that represents the say all style passed in."""
+
+ if sayAllStyle == settings.SAYALL_STYLE_LINE:
+ return "orca.settings.SAYALL_STYLE_LINE"
+ elif sayAllStyle == settings.SAYALL_STYLE_SENTENCE:
+ return "orca.settings.SAYALL_STYLE_SENTENCE"
+
+ def _getMagColorString(self, cursorColor):
+ """Returns a string that represents the magnification object's color
+ passed in.
+
+ Arguments:
+ - cursorColor: magnification object's color
+
+ Returns a string suitable for the preferences file.
+ """
+
+ cursorColorStr = "'%s'" % cursorColor
+
+ return cursorColorStr
+
+ def _getMagSmoothingModeString(self, smoothingMode):
+ """Returns a string that represents the magnification smoothing mode
+ passed in.
+
+ Arguments:
+ - smoothingMode: magnification smoothing mode.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if smoothingMode == settings.MAG_SMOOTHING_MODE_BILINEAR:
+ return "orca.settings.MAG_SMOOTHING_MODE_BILINEAR"
+ elif smoothingMode == settings.MAG_SMOOTHING_MODE_NONE:
+ return "orca.settings.MAG_SMOOTHING_MODE_NONE"
+ else:
+ return "orca.settings.MAG_SMOOTHING_MODE_BILINEAR"
+
+ def _getMagMouseTrackingModeString(self, mouseTrackingMode):
+ """Returns a string that represents the magnification mouse tracking
+ mode passed in.
+
+ Arguments:
+ - mouseTrackingMode: magnification mouse tracking mode.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if mouseTrackingMode == settings.MAG_TRACKING_MODE_CENTERED:
+ return "orca.settings.MAG_TRACKING_MODE_CENTERED"
+ elif mouseTrackingMode == settings.MAG_TRACKING_MODE_NONE:
+ return "orca.settings.MAG_TRACKING_MODE_NONE"
+ elif mouseTrackingMode == settings.MAG_TRACKING_MODE_PROPORTIONAL:
+ return "orca.settings.MAG_TRACKING_MODE_PROPORTIONAL"
+ elif mouseTrackingMode == settings.MAG_TRACKING_MODE_PUSH:
+ return "orca.settings.MAG_TRACKING_MODE_PUSH"
+ else:
+ return "orca.settings.MAG_TRACKING_MODE_CENTERED"
+
+ def _getMagControlTrackingModeString(self, controlTrackingMode):
+ """Returns a string that represents the magnification control
+ and menu item tracking mode passed in.
+
+ Arguments:
+ - controlTrackingMode: magnification control and menu item tracking
+ mode.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if controlTrackingMode == settings.MAG_TRACKING_MODE_CENTERED:
+ return "orca.settings.MAG_TRACKING_MODE_CENTERED"
+ elif controlTrackingMode == settings.MAG_TRACKING_MODE_NONE:
+ return "orca.settings.MAG_TRACKING_MODE_NONE"
+ elif controlTrackingMode == settings.MAG_TRACKING_MODE_PUSH:
+ return "orca.settings.MAG_TRACKING_MODE_PUSH"
+ else:
+ return "orca.settings.MAG_TRACKING_MODE_PUSH"
+
+ def _getMagTextTrackingModeString(self, textTrackingMode):
+ """Returns a string that represents the magnification text cursor
+ tracking mode passed in.
+
+ Arguments:
+ - textTrackingMode: magnification text cursor tracking mode.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if textTrackingMode == settings.MAG_TRACKING_MODE_CENTERED:
+ return "orca.settings.MAG_TRACKING_MODE_CENTERED"
+ elif textTrackingMode == settings.MAG_TRACKING_MODE_NONE:
+ return "orca.settings.MAG_TRACKING_MODE_NONE"
+ elif textTrackingMode == settings.MAG_TRACKING_MODE_PUSH:
+ return "orca.settings.MAG_TRACKING_MODE_PUSH"
+ else:
+ return "orca.settings.MAG_TRACKING_MODE_PUSH"
+
+ def _getMagColorFilteringModeString(self, mode):
+ """Returns a string that represents the magnification color filtering
+ mode passed in.
+
+ Arguments:
+ - mode: magnification color filtering mode.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if mode == settings.MAG_COLOR_FILTERING_MODE_NONE:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_NONE"
+ elif mode == settings.MAG_COLOR_FILTERING_MODE_SATURATE_RED:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_SATURATE_RED"
+ elif mode == settings.MAG_COLOR_FILTERING_MODE_SATURATE_GREEN:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_SATURATE_GREEN"
+ elif mode == settings.MAG_COLOR_FILTERING_MODE_SATURATE_BLUE:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_SATURATE_BLUE"
+ elif mode == settings.MAG_COLOR_FILTERING_MODE_DESATURATE_RED:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_DESATURATE_RED"
+ elif mode == settings.MAG_COLOR_FILTERING_MODE_DESATURATE_GREEN:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_DESATURATE_GREEN"
+ elif mode == settings.MAG_COLOR_FILTERING_MODE_DESATURATE_BLUE:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_DESATURATE_BLUE"
+ elif mode == settings.MAG_COLOR_FILTERING_MODE_POSITIVE_HUE_SHIFT:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_POSITIVE_HUE_SHIFT"
+ elif mode == settings.MAG_COLOR_FILTERING_MODE_NEGATIVE_HUE_SHIFT:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_NEGATIVE_HUE_SHIFT"
+ else:
+ return "orca.settings.MAG_COLOR_FILTERING_MODE_NONE"
+
+ def _getMagZoomerTypeString(self, magZoomerType):
+ """Returns a string that represents the magnification zoomer position
+ type passed in.
+
+ Arguments:
+ - magZoomerType: magnification zoomer position type.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if magZoomerType == settings.MAG_ZOOMER_TYPE_FULL_SCREEN:
+ return "orca.settings.MAG_ZOOMER_TYPE_FULL_SCREEN"
+ elif magZoomerType == settings.MAG_ZOOMER_TYPE_TOP_HALF:
+ return "orca.settings.MAG_ZOOMER_TYPE_TOP_HALF"
+ elif magZoomerType == settings.MAG_ZOOMER_TYPE_BOTTOM_HALF:
+ return "orca.settings.MAG_ZOOMER_TYPE_BOTTOM_HALF"
+ elif magZoomerType == settings.MAG_ZOOMER_TYPE_LEFT_HALF:
+ return "orca.settings.MAG_ZOOMER_TYPE_LEFT_HALF"
+ elif magZoomerType == settings.MAG_ZOOMER_TYPE_RIGHT_HALF:
+ return "orca.settings.MAG_ZOOMER_TYPE_RIGHT_HALF"
+ elif magZoomerType == settings.MAG_ZOOMER_TYPE_CUSTOM:
+ return "orca.settings.MAG_ZOOMER_TYPE_CUSTOM"
+ else:
+ return "orca.settings.MAG_ZOOMER_TYPE_FULL_SCREEN"
+
+ def _getProgressBarVerbosityString(self, verbosityLevel):
+ """Returns a string that represents the progress bar verbosity level
+ passed in.
+
+ Arguments:
+ - verbosityLevel: verbosity level for progress bars.
+
+ Returns a string suitable for the preferences file.
+ """
+
+ if verbosityLevel == settings.PROGRESS_BAR_ALL:
+ return "orca.settings.PROGRESS_BAR_ALL"
+ elif verbosityLevel == settings.PROGRESS_BAR_WINDOW:
+ return "orca.settings.PROGRESS_BAR_WINDOW"
+ else:
+ return "orca.settings.PROGRESS_BAR_APPLICATION"
+
+ def _writeKeyBinding(self, prefs, tupl):
+ """Writes a single keyBinding to the user-settings.py
+ keyBindings section.
+
+ Arguments:
+ - prefs: text string - file to write the key binding to.
+ - tupl: tuple - a tuple with the values of the
+ keybinding (gtk.TreeStore model columns)
+ """
+
+ prefs.writelines(" keyB.removeByHandler(script.inputEventHandlers['" \
+ + str(tupl[HANDLER])+"'])\n")
+ if not (tupl[TEXT1] or tupl[TEXT2]):
+ prefs.writelines(" keyB.add(orca.keybindings.KeyBinding(\n")
+ prefs.writelines(" '',\n")
+ prefs.writelines(" %d,\n" % settings.defaultModifierMask)
+ prefs.writelines(" 0,\n")
+ prefs.writelines(' script.inputEventHandlers["' + \
+ str(tupl[HANDLER]) +'"]))\n\n')
+
+ if (tupl[TEXT1]):
+ prefs.writelines(" keyB.add(orca.keybindings.KeyBinding(\n")
+ prefs.writelines(" '" + str(tupl[KEY1]) + "',\n")
+ if tupl[MOD_MASK1] or tupl[MOD_USED1]:
+ prefs.writelines(" " + str(tupl[MOD_MASK1]) + ",\n")
+ prefs.writelines(" " + str(tupl[MOD_USED1]) + ",\n")
+ else:
+ prefs.writelines(" 0,\n")
+ prefs.writelines(" 0,\n")
+ if (tupl[CLICK_COUNT1] == "1"):
+ prefs.writelines(' script.inputEventHandlers["' + \
+ str(tupl[HANDLER]) +'"]))\n\n')
+ else:
+ prefs.writelines(' script.inputEventHandlers["' + \
+ str(tupl[HANDLER]) +'"],\n')
+ prefs.writelines(" " + str(tupl[CLICK_COUNT1]) + \
+ "))\n\n")
+
+ if (tupl[TEXT2]):
+ prefs.writelines(" keyB.add(orca.keybindings.KeyBinding(\n")
+ prefs.writelines(" '" + str(tupl[KEY2]) + "',\n")
+ if tupl[MOD_MASK2] or tupl[MOD_USED2]:
+ prefs.writelines(" " + str(tupl[MOD_MASK2]) + ",\n")
+ prefs.writelines(" " + str(tupl[MOD_USED2]) + ",\n")
+ else:
+ prefs.writelines(" %d,\n" % settings.defaultModifierMask)
+ prefs.writelines(" 0,\n")
+ if (tupl[CLICK_COUNT2] == "1"):
+ prefs.writelines(' script.inputEventHandlers["' + \
+ str(tupl[HANDLER]) +'"]))\n\n')
+ else:
+ prefs.writelines(' script.inputEventHandlers["' + \
+ str(tupl[HANDLER]) +'"],\n')
+ prefs.writelines(" " + str(tupl[CLICK_COUNT2]) + \
+ "))\n\n")
+
+ def _writeKeyBindingsPostamble(self, prefs):
+ """Writes the postamble to the user-settings.py keyBindings section."""
+
+ prefs.writelines(' return keyB')
+ prefs.writelines("\n\n")
+ prefs.writelines( \
+ 'orca.settings.overrideKeyBindings = overrideKeyBindings')
+ prefs.writelines("\n")
+
+ def _iterateKeyBindings(self, prefs, treeModel):
+ """Iterate over all the key bindings in the tree model and write
+ out all that the user has modified.
+ """
+
+ thisIter = treeModel.get_iter_first()
+ while thisIter != None:
+ iterChild = treeModel.iter_children(thisIter)
+ while iterChild != None:
+ values = treeModel.get(iterChild,
+ 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
+ if values[MODIF]:
+ self._writeKeyBinding(prefs, values)
+ iterChild = treeModel.iter_next(iterChild)
+ thisIter = treeModel.iter_next(thisIter)
+
+ def _writeKeyBindingsMap(self, prefs, treeModel):
+ """Write to configuration file 'prefs' the key bindings passed in the
+ model treeModel.
+ """
+
+ self._writeKeyBindingsPreamble(prefs)
+ self._iterateKeyBindings(prefs, treeModel)
+ self._writeKeyBindingsPostamble(prefs)
+
+ def _writePronunciationsPreamble(self, prefs):
+ """Writes the preamble to the ~/.orca/user-settings.py
+ pronunciations section."""
+
+ prefs.writelines("\n")
+ prefs.writelines( \
+ "# User customized pronunciation dictionary settings\n")
+ prefs.writelines("#\n")
+ prefs.writelines("import orca.pronunciation_dict\n\n")
+ prefs.writelines("orca.pronunciation_dict.pronunciation_dict={}\n")
+
+ def _writePronunciation(self, prefs, word, value):
+ """Write out a single pronunciation entry to the
+ ~/.orca/user-setting.py settings file.
+
+ Arguments:
+ - prefs: file handle for user preferences.
+ - word: the actual word to be pronunced.
+ - value: the replacement string to use.
+ """
+
+ prefs.writelines("orca.pronunciation_dict.setPronunciation(" + \
+ repr(word) + ", " + repr(value) + ")\n")
+
+ def _iteratePronunciations(self, prefs, treeModel):
+ """Iterate over each of the entries in the tree model and write out
+ a pronunciation diction entry for them. If any strings with an
+ actual string of "" are found, they are ignored.
+ """
+
+ thisIter = treeModel.get_iter_first()
+ while thisIter != None:
+ values = treeModel.get(thisIter, ACTUAL, REPLACEMENT)
+ word = values[ACTUAL]
+ value = values[REPLACEMENT]
+
+ if word != "":
+ self._writePronunciation(prefs, word, value)
+
+ thisIter = treeModel.iter_next(thisIter)
+
+ def _writePronunciationMap(self, prefs, treeModel):
+ """Write to configuration file 'prefs' the new pronunciation dictionary
+ entries passed in the model treeModel.
+
+ Arguments:
+ - prefs: file handle for application preferences.
+ - treeModel: pronunciation dictionary tree model.
+ """
+
+ self._writePronunciationsPreamble(prefs)
+ self._iteratePronunciations(prefs, treeModel)
+
+ def _setupPreferencesDirs(self):
+ """Creates the directories and standard files to hold user
+ preferences."""
+
+ # Set up the user's preferences directory (~/.orca by default).
+ #
+ orcaDir = settings.userPrefsDir
+ self._createDir(orcaDir)
+
+ # Set up ~/.orca/orca-scripts as a Python package
+ #
+ orcaScriptDir = os.path.join(orcaDir, "orca-scripts")
+ self._createDir(orcaScriptDir)
+ initFile = os.path.join(orcaScriptDir, "__init__.py")
+ if not os.path.exists(initFile):
+ os.close(os.open(initFile, os.O_CREAT, 0700))
+
+ # Set up ~/.orca/app-settings as a Python package.
+ #
+ orcaSettingsDir = os.path.join(orcaDir, "app-settings")
+ self._createDir(orcaSettingsDir)
+ initFile = os.path.join(orcaSettingsDir, "__init__.py")
+ if not os.path.exists(initFile):
+ os.close(os.open(initFile, os.O_CREAT, 0700))
+
+
+ def _getValueForKey(self, prefsDict, key):
+ """Return the value associated with this preferences dictionary key
+
+ Arguments:
+ - prefsDict: a dictionary where the keys are orca preferences
+ names and the values are the values for the preferences.
+ - key: the preferences dictionary key.
+
+ Return the value of the given preferences dictionary key.
+ """
+
+ value = None
+ if key in prefsDict:
+ if key == "voices":
+ value = self._getVoicesString(prefsDict[key])
+ elif key == "speechServerInfo":
+ if isinstance(prefsDict[key], str):
+ prefsDict[key] = prefsDict[key].replace('[','').replace(']','').split(',')
+ value = self._getSpeechServerString(prefsDict[key])
+ elif key == "speechServerFactory":
+ value = self._getSpeechServerFactoryString(prefsDict[key])
+ elif key.endswith("VerbosityLevel"):
+ value = self._getVerbosityString(prefsDict[key])
+ elif key == "brailleRolenameStyle":
+ value = self._getBrailleRolenameStyleString(prefsDict[key])
+ elif key == "brailleSelectorIndicator":
+ value = self._getBrailleSelectionIndicatorString(prefsDict[key])
+ elif key == "brailleLinkIndicator":
+ value = self._getBrailleLinkIndicatorString(prefsDict[key])
+ elif key == "brailleAlignmentStyle":
+ value = self._getBrailleAlignmentStyleString(prefsDict[key])
+ elif key == "verbalizePunctuationStyle":
+ value = self._getVerbalizePunctuationStyleString(prefsDict[key])
+ elif key == "presentDateFormat":
+ value = self._getPresentDateString(prefsDict[key])
+ elif key == "presentTimeFormat":
+ value = self._getPresentTimeString(prefsDict[key])
+ elif key == "sayAllStyle":
+ value = self._getSayAllStyleString(prefsDict[key])
+ elif key in ["magCursorColor",
+ "magCrossHairColor",
+ "magZoomerBorderColor"]:
+ value = self._getMagColorString(prefsDict[key])
+ elif key == "magSmoothingMode":
+ value = self._getMagSmoothingModeString(prefsDict[key])
+ elif key == "magMouseTrackingMode":
+ value = self._getMagMouseTrackingModeString(prefsDict[key])
+ elif key == "magControlTrackingMode":
+ value = self._getMagControlTrackingModeString(prefsDict[key])
+ elif key == "magTextTrackingMode":
+ value = self._getMagTextTrackingModeString(prefsDict[key])
+ elif key == "magZoomerType":
+ value = self._getMagZoomerTypeString(prefsDict[key])
+ elif key == "magColorFilteringMode":
+ value = self._getMagColorFilteringModeString(prefsDict[key])
+ elif key == "magSourceDisplay" or key == "magTargetDisplay":
+ value = self._getDisplayString(prefsDict[key])
+ elif key == "keyboardLayout":
+ value = self._getKeyboardLayoutString(prefsDict[key])
+ elif key == "orcaModifierKeys":
+ value = self._getOrcaModifierKeysString(prefsDict[key])
+ elif key == "enabledSpokenTextAttributes":
+ value = self._getSpokenTextAttributesString(prefsDict[key])
+ elif key == "enabledBrailledTextAttributes":
+ value = self._getBrailledTextAttributesString(prefsDict[key])
+ elif key == "textAttributesBrailleIndicator":
+ value = self._getTextAttributesBrailleIndicatorString( \
+ prefsDict[key])
+ elif key == "progressBarVerbosity":
+ value = self._getProgressBarVerbosityString(prefsDict[key])
+ elif key == "brailleContractionTable":
+ value = "'%s'" % prefsDict[key]
+ elif key == "brailleEOLIndicator":
+ value = "'%s'" % prefsDict[key]
+ elif key == "brailleRequiredStateString":
+ value = "'%s'" % prefsDict[key]
+ elif key == "speechRequiredStateString":
+ value = "'%s'" % prefsDict[key]
+ else:
+ value = prefsDict[key]
+
+ return value
+
+ def writePreferences(self):
+ """Creates the gconf schema and files to hold user preferences. Note
+ that callers of this method may want to consider using an ordered
+ dictionary so that the keys are output in a deterministic order.
+
+ Returns True if accessibility was enabled as a result of this
+ call.
+ """
+
+ #self._setupPreferencesDirs()
+
+ #self._writePreferencesPreamble(prefs)
+
+ # Only userCustomizableSettings will be stored in gconf
+ #for key in settings.userCustomizableSettings:
+ # value = self._getValueForKey(self.prefsDict, key)
+ # if value != None:
+ # prefs.writelines("orca.settings.%s = %s\n" % (key, value))
+
+ #if self.keyBindingsTreeModel:
+ # self._writeKeyBindingsMap(prefs, self.keyBindingsTreeModel)
+
+ #if self.pronunciationTreeModel:
+ # self._writePronunciationMap(prefs, self.pronunciationTreeModel)
+
+ #self._writePreferencesPostamble(prefs)
+ #prefs.close()
+
+ # Return True if this caused accessibility to be enabled
+ # as a result of this call.
+ #
+
+ if self.prefsDict:
+ for key in settings.userCustomizableSettings:
+ if key != 'voices':
+ self.prefsDict[key] = self._getValueForKey(self.prefsDict, key)
+ if key in self.need2repr:
+ self.prefsDict[key] = self._fix_quotes(self.prefsDict[key])
+
+ if self.keyBindingsTreeModel:
+ self.prefsDict['overridenKeyBindings'] = {}
+ thisIter = self.keyBindingsTreeModel.get_iter_first()
+ while thisIter != None:
+ iterChild = self.keyBindingsTreeModel.iter_children(thisIter)
+ while iterChild != None:
+ values = self.keyBindingsTreeModel.get(iterChild,
+ 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
+ if values[MODIF] and not values[KEY1] == None:
+ key = values[HANDLER]
+ self.prefsDict['overridenKeyBindings'][key] = [values[DESCRIP], \
+ values[MOD_MASK1], values[MOD_USED1], values[KEY1], \
+ values[CLICK_COUNT1], values[OLDTEXT1], values[TEXT1], \
+ values[MOD_MASK2], values[MOD_USED2], values[KEY2], \
+ values[CLICK_COUNT2], values[OLDTEXT2], values[TEXT2], \
+ values[MODIF], values[EDITABLE]]
+ iterChild = self.keyBindingsTreeModel.iter_next(iterChild)
+
+ thisIter = self.keyBindingsTreeModel.iter_next(thisIter)
+ # Clear overridenkeybindings gconf's dir for a safe store/load
+ self._client.recursive_unset(self.GCONF_DIR + '/overridenKeyBindings',
+ gconf.UNSET_INCLUDING_SCHEMA_NAMES)
+ self._client.suggest_sync()
+
+ if self.pronunciationTreeModel:
+ self.prefsDict['pronunciations'] = {}
+ thisIter = self.pronunciationTreeModel.get_iter_first()
+
+ while thisIter != None:
+ values = self.pronunciationTreeModel.get(thisIter, ACTUAL, REPLACEMENT)
+ word = values[ACTUAL]
+ value = values[REPLACEMENT]
+
+ if word != "" and value != "":
+ self.prefsDict['pronunciations'][word] = value
+
+ thisIter = self.pronunciationTreeModel.iter_next(thisIter)
+
+ # Clear pronunciations gconf's dir for a safe store/load
+ self._client.recursive_unset(self.GCONF_DIR + '/pronunciations',
+ gconf.UNSET_INCLUDING_SCHEMA_NAMES)
+ self._client.suggest_sync()
+
+
+ self.gconf_save()
+
+ self.prefsDict = self.options
+
+ return self._enableAccessibility()
+
+ def loadSettings(self):
+ """Load settings"""
+
+ import orca.debug
+ import orca.settings
+ from orca import acss
+ orca.debug.debugLevel = orca.debug.LEVEL_SEVERE
+
+ if False:
+ import sys
+ import orca.debug
+ sys.settrace(orca.debug.traceit)
+ orca.debug.debugLevel = orca.debug.LEVEL_ALL
+
+ if not self._client.all_entries(self.__app_key):
+ self.options = self.DEFAULTS
+ self.gconf_save()
+
+ self.gconf_load()
+
+ self.settingsDict = self.prefsDict = self.options
+
+ for key in settings.userCustomizableSettings:
+ if key != 'voices' and key != 'speechServerFactory':
+ #value = self._getValueForKey(self.settingsDict, key)
+ value = self.settingsDict[key]
+ if value != None:
+ if value == 'true' or value == 'false':
+ value = value.capitalize()
+ if key in self.need2repr:
+ value = self._fix_quotes(value)
+ setting = 'orca.settings.%s = %s' % (key, value)
+ exec setting
+
+ # Load orca.settings.voices
+ ssfLoad = "orca.settings.speechServerFactory = %s" % self.settingsDict['speechServerFactory']
+ exec(ssfLoad)
+
+
+ orca.settings.voices = {
+ 'default' : acss.ACSS(self.settingsDict['voices']['default']),
+ 'uppercase' : acss.ACSS(self.settingsDict['voices']['uppercase']),
+ 'hyperlink' : acss.ACSS(self.settingsDict['voices']['hyperlink'])}
+
+
+ #return UserSettings
+ import orca.pronunciation_dict
+
+ orca.pronunciation_dict.pronunciation_dict={}
+ for key, value in self.settingsDict['pronunciations'].items():
+ orca.pronunciation_dict.setPronunciation(str(key), str(value))
+
+ import orca.orca_state
+
+ ## Load keybindings
+
+ orca.settings.overrideKeyBindings = self.__loadOverridenKeyBindings
+
+ try:
+ reload(orca.orca_state.orcaCustomizations)
+ except AttributeError:
+ try:
+ orca.orca_state.orcaCustomizations = __import__("orca-customizations")
+ except ImportError:
+ pass
+
+ self.prefsDict = self.settingsDict
+
+ return True
+
+ def __loadOverridenKeyBindings(self, script, keyB):
+ """Load overriden keybindings defined by user"""
+
+ if len(self.prefsDict['overridenKeyBindings']) == 0: return keyB
+
+ for key in self.prefsDict['overridenKeyBindings']:
+ keyB.removeByHandler(script.inputEventHandlers[key])
+ keyB.add(orca.keybindings.KeyBinding(
+ str(self.prefsDict['overridenKeyBindings'][key][3]),
+ int(self.prefsDict['overridenKeyBindings'][key][1]),
+ int(self.prefsDict['overridenKeyBindings'][key][2]),
+ script.inputEventHandlers[key],
+ int(self.prefsDict['overridenKeyBindings'][key][4])))
+ if self.prefsDict['overridenKeyBindings'][key][9] != 'None' :
+ keyB.add(orca.keybindings.KeyBinding(
+ str(self.prefsDict['overridenKeyBindings'][key][9]),
+ int(self.prefsDict['overridenKeyBindings'][key][7]),
+ int(self.prefsDict['overridenKeyBindings'][key][8]),
+ script.inputEventHandlers[key],
+ int(self.prefsDict['overridenKeyBindings'][key][10])))
+
+ return keyB
+
+ def _fix_quotes(self, value):
+ """Checks for quotes and return a valid loadable setting"""
+
+ new_value = value.replace("\'", "").replace("\"", "").replace("\\", "")
+ if value.startswith("\""):
+ return "\"%s\"" % new_value
+ else:
+ return "'%s'" % new_value
+
+
+def readPreferences():
+ """Returns a dictionary containing the names and values of the
+ customizable features of Orca."""
+
+ prefsDict = {}
+ for key in settings.userCustomizableSettings:
+ try:
+ prefsDict[key] = getattr(settings, key)
+ except:
+ pass
+
+ return prefsDict
+
+def writePreferences(prefsDict, keyBindingsTreeModel=None,
+ pronunciationTreeModel=None):
+ """Creates the directory and files to hold application specific
+ user preferences. Write out any preferences that are different
+ from the generic Orca preferences for this user. Note that callers
+ of this method may want to consider using an ordered dictionary so
+ that the keys are output in a deterministic order.
+
+ Arguments:
+ - prefsDict: a dictionary where the keys are orca preferences
+ names and the values are the values for the preferences.
+ - keyBindingsTreeModel - key bindings tree model, or None if we are
+ writing out console preferences.
+ - pronunciationTreeModel - pronunciation dictionary tree model, or
+ None if we are writing out console preferences.
+
+ Returns True if the user needs to log out for accessibility settings
+ to take effect.
+ """
+
+ orcaPrefs = OrcaPrefs(prefsDict,
+ keyBindingsTreeModel,
+ pronunciationTreeModel)
+ return orcaPrefs.writePreferences()
+
+def loadSettings():
+ """Load settings"""
+
+ orcaPrefs = OrcaPrefs()
+ print '\n## loaded from gconf_backend!!'
+
+ return orcaPrefs.loadSettings()
diff --git a/src/orca/backends/gconf_defaults.py b/src/orca/backends/gconf_defaults.py
new file mode 100644
index 0000000..aea9c8e
--- /dev/null
+++ b/src/orca/backends/gconf_defaults.py
@@ -0,0 +1,141 @@
+# Orca
+#
+# Copyright 2004-2008 Sun Microsystems Inc.
+# Author: Javier Hernandez Antunez <jhernandez emergya es>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., Franklin Street, Fifth Floor,
+# Boston MA 02110-1301 USA.
+
+import orca
+import orca.acss
+
+defaults = {'speakCellHeaders': True,
+ 'magEdgeMargin': 0,
+ 'brailleContractionTable': '',
+ 'magPointerFollowsFocus': False,
+ 'magTextTrackingMode': 'orca.settings.MAG_TRACKING_MODE_PUSH',
+ 'magZoomerBorderSize': 1,
+ 'brailleAlignmentStyle': 'orca.settings.ALIGN_BRAILLE_BY_EDGE',
+ 'enableEchoByWord': False,
+ 'enableMagZoomerColorInversion': False,
+ 'magCursorSize': 32,
+ 'magSmoothingMode': 'orca.settings.MAG_SMOOTHING_MODE_BILINEAR',
+ 'magZoomerLeft': 512,
+ 'showMainWindow': True,
+ 'sayAllStyle': 'orca.settings.SAYALL_STYLE_SENTENCE',
+ 'brailleSelectorIndicator': 'orca.settings.BRAILLE_SEL_BOTH',
+ 'presentDateFormat': 'orca.settings.DATE_FORMAT_LOCALE',
+ 'magContrastLevel': 0,
+ 'magMouseTrackingMode': 'orca.settings.MAG_TRACKING_MODE_CENTERED',
+ 'speakCellSpan': True,
+ 'progressBarUpdateInterval': 10,
+ 'speakCellCoordinates': True,
+ 'enablePauseBreaks': True,
+ 'brailleEOLIndicator': ' $l',
+ 'verbalizePunctuationStyle': 'orca.settings.PUNCTUATION_STYLE_MOST',
+ 'brailleRequiredStateString': 'requerido',
+ 'progressBarVerbosity': 'orca.settings.PROGRESS_BAR_APPLICATION',
+ 'enableSpeech': True,
+ 'enableBraille': False,
+ 'mouseDwellDelay': 0,
+ 'enableBrailleGrouping': False,
+ 'readTableCellRow': True,
+ 'textAttributesBrailleIndicator': 'orca.settings.TEXT_ATTR_BRAILLE_NONE',
+ 'enableMagCursorExplicitSize': False,
+ 'messageVerbosityLevel': 'orca.settings.VERBOSITY_LEVEL_VERBOSE',
+ 'enableMagLiveUpdating': True,
+ 'enableSpeechIndentation': False,
+ 'enableKeyEcho': True,
+ 'magHideCursor': False,
+ 'magZoomerBorderColor': '#000000',
+ 'magBrightnessLevelRed': 0,
+ 'enableMagnifier': False,
+ 'magZoomFactor': 4.0,
+ 'speechServerFactory': 'orca.gnomespeechfactory',
+ 'enableMagZoomerBorder': False,
+ 'flashVerbosityLevel': 'orca.settings.VERBOSITY_LEVEL_VERBOSE',
+ 'enableFlashMessages': True,
+ 'speechServerInfo': ['Speech Dispatcher GNOME Speech Driver',
+ 'OAFIID:GNOME_Speech_SynthesisDriver_Speech_Dispatcher:proto0.3'],
+ 'presentToolTips': False,
+ 'flashIsPersistent': False,
+ 'skipBlankCells': False,
+ 'largeObjectTextLength': 75,
+ 'enableEchoBySentence': False,
+ 'magContrastLevelBlue': 0,
+ 'magContrastLevelRed': 0,
+ 'enableContractedBraille': False,
+ 'orcaModifierKeys': 'orca.settings.DESKTOP_MODIFIER_KEYS',
+ 'enableMagCursor': True,
+ 'speechRequiredStateString': 'requerido',
+ 'chatAnnounceBuddyTyping': False,
+ 'quitOrcaNoConfirmation': False,
+ 'magPointerFollowsZoomer': True,
+ 'magCursorColor': '#000000',
+ 'enablePositionSpeaking': False,
+ 'magZoomerType': 'orca.settings.MAG_ZOOMER_TYPE_FULL_SCREEN',
+ 'enableProgressBarUpdates': True,
+ 'wrappedStructuralNavigation': True,
+ 'brailleVerbosityLevel': 'orca.settings.VERBOSITY_LEVEL_VERBOSE',
+ 'enableFunctionKeys': True,
+ 'enableModifierKeys': True,
+ 'magCrossHairColor': '#000000',
+ 'enableTutorialMessages': False,
+ 'enableActionKeys': True,
+ 'speakBlankLines': True,
+ 'magColorFilteringMode': 'orca.settings.MAG_COLOR_FILTERING_MODE_NONE',
+ 'magZoomerRight': 1024,
+ 'keyboardLayout': 'orca.settings.GENERAL_KEYBOARD_LAYOUT_DESKTOP',
+ 'magTargetDisplay': ':0.0',
+ 'disableBrailleEOL': False,
+ 'magZoomerTop': 0,
+ 'magSourceDisplay': ':0.0',
+ 'enableDiacriticalKeys': False,
+ 'enableMnemonicSpeaking': False,
+ 'magContrastLevelGreen': 0,
+ 'speechVerbosityLevel': 'orca.settings.VERBOSITY_LEVEL_VERBOSE',
+ 'enableMagCrossHair': True,
+ 'enableBrailleMonitor': False,
+ 'voices': {'default' : orca.acss.ACSS({'average-pitch': 5.0,
+ 'gain': 10.0,
+ 'rate': 50.0,
+ 'family' : {}}),
+ 'uppercase' : orca.acss.ACSS({'average-pitch': 5.5999999999999996}),
+ 'hyperlink' : orca.acss.ACSS({'average-pitch': 5.5999999999999996})},
+ 'enabledBrailledTextAttributes': "size:; family-name:; weight:400; indent:0; underline:none; strikethrough:false; justification:left; style:normal; text-spelling:none;",
+ 'brailleFlashTime': 5000,
+ 'magCrossHairSize': 16,
+ 'enableMouseReview': False,
+ 'enableNavigationKeys': False,
+ 'magBrightnessLevelGreen': 0,
+ 'enableLockingKeys': True,
+ 'speakMultiCaseStringsAsWords': False,
+ 'brailleRolenameStyle': 'orca.settings.BRAILLE_ROLENAME_STYLE_LONG',
+ 'brailleLinkIndicator': 'orca.settings.BRAILLE_LINK_BOTH',
+ 'enableEchoByCharacter': False,
+ 'magBrightnessLevelBlue': 0,
+ 'enableBrailleContext': True,
+ 'magControlTrackingMode': 'orca.settings.MAG_TRACKING_MODE_PUSH',
+ 'magZoomerBottom': 768,
+ 'enablePrintableKeys': True,
+ 'enabledSpokenTextAttributes': "size:; family-name:; weight:400; indent:0; underline:none; strikethrough:false; justification:left; style:normal; paragraph-style:; text-spelling:none;",
+ 'chatMessageVerbosity': 0,
+ 'presentTimeFormat': 'orca.settings.TIME_FORMAT_LOCALE',
+ 'magBrightnessLevel': 0,
+ 'presentRequiredState': False,
+ 'enableMagCrossHairClip': False,
+ 'overridenKeyBindings' : {},
+ 'pronunciations' : {}
+}
diff --git a/src/orca/default.py b/src/orca/default.py
index bd3db4a..6b02766 100644
--- a/src/orca/default.py
+++ b/src/orca/default.py
@@ -5033,7 +5033,12 @@ class Script(script.Script):
"""Save a copy of all the existing application specific settings
(as specified by the settings.userCustomizableSettings dictionary)."""
- return orca_prefs.readPreferences()
+ import settings_manager
+ _settingsManager = SettingsManager()
+ _settingsManager.loadBackend()
+
+ #return orca_prefs.readPreferences()
+ return _settingsManager.readPreferences()
def restoreOldAppSettings(self, prefsDict):
"""Restore a copy of all the previous saved application settings.
diff --git a/src/orca/orca.py b/src/orca/orca.py
index 76b0892..adb19cb 100644
--- a/src/orca/orca.py
+++ b/src/orca/orca.py
@@ -93,6 +93,8 @@ from input_event import keyEventToString
from orca_i18n import _ # for gettext support
+from settings_manager import SettingsManager
+
if settings.debugMemoryUsage:
import gc
gc.set_debug(gc.DEBUG_UNCOLLECTABLE
@@ -104,6 +106,8 @@ if settings.debugMemoryUsage:
# The user-settings module (see loadUserSettings).
#
_userSettings = None
+_settingsManager = SettingsManager()
+_settingsManager.loadBackend()
# Command line options that override any other settings.
#
@@ -1032,7 +1036,8 @@ def loadUserSettings(script=None, inputEvent=None):
reloaded = False
if _userSettings:
try:
- reload(_userSettings)
+ _userSettings = _settingsManager.loadSettings()
+ #reload(_userSettings)
reloaded = True
except ImportError:
debug.printException(debug.LEVEL_FINEST)
@@ -1040,7 +1045,8 @@ def loadUserSettings(script=None, inputEvent=None):
debug.printException(debug.LEVEL_SEVERE)
else:
try:
- _userSettings = __import__("user-settings")
+ _userSettings = _settingsManager.loadSettings()
+ #_userSettings = __import__("user-settings")
if _debugSwitch:
debug.debugLevel = debug.LEVEL_ALL
debug.eventDebugLevel = debug.LEVEL_OFF
diff --git a/src/orca/orca_gui_prefs.py b/src/orca/orca_gui_prefs.py
index 6f4040d..96bdca6 100644
--- a/src/orca/orca_gui_prefs.py
+++ b/src/orca/orca_gui_prefs.py
@@ -54,6 +54,8 @@ import speech
import speechserver
import text_attribute_names
+from settings_manager import SettingsManager
+
try:
import louis
except ImportError:
@@ -490,7 +492,10 @@ class OrcaSetupGUI(orca_gtkbuilder.GtkBuilderWrapper):
"""Write out the user's generic Orca preferences.
"""
- if orca_prefs.writePreferences(self.prefsDict, self.keyBindingsModel,
+ _settingsManager = SettingsManager()
+ _settingsManager.loadBackend()
+
+ if _settingsManager.writeSettings(self.prefsDict, self.keyBindingsModel,
self.pronunciationModel):
self._say( \
_("Accessibility support for GNOME has just been enabled."))
@@ -4458,7 +4463,6 @@ class OrcaAdvancedMagGUI(OrcaSetupGUI):
- green: the green brightness value.
- blue: the blue brightness value.
"""
-
self.get_widget("magBrightnessRedSpinButton").set_value(red)
self.get_widget("magBrightnessGreenSpinButton").set_value(green)
self.get_widget("magBrightnessBlueSpinButton").set_value(blue)
@@ -5016,7 +5020,12 @@ def showPreferencesUI():
braille.displayMessage(line)
speech.speak(line)
- prefsDict = orca_prefs.readPreferences()
+ #prefsDict = orca_prefs.readPreferences()
+ _settingsManager = SettingsManager()
+ _settingsManager.loadBackend()
+
+ prefsDict = _settingsManager.readPreferences()
+
orca_state.prefsUIFile = \
os.path.join(platform.prefix,
platform.datadirname,
diff --git a/src/orca/settings.py b/src/orca/settings.py
index 88d3206..03e1cd4 100644
--- a/src/orca/settings.py
+++ b/src/orca/settings.py
@@ -188,9 +188,9 @@ userCustomizableSettings = [
"brailleRequiredStateString",
"speechRequiredStateString",
"chatMessageVerbosity",
- "chatPrefixMessageWithName",
+# "chatPrefixMessageWithName",
"chatAnnounceBuddyTyping",
- "chatSeparateRoomHistories",
+# "chatSeparateRoomHistories",
"enableFlashMessages",
"brailleFlashTime",
"flashIsPersistent",
diff --git a/src/orca/settings_manager.py b/src/orca/settings_manager.py
new file mode 100644
index 0000000..8086eed
--- /dev/null
+++ b/src/orca/settings_manager.py
@@ -0,0 +1,90 @@
+# Orca
+#
+# Copyright 2004-2009 Sun Microsystems Inc.
+# Author: Javier Hernandez Antunez <jhernandez emergya es>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., Franklin Street, Fifth Floor,
+# Boston MA 02110-1301 USA.
+
+"""Settings manager module. This will load/save user settings from a
+defined settings backend."""
+
+__id__ = "$Id$"
+__version__ = "$Revision$"
+__date__ = "$Date$"
+__copyright__ = "Copyright (c) 2004-2009 Sun Microsystems Inc."
+__license__ = "LGPL"
+
+import os
+import orca
+
+SettingsBackend = None
+
+class Singleton(object):
+ def __new__(cls, *args, **kwargs):
+ if '__instance' not in vars(cls):
+ cls.__instance = object.__new__(cls, *args, **kwargs)
+ return cls.__instance
+
+class SettingsManager(Singleton):
+ """Settings backend manager. This class manages orca user's settings
+ using different backends"""
+
+ # At the moment, DEFAULT_BACKEND can be established here
+ # Possible values are: classic and gconf
+ DEFAULT_BACKEND = 'gconf_backend'
+
+ def __init__(self, backend = None):
+ """Initialize a SettingsManager Object.
+ If backend isn't defined then uses default backend, in this
+ case gconf-backend"""
+
+ self.UserSettings = None
+
+ if not backend:
+ self.backend = self.DEFAULT_BACKEND
+ else:
+ self.backend = backend
+
+ def loadBackend(self):
+ """Load specific backend for manage user settings"""
+
+ settingsBackend = 'from backends import %s as SettingsBackend' % self.backend
+
+ exec settingsBackend
+
+ try:
+ exec settingsBackend
+ print '\nimporting %s backend OK!' % self.backend
+ except:
+ print '\nUnable to load %s backend' % self.backend
+
+ globals()['SettingsBackend'] = SettingsBackend
+
+ def loadSettings(self):
+ """Load settings from active backend"""
+
+ return SettingsBackend.loadSettings()
+
+ def writeSettings(self, prefsDict, keyBindingsTreeModel=None,
+ pronunciationTreeModel=None):
+ """Write user settings using active backend"""
+
+ return SettingsBackend.writePreferences(prefsDict, keyBindingsTreeModel, pronunciationTreeModel)
+
+ def readPreferences(self):
+
+ return SettingsBackend.readPreferences()
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]