Preferences/PreferencesLexer.py

changeset 0
de9c2efb9d02
child 12
1d8dd9706f46
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Preferences/PreferencesLexer.py	Mon Dec 28 16:03:33 2009 +0000
@@ -0,0 +1,254 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2002 - 2009 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a special QextScintilla lexer to handle the preferences.
+"""
+
+import sys
+
+from PyQt4.QtCore import *
+from PyQt4.QtGui import QColor, QFont, QApplication
+from PyQt4.Qsci import QsciLexer, QsciScintilla
+
+import QScintilla.Lexers
+
+import Preferences
+
+class PreferencesLexerError(Exception):
+    """
+    Class defining a special error for the PreferencesLexer class.
+    """
+    def __init__(self):
+        """
+        Constructor
+        """
+        self._errorMessage = \
+            QApplication.translate("PreferencesLexerError", 
+                "Unspecific PreferencesLexer error.")
+        
+    def __repr__(self):
+        """
+        Private method returning a representation of the exception.
+        
+        @return string representing the error message
+        """
+        return repr(self._errorMessage)
+        
+    def __str__(self):
+        """
+        Private method returning a string representation of the exception.
+        
+        @return string representing the error message
+        """
+        return self._errorMessage
+
+class PreferencesLexerLanguageError(PreferencesLexerError):
+    """
+    Class defining a special error for the PreferencesLexer class.
+    """
+    def __init__(self, language):
+        """
+        Constructor
+        """
+        PreferencesLexerError.__init__(self)
+        self._errorMessage = \
+            QApplication.translate("PreferencesLexerError",
+                'Unsupported Lexer Language: {0}').format(language)
+
+class PreferencesLexer(QsciLexer):
+    """ 
+    Subclass of QsciLexer to implement preferences specific lexer methods.
+    """
+    def __init__(self, language, parent=None):
+        """
+        Constructor
+        
+        @param language The lexer language. (string)
+        @param parent The parent widget of this lexer. (QextScintilla)
+        """
+        QsciLexer.__init__(self, parent)
+        
+        # instantiate a lexer object for the given language
+        lex = QScintilla.Lexers.getLexer(language)
+        if lex is None:
+            raise PreferencesLexerLanguageError(language)
+        
+        # define the local store
+        self.colours = {}
+        self.defaultColours = {}
+        self.papers = {}
+        self.defaultPapers = {}
+        self.eolFills = {}
+        self.defaultEolFills = {}
+        self.fonts = {}
+        self.defaultFonts = {}
+        self.descriptions = {}
+        self.ind2style = {}
+        self.styles = []
+        
+        # fill local store with default values from lexer
+        # and built up styles list and conversion table from index to style
+        self.__language = lex.language()
+        
+        index = 0
+        for i in range(128):
+            desc = lex.description(i)
+            if desc:
+                self.descriptions[i] = desc
+                self.styles.append(desc)
+                
+                self.colours[i] = lex.defaultColor(i)
+                self.papers[i] = lex.defaultPaper(i)
+                self.eolFills[i] = lex.defaultEolFill(i)
+                self.fonts[i] = lex.defaultFont(i)
+                
+                self.defaultColours[i] = lex.defaultColor(i)
+                self.defaultPapers[i] = lex.defaultPaper(i)
+                self.defaultEolFills[i] = lex.defaultEolFill(i)
+                self.defaultFonts[i] = lex.defaultFont(i)
+                
+                self.ind2style[index] = i
+                index += 1
+        
+        self.connect(self, SIGNAL("colorChanged (const QColor&, int)"), 
+                     self.setColor)
+        self.connect(self, SIGNAL("eolFillChanged (bool, int)"), 
+                     self.setEolFill)
+        self.connect(self, SIGNAL("fontChanged (const QFont&, int)"), 
+                     self.setFont)
+        self.connect(self, SIGNAL("paperChanged (const QColor&, int )"), 
+                     self.setPaper)
+        
+        # read the last stored values from preferences file
+        self.readSettings(Preferences.Prefs.settings, "Scintilla")
+        
+    def defaultColor(self, style):
+        """
+        Public method to get the default colour of a style.
+        
+        @param style the style number (int)
+        @return colour
+        """
+        return self.defaultColours[style]
+        
+    def color(self, style):
+        """
+        Public method to get the colour of a style.
+        
+        @param style the style number (int)
+        @return colour
+        """
+        return self.colours[style]
+        
+    def setColor(self, c, style):
+        """
+        Public method to set the colour for a style.
+        
+        @param c colour (int)
+        @param style the style number (int)
+        """
+        self.colours[style] = QColor(c)
+        
+    def defaultPaper(self, style):
+        """
+        Public method to get the default background for a style.
+        
+        @param style the style number (int)
+        @return colour
+        """
+        return self.defaultPapers[style]
+        
+    def paper(self, style):
+        """
+        Public method to get the background for a style.
+        
+        @param style the style number (int)
+        @return colour
+        """
+        return self.papers[style]
+        
+    def setPaper(self, c, style):
+        """
+        Public method to set the background for a style.
+        
+        @param c colour (int)
+        @param style the style number (int)
+        """
+        self.papers[style] = QColor(c)
+        
+    def defaulEolFill(self, style):
+        """
+        Public method to get the default eolFill flag for a style.
+        
+        @param style the style number (int)
+        @return eolFill flag
+        """
+        return self.defaultEolFills[style]
+        
+    def eolFill(self, style):
+        """
+        Public method to get the eolFill flag for a style.
+        
+        @param style the style number (int)
+        @return eolFill flag
+        """
+        return self.eolFills[style]
+        
+    def setEolFill(self, eolfill, style):
+        """
+        Public method to set the eolFill flag for a style.
+        
+        @param eolfill eolFill flag (boolean)
+        @param style the style number (int)
+        """
+        self.eolFills[style] = eolfill
+        
+    def defaultFont(self, style):
+        """
+        Public method to get the default font for a style.
+        
+        @param style the style number (int)
+        @return font
+        """
+        return self.defaultFonts[style]
+        
+    def font(self, style):
+        """
+        Public method to get the font for a style.
+        
+        @param style the style number (int)
+        @return font
+        """
+        return self.fonts[style]
+        
+    def setFont(self, f, style):
+        """
+        Public method to set the font for a style.
+        
+        @param f font
+        @param style the style number (int)
+        """
+        self.fonts[style] = QFont(f)
+        
+    def language(self):
+        """
+        Public method to get the lexers programming language.
+        
+        @return language
+        """
+        return self.__language
+        
+    def description(self, style):
+        """
+        Public method to get a descriptive string for a style.
+        
+        @param style the style number (int)
+        @return description of the style (string)
+        """
+        if self.descriptions.has_key(style):
+            return self.descriptions[style]
+        else:
+            return ""

eric ide

mercurial